From b86248c1a3a3456e489e007857271106e1ecf090 Mon Sep 17 00:00:00 2001 From: Dirk Alders Date: Sun, 26 Jan 2020 15:04:49 +0100 Subject: [PATCH] Release: 88a3eed174bd2239a6c1d928081e5b6d --- __init__.py | 161 + _docs_/.buildinfo | 4 + .../unittest.pdf | Bin 0 -> 238089 bytes _docs_/_downloads/unittest.pdf | Bin 0 -> 284964 bytes _docs_/_sources/index.rst.txt | 27 + _docs_/_static/ajax-loader.gif | Bin 0 -> 673 bytes _docs_/_static/alabaster.css | 607 + _docs_/_static/basic.css | 648 + _docs_/_static/comment-bright.png | Bin 0 -> 756 bytes _docs_/_static/comment-close.png | Bin 0 -> 829 bytes _docs_/_static/comment.png | Bin 0 -> 641 bytes _docs_/_static/custom.css | 1 + _docs_/_static/doctools.js | 311 + _docs_/_static/documentation_options.js | 10 + _docs_/_static/down-pressed.png | Bin 0 -> 222 bytes _docs_/_static/down.png | Bin 0 -> 202 bytes _docs_/_static/file.png | Bin 0 -> 286 bytes _docs_/_static/jquery-3.2.1.js | 10253 ++++++++++++ _docs_/_static/jquery.js | 10253 ++++++++++++ _docs_/_static/language_data.js | 297 + _docs_/_static/minus.png | Bin 0 -> 90 bytes _docs_/_static/plus.png | Bin 0 -> 90 bytes _docs_/_static/pygments.css | 69 + _docs_/_static/searchtools.js | 761 + _docs_/_static/underscore-1.3.1.js | 999 ++ _docs_/_static/underscore.js | 1548 ++ _docs_/_static/up-pressed.png | Bin 0 -> 214 bytes _docs_/_static/up.png | Bin 0 -> 203 bytes _docs_/_static/websupport.js | 808 + _docs_/genindex.html | 186 + _docs_/index.html | 463 + _docs_/objects.inv | Bin 0 -> 462 bytes _docs_/py-modindex.html | 111 + _docs_/search.html | 100 + _docs_/searchindex.js | 1 + _testresults_/unittest.json | 13956 ++++++++++++++++ _testresults_/unittest.pdf | Bin 0 -> 287973 bytes csp.py | 89 + stp.py | 175 + 39 files changed, 41838 insertions(+) create mode 100644 __init__.py create mode 100644 _docs_/.buildinfo create mode 100644 _docs_/_downloads/ff52811ec541013fb25b89de3139897b/unittest.pdf create mode 100644 _docs_/_downloads/unittest.pdf create mode 100644 _docs_/_sources/index.rst.txt create mode 100644 _docs_/_static/ajax-loader.gif create mode 100644 _docs_/_static/alabaster.css create mode 100644 _docs_/_static/basic.css create mode 100644 _docs_/_static/comment-bright.png create mode 100644 _docs_/_static/comment-close.png create mode 100644 _docs_/_static/comment.png create mode 100644 _docs_/_static/custom.css create mode 100644 _docs_/_static/doctools.js create mode 100644 _docs_/_static/documentation_options.js create mode 100644 _docs_/_static/down-pressed.png create mode 100644 _docs_/_static/down.png create mode 100644 _docs_/_static/file.png create mode 100644 _docs_/_static/jquery-3.2.1.js create mode 100644 _docs_/_static/jquery.js create mode 100644 _docs_/_static/language_data.js create mode 100644 _docs_/_static/minus.png create mode 100644 _docs_/_static/plus.png create mode 100644 _docs_/_static/pygments.css create mode 100644 _docs_/_static/searchtools.js create mode 100644 _docs_/_static/underscore-1.3.1.js create mode 100644 _docs_/_static/underscore.js create mode 100644 _docs_/_static/up-pressed.png create mode 100644 _docs_/_static/up.png create mode 100644 _docs_/_static/websupport.js create mode 100644 _docs_/genindex.html create mode 100644 _docs_/index.html create mode 100644 _docs_/objects.inv create mode 100644 _docs_/py-modindex.html create mode 100644 _docs_/search.html create mode 100644 _docs_/searchindex.js create mode 100644 _testresults_/unittest.json create mode 100644 _testresults_/unittest.pdf create mode 100644 csp.py create mode 100644 stp.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e709214 --- /dev/null +++ b/__init__.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +""" +stringtools (Stringtools) +========================= + +**Author:** + +* Dirk Alders + +**Description:** + + This Module supports functionality around string operations. + +**Submodules:** + +* :mod:`stringtools.csp` +* :mod:`stringtools.stp` +* :func:`gzip_compress` +* :func:`gzip_extract` +* :func:`hexlify` + +**Unittest:** + + See also the :download:`unittest ` documentation. + +**Module Documentation:** + +""" + +from stringtools import stp +from stringtools import csp +__DEPENDENCIES__ = [] + +import gzip +import logging +import time +import sys +if sys.version_info < (3, 0): + from cStringIO import StringIO + +logger_name = 'STRINGTOOLS' +logger = logging.getLogger(logger_name) + +__DESCRIPTION__ = """The Module {\\tt %s} is designed to support functionality for strings (e.g. transfer strings via a bytestream, compressing, extracting, ...). +For more Information read the sphinx documentation.""" % __name__.replace('_', '\_') +"""The Module Description""" +__INTERPRETER__ = (2, 3) +"""The Tested Interpreter-Versions""" + +__all__ = ['gzip_compress', + 'gzip_extract', + 'hexlify', + 'csp', + 'stp'] + + +def gzip_compress(s, compresslevel=9): + """ + Method to compress a stream of bytes. + + :param str s: The bytestream (string) to be compressed + :param int compresslevel: An optional compressionn level (default is 9) + :return: The compressed bytestream + :rtype: str + + **Example:** + + .. literalinclude:: ../examples/gzip_compress.py + + Will result to the following output: + + .. literalinclude:: ../examples/gzip_compress.log + """ + rv = None + t = time.time() + if sys.version_info >= (3, 0): + rv = gzip.compress(s, compresslevel) + else: + buf = StringIO() + f = gzip.GzipFile(mode='wb', compresslevel=compresslevel, fileobj=buf) + try: + f.write(s) + finally: + f.close() + rv = buf.getvalue() + buf.close() + if rv is not None: + logger.debug('GZIP: Finished to compress a string (compression_rate=%.3f, consumed_time=%.1fs).', len(rv) / float(len(s)), time.time() - t) + return rv + + +def gzip_extract(s): + """ + Method to extract data from a compress stream of bytes. + + :param str s: The compressed bytestream (string) to be extracted + :return: The extracted data + :rtype: str + + **Example:** + + .. literalinclude:: ../examples/gzip_extract.py + + Will result to the following output: + + .. literalinclude:: ../examples/gzip_extract.log + """ + t = time.time() + rv = None + if sys.version_info >= (3, 0): + rv = gzip.decompress(s) + else: + inbuffer = StringIO(s) + f = gzip.GzipFile(mode='rb', fileobj=inbuffer) + try: + rv = f.read() + finally: + f.close() + inbuffer.close() + if rv is not None: + logger.debug('GZIP: Finished to extract a string (compression_rate=%.3f, consumed_time=%.1fs).', len(s) / float(len(rv)), time.time() - t) + return rv + + +def hexlify(s): + """Method to hexlify a string. + + :param str s: A string including the bytes to be hexlified. + :returns: The hexlified string + :rtype: str + + **Example:** + + .. literalinclude:: ../examples/hexlify.py + + Will result to the following output: + + .. literalinclude:: ../examples/hexlify.log + """ + rv = '(%d):' % len(s) + for byte in s: + if sys.version_info >= (3, 0): + rv += ' %02x' % byte + else: + rv += ' %02x' % ord(byte) + return rv + + +def linefeed_filter(s): + """Method to change linefeed and carriage return to '\\\\n' and '\\\\r' + + :param str s: A string including carriage return and/ or linefeed. + :returns: A string with converted carriage return and/ or linefeed. + :rtype: str + """ + if sys.version_info >= (3, 0): + return s.replace(b'\r', b'\\r').replace(b'\n', b'\\n') + else: + return s.replace('\r', '\\r').replace('\n', '\\n') diff --git a/_docs_/.buildinfo b/_docs_/.buildinfo new file mode 100644 index 0000000..46e3456 --- /dev/null +++ b/_docs_/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 37119bbe4e61a9df7390cce354ca5758 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/_docs_/_downloads/ff52811ec541013fb25b89de3139897b/unittest.pdf b/_docs_/_downloads/ff52811ec541013fb25b89de3139897b/unittest.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8dad02d797779930d8ae1c3269710d1b0c97f812 GIT binary patch literal 238089 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�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¬`5Emi>prH^6JYcROZctic`yly~cspbir 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

Ft+=tw;bx}nsL+qB;j74`>6s~=rD*lS`e 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%0APL}$rox5<{{?E!4G}7AOty)lgbf?Mg>O+*4!-0R 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') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); \ No newline at end of file diff --git a/_docs_/_static/documentation_options.js b/_docs_/_static/documentation_options.js new file mode 100644 index 0000000..d28647e --- /dev/null +++ b/_docs_/_static/documentation_options.js @@ -0,0 +1,10 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, +}; \ No newline at end of file diff --git a/_docs_/_static/down-pressed.png b/_docs_/_static/down-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..5756c8cad8854722893dc70b9eb4bb0400343a39 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`OFdm2Ln;`PZ^+1>KjR?B@S0W7 z%OS_REiHONoJ6{+Ks@6k3590|7k9F+ddB6!zw3#&!aw#S`x}3V3&=A(a#84O-&F7T z^k3tZB;&iR9siw0|F|E|DAL<8r-F4!1H-;1{e*~yAKZN5f0|Ei6yUmR#Is)EM(Po_ zi`qJR6|P<~+)N+kSDgL7AjdIC_!O7Q?eGb+L+qOjm{~LLinM4NHn7U%HcK%uoMYO5 VJ~8zD2B3o(JYD@<);T3K0RV0%P>BEl literal 0 HcmV?d00001 diff --git a/_docs_/_static/down.png b/_docs_/_static/down.png new file mode 100644 index 0000000000000000000000000000000000000000..1b3bdad2ceffae91cee61b32f3295f9bbe646e48 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6CVIL!hEy=F?b*7pIY7kW{q%Rg zx!yQ<9v8bmJwa`TQk7YSw}WVQ()mRdQ;TC;* literal 0 HcmV?d00001 diff --git a/_docs_/_static/file.png b/_docs_/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_docs_/_static/jquery-3.2.1.js b/_docs_/_static/jquery-3.2.1.js new file mode 100644 index 0000000..d2d8ca4 --- /dev/null +++ b/_docs_/_static/jquery-3.2.1.js @@ -0,0 +1,10253 @@ +/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.2.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( jQuery.isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( jQuery.camelCase ); + } else { + key = jQuery.camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: jQuery.isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( ">tbody", elem )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rmargin = ( /^margin/ ); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with computed style + var valueIsBorderBox, + styles = getStyles( elem ), + val = curCSS( elem, name, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Fall back to offsetWidth/Height when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + if ( val === "auto" ) { + val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 13 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available, append data to url + if ( s.data ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_docs_/index.html b/_docs_/index.html new file mode 100644 index 0000000..fe3f410 --- /dev/null +++ b/_docs_/index.html @@ -0,0 +1,463 @@ + + + + + + + Welcome to stringtools’s documentation! — stringtools documentation + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Welcome to stringtools’s documentation!

+
+

stringtools (Stringtools)

+

Author:

+ +

Description:

+
+
This Module supports functionality around string operations.
+

Submodules:

+ +

Unittest:

+
+
See also the unittest documentation.
+

Module Documentation:

+
+
+stringtools.gzip_compress(s, compresslevel=9)
+

Method to compress a stream of bytes.

+ +++ + + + + + + + +
Parameters:
    +
  • s (str) – The bytestream (string) to be compressed
  • +
  • compresslevel (int) – An optional compressionn level (default is 9)
  • +
+
Returns:

The compressed bytestream

+
Return type:

str

+
+

Example:

+
import stringtools
+import report
+import logging
+import sys
+
+
+logger = report.getLogger('example', [(logging.DEBUG, logging.StreamHandler(sys.stdout))], report.SHORT_FMT)
+print(stringtools.hexlify(stringtools.gzip_compress(15 * b'\x00' + 15 * b'\xff', logger=logger)))
+
+
+
+

Will result to the following output:

+
2019-05-22 19:14:02,852: DEBUG   - Finished to compress a string (compression_rate=0.867, consumed_time=0.0s).
+(26): 1f 8b 08 00 5a 83 e5 5c 02 ff 63 60 40 01 ff 51 01 00 2d 8a 7d de 1e 00 00 00
+
+
+
+ +
+
+stringtools.gzip_extract(s)
+

Method to extract data from a compress stream of bytes.

+ +++ + + + + + + + +
Parameters:s (str) – The compressed bytestream (string) to be extracted
Returns:The extracted data
Return type:str
+

Example:

+
import stringtools
+import report
+import logging
+import sys
+
+
+logger = report.getLogger('example', [(logging.DEBUG, logging.StreamHandler(sys.stdout))], report.SHORT_FMT)
+print(stringtools.hexlify(stringtools.gzip_extract(b'\x1f\x8b\x08\x00\xd0\x82\xe5\x5c\x02\xff\x63\x60\x40\x01\xff\x51\x01\x00\x2d\x8a\x7d\xde\x1e\x00\x00\x00', logger=logger)))
+
+
+
+

Will result to the following output:

+
2019-05-22 19:14:09,390: DEBUG   - Finished to extract a string (compression_rate=0.867, consumed_time=0.0s).
+(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
+
+
+
+ +
+
+stringtools.hexlify(s)
+

Method to hexlify a string.

+ +++ + + + + + + + +
Parameters:s (str) – A string including the bytes to be hexlified.
Returns:The hexlified string
Return type:str
+

Example:

+
import stringtools
+
+
+print(stringtools.hexlify(b'A stringexample with non printable characters like \x12'))
+
+
+

Will result to the following output:

+
(52): 41 20 73 74 72 69 6e 67 65 78 61 6d 70 6c 65 20 77 69 74 68 20 6e 6f 6e 20 70 72 69 6e 74 61 62 6c 65 20 63 68 61 72 61 63 74 65 72 73 20 6c 69 6b 65 20 12
+
+
+
+ +
+
+

csp (Carriage-Return seperation protocol)

+

Author:

+ +

Description:

+
+
This module is a submodule of stringtools and creates an frame to transmit and receive messages via an serial interface.
+

Submodules:

+ +
+
+stringtools.csp.build_frame(msg, seperator='\n')
+

This Method builds an “csp-frame” to be transfered via a stream.

+ +++ + + + + + + + +
Parameters:data (str) – A String (Bytes) to be framed
Returns:The “csp-framed” message to be sent
Return type:str
+

Example:

+
import stringtools
+
+data = b'message'
+print(stringtools.hexlify(data))
+print(stringtools.hexlify(stringtools.csp.build_frame(data)))
+
+
+
+

Will result to the following output:

+
(7): 6d 65 73 73 61 67 65
+(8): 6d 65 73 73 61 67 65 0a
+
+
+
+ +
+
+class stringtools.csp.csp(seperator='n')
+

This class extracts messages from an “csp-stream”.

+

Example:

+
import logging
+import report
+import stringtools
+import sys
+
+logger = report.getLogger('example', [(logging.DEBUG, logging.StreamHandler(sys.stdout))], report.SHORT_FMT)
+s = stringtools.csp.csp()
+for byte in b'message\n':
+    data = s.process(byte, logger)
+    if data is not None:
+        print(data)
+
+
+
+

Will result to the following output:

+
2019-05-22 18:41:54,305: DEBUG   - CSP:       Adding b'm' to buffer
+2019-05-22 18:41:54,305: DEBUG   - CSP:       Adding b'e' to buffer
+2019-05-22 18:41:54,305: DEBUG   - CSP:       Adding b's' to buffer
+2019-05-22 18:41:54,305: DEBUG   - CSP:       Adding b's' to buffer
+2019-05-22 18:41:54,305: DEBUG   - CSP:       Adding b'a' to buffer
+2019-05-22 18:41:54,305: DEBUG   - CSP:       Adding b'g' to buffer
+2019-05-22 18:41:54,305: DEBUG   - CSP:       Adding b'e' to buffer
+2019-05-22 18:41:54,305: DEBUG   - CSP:       Message identified by seperator 0a
+b'message'
+
+
+
+
+process(data)
+

This processes a byte out of a “stp-stream”.

+ +++ + + + + + + + +
Parameters:data (bytes) – A byte stream
Returns:A list of the extracted message(s)
Return type:list
+
+ +
+ +
+
+

stp (Serial transfer protocol)

+

Author:

+ +

Description:

+
+
This module is a submodule of stringtools and creates an serial frame to transmit and receive messages via an serial interface.
+

Submodules:

+ +
+
+stringtools.stp.DATA_CLEAR_BUFFER = '<'
+

The clear buffer byte (‘\x3a\x3c’ -> start of message)

+
+ +
+
+stringtools.stp.DATA_STORE_SYNC_VALUE = '='
+

The store sync value byte (‘\x3a\x3d’ -> ‘\x3a’ inside a message)

+
+ +
+
+stringtools.stp.DATA_SYNC = ':'
+

The data sync byte

+
+ +
+
+stringtools.stp.DATA_VALID_MSG = '>'
+

The valid message byte (‘\x3a\x3e’ -> end of message)

+
+ +
+
+stringtools.stp.STP_STATE_ESCAPE_1 = 1
+

Escape 1 state definition (‘\x3a\x3c’ found)

+
+ +
+
+stringtools.stp.STP_STATE_ESCAPE_2 = 2
+

Escape 2 state definition (‘\x3a’ found inside a message)

+
+ +
+
+stringtools.stp.STP_STATE_IDLE = 0
+

Idle state definition (default)

+
+ +
+
+stringtools.stp.STP_STATE_STORE_DATA = 3
+

Store data state definition (start of message found; data will be stored)

+
+ +
+
+stringtools.stp.build_frame(data)
+

This Method builds an “stp-frame” to be transfered via a stream.

+ +++ + + + + + + + +
Parameters:data (str) – A String (Bytes) to be framed
Returns:The “stp-framed” message to be sent
Return type:str
+

Example:

+
import stringtools
+
+print(stringtools.stp.build_frame(b':message:'))
+
+
+

Will result to the following output:

+
b':<:=message:=:>'
+
+
+
+ +
+
+class stringtools.stp.stp
+

This class extracts messages from an “stp-stream”.

+

Example:

+
import logging
+import report
+import stringtools
+import sys
+
+logger = report.getLogger('example', [(logging.DEBUG, logging.StreamHandler(sys.stdout))], report.SHORT_FMT)
+s = stringtools.stp.stp()
+for byte in b':<:=message:=:>':
+    data = s.process(byte, logger)
+    if data is not None:
+        print(data)
+
+
+
+

Will result to the following output:

+
2019-05-22 18:43:14,476: DEBUG   - STP:       data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1
+2019-05-22 18:43:14,476: DEBUG   - STP:       clear buffer (3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA
+2019-05-22 18:43:14,476: DEBUG   - STP:       data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2
+2019-05-22 18:43:14,476: DEBUG   - STP:       store sync value (3d) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA
+2019-05-22 18:43:14,476: DEBUG   - STP:       data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2
+2019-05-22 18:43:14,476: DEBUG   - STP:       store sync value (3d) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA
+2019-05-22 18:43:14,476: DEBUG   - STP:       data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2
+2019-05-22 18:43:14,476: DEBUG   - STP:       message completed (3e) => changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE
+b':message:'
+
+
+
+
+process(data)
+

This processes a byte out of a “stp-stream”.

+ +++ + + + + + + + +
Parameters:data (bytes) – A byte stream
Returns:The extracted message or None, if no message is identified yet
Return type:str
+
+ +
+ +
+
+
+
+
+

Indices and tables

+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_docs_/objects.inv b/_docs_/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..6cc5b4f9195605804bd7bc725990d126a51ca041 GIT binary patch literal 462 zcmV;<0Wtm~AX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGk&baH8K zXLN6GY;y`DAXa5^b7^mGIv@%oAXI2&AaZ4GVQFq;WpW^IW*~HEX>%ZEX>4U6X>%ZB zZ*6dLWpi_7WFU2OX>MmAdTeQ8E(&>-Kd#8K=>&{eO|>-8kHaS$M()}cFV{Gb2K$Y1HEs4^|3P^jJwOUYXS=pGdnhi#PW zQrx;)c!$D39n}$2b$=pSw}s$j)6fzuy=g0^3t6GTDSrv<`1-B70esT{VV*zEiPrTcE%5YaeJV=|iIcu5{tlL=nhH#pVw zPcw%m>B|z6UgOyc_r(p^6EQZ^F_|Y%{#=qSOrvp%2~I}w0+Yc%*oSM_>3D{( z;oN%d-2U`c0kUBCgFFJ%seJ;JLA9?SrTI|MH3$?A(4o55p{YFvM;VvQicS=7AWZN8 zX^Bqy`2PG-$cWn#DoyQ>H-Y)<7yRm7c(`y6&RtBLvjW<%{G4z#Cr;e`f@To>01A!7 Eti{sU=Kufz literal 0 HcmV?d00001 diff --git a/_docs_/py-modindex.html b/_docs_/py-modindex.html new file mode 100644 index 0000000..99cd94b --- /dev/null +++ b/_docs_/py-modindex.html @@ -0,0 +1,111 @@ + + + + + + + Python Module Index — stringtools documentation + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + +

Python Module Index

+ +
+ s +
+ + + + + + + + + + + + + +
 
+ s
+ stringtools +
    + stringtools.csp +
    + stringtools.stp +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_docs_/search.html b/_docs_/search.html new file mode 100644 index 0000000..63b8225 --- /dev/null +++ b/_docs_/search.html @@ -0,0 +1,100 @@ + + + + + + + Search — stringtools documentation + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Search

+
+ +

+ Please activate JavaScript to enable the search + functionality. +

+
+

+ From here you can search these documents. Enter your search + words into the box below and click "search". Note that the search + function will automatically search for all of the words. Pages + containing fewer words won't appear in the result list. +

+
+ + + +
+ +
+ +
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_docs_/searchindex.js b/_docs_/searchindex.js new file mode 100644 index 0000000..6a74e8e --- /dev/null +++ b/_docs_/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["index"],envversion:52,filenames:["index.rst"],objects:{"":{stringtools:[0,0,0,"-"]},"stringtools.csp":{build_frame:[0,1,1,""],csp:[0,2,1,""]},"stringtools.csp.csp":{process:[0,3,1,""]},"stringtools.stp":{DATA_CLEAR_BUFFER:[0,4,1,""],DATA_STORE_SYNC_VALUE:[0,4,1,""],DATA_SYNC:[0,4,1,""],DATA_VALID_MSG:[0,4,1,""],STP_STATE_ESCAPE_1:[0,4,1,""],STP_STATE_ESCAPE_2:[0,4,1,""],STP_STATE_IDLE:[0,4,1,""],STP_STATE_STORE_DATA:[0,4,1,""],build_frame:[0,1,1,""],stp:[0,2,1,""]},"stringtools.stp.stp":{process:[0,3,1,""]},stringtools:{csp:[0,0,0,"-"],gzip_compress:[0,1,1,""],gzip_extract:[0,1,1,""],hexlify:[0,1,1,""],stp:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","data","Python data"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method","4":"py:data"},terms:{"byte":0,"class":0,"default":0,"function":0,"import":0,"int":0,Adding:0,The:0,Will:0,alder:0,also:0,around:0,author:0,buffer:0,build:0,build_fram:0,bytestream:0,chang:0,charact:0,clear:0,complet:0,compress:0,compression_r:0,compressionn:0,compresslevel:0,consumed_tim:0,creat:0,data:0,data_clear_buff:0,data_store_sync_valu:0,data_sync:0,data_valid_msg:0,debug:0,definit:0,descript:0,dirk:0,end:0,escap:0,exampl:0,extract:0,finish:0,follow:0,found:0,frame:0,from:0,getlogg:0,gzip_compress:0,gzip_extract:0,hexlifi:0,identifi:0,idl:0,includ:0,index:0,insid:0,interfac:0,level:0,like:0,list:0,log:0,logger:0,messag:0,method:0,mockeri:0,modul:0,mount:0,msg:0,non:0,none:0,oper:0,option:0,out:0,output:0,page:0,paramet:0,print:0,printabl:0,process:0,receiv:0,report:0,result:0,search:0,see:0,sent:0,short_fmt:0,start:0,state:0,stdout:0,store:0,stp_state_escape_1:0,stp_state_escape_2:0,stp_state_idl:0,stp_state_store_data:0,str:0,stream:0,streamhandl:0,string:0,stringexampl:0,submodul:0,sudo:0,support:0,sync:0,sys:0,thi:0,transmit:0,type:0,unittest:0,valid:0,valu:0,via:0,x00:0,x01:0,x02:0,x08:0,x12:0,x1e:0,x1f:0,x2d:0,x3a:0,x3c:0,x3d:0,x3e:0,x40:0,x51:0,x5c:0,x60:0,x63:0,x7d:0,x82:0,x8a:0,x8b:0,xd0:0,xde:0,xe5:0,xff:0,yet:0},titles:["Welcome to stringtools\u2019s documentation!"],titleterms:{"return":0,carriag:0,csp:0,document:0,indic:0,protocol:0,seper:0,serial:0,stp:0,stringtool:0,tabl:0,transfer:0,welcom:0}}) \ No newline at end of file diff --git a/_testresults_/unittest.json b/_testresults_/unittest.json new file mode 100644 index 0000000..c803ddf --- /dev/null +++ b/_testresults_/unittest.json @@ -0,0 +1,13956 @@ +{ + "coverage_information": [ + { + "branch_coverage": 97.14, + "filepath": "/user_data/data/dirk/prj/modules/stringtools/pylibs/stringtools", + "files": [ + { + "branch_coverage": 97.14, + "filepath": "/user_data/data/dirk/prj/modules/stringtools/pylibs/stringtools/__init__.py", + "fragments": [ + { + "coverage_state": "clean", + "end": 3, + "start": 1 + }, + { + "coverage_state": "covered", + "end": 4, + "start": 4 + }, + { + "coverage_state": "clean", + "end": 31, + "start": 5 + }, + { + "coverage_state": "covered", + "end": 34, + "start": 32 + }, + { + "coverage_state": "clean", + "end": 35, + "start": 35 + }, + { + "coverage_state": "covered", + "end": 41, + "start": 36 + }, + { + "coverage_state": "clean", + "end": 42, + "start": 42 + }, + { + "coverage_state": "covered", + "end": 44, + "start": 43 + }, + { + "coverage_state": "clean", + "end": 45, + "start": 45 + }, + { + "coverage_state": "covered", + "end": 46, + "start": 46 + }, + { + "coverage_state": "clean", + "end": 48, + "start": 47 + }, + { + "coverage_state": "covered", + "end": 49, + "start": 49 + }, + { + "coverage_state": "clean", + "end": 51, + "start": 50 + }, + { + "coverage_state": "covered", + "end": 52, + "start": 52 + }, + { + "coverage_state": "clean", + "end": 58, + "start": 53 + }, + { + "coverage_state": "covered", + "end": 59, + "start": 59 + }, + { + "coverage_state": "clean", + "end": 75, + "start": 60 + }, + { + "coverage_state": "covered", + "end": 79, + "start": 76 + }, + { + "coverage_state": "clean", + "end": 80, + "start": 80 + }, + { + "coverage_state": "covered", + "end": 84, + "start": 81 + }, + { + "coverage_state": "clean", + "end": 85, + "start": 85 + }, + { + "coverage_state": "covered", + "end": 88, + "start": 86 + }, + { + "coverage_state": "partially-covered", + "end": 89, + "start": 89 + }, + { + "coverage_state": "covered", + "end": 91, + "start": 90 + }, + { + "coverage_state": "clean", + "end": 93, + "start": 92 + }, + { + "coverage_state": "covered", + "end": 94, + "start": 94 + }, + { + "coverage_state": "clean", + "end": 109, + "start": 95 + }, + { + "coverage_state": "covered", + "end": 113, + "start": 110 + }, + { + "coverage_state": "clean", + "end": 114, + "start": 114 + }, + { + "coverage_state": "covered", + "end": 118, + "start": 115 + }, + { + "coverage_state": "clean", + "end": 119, + "start": 119 + }, + { + "coverage_state": "covered", + "end": 121, + "start": 120 + }, + { + "coverage_state": "partially-covered", + "end": 122, + "start": 122 + }, + { + "coverage_state": "covered", + "end": 124, + "start": 123 + }, + { + "coverage_state": "clean", + "end": 126, + "start": 125 + }, + { + "coverage_state": "covered", + "end": 127, + "start": 127 + }, + { + "coverage_state": "clean", + "end": 141, + "start": 128 + }, + { + "coverage_state": "covered", + "end": 145, + "start": 142 + }, + { + "coverage_state": "clean", + "end": 146, + "start": 146 + }, + { + "coverage_state": "covered", + "end": 148, + "start": 147 + }, + { + "coverage_state": "clean", + "end": 150, + "start": 149 + }, + { + "coverage_state": "covered", + "end": 151, + "start": 151 + }, + { + "coverage_state": "clean", + "end": 157, + "start": 152 + }, + { + "coverage_state": "covered", + "end": 159, + "start": 158 + }, + { + "coverage_state": "clean", + "end": 160, + "start": 160 + }, + { + "coverage_state": "covered", + "end": 161, + "start": 161 + }, + { + "coverage_state": "clean", + "end": null, + "start": 162 + } + ], + "line_coverage": 100.0, + "name": "stringtools.__init__.py" + }, + { + "branch_coverage": 97.14, + "filepath": "/user_data/data/dirk/prj/modules/stringtools/pylibs/stringtools/csp.py", + "fragments": [ + { + "coverage_state": "clean", + "end": 3, + "start": 1 + }, + { + "coverage_state": "covered", + "end": 4, + "start": 4 + }, + { + "coverage_state": "clean", + "end": 21, + "start": 5 + }, + { + "coverage_state": "covered", + "end": 22, + "start": 22 + }, + { + "coverage_state": "clean", + "end": 23, + "start": 23 + }, + { + "coverage_state": "covered", + "end": 25, + "start": 24 + }, + { + "coverage_state": "clean", + "end": 26, + "start": 26 + }, + { + "coverage_state": "covered", + "end": 28, + "start": 27 + }, + { + "coverage_state": "clean", + "end": 29, + "start": 29 + }, + { + "coverage_state": "covered", + "end": 30, + "start": 30 + }, + { + "coverage_state": "clean", + "end": 32, + "start": 31 + }, + { + "coverage_state": "covered", + "end": 33, + "start": 33 + }, + { + "coverage_state": "clean", + "end": 43, + "start": 34 + }, + { + "coverage_state": "covered", + "end": 44, + "start": 44 + }, + { + "coverage_state": "clean", + "end": 45, + "start": 45 + }, + { + "coverage_state": "covered", + "end": 48, + "start": 46 + }, + { + "coverage_state": "clean", + "end": 49, + "start": 49 + }, + { + "coverage_state": "covered", + "end": 50, + "start": 50 + }, + { + "coverage_state": "clean", + "end": 57, + "start": 51 + }, + { + "coverage_state": "covered", + "end": 60, + "start": 58 + }, + { + "coverage_state": "clean", + "end": 61, + "start": 61 + }, + { + "coverage_state": "covered", + "end": 68, + "start": 62 + }, + { + "coverage_state": "clean", + "end": 70, + "start": 69 + }, + { + "coverage_state": "covered", + "end": 71, + "start": 71 + }, + { + "coverage_state": "clean", + "end": 85, + "start": 72 + }, + { + "coverage_state": "covered", + "end": 87, + "start": 86 + }, + { + "coverage_state": "clean", + "end": 88, + "start": 88 + }, + { + "coverage_state": "covered", + "end": 89, + "start": 89 + }, + { + "coverage_state": "clean", + "end": null, + "start": 90 + } + ], + "line_coverage": 100.0, + "name": "stringtools.csp.py" + }, + { + "branch_coverage": 97.14, + "filepath": "/user_data/data/dirk/prj/modules/stringtools/pylibs/stringtools/stp.py", + "fragments": [ + { + "coverage_state": "clean", + "end": 3, + "start": 1 + }, + { + "coverage_state": "covered", + "end": 4, + "start": 4 + }, + { + "coverage_state": "clean", + "end": 21, + "start": 5 + }, + { + "coverage_state": "covered", + "end": 22, + "start": 22 + }, + { + "coverage_state": "clean", + "end": 23, + "start": 23 + }, + { + "coverage_state": "covered", + "end": 25, + "start": 24 + }, + { + "coverage_state": "clean", + "end": 26, + "start": 26 + }, + { + "coverage_state": "covered", + "end": 28, + "start": 27 + }, + { + "coverage_state": "clean", + "end": 29, + "start": 29 + }, + { + "coverage_state": "covered", + "end": 30, + "start": 30 + }, + { + "coverage_state": "clean", + "end": 31, + "start": 31 + }, + { + "coverage_state": "covered", + "end": 32, + "start": 32 + }, + { + "coverage_state": "clean", + "end": 33, + "start": 33 + }, + { + "coverage_state": "covered", + "end": 34, + "start": 34 + }, + { + "coverage_state": "clean", + "end": 35, + "start": 35 + }, + { + "coverage_state": "covered", + "end": 36, + "start": 36 + }, + { + "coverage_state": "clean", + "end": 38, + "start": 37 + }, + { + "coverage_state": "covered", + "end": 39, + "start": 39 + }, + { + "coverage_state": "clean", + "end": 40, + "start": 40 + }, + { + "coverage_state": "covered", + "end": 41, + "start": 41 + }, + { + "coverage_state": "clean", + "end": 42, + "start": 42 + }, + { + "coverage_state": "covered", + "end": 43, + "start": 43 + }, + { + "coverage_state": "clean", + "end": 44, + "start": 44 + }, + { + "coverage_state": "covered", + "end": 45, + "start": 45 + }, + { + "coverage_state": "clean", + "end": 48, + "start": 46 + }, + { + "coverage_state": "covered", + "end": 49, + "start": 49 + }, + { + "coverage_state": "clean", + "end": 59, + "start": 50 + }, + { + "coverage_state": "covered", + "end": 60, + "start": 60 + }, + { + "coverage_state": "clean", + "end": 61, + "start": 61 + }, + { + "coverage_state": "covered", + "end": 65, + "start": 62 + }, + { + "coverage_state": "clean", + "end": 66, + "start": 66 + }, + { + "coverage_state": "covered", + "end": 70, + "start": 67 + }, + { + "coverage_state": "clean", + "end": 71, + "start": 71 + }, + { + "coverage_state": "covered", + "end": 72, + "start": 72 + }, + { + "coverage_state": "clean", + "end": 79, + "start": 73 + }, + { + "coverage_state": "covered", + "end": 84, + "start": 80 + }, + { + "coverage_state": "clean", + "end": 85, + "start": 85 + }, + { + "coverage_state": "covered", + "end": 86, + "start": 86 + }, + { + "coverage_state": "clean", + "end": 87, + "start": 87 + }, + { + "coverage_state": "covered", + "end": 90, + "start": 88 + }, + { + "coverage_state": "clean", + "end": 91, + "start": 91 + }, + { + "coverage_state": "covered", + "end": 93, + "start": 92 + }, + { + "coverage_state": "clean", + "end": 94, + "start": 94 + }, + { + "coverage_state": "covered", + "end": 98, + "start": 95 + }, + { + "coverage_state": "clean", + "end": 99, + "start": 99 + }, + { + "coverage_state": "covered", + "end": 108, + "start": 100 + }, + { + "coverage_state": "clean", + "end": 109, + "start": 109 + }, + { + "coverage_state": "covered", + "end": 114, + "start": 110 + }, + { + "coverage_state": "clean", + "end": 115, + "start": 115 + }, + { + "coverage_state": "covered", + "end": 134, + "start": 116 + }, + { + "coverage_state": "clean", + "end": 135, + "start": 135 + }, + { + "coverage_state": "covered", + "end": 138, + "start": 136 + }, + { + "coverage_state": "clean", + "end": 139, + "start": 139 + }, + { + "coverage_state": "covered", + "end": 146, + "start": 140 + }, + { + "coverage_state": "clean", + "end": 148, + "start": 147 + }, + { + "coverage_state": "covered", + "end": 149, + "start": 149 + }, + { + "coverage_state": "clean", + "end": 163, + "start": 150 + }, + { + "coverage_state": "covered", + "end": 164, + "start": 164 + }, + { + "coverage_state": "clean", + "end": 165, + "start": 165 + }, + { + "coverage_state": "covered", + "end": 170, + "start": 166 + }, + { + "coverage_state": "clean", + "end": 171, + "start": 171 + }, + { + "coverage_state": "covered", + "end": 172, + "start": 172 + }, + { + "coverage_state": "clean", + "end": 173, + "start": 173 + }, + { + "coverage_state": "covered", + "end": 175, + "start": 174 + }, + { + "coverage_state": "clean", + "end": null, + "start": 176 + } + ], + "line_coverage": 100.0, + "name": "stringtools.stp.py" + } + ], + "line_coverage": 100.0, + "name": "stringtools" + } + ], + "lost_souls": { + "item_list": [], + "testcase_list": [] + }, + "specification": { + "comment": "Comment", + "item_dict": { + "_-yWo4I9sEemg3cv-3xZ25Q": { + "Description": "A frame creation method shall create a frame out of given input data.", + "Fitcriterion": "Creation of a testframe and checking the result.", + "Heading": "Frame creation", + "ID": "REQ-10", + "ReasonForImplementation": "Message or Frame generation for streams (e.g. data transfer via bluetooth, ethernet, \\ldots).", + "last_change": "2019-06-15T19:50:59.108+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_-yWo4I9sEemg3cv-3xZ25Q", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_0CnJgHu0Eemborg4LxXa3A": { + "Heading": "Stream Compression", + "last_change": "2019-05-21T13:31:30.639+02:00", + "system_type_uid": "_4-K5EHYYEem_kd-7nxt1sg", + "system_uid": "_0CnJgHu0Eemborg4LxXa3A", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_2x4icH5BEemxr4bbKXhxkg": { + "Description": "The Serial Transfer Protocol shall use a start pattern and an end pattern to identify a message in a stream. Both patterns shall be a two byte values starting with the same (sync-)byte.", + "Heading": "Serial Transfer Protocol (STP)", + "last_change": "2019-06-15T19:55:51.578+02:00", + "system_type_uid": "_4-K5EHYYEem_kd-7nxt1sg", + "system_uid": "_2x4icH5BEemxr4bbKXhxkg", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_5_z4MI9yEemg3cv-3xZ25Q": { + "Description": "Data before the start pattern shall be ignored. A warning shall be given to the logger.", + "Heading": "Frame processing - Data before the start pattern", + "ID": "REQ-14", + "ReasonForImplementation": "Robustness against wrong or corrupted data.", + "last_change": "2019-06-15T20:32:21.800+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_5_z4MI9yEemg3cv-3xZ25Q", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_9ahP4Hu7Eemborg4LxXa3A": { + "Description": "The module stringtools shall have a method compressing a Stream with gzip.", + "Fitcriterion": "Compressed Stream is extractable and results in the original data.", + "Heading": "Compress", + "ID": "REQ-3", + "ReasonForImplementation": "Speed up transfer with low transfer rate.", + "last_change": "2019-05-21T13:31:22.206+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_9ahP4Hu7Eemborg4LxXa3A", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_Bd9TgI9tEemg3cv-3xZ25Q": { + "Description": "The STP Module shall support a class including a method to process stream snipets of variable length. This Method shall return an empty list, if no frame has been detected, otherwise it shall return a list including detected frame(s).", + "Fitcriterion": "At least one frame given in at least two snippets is identified correctly.", + "Heading": "Frame processing", + "ID": "REQ-11", + "ReasonForImplementation": "Support message analysis of a stream with every size.", + "last_change": "2019-06-15T20:00:48.033+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_Bd9TgI9tEemg3cv-3xZ25Q", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_G40UUH5DEemxr4bbKXhxkg": { + "Description": "The Frame creation Method shall raise ValueError, if a frame separation character is in the Source-String.", + "Fitcriterion": "ValueErroro is raised for at least one String including the separation character.", + "Heading": "Frame creation error", + "ID": "REQ-7", + "ReasonForImplementation": "String including separation charcter will be splitted in pieces while processing after transport.", + "last_change": "2019-06-15T19:58:32.200+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_G40UUH5DEemxr4bbKXhxkg", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_MR7eOHYYEem_kd-7nxt1sg": { + "Heading": "Stream to Human readable String", + "last_change": "2019-06-15T13:44:35.140+02:00", + "system_type_uid": "_4-K5EHYYEem_kd-7nxt1sg", + "system_uid": "_MR7eOHYYEem_kd-7nxt1sg", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_NpOWgI9tEemg3cv-3xZ25Q": { + "Description": "If the input data is not bytes for python3 or str for python 2, the process method shall raise TypeError.", + "Fitcriterion": "At least the following types return TypeError (list, int, str for python3, unicode for python 2).", + "Heading": "Frame processing - Input data type error", + "ID": "REQ-12", + "ReasonForImplementation": "Type restriction.", + "last_change": "2019-06-15T20:01:44.738+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_NpOWgI9tEemg3cv-3xZ25Q", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_QjJiIIwZEem5qYOdmXl77A": { + "Description": "The CSP Module shall support a class including a method to process stream snipets of variable length. This Method shall return an empty list, if no frame has been detected, otherwise it shall return a list including detected frame(s).", + "Fitcriterion": "At least one frame given in at least two snippets is identified correctly.", + "Heading": "Frame processing", + "ID": "REQ-8", + "ReasonForImplementation": "Support message analysis of a stream with every size.", + "last_change": "2019-06-15T19:59:33.847+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_QjJiIIwZEem5qYOdmXl77A", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_TzZlUI9jEemg3cv-3xZ25Q": { + "Description": "A Stream is from class {\\tt bytes} for python3 and from type {\\tt str} for python2.", + "Heading": "Stream Definition", + "last_change": "2019-06-15T13:57:17.714+02:00", + "system_type_uid": "_4-K5EHYYEem_kd-7nxt1sg", + "system_uid": "_TzZlUI9jEemg3cv-3xZ25Q", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_XzMFcHYZEem_kd-7nxt1sg": { + "Description": "A Stream shall be converted to a human readable String containing all bytes as hexadecimal values seperated by a Space.", + "Fitcriterion": "A stream shall be converted at least once and the hex values shall exist in the returnvalue in the correct order.", + "Heading": "Hexadecimal Values", + "ID": "REQ-1", + "ReasonForImplementation": "Make non printable characters printable.", + "last_change": "2019-06-15T13:49:55.408+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_XzMFcHYZEem_kd-7nxt1sg", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_Y_h3gH5CEemxr4bbKXhxkg": { + "Description": "The CSP module shall support a method to create a Frame from a stream.", + "Fitcriterion": "Creation of a testframe and checking the result.", + "Heading": "Frame creation", + "ID": "REQ-6", + "ReasonForImplementation": "Simple message or frame generation for streams (e.g. Keyboard (user input), RFID-Reader, \\ldots).", + "last_change": "2019-06-15T19:56:41.415+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_Y_h3gH5CEemxr4bbKXhxkg", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_ZhyRAI9OEemAMMFgxXT6lA": { + "Description": "If the input data is not bytes for python3 or str for python 2, the process method shall raise TypeError.", + "Fitcriterion": "At least the following types return TypeError (list, int, str for python3, unicode for python 2).", + "Heading": "Frame processing - Input data type error", + "ID": "REQ-9", + "ReasonForImplementation": "Type restriction.", + "last_change": "2019-06-15T19:44:59.955+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_ZhyRAI9OEemAMMFgxXT6lA", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_dpJzwCcUEeqsHsnJQYCN8Q": { + "Description": "On receiving an incorrect end pattern, STP shall change to state STORE\\_DATA, in case of a start pattern, to ESCAPE\\_1, in case of data sync was received twice or back to state IDLE in all other faulty end patterns starting with data sync. A warning shall be given to the logger.", + "Heading": "Frame processing - Incorrect end pattern", + "ID": "REQ-17", + "ReasonForImplementation": "Robustness against wrong or corrupted data.", + "last_change": "2019-12-25T15:43:17.516+01:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_dpJzwCcUEeqsHsnJQYCN8Q", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_fp-i0Hu8Eemborg4LxXa3A": { + "Description": "The module stringtools shall have a method extracting a Stream with gzip.", + "Fitcriterion": "Extracted Stream is equal to the original compressed data.", + "Heading": "Extract", + "ID": "REQ-4", + "ReasonForImplementation": "Speed up transfer with low transfer rate.", + "last_change": "2019-06-15T14:02:20.451+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_fp-i0Hu8Eemborg4LxXa3A", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_n3BdUCcREeqsHsnJQYCN8Q": { + "Description": "On receiving an incorrect start pattern, STP shall stay in ESCAPE\\_1, in case of data sync was received twice or back to state IDLE in all other faulty start patterns starting with data sync. A warning shall be given to the logger.", + "Heading": "Frame processing - Incorrect start patterns", + "ID": "REQ-16", + "ReasonForImplementation": "Robustness against wrong or corrupted data.", + "last_change": "2019-12-25T15:48:30.374+01:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_n3BdUCcREeqsHsnJQYCN8Q", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_pavPUHsZEemK6PYOxF9rHw": { + "Description": "The Length of a Stream surrounded by brakets shall be included in the human readable string.", + "Fitcriterion": "The described pattern including the decimal number of bytes is included in the string for at least one Stream.", + "Heading": "Number of Bytes", + "ID": "REQ-2", + "ReasonForImplementation": "Show the length of a Stream without counting the seperated values.", + "last_change": "2019-05-20T21:37:34.879+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_pavPUHsZEemK6PYOxF9rHw", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_rhV88Hu9Eemborg4LxXa3A": { + "Description": "The module stringtools shall have a method to replace carriage return and line feed to their escaped representation.", + "Fitcriterion": "Filter at least one string and check at least one CR and one LF representation.", + "Heading": "CRLF-Filter", + "ID": "REQ-5", + "ReasonForImplementation": "Replace these characters to make output printable (e.g. for logging a string based protocol).", + "last_change": "2019-06-15T14:53:55.282+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_rhV88Hu9Eemborg4LxXa3A", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_wMotUCclEeqsHsnJQYCN8Q": { + "Description": "The state of STP shall be set to IDLE, after an unknown state was recognised. The currently processed data shall be processed again. An error shall be given to the logger.", + "Heading": "Frame processing - After state corruption", + "ID": "REQ-18", + "ReasonForImplementation": "Robustness against wrong or corrupted data.", + "last_change": "2019-12-25T15:55:19.497+01:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_wMotUCclEeqsHsnJQYCN8Q", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_xOCgkI9yEemg3cv-3xZ25Q": { + "Heading": "Frame processing - Start pattern and end pattern inside a message", + "ID": "REQ-13", + "ReasonForImplementation": "Possibility to send any kind of data (including the patterns).", + "last_change": "2019-06-15T15:37:47.161+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_xOCgkI9yEemg3cv-3xZ25Q", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_xR3PcH5BEemxr4bbKXhxkg": { + "Description": "The Carriagereturn Seperation Protocol shall use carriage return as the end pattern for message seperation.", + "Heading": "Carriagereturn Seperation Protocol (CSP)", + "last_change": "2019-06-15T19:56:23.071+02:00", + "system_type_uid": "_4-K5EHYYEem_kd-7nxt1sg", + "system_uid": "_xR3PcH5BEemxr4bbKXhxkg", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + }, + "_xiZqMI92Eemg3cv-3xZ25Q": { + "Description": "The frame creation method shall support existance of the start or end pattern in the data to be framed.", + "Fitcriterion": "Creation of a testframe out of data including at least one start pattern and one end pattern and checking the result.", + "Heading": "Frame creation - Start pattern and end pattern inside a message", + "ID": "REQ-15", + "ReasonForImplementation": "Possibility to send any kind of data (including the patterns).", + "last_change": "2019-06-15T19:53:08.277+02:00", + "system_type_uid": "_MR7eNHYYEem_kd-7nxt1sg", + "system_uid": "_xiZqMI92Eemg3cv-3xZ25Q", + "xml_tag": "{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}SPEC-OBJECT" + } + }, + "titel": "Title", + "uid_list_sorted": [ + "_TzZlUI9jEemg3cv-3xZ25Q", + "_MR7eOHYYEem_kd-7nxt1sg", + "_XzMFcHYZEem_kd-7nxt1sg", + "_pavPUHsZEemK6PYOxF9rHw", + "_rhV88Hu9Eemborg4LxXa3A", + "_0CnJgHu0Eemborg4LxXa3A", + "_9ahP4Hu7Eemborg4LxXa3A", + "_fp-i0Hu8Eemborg4LxXa3A", + "_xR3PcH5BEemxr4bbKXhxkg", + "_Y_h3gH5CEemxr4bbKXhxkg", + "_G40UUH5DEemxr4bbKXhxkg", + "_QjJiIIwZEem5qYOdmXl77A", + "_ZhyRAI9OEemAMMFgxXT6lA", + "_2x4icH5BEemxr4bbKXhxkg", + "_-yWo4I9sEemg3cv-3xZ25Q", + "_xiZqMI92Eemg3cv-3xZ25Q", + "_Bd9TgI9tEemg3cv-3xZ25Q", + "_NpOWgI9tEemg3cv-3xZ25Q", + "_xOCgkI9yEemg3cv-3xZ25Q", + "_5_z4MI9yEemg3cv-3xZ25Q", + "_n3BdUCcREeqsHsnJQYCN8Q", + "_dpJzwCcUEeqsHsnJQYCN8Q", + "_wMotUCclEeqsHsnJQYCN8Q" + ] + }, + "system_information": { + "Architecture": "64bit", + "Distribution": "LinuxMint 19.3 tricia", + "Hostname": "ahorn", + "Kernel": "5.0.0-37-generic (#40~18.04.1-Ubuntu SMP Thu Nov 14 12:06:39 UTC 2019)", + "Machine": "x86_64", + "Path": "/user_data/data/dirk/prj/modules/stringtools/unittest", + "System": "Linux", + "Username": "dirk" + }, + "testobject_information": { + "Dependencies": [], + "Description": "The Module {\\tt stringtools} is designed to support functionality for strings (e.g. transfer strings via a bytestream, compressing, extracting, ...).\nFor more Information read the sphinx documentation.", + "Name": "stringtools", + "State": "Released", + "Supported Interpreters": "python2, python3", + "Version": "88a3eed174bd2239a6c1d928081e5b6d" + }, + "testrun_list": [ + { + "heading_dict": { + "_-yWo4I9sEemg3cv-3xZ25Q": "Frame creation", + "_0CnJgHu0Eemborg4LxXa3A": "Stream Compression", + "_2x4icH5BEemxr4bbKXhxkg": "Serial Transfer Protocol (STP)", + "_5_z4MI9yEemg3cv-3xZ25Q": "Frame processing - Data before the start pattern", + "_9ahP4Hu7Eemborg4LxXa3A": "Compress", + "_Bd9TgI9tEemg3cv-3xZ25Q": "Frame processing", + "_G40UUH5DEemxr4bbKXhxkg": "Frame creation error", + "_MR7eOHYYEem_kd-7nxt1sg": "Stream to Human readable String", + "_NpOWgI9tEemg3cv-3xZ25Q": "Frame processing - Input data type error", + "_QjJiIIwZEem5qYOdmXl77A": "Frame processing", + "_TzZlUI9jEemg3cv-3xZ25Q": "Stream Definition", + "_XzMFcHYZEem_kd-7nxt1sg": "Hexadecimal Values", + "_Y_h3gH5CEemxr4bbKXhxkg": "Frame creation", + "_ZhyRAI9OEemAMMFgxXT6lA": "Frame processing - Input data type error", + "_dpJzwCcUEeqsHsnJQYCN8Q": "Frame processing - Incorrect end pattern", + "_fp-i0Hu8Eemborg4LxXa3A": "Extract", + "_n3BdUCcREeqsHsnJQYCN8Q": "Frame processing - Incorrect start patterns", + "_pavPUHsZEemK6PYOxF9rHw": "Number of Bytes", + "_rhV88Hu9Eemborg4LxXa3A": "CRLF-Filter", + "_wMotUCclEeqsHsnJQYCN8Q": "Frame processing - After state corruption", + "_xOCgkI9yEemg3cv-3xZ25Q": "Frame processing - Start pattern and end pattern inside a message", + "_xR3PcH5BEemxr4bbKXhxkg": "Carriagereturn Seperation Protocol (CSP)", + "_xiZqMI92Eemg3cv-3xZ25Q": "Frame creation - Start pattern and end pattern inside a message" + }, + "interpreter": "python 2.7.17 (final)", + "name": "Default Testsession name", + "number_of_failed_tests": 0, + "number_of_possibly_failed_tests": 0, + "number_of_successfull_tests": 18, + "number_of_tests": 18, + "testcase_execution_level": 90, + "testcase_names": { + "0": "Single Test", + "10": "Smoke Test (Minumum subset)", + "50": "Short Test (Subset)", + "90": "Full Test (all defined tests)" + }, + "testcases": { + "_-yWo4I9sEemg3cv-3xZ25Q": { + "args": null, + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745745, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 40, + "message": "_-yWo4I9sEemg3cv-3xZ25Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 745.7449436187744, + "msg": "_-yWo4I9sEemg3cv-3xZ25Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.3230094909668, + "testcaseLogger": [ + { + "args": [ + "'testframe for stp'" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745828, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "build_frame_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 17, + "message": "Creating testframe for \"'testframe for stp'\"", + "module": "test_stp", + "moduleLogger": [], + "msecs": 745.8279132843018, + "msg": "Creating testframe for \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.40597915649414, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "':'", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745975, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "STP-Frame is correct (Content ':' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "STP-Frame", + "':'", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745896, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (STP-Frame): ':' ()", + "module": "test", + "msecs": 745.8961009979248, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.47416687011719, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP-Frame", + "':'", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745936, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (STP-Frame): result = ':' ()", + "module": "test", + "msecs": 745.9359169006348, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.51398277282715, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 745.9750175476074, + "msg": "STP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.553083419799805, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.910064697265625e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0002300739288330078, + "time_finished": "2019-12-30 18:01:07,745", + "time_start": "2019-12-30 18:01:07,745" + }, + "_5_z4MI9yEemg3cv-3xZ25Q": { + "args": null, + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.74925, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 45, + "message": "_5_z4MI9yEemg3cv-3xZ25Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 749.2499351501465, + "msg": "_5_z4MI9yEemg3cv-3xZ25Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.82800102233887, + "testcaseLogger": [ + { + "args": [ + "'_:'" + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749618, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_frame_data_before_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 46, + "message": "Processing testframe: \"'_:'\"", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "STP:", + 95 + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749324, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "WARNING", + "levelno": 30, + "lineno": 100, + "message": "STP: no data sync (5f) received => ignoring byte", + "module": "stp", + "msecs": 749.3240833282471, + "msg": "%s no data sync (%02x) received => ignoring byte", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.90214920043945, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749365, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 98, + "message": "STP: data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 749.3650913238525, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.94315719604492, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749407, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 749.4070529937744, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.9851188659668, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749481, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 749.4809627532959, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.05902862548828, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 62 + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749521, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 124, + "message": "STP: end pattern (3a 3e) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "module": "stp", + "msecs": 749.521017074585, + "msg": "%s end pattern (%02x %02x) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.099082946777344, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(17): 74 65 73 74 66 72 61 6d 65 20 66 6f 72 20 73 74 70" + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749581, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "INFO", + "levelno": 20, + "lineno": 145, + "message": "STP: message identified - (17): 74 65 73 74 66 72 61 6d 65 20 66 6f 72 20 73 74 70", + "module": "stp", + "msecs": 749.5810985565186, + "msg": "%s message identified - %s", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.15916442871094, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 749.6180534362793, + "msg": "Processing testframe: \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.19611930847168, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.695487976074219e-05 + }, + { + "args": [ + "['testframe for stp']", + "" + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749777, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Processed STP-Frame is correct (Content ['testframe for stp'] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Processed STP-Frame", + "[ 'testframe for stp' ]", + "" + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749688, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Processed STP-Frame): [ 'testframe for stp' ] ()", + "module": "test", + "msecs": 749.687910079956, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.26597595214844, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Processed STP-Frame", + "[ 'testframe for stp' ]", + "" + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749728, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Processed STP-Frame): result = [ 'testframe for stp' ] ()", + "module": "test", + "msecs": 749.7279644012451, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.3060302734375, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 749.77707862854, + "msg": "Processed STP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.35514450073242, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.9114227294921875e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0005271434783935547, + "time_finished": "2019-12-30 18:01:07,749", + "time_start": "2019-12-30 18:01:07,749" + }, + "_9ahP4Hu7Eemborg4LxXa3A": { + "args": null, + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741891, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 28, + "message": "_9ahP4Hu7Eemborg4LxXa3A", + "module": "__init__", + "moduleLogger": [], + "msecs": 741.8909072875977, + "msg": "_9ahP4Hu7Eemborg4LxXa3A", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 46.46897315979004, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741953, + "exc_info": null, + "exc_text": null, + "filename": "test_gzip.py", + "funcName": "compress_extract_check", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 12, + "message": "Compressing Streams result in differnt streams with the same input stream. Therefore the test will compare the decompressed data.", + "module": "test_gzip", + "moduleLogger": [], + "msecs": 741.9528961181641, + "msg": "Compressing Streams result in differnt streams with the same input stream. Therefore the test will compare the decompressed data.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_gzip.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 46.530961990356445, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff" + ], + "asctime": "2019-12-30 18:01:07,742", + "created": 1577725267.742211, + "exc_info": null, + "exc_text": null, + "filename": "test_gzip.py", + "funcName": "compress_extract_check", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 14, + "message": "Compressing stream: (30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ", + "module": "test_gzip", + "moduleLogger": [ + { + "args": [ + 0.8666666666666667, + 0.00011706352233886719 + ], + "asctime": "2019-12-30 18:01:07,742", + "created": 1577725267.742126, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "gzip_compress", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 90, + "message": "GZIP: Finished to compress a string (compression_rate=0.867, consumed_time=0.0s).", + "module": "__init__", + "msecs": 742.1259880065918, + "msg": "GZIP: Finished to compress a string (compression_rate=%.3f, consumed_time=%.1fs).", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 46.70405387878418, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 742.211103439331, + "msg": "Compressing stream: %s ", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_gzip.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 46.78916931152344, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 8.511543273925781e-05 + }, + { + "args": [ + "(26): 1f 8b 08 00 53 2d 0a 5e 02 ff 63 60 40 01 ff 51 01 00 2d 8a 7d de 1e 00 00 00" + ], + "asctime": "2019-12-30 18:01:07,742", + "created": 1577725267.742419, + "exc_info": null, + "exc_text": null, + "filename": "test_gzip.py", + "funcName": "compress_extract_check", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 16, + "message": "Extracting stream: (26): 1f 8b 08 00 53 2d 0a 5e 02 ff 63 60 40 01 ff 51 01 00 2d 8a 7d de 1e 00 00 00", + "module": "test_gzip", + "moduleLogger": [ + { + "args": [ + 0.8666666666666667, + 6.29425048828125e-05 + ], + "asctime": "2019-12-30 18:01:07,742", + "created": 1577725267.742341, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "gzip_extract", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 123, + "message": "GZIP: Finished to extract a string (compression_rate=0.867, consumed_time=0.0s).", + "module": "__init__", + "msecs": 742.3410415649414, + "msg": "GZIP: Finished to extract a string (compression_rate=%.3f, consumed_time=%.1fs).", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 46.91910743713379, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 742.4190044403076, + "msg": "Extracting stream: %s", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_gzip.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 46.9970703125, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 7.796287536621094e-05 + }, + { + "args": [ + "(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff", + "" + ], + "asctime": "2019-12-30 18:01:07,742", + "created": 1577725267.74267, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Extracted data is correct (Content (30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Extracted data", + "(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff", + "" + ], + "asctime": "2019-12-30 18:01:07,742", + "created": 1577725267.74252, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Extracted data): (30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ()", + "module": "test", + "msecs": 742.5200939178467, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 47.09815979003906, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Extracted data", + "(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff", + "" + ], + "asctime": "2019-12-30 18:01:07,742", + "created": 1577725267.742595, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Extracted data): result = (30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ()", + "module": "test", + "msecs": 742.5949573516846, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 47.17302322387695, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 742.6700592041016, + "msg": "Extracted data is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 47.248125076293945, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 7.510185241699219e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0007791519165039062, + "time_finished": "2019-12-30 18:01:07,742", + "time_start": "2019-12-30 18:01:07,741" + }, + "_Bd9TgI9tEemg3cv-3xZ25Q": { + "args": null, + "asctime": "2019-12-30 18:01:07,746", + "created": 1577725267.74658, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 42, + "message": "_Bd9TgI9tEemg3cv-3xZ25Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 746.5798854827881, + "msg": "_Bd9TgI9tEemg3cv-3xZ25Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.15795135498047, + "testcaseLogger": [ + { + "args": [ + "':'" + ], + "asctime": "2019-12-30 18:01:07,746", + "created": 1577725267.746963, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_frame_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 31, + "message": "Processing testframe: \"':'\"", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,746", + "created": 1577725267.746654, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 98, + "message": "STP: data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 746.6540336608887, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.232099533081055, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:07,746", + "created": 1577725267.746701, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 746.7010021209717, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.27906799316406, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,746", + "created": 1577725267.746784, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 746.783971786499, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.362037658691406, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 62 + ], + "asctime": "2019-12-30 18:01:07,746", + "created": 1577725267.746852, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 124, + "message": "STP: end pattern (3a 3e) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "module": "stp", + "msecs": 746.851921081543, + "msg": "%s end pattern (%02x %02x) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.42998695373535, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(17): 74 65 73 74 66 72 61 6d 65 20 66 6f 72 20 73 74 70" + ], + "asctime": "2019-12-30 18:01:07,746", + "created": 1577725267.746924, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "INFO", + "levelno": 20, + "lineno": 145, + "message": "STP: message identified - (17): 74 65 73 74 66 72 61 6d 65 20 66 6f 72 20 73 74 70", + "module": "stp", + "msecs": 746.9239234924316, + "msg": "%s message identified - %s", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.50198936462402, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 746.9630241394043, + "msg": "Processing testframe: \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.54109001159668, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.910064697265625e-05 + }, + { + "args": [ + "[]", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747114, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "First processed STP snippet is correct (Content [] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "First processed STP snippet", + "[ ]", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747031, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (First processed STP snippet): [ ] ()", + "module": "test", + "msecs": 747.0309734344482, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.609039306640625, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "First processed STP snippet", + "[ ]", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747071, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (First processed STP snippet): result = [ ] ()", + "module": "test", + "msecs": 747.0710277557373, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.64909362792969, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 747.1139430999756, + "msg": "First processed STP snippet is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.69200897216797, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.291534423828125e-05 + }, + { + "args": [ + "['testframe for stp']", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747264, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Final processed STP snippet is correct (Content ['testframe for stp'] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Final processed STP snippet", + "[ 'testframe for stp' ]", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747177, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Final processed STP snippet): [ 'testframe for stp' ] ()", + "module": "test", + "msecs": 747.1768856048584, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.75495147705078, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Final processed STP snippet", + "[ 'testframe for stp' ]", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747217, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Final processed STP snippet): result = [ 'testframe for stp' ] ()", + "module": "test", + "msecs": 747.2169399261475, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.795005798339844, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 747.2639083862305, + "msg": "Final processed STP snippet is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.84197425842285, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.696846008300781e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0006840229034423828, + "time_finished": "2019-12-30 18:01:07,747", + "time_start": "2019-12-30 18:01:07,746" + }, + "_G40UUH5DEemxr4bbKXhxkg": { + "args": null, + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.743666, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 34, + "message": "_G40UUH5DEemxr4bbKXhxkg", + "module": "__init__", + "moduleLogger": [], + "msecs": 743.6659336090088, + "msg": "_G40UUH5DEemxr4bbKXhxkg", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.24399948120117, + "testcaseLogger": [ + { + "args": [ + "':testframe: for csp'" + ], + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.743728, + "exc_info": null, + "exc_text": null, + "filename": "test_csp.py", + "funcName": "build_frame_chk_error", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 23, + "message": "Creating testframe for \"':testframe: for csp'\"", + "module": "test_csp", + "moduleLogger": [], + "msecs": 743.7279224395752, + "msg": "Creating testframe for \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_csp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.30598831176758, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.743878, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "CSP-Frame is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "CSP-Frame", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.743794, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (CSP-Frame): ()", + "module": "test", + "msecs": 743.7939643859863, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.37203025817871, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "CSP-Frame", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.743834, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (CSP-Frame): result = ()", + "module": "test", + "msecs": 743.8340187072754, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.41208457946777, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 743.8778877258301, + "msg": "CSP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.45595359802246, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.38690185546875e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.00021195411682128906, + "time_finished": "2019-12-30 18:01:07,743", + "time_start": "2019-12-30 18:01:07,743" + }, + "_NpOWgI9tEemg3cv-3xZ25Q": { + "args": null, + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747365, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 43, + "message": "_NpOWgI9tEemg3cv-3xZ25Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 747.3649978637695, + "msg": "_NpOWgI9tEemg3cv-3xZ25Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.943063735961914, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.74743, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_wrong_data", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 53, + "message": "Processing wrong data (list)", + "module": "test_stp", + "moduleLogger": [], + "msecs": 747.4300861358643, + "msg": "Processing wrong data (list)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.00815200805664, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747571, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Wrong data exception is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.74749, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Wrong data exception): ()", + "module": "test", + "msecs": 747.4899291992188, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.06799507141113, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.74753, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Wrong data exception): result = ()", + "module": "test", + "msecs": 747.5299835205078, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.108049392700195, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 747.5709915161133, + "msg": "Wrong data exception is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.149057388305664, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.100799560546875e-05 + }, + { + "args": [ + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747706, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer still empty is correct (Content '' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer still empty", + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747627, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer still empty): '' ()", + "module": "test", + "msecs": 747.6270198822021, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.20508575439453, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer still empty", + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747668, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer still empty): result = '' ()", + "module": "test", + "msecs": 747.6680278778076, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.24609375, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 747.7059364318848, + "msg": "Buffer still empty is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.28400230407715, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.790855407714844e-05 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.74776, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_wrong_data", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 63, + "message": "Processing wrong data (int)", + "module": "test_stp", + "moduleLogger": [], + "msecs": 747.7600574493408, + "msg": "Processing wrong data (int)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.3381233215332, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747903, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Wrong data exception is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.74782, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Wrong data exception): ()", + "module": "test", + "msecs": 747.8199005126953, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.397966384887695, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747862, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Wrong data exception): result = ()", + "module": "test", + "msecs": 747.8621006011963, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.44016647338867, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 747.9031085968018, + "msg": "Wrong data exception is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.48117446899414, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.100799560546875e-05 + }, + { + "args": [ + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748039, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer still empty is correct (Content '' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer still empty", + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,747", + "created": 1577725267.747962, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer still empty): '' ()", + "module": "test", + "msecs": 747.9619979858398, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.54006385803223, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer still empty", + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748001, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer still empty): result = '' ()", + "module": "test", + "msecs": 748.0010986328125, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.57916450500488, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 748.0390071868896, + "msg": "Buffer still empty is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.61707305908203, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.790855407714844e-05 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748096, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_wrong_data", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 84, + "message": "Processing wrong data (unicode)", + "module": "test_stp", + "moduleLogger": [], + "msecs": 748.0959892272949, + "msg": "Processing wrong data (unicode)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.674055099487305, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748237, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Wrong data exception is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.74816, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Wrong data exception): ()", + "module": "test", + "msecs": 748.1598854064941, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.73795127868652, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748198, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Wrong data exception): result = ()", + "module": "test", + "msecs": 748.1980323791504, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.77609825134277, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 748.236894607544, + "msg": "Wrong data exception is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.81496047973633, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.886222839355469e-05 + }, + { + "args": [ + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748369, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer still empty is correct (Content '' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer still empty", + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748294, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer still empty): '' ()", + "module": "test", + "msecs": 748.2941150665283, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.8721809387207, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer still empty", + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748331, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer still empty): result = '' ()", + "module": "test", + "msecs": 748.3310699462891, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.909135818481445, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 748.3689785003662, + "msg": "Buffer still empty is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 52.947044372558594, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.790855407714844e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0010039806365966797, + "time_finished": "2019-12-30 18:01:07,748", + "time_start": "2019-12-30 18:01:07,747" + }, + "_QjJiIIwZEem5qYOdmXl77A": { + "args": null, + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.743982, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 35, + "message": "_QjJiIIwZEem5qYOdmXl77A", + "module": "__init__", + "moduleLogger": [], + "msecs": 743.9820766448975, + "msg": "_QjJiIIwZEem5qYOdmXl77A", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.560142517089844, + "testcaseLogger": [ + { + "args": [ + "':testframe: for csp\\n'" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.74418, + "exc_info": null, + "exc_text": null, + "filename": "test_csp.py", + "funcName": "process_frame_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 36, + "message": "Processing testframe: \"':testframe: for csp\\n'\" in two snippets", + "module": "test_csp", + "moduleLogger": [ + { + "args": [ + "CSP:", + "(10): 3a 74 65 73 74 66 72 61 6d 65" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.74407, + "exc_info": null, + "exc_text": null, + "filename": "csp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 65, + "message": "CSP: Leaving data in buffer (to be processed next time): (10): 3a 74 65 73 74 66 72 61 6d 65", + "module": "csp", + "msecs": 744.0700531005859, + "msg": "%s Leaving data in buffer (to be processed next time): %s", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/csp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.64811897277832, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "CSP:", + "(19): 3a 74 65 73 74 66 72 61 6d 65 3a 20 66 6f 72 20 63 73 70" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744141, + "exc_info": null, + "exc_text": null, + "filename": "csp.py", + "funcName": "process", + "levelname": "INFO", + "levelno": 20, + "lineno": 67, + "message": "CSP: message identified - (19): 3a 74 65 73 74 66 72 61 6d 65 3a 20 66 6f 72 20 63 73 70", + "module": "csp", + "msecs": 744.1411018371582, + "msg": "%s message identified - %s", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/csp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.719167709350586, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 744.1799640655518, + "msg": "Processing testframe: \"%s\" in two snippets", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_csp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.75802993774414, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.886222839355469e-05 + }, + { + "args": [ + "[]", + "" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744333, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "First processed CSP-Snippet is correct (Content [] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "First processed CSP-Snippet", + "[ ]", + "" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744245, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (First processed CSP-Snippet): [ ] ()", + "module": "test", + "msecs": 744.2450523376465, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.82311820983887, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "First processed CSP-Snippet", + "[ ]", + "" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744285, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (First processed CSP-Snippet): result = [ ] ()", + "module": "test", + "msecs": 744.2851066589355, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.86317253112793, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 744.333028793335, + "msg": "First processed CSP-Snippet is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.911094665527344, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.792213439941406e-05 + }, + { + "args": [ + "[':testframe: for csp']", + "" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744482, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Final processed CSP-Frame is correct (Content [':testframe: for csp'] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Final processed CSP-Frame", + "[ ':testframe: for csp' ]", + "" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744396, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Final processed CSP-Frame): [ ':testframe: for csp' ] ()", + "module": "test", + "msecs": 744.3959712982178, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.974037170410156, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Final processed CSP-Frame", + "[ ':testframe: for csp' ]", + "" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744435, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Final processed CSP-Frame): result = [ ':testframe: for csp' ] ()", + "module": "test", + "msecs": 744.4350719451904, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.01313781738281, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 744.4820404052734, + "msg": "Final processed CSP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.06010627746582, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.696846008300781e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0004999637603759766, + "time_finished": "2019-12-30 18:01:07,744", + "time_start": "2019-12-30 18:01:07,743" + }, + "_XzMFcHYZEem_kd-7nxt1sg": { + "args": null, + "asctime": "2019-12-30 18:01:07,740", + "created": 1577725267.740599, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 23, + "message": "_XzMFcHYZEem_kd-7nxt1sg", + "module": "__init__", + "moduleLogger": [], + "msecs": 740.5989170074463, + "msg": "_XzMFcHYZEem_kd-7nxt1sg", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 45.17698287963867, + "testcaseLogger": [ + { + "args": [ + "de ad be ef", + "" + ], + "asctime": "2019-12-30 18:01:07,740", + "created": 1577725267.740789, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 27, + "message": "Checking test pattern de ad be ef ().", + "module": "test_hexlify", + "moduleLogger": [], + "msecs": 740.7889366149902, + "msg": "Checking test pattern %s (%s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 45.36700248718262, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741184, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 47, + "message": "Pattern included all relevant information in the correct order.", + "module": "test_hexlify", + "moduleLogger": [ + { + "args": [ + "(4): de ad be ef" + ], + "asctime": "2019-12-30 18:01:07,740", + "created": 1577725267.740866, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 29, + "message": "Return value of hexlify is (4): de ad be ef", + "module": "test_hexlify", + "msecs": 740.86594581604, + "msg": "Return value of hexlify is %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 45.44401168823242, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "(4): DE AD BE EF" + ], + "asctime": "2019-12-30 18:01:07,740", + "created": 1577725267.74098, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 31, + "message": "Using upper string for comparison: (4): DE AD BE EF", + "module": "test_hexlify", + "msecs": 740.9799098968506, + "msg": "Using upper string for comparison: %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 45.55797576904297, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "DE", + "(4): DE AD BE EF" + ], + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741031, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 41, + "message": "\"DE\" found in \"(4): DE AD BE EF\"... Reducing pattern", + "module": "test_hexlify", + "msecs": 741.0309314727783, + "msg": "\"%s\" found in \"%s\"... Reducing pattern", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 45.6089973449707, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "AD", + "AD BE EF" + ], + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741072, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 41, + "message": "\"AD\" found in \"AD BE EF\"... Reducing pattern", + "module": "test_hexlify", + "msecs": 741.0719394683838, + "msg": "\"%s\" found in \"%s\"... Reducing pattern", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 45.65000534057617, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "BE", + "BE EF" + ], + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741109, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 41, + "message": "\"BE\" found in \"BE EF\"... Reducing pattern", + "module": "test_hexlify", + "msecs": 741.1088943481445, + "msg": "\"%s\" found in \"%s\"... Reducing pattern", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 45.686960220336914, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "EF", + "EF" + ], + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741148, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 41, + "message": "\"EF\" found in \"EF\"... Reducing pattern", + "module": "test_hexlify", + "msecs": 741.1479949951172, + "msg": "\"%s\" found in \"%s\"... Reducing pattern", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 45.72606086730957, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 741.1839962005615, + "msg": "Pattern included all relevant information in the correct order.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 45.762062072753906, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.600120544433594e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0005850791931152344, + "time_finished": "2019-12-30 18:01:07,741", + "time_start": "2019-12-30 18:01:07,740" + }, + "_Y_h3gH5CEemxr4bbKXhxkg": { + "args": null, + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.743354, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 33, + "message": "_Y_h3gH5CEemxr4bbKXhxkg", + "module": "__init__", + "moduleLogger": [], + "msecs": 743.354082107544, + "msg": "_Y_h3gH5CEemxr4bbKXhxkg", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 47.93214797973633, + "testcaseLogger": [ + { + "args": [ + "':testframe: for csp'" + ], + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.74342, + "exc_info": null, + "exc_text": null, + "filename": "test_csp.py", + "funcName": "build_frame_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 17, + "message": "Creating testframe for \"':testframe: for csp'\"", + "module": "test_csp", + "moduleLogger": [], + "msecs": 743.419885635376, + "msg": "Creating testframe for \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_csp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 47.99795150756836, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "':testframe: for csp\\n'", + "" + ], + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.743566, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "CSP-Frame is correct (Content ':testframe: for csp\\n' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "CSP-Frame", + "':testframe: for csp\\n'", + "" + ], + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.743486, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (CSP-Frame): ':testframe: for csp\\n' ()", + "module": "test", + "msecs": 743.4859275817871, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.06399345397949, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "CSP-Frame", + "':testframe: for csp\\n'", + "" + ], + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.743525, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (CSP-Frame): result = ':testframe: for csp\\n' ()", + "module": "test", + "msecs": 743.5250282287598, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.10309410095215, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 743.5660362243652, + "msg": "CSP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 48.14410209655762, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.100799560546875e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.00021195411682128906, + "time_finished": "2019-12-30 18:01:07,743", + "time_start": "2019-12-30 18:01:07,743" + }, + "_ZhyRAI9OEemAMMFgxXT6lA": { + "args": null, + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744582, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 36, + "message": "_ZhyRAI9OEemAMMFgxXT6lA", + "module": "__init__", + "moduleLogger": [], + "msecs": 744.581937789917, + "msg": "_ZhyRAI9OEemAMMFgxXT6lA", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.160003662109375, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744645, + "exc_info": null, + "exc_text": null, + "filename": "test_csp.py", + "funcName": "process_wrong_data", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 44, + "message": "Processing wrong data (list)", + "module": "test_csp", + "moduleLogger": [], + "msecs": 744.6451187133789, + "msg": "Processing wrong data (list)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_csp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.22318458557129, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744791, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Wrong data exception is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744711, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Wrong data exception): ()", + "module": "test", + "msecs": 744.7109222412109, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.28898811340332, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744752, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Wrong data exception): result = ()", + "module": "test", + "msecs": 744.7519302368164, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.32999610900879, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 744.7910308837891, + "msg": "Wrong data exception is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.369096755981445, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.910064697265625e-05 + }, + { + "args": [ + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744925, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer still empty is correct (Content '' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer still empty", + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.74485, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer still empty): '' ()", + "module": "test", + "msecs": 744.8499202728271, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.42798614501953, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer still empty", + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744887, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer still empty): result = '' ()", + "module": "test", + "msecs": 744.887113571167, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.465179443359375, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 744.9250221252441, + "msg": "Buffer still empty is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.50308799743652, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.790855407714844e-05 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:07,744", + "created": 1577725267.744981, + "exc_info": null, + "exc_text": null, + "filename": "test_csp.py", + "funcName": "process_wrong_data", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 54, + "message": "Processing wrong data (int)", + "module": "test_csp", + "moduleLogger": [], + "msecs": 744.981050491333, + "msg": "Processing wrong data (int)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_csp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.55911636352539, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745121, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Wrong data exception is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745043, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Wrong data exception): ()", + "module": "test", + "msecs": 745.0430393218994, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.6211051940918, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745082, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Wrong data exception): result = ()", + "module": "test", + "msecs": 745.081901550293, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.65996742248535, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 745.1210021972656, + "msg": "Wrong data exception is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.69906806945801, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.910064697265625e-05 + }, + { + "args": [ + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745257, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer still empty is correct (Content '' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer still empty", + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745182, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer still empty): '' ()", + "module": "test", + "msecs": 745.1820373535156, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.76010322570801, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer still empty", + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.74522, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer still empty): result = '' ()", + "module": "test", + "msecs": 745.2199459075928, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.798011779785156, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 745.2569007873535, + "msg": "Buffer still empty is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.8349666595459, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.695487976074219e-05 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745313, + "exc_info": null, + "exc_text": null, + "filename": "test_csp.py", + "funcName": "process_wrong_data", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 75, + "message": "Processing wrong data (unicode)", + "module": "test_csp", + "moduleLogger": [], + "msecs": 745.3129291534424, + "msg": "Processing wrong data (unicode)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_csp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.890995025634766, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745483, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Wrong data exception is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745374, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Wrong data exception): ()", + "module": "test", + "msecs": 745.3739643096924, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.952030181884766, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745412, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Wrong data exception): result = ()", + "module": "test", + "msecs": 745.4121112823486, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 49.990177154541016, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 745.4829216003418, + "msg": "Wrong data exception is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.06098747253418, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 7.081031799316406e-05 + }, + { + "args": [ + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745624, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer still empty is correct (Content '' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer still empty", + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745546, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer still empty): '' ()", + "module": "test", + "msecs": 745.5461025238037, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.124168395996094, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer still empty", + "''", + "" + ], + "asctime": "2019-12-30 18:01:07,745", + "created": 1577725267.745585, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer still empty): result = '' ()", + "module": "test", + "msecs": 745.5849647521973, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.16303062438965, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 745.6240653991699, + "msg": "Buffer still empty is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.202131271362305, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.910064697265625e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0010421276092529297, + "time_finished": "2019-12-30 18:01:07,745", + "time_start": "2019-12-30 18:01:07,744" + }, + "_dpJzwCcUEeqsHsnJQYCN8Q": { + "args": null, + "asctime": "2019-12-30 18:01:07,751", + "created": 1577725267.751503, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 47, + "message": "_dpJzwCcUEeqsHsnJQYCN8Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 751.5029907226562, + "msg": "_dpJzwCcUEeqsHsnJQYCN8Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 56.08105659484863, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-30 18:01:07,752", + "created": 1577725267.752019, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_incorrect_end_frame_pattern", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 126, + "message": "Processing data with an insufficient end pattern.", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "': changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 751.629114151001, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 56.20718002319336, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:07,751", + "created": 1577725267.751676, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 751.676082611084, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 56.25414848327637, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,751", + "created": 1577725267.751742, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 751.741886138916, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 56.3199520111084, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 100 + ], + "asctime": "2019-12-30 18:01:07,751", + "created": 1577725267.751823, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "WARNING", + "levelno": 30, + "lineno": 137, + "message": "STP: data (64) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "module": "stp", + "msecs": 751.8229484558105, + "msg": "%s data (%02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 56.40101432800293, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(2): 74 65" + ], + "asctime": "2019-12-30 18:01:07,751", + "created": 1577725267.751935, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "__clear_buffer__", + "levelname": "WARNING", + "levelno": 30, + "lineno": 69, + "message": "STP: Chunking \"(2): 74 65\" from buffer", + "module": "stp", + "msecs": 751.9350051879883, + "msg": "%s Chunking \"%s\" from buffer", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 56.513071060180664, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 752.018928527832, + "msg": "Processing data with an insufficient end pattern.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 56.596994400024414, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 8.392333984375e-05 + }, + { + "args": [ + "[[]]", + "" + ], + "asctime": "2019-12-30 18:01:07,752", + "created": 1577725267.752314, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Return value list if processing data_sync and data again after start of frame is correct (Content [[]] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return value list if processing data_sync and data again after start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:07,752", + "created": 1577725267.752147, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return value list if processing data_sync and data again after start of frame): [ [ ] ] ()", + "module": "test", + "msecs": 752.1469593048096, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 56.72502517700195, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Return value list if processing data_sync and data again after start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:07,752", + "created": 1577725267.75222, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Return value list if processing data_sync and data again after start of frame): result = [ [ ] ] ()", + "module": "test", + "msecs": 752.2199153900146, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 56.79798126220703, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 752.3140907287598, + "msg": "Return value list if processing data_sync and data again after start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 56.89215660095215, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 9.417533874511719e-05 + }, + { + "args": [ + "0", + "" + ], + "asctime": "2019-12-30 18:01:07,752", + "created": 1577725267.752586, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after processing data_sync and data again after start of frame is correct (Content 0 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after processing data_sync and data again after start of frame", + "0", + "" + ], + "asctime": "2019-12-30 18:01:07,752", + "created": 1577725267.752433, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after processing data_sync and data again after start of frame): 0 ()", + "module": "test", + "msecs": 752.4330615997314, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 57.01112747192383, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "State after processing data_sync and data again after start of frame", + "0", + "" + ], + "asctime": "2019-12-30 18:01:07,752", + "created": 1577725267.752504, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after processing data_sync and data again after start of frame): result = 0 ()", + "module": "test", + "msecs": 752.5041103363037, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 57.082176208496094, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 752.5858879089355, + "msg": "State after processing data_sync and data again after start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 57.16395378112793, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 8.177757263183594e-05 + }, + { + "args": [ + "0", + "" + ], + "asctime": "2019-12-30 18:01:07,752", + "created": 1577725267.752902, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer size after processing data with insufficient end pattern is correct (Content 0 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer size after processing data with insufficient end pattern", + "0", + "" + ], + "asctime": "2019-12-30 18:01:07,752", + "created": 1577725267.752713, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer size after processing data with insufficient end pattern): 0 ()", + "module": "test", + "msecs": 752.7129650115967, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 57.29103088378906, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer size after processing data with insufficient end pattern", + "0", + "" + ], + "asctime": "2019-12-30 18:01:07,752", + "created": 1577725267.752786, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer size after processing data with insufficient end pattern): result = 0 ()", + "module": "test", + "msecs": 752.7859210968018, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 57.36398696899414, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 752.9020309448242, + "msg": "Buffer size after processing data with insufficient end pattern is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 57.4800968170166, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.00011610984802246094 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:07,754", + "created": 1577725267.754453, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_incorrect_end_frame_pattern", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 138, + "message": "Processing data with an insufficient end pattern (start pattern instead of end pattern).", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "': changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 753.64089012146, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 58.218955993652344, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:07,753", + "created": 1577725267.753805, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 753.8049221038818, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 58.38298797607422, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,753", + "created": 1577725267.753966, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 753.9660930633545, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 58.544158935546875, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:07,754", + "created": 1577725267.754101, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "WARNING", + "levelno": 30, + "lineno": 119, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 754.101037979126, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 58.67910385131836, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(2): 74 65" + ], + "asctime": "2019-12-30 18:01:07,754", + "created": 1577725267.754256, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "__clear_buffer__", + "levelname": "WARNING", + "levelno": 30, + "lineno": 69, + "message": "STP: Chunking \"(2): 74 65\" from buffer", + "module": "stp", + "msecs": 754.256010055542, + "msg": "%s Chunking \"%s\" from buffer", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 58.834075927734375, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 754.4529438018799, + "msg": "Processing data with an insufficient end pattern (start pattern instead of end pattern).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 59.031009674072266, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.00019693374633789062 + }, + { + "args": [ + "[[]]", + "" + ], + "asctime": "2019-12-30 18:01:07,754", + "created": 1577725267.75497, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Return value list if processing 2nd start of frame is correct (Content [[]] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return value list if processing 2nd start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:07,754", + "created": 1577725267.754699, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return value list if processing 2nd start of frame): [ [ ] ] ()", + "module": "test", + "msecs": 754.6989917755127, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 59.27705764770508, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Return value list if processing 2nd start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:07,754", + "created": 1577725267.754765, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Return value list if processing 2nd start of frame): result = [ [ ] ] ()", + "module": "test", + "msecs": 754.7650337219238, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 59.34309959411621, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 754.9700736999512, + "msg": "Return value list if processing 2nd start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 59.548139572143555, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.00020503997802734375 + }, + { + "args": [ + "3", + "" + ], + "asctime": "2019-12-30 18:01:07,755", + "created": 1577725267.7552, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after processing 2nd start of frame is correct (Content 3 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after processing 2nd start of frame", + "3", + "" + ], + "asctime": "2019-12-30 18:01:07,755", + "created": 1577725267.755083, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after processing 2nd start of frame): 3 ()", + "module": "test", + "msecs": 755.0830841064453, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 59.661149978637695, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "State after processing 2nd start of frame", + "3", + "" + ], + "asctime": "2019-12-30 18:01:07,755", + "created": 1577725267.755134, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after processing 2nd start of frame): result = 3 ()", + "module": "test", + "msecs": 755.134105682373, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 59.71217155456543, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 755.1999092102051, + "msg": "State after processing 2nd start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 59.77797508239746, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 6.580352783203125e-05 + }, + { + "args": [ + "0", + "" + ], + "asctime": "2019-12-30 18:01:07,755", + "created": 1577725267.755461, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer size after processing 2nd start of frame is correct (Content 0 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer size after processing 2nd start of frame", + "0", + "" + ], + "asctime": "2019-12-30 18:01:07,755", + "created": 1577725267.755325, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer size after processing 2nd start of frame): 0 ()", + "module": "test", + "msecs": 755.3250789642334, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 59.90314483642578, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer size after processing 2nd start of frame", + "0", + "" + ], + "asctime": "2019-12-30 18:01:07,755", + "created": 1577725267.755387, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer size after processing 2nd start of frame): result = 0 ()", + "module": "test", + "msecs": 755.3870677947998, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 59.96513366699219, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 755.4609775543213, + "msg": "Buffer size after processing 2nd start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 60.03904342651367, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 7.390975952148438e-05 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:07,756", + "created": 1577725267.756084, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_incorrect_end_frame_pattern", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 150, + "message": "Processing data with an insufficient end pattern (two times sync instead of end pattern).", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "': changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 755.6920051574707, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 60.270071029663086, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:07,755", + "created": 1577725267.755772, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 755.7721138000488, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 60.35017967224121, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,755", + "created": 1577725267.755843, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 755.842924118042, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 60.420989990234375, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,755", + "created": 1577725267.755915, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "WARNING", + "levelno": 30, + "lineno": 133, + "message": "STP: second data sync (3a) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 755.9149265289307, + "msg": "%s second data sync (%02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 60.49299240112305, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(2): 74 65" + ], + "asctime": "2019-12-30 18:01:07,755", + "created": 1577725267.755997, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "__clear_buffer__", + "levelname": "WARNING", + "levelno": 30, + "lineno": 69, + "message": "STP: Chunking \"(2): 74 65\" from buffer", + "module": "stp", + "msecs": 755.9969425201416, + "msg": "%s Chunking \"%s\" from buffer", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 60.575008392333984, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 756.0839653015137, + "msg": "Processing data with an insufficient end pattern (two times sync instead of end pattern).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 60.662031173706055, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 8.702278137207031e-05 + }, + { + "args": [ + "[[]]", + "" + ], + "asctime": "2019-12-30 18:01:07,756", + "created": 1577725267.75634, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Return value list if processing data_sync twice after start of frame is correct (Content [[]] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return value list if processing data_sync twice after start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:07,756", + "created": 1577725267.756199, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return value list if processing data_sync twice after start of frame): [ [ ] ] ()", + "module": "test", + "msecs": 756.1988830566406, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 60.77694892883301, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Return value list if processing data_sync twice after start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:07,756", + "created": 1577725267.756262, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Return value list if processing data_sync twice after start of frame): result = [ [ ] ] ()", + "module": "test", + "msecs": 756.2620639801025, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 60.84012985229492, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 756.3400268554688, + "msg": "Return value list if processing data_sync twice after start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 60.91809272766113, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 7.796287536621094e-05 + }, + { + "args": [ + "1", + "" + ], + "asctime": "2019-12-30 18:01:07,756", + "created": 1577725267.756621, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after processing data_sync twice after start of frame is correct (Content 1 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after processing data_sync twice after start of frame", + "1", + "" + ], + "asctime": "2019-12-30 18:01:07,756", + "created": 1577725267.756492, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after processing data_sync twice after start of frame): 1 ()", + "module": "test", + "msecs": 756.4918994903564, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 61.06996536254883, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "State after processing data_sync twice after start of frame", + "1", + "" + ], + "asctime": "2019-12-30 18:01:07,756", + "created": 1577725267.756555, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after processing data_sync twice after start of frame): result = 1 ()", + "module": "test", + "msecs": 756.5550804138184, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 61.13314628601074, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 756.6208839416504, + "msg": "State after processing data_sync twice after start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 61.19894981384277, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 6.580352783203125e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.005117893218994141, + "time_finished": "2019-12-30 18:01:07,756", + "time_start": "2019-12-30 18:01:07,751" + }, + "_fp-i0Hu8Eemborg4LxXa3A": { + "args": null, + "asctime": "2019-12-30 18:01:07,742", + "created": 1577725267.74278, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 29, + "message": "_fp-i0Hu8Eemborg4LxXa3A", + "module": "__init__", + "moduleLogger": [], + "msecs": 742.7799701690674, + "msg": "_fp-i0Hu8Eemborg4LxXa3A", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 47.358036041259766, + "testcaseLogger": [ + { + "args": [ + "(26): 1f 8b 08 00 34 e0 04 5d 02 ff 63 60 40 01 ff 51 01 00 2d 8a 7d de 1e 00 00 00" + ], + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.74303, + "exc_info": null, + "exc_text": null, + "filename": "test_gzip.py", + "funcName": "gzip_extract_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 23, + "message": "Extracting stream: (26): 1f 8b 08 00 34 e0 04 5d 02 ff 63 60 40 01 ff 51 01 00 2d 8a 7d de 1e 00 00 00", + "module": "test_gzip", + "moduleLogger": [ + { + "args": [ + 0.8666666666666667, + 4.792213439941406e-05 + ], + "asctime": "2019-12-30 18:01:07,742", + "created": 1577725267.742947, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "gzip_extract", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 123, + "message": "GZIP: Finished to extract a string (compression_rate=0.867, consumed_time=0.0s).", + "module": "__init__", + "msecs": 742.9471015930176, + "msg": "GZIP: Finished to extract a string (compression_rate=%.3f, consumed_time=%.1fs).", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 47.52516746520996, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 743.0300712585449, + "msg": "Extracting stream: %s", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_gzip.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 47.608137130737305, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 8.296966552734375e-05 + }, + { + "args": [ + "'(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff'", + "" + ], + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.743251, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Extracted data is correct (Content '(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Extracted data", + "'(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff'", + "" + ], + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.743167, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Extracted data): '(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff' ()", + "module": "test", + "msecs": 743.1669235229492, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 47.7449893951416, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Extracted data", + "'(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff'", + "" + ], + "asctime": "2019-12-30 18:01:07,743", + "created": 1577725267.74321, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Extracted data): result = '(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff' ()", + "module": "test", + "msecs": 743.2100772857666, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 47.788143157958984, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 743.2510852813721, + "msg": "Extracted data is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 47.82915115356445, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.100799560546875e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0004711151123046875, + "time_finished": "2019-12-30 18:01:07,743", + "time_start": "2019-12-30 18:01:07,742" + }, + "_n3BdUCcREeqsHsnJQYCN8Q": { + "args": null, + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749883, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 46, + "message": "_n3BdUCcREeqsHsnJQYCN8Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 749.8829364776611, + "msg": "_n3BdUCcREeqsHsnJQYCN8Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.461002349853516, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-30 18:01:07,750", + "created": 1577725267.750093, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_no_clear_buffer_after_first_data_sync", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "Processing data with an insufficient start pattern.", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "':1'" + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749948, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_no_clear_buffer_after_first_data_sync", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 100, + "message": "Sending ':1' to stp.", + "module": "test_stp", + "msecs": 749.9480247497559, + "msg": "Sending %s to stp.", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.52609062194824, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749999, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 98, + "message": "STP: data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 749.9990463256836, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.57711219787598, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 49 + ], + "asctime": "2019-12-30 18:01:07,750", + "created": 1577725267.750046, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "WARNING", + "levelno": 30, + "lineno": 108, + "message": "STP: no start pattern (3a 31) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_IDLE", + "module": "stp", + "msecs": 750.0460147857666, + "msg": "%s no start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_IDLE", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.624080657958984, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 750.0929832458496, + "msg": "Processing data with an insufficient start pattern.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.67104911804199, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.696846008300781e-05 + }, + { + "args": [ + "[[]]", + "" + ], + "asctime": "2019-12-30 18:01:07,750", + "created": 1577725267.75036, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Return value list if processing incorrect start of frame is correct (Content [[]] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return value list if processing incorrect start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:07,750", + "created": 1577725267.750198, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return value list if processing incorrect start of frame): [ [ ] ] ()", + "module": "test", + "msecs": 750.1978874206543, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.77595329284668, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Return value list if processing incorrect start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:07,750", + "created": 1577725267.750271, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Return value list if processing incorrect start of frame): result = [ [ ] ] ()", + "module": "test", + "msecs": 750.2710819244385, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.84914779663086, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 750.3600120544434, + "msg": "Return value list if processing incorrect start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 54.93807792663574, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 8.893013000488281e-05 + }, + { + "args": [ + "0", + "" + ], + "asctime": "2019-12-30 18:01:07,750", + "created": 1577725267.750589, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after processing incorrect start of frame is correct (Content 0 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after processing incorrect start of frame", + "0", + "" + ], + "asctime": "2019-12-30 18:01:07,750", + "created": 1577725267.750457, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after processing incorrect start of frame): 0 ()", + "module": "test", + "msecs": 750.4570484161377, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.03511428833008, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "State after processing incorrect start of frame", + "0", + "" + ], + "asctime": "2019-12-30 18:01:07,750", + "created": 1577725267.750523, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after processing incorrect start of frame): result = 0 ()", + "module": "test", + "msecs": 750.5230903625488, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.10115623474121, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 750.5888938903809, + "msg": "State after processing incorrect start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.16695976257324, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 6.580352783203125e-05 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:07,750", + "created": 1577725267.750938, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_no_clear_buffer_after_first_data_sync", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 113, + "message": "Processing data with an insufficient start pattern (two times sync).", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "'::'" + ], + "asctime": "2019-12-30 18:01:07,750", + "created": 1577725267.750686, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_no_clear_buffer_after_first_data_sync", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 110, + "message": "Sending '::' to stp.", + "module": "test_stp", + "msecs": 750.6859302520752, + "msg": "Sending %s to stp.", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.26399612426758, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,750", + "created": 1577725267.750765, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 98, + "message": "STP: data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 750.7650852203369, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.3431510925293, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,750", + "created": 1577725267.750867, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "WARNING", + "levelno": 30, + "lineno": 110, + "message": "STP: 2nd data sync (3a) received => keep state", + "module": "stp", + "msecs": 750.8668899536133, + "msg": "%s 2nd data sync (%02x) received => keep state", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.444955825805664, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 750.9379386901855, + "msg": "Processing data with an insufficient start pattern (two times sync).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.51600456237793, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 7.104873657226562e-05 + }, + { + "args": [ + "[[]]", + "" + ], + "asctime": "2019-12-30 18:01:07,751", + "created": 1577725267.751227, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Return value list if processing data_sync twice is correct (Content [[]] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return value list if processing data_sync twice", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:07,751", + "created": 1577725267.751052, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return value list if processing data_sync twice): [ [ ] ] ()", + "module": "test", + "msecs": 751.0519027709961, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.62996864318848, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Return value list if processing data_sync twice", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:07,751", + "created": 1577725267.751126, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Return value list if processing data_sync twice): result = [ [ ] ] ()", + "module": "test", + "msecs": 751.1260509490967, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.70411682128906, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 751.2269020080566, + "msg": "Return value list if processing data_sync twice is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.80496788024902, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.00010085105895996094 + }, + { + "args": [ + "1", + "" + ], + "asctime": "2019-12-30 18:01:07,751", + "created": 1577725267.751385, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after processing data_sync twice is correct (Content 1 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after processing data_sync twice", + "1", + "" + ], + "asctime": "2019-12-30 18:01:07,751", + "created": 1577725267.751301, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after processing data_sync twice): 1 ()", + "module": "test", + "msecs": 751.3010501861572, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.87911605834961, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "State after processing data_sync twice", + "1", + "" + ], + "asctime": "2019-12-30 18:01:07,751", + "created": 1577725267.751343, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after processing data_sync twice): result = 1 ()", + "module": "test", + "msecs": 751.3430118560791, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.921077728271484, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 751.384973526001, + "msg": "State after processing data_sync twice is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 55.96303939819336, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.1961669921875e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0015020370483398438, + "time_finished": "2019-12-30 18:01:07,751", + "time_start": "2019-12-30 18:01:07,749" + }, + "_pavPUHsZEemK6PYOxF9rHw": { + "args": null, + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741294, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 24, + "message": "_pavPUHsZEemK6PYOxF9rHw", + "module": "__init__", + "moduleLogger": [], + "msecs": 741.2939071655273, + "msg": "_pavPUHsZEemK6PYOxF9rHw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 45.87197303771973, + "testcaseLogger": [ + { + "args": [ + 4 + ], + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741356, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "length_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 15, + "message": "Checking test pattern with length 4.", + "module": "test_hexlify", + "moduleLogger": [], + "msecs": 741.3558959960938, + "msg": "Checking test pattern with length %d.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 45.93396186828613, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "(4)", + "(4): de ad be ef", + 0 + ], + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741462, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "length_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 23, + "message": "\"(4)\" is in \"(4): de ad be ef\" at position 0", + "module": "test_hexlify", + "moduleLogger": [], + "msecs": 741.461992263794, + "msg": "\"%s\" is in \"%s\" at position %d", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 46.04005813598633, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.00016808509826660156, + "time_finished": "2019-12-30 18:01:07,741", + "time_start": "2019-12-30 18:01:07,741" + }, + "_rhV88Hu9Eemborg4LxXa3A": { + "args": null, + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741566, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 25, + "message": "_rhV88Hu9Eemborg4LxXa3A", + "module": "__init__", + "moduleLogger": [], + "msecs": 741.5659427642822, + "msg": "_rhV88Hu9Eemborg4LxXa3A", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 46.14400863647461, + "testcaseLogger": [ + { + "args": [ + 4 + ], + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741629, + "exc_info": null, + "exc_text": null, + "filename": "test_linefeed_filter.py", + "funcName": "returnvalue_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 11, + "message": "Checking test pattern with length 4.", + "module": "test_linefeed_filter", + "moduleLogger": [], + "msecs": 741.628885269165, + "msg": "Checking test pattern with length %d.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_linefeed_filter.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 46.20695114135742, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "'test\\\\r\\\\n123\\\\r\\\\n'", + "" + ], + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.74179, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of linefeed_filter is correct (Content 'test\\\\r\\\\n123\\\\r\\\\n' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of linefeed_filter", + "'test\\\\r\\\\n123\\\\r\\\\n'", + "" + ], + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741702, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of linefeed_filter): 'test\\\\r\\\\n123\\\\r\\\\n' ()", + "module": "test", + "msecs": 741.7020797729492, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 46.2801456451416, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of linefeed_filter", + "'test\\\\r\\\\n123\\\\r\\\\n'", + "" + ], + "asctime": "2019-12-30 18:01:07,741", + "created": 1577725267.741744, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of linefeed_filter): result = 'test\\\\r\\\\n123\\\\r\\\\n' ()", + "module": "test", + "msecs": 741.7440414428711, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 46.32210731506348, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 741.7900562286377, + "msg": "Returnvalue of linefeed_filter is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 46.36812210083008, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.601478576660156e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.00022411346435546875, + "time_finished": "2019-12-30 18:01:07,741", + "time_start": "2019-12-30 18:01:07,741" + }, + "_wMotUCclEeqsHsnJQYCN8Q": { + "args": null, + "asctime": "2019-12-30 18:01:07,756", + "created": 1577725267.756836, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 48, + "message": "_wMotUCclEeqsHsnJQYCN8Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 756.8359375, + "msg": "_wMotUCclEeqsHsnJQYCN8Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 61.41400337219238, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.757593, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_after_state_corruption", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 167, + "message": "Corrupting stp state and processing data.", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "': changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 757.033109664917, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 61.611175537109375, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.757096, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 757.0960521697998, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 61.67411804199219, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "255" + ], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.757169, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_after_state_corruption", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 163, + "message": "Setting state of stp to 255.", + "module": "test_stp", + "msecs": 757.1690082550049, + "msg": "Setting state of stp to %s.", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 61.747074127197266, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "': adding value (3a) back to data again and changing state -> STP_STATE_IDLE", + "module": "stp", + "msecs": 757.3230266571045, + "msg": "%s unknown state (%s) => adding value (%02x) back to data again and changing state -> STP_STATE_IDLE", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 61.901092529296875, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(2): 74 65" + ], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.757398, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "__clear_buffer__", + "levelname": "WARNING", + "levelno": 30, + "lineno": 69, + "message": "STP: Chunking \"(2): 74 65\" from buffer", + "module": "stp", + "msecs": 757.3978900909424, + "msg": "%s Chunking \"%s\" from buffer", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 61.975955963134766, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.75746, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 98, + "message": "STP: data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 757.4601173400879, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 62.03818321228027, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.757525, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 757.5249671936035, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 62.1030330657959, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 757.5929164886475, + "msg": "Corrupting stp state and processing data.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 62.170982360839844, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 6.794929504394531e-05 + }, + { + "args": [ + "[[]]", + "" + ], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.757778, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Return value list if processing start of a frame after state had been corrupted is correct (Content [[]] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return value list if processing start of a frame after state had been corrupted", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.757679, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return value list if processing start of a frame after state had been corrupted): [ [ ] ] ()", + "module": "test", + "msecs": 757.6789855957031, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 62.25705146789551, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Return value list if processing start of a frame after state had been corrupted", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.757722, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Return value list if processing start of a frame after state had been corrupted): result = [ [ ] ] ()", + "module": "test", + "msecs": 757.7219009399414, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 62.29996681213379, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 757.7779293060303, + "msg": "Return value list if processing start of a frame after state had been corrupted is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 62.355995178222656, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 5.602836608886719e-05 + }, + { + "args": [ + "3", + "" + ], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.757925, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after processing start of a frame after state had been corrupted is correct (Content 3 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after processing start of a frame after state had been corrupted", + "3", + "" + ], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.757844, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after processing start of a frame after state had been corrupted): 3 ()", + "module": "test", + "msecs": 757.8439712524414, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 62.42203712463379, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "State after processing start of a frame after state had been corrupted", + "3", + "" + ], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.757883, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after processing start of a frame after state had been corrupted): result = 3 ()", + "module": "test", + "msecs": 757.8830718994141, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 62.461137771606445, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 757.9250335693359, + "msg": "State after processing start of a frame after state had been corrupted is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 62.50309944152832, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.1961669921875e-05 + }, + { + "args": [ + "2", + "" + ], + "asctime": "2019-12-30 18:01:07,758", + "created": 1577725267.758061, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer size after corrupting stp state is correct (Content 2 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer size after corrupting stp state", + "2", + "" + ], + "asctime": "2019-12-30 18:01:07,757", + "created": 1577725267.757984, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer size after corrupting stp state): 2 ()", + "module": "test", + "msecs": 757.983922958374, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 62.561988830566406, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer size after corrupting stp state", + "2", + "" + ], + "asctime": "2019-12-30 18:01:07,758", + "created": 1577725267.758022, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer size after corrupting stp state): result = 2 ()", + "module": "test", + "msecs": 758.0220699310303, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 62.600135803222656, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 758.0609321594238, + "msg": "Buffer size after corrupting stp state is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 62.63899803161621, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.886222839355469e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0012249946594238281, + "time_finished": "2019-12-30 18:01:07,758", + "time_start": "2019-12-30 18:01:07,756" + }, + "_xOCgkI9yEemg3cv-3xZ25Q": { + "args": null, + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748486, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 44, + "message": "_xOCgkI9yEemg3cv-3xZ25Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 748.4860420227051, + "msg": "_xOCgkI9yEemg3cv-3xZ25Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.06410789489746, + "testcaseLogger": [ + { + "args": [ + "'::>'" + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748985, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_frame_pattern_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 39, + "message": "Processing testframe: \"'::>'\"", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.74856, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 98, + "message": "STP: data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 748.5599517822266, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.138017654418945, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748603, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 748.603105545044, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.18117141723633, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748673, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 748.6729621887207, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.251028060913086, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 61 + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748714, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 129, + "message": "STP: store sync pattern (3a 3d) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 748.7139701843262, + "msg": "%s store sync pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.292036056518555, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748761, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 748.7609386444092, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.33900451660156, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 61 + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748801, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 129, + "message": "STP: store sync pattern (3a 3d) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 748.8009929656982, + "msg": "%s store sync pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.379058837890625, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748841, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 748.8410472869873, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.41911315917969, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 62 + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748883, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 124, + "message": "STP: end pattern (3a 3e) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "module": "stp", + "msecs": 748.8830089569092, + "msg": "%s end pattern (%02x %02x) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.46107482910156, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(21): 74 65 73 74 66 72 61 6d 65 20 66 6f 72 20 3a 3c 73 74 70 3a 3e" + ], + "asctime": "2019-12-30 18:01:07,748", + "created": 1577725267.748947, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "INFO", + "levelno": 20, + "lineno": 145, + "message": "STP: message identified - (21): 74 65 73 74 66 72 61 6d 65 20 66 6f 72 20 3a 3c 73 74 70 3a 3e", + "module": "stp", + "msecs": 748.9469051361084, + "msg": "%s message identified - %s", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.52497100830078, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 748.9850521087646, + "msg": "Processing testframe: \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.56311798095703, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 3.814697265625e-05 + }, + { + "args": [ + "['testframe for :']", + "" + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.749147, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Processed STP-Frame is correct (Content ['testframe for :'] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Processed STP-Frame", + "[ 'testframe for :' ]", + "" + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.74906, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Processed STP-Frame): [ 'testframe for :' ] ()", + "module": "test", + "msecs": 749.0599155426025, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.63798141479492, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "Processed STP-Frame", + "[ 'testframe for :' ]", + "" + ], + "asctime": "2019-12-30 18:01:07,749", + "created": 1577725267.7491, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Processed STP-Frame): result = [ 'testframe for :' ] ()", + "module": "test", + "msecs": 749.0999698638916, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.678035736083984, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 749.1469383239746, + "msg": "Processed STP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 53.72500419616699, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.696846008300781e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0006608963012695312, + "time_finished": "2019-12-30 18:01:07,749", + "time_start": "2019-12-30 18:01:07,748" + }, + "_xiZqMI92Eemg3cv-3xZ25Q": { + "args": null, + "asctime": "2019-12-30 18:01:07,746", + "created": 1577725267.746208, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 41, + "message": "_xiZqMI92Eemg3cv-3xZ25Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 746.2079524993896, + "msg": "_xiZqMI92Eemg3cv-3xZ25Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.78601837158203, + "testcaseLogger": [ + { + "args": [ + "'testframe for :'" + ], + "asctime": "2019-12-30 18:01:07,746", + "created": 1577725267.746304, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "build_frame_pattern_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 23, + "message": "Creating testframe including start and end pattern for \"'testframe for :'\"", + "module": "test_stp", + "moduleLogger": [], + "msecs": 746.3040351867676, + "msg": "Creating testframe including start and end pattern for \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.88210105895996, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "'::>'", + "" + ], + "asctime": "2019-12-30 18:01:07,746", + "created": 1577725267.746462, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "STP-Frame is correct (Content '::>' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "STP-Frame", + "'::>'", + "" + ], + "asctime": "2019-12-30 18:01:07,746", + "created": 1577725267.746379, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (STP-Frame): '::>' ()", + "module": "test", + "msecs": 746.3788986206055, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.95696449279785, + "thread": 139832911451968, + "threadName": "MainThread" + }, + { + "args": [ + "STP-Frame", + "'::>'", + "" + ], + "asctime": "2019-12-30 18:01:07,746", + "created": 1577725267.746421, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (STP-Frame): result = '::>' ()", + "module": "test", + "msecs": 746.4210987091064, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 50.99916458129883, + "thread": 139832911451968, + "threadName": "MainThread" + } + ], + "msecs": 746.4621067047119, + "msg": "STP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14675, + "processName": "MainProcess", + "relativeCreated": 51.0401725769043, + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 4.100799560546875e-05 + } + ], + "thread": 139832911451968, + "threadName": "MainThread", + "time_consumption": 0.0002541542053222656, + "time_finished": "2019-12-30 18:01:07,746", + "time_start": "2019-12-30 18:01:07,746" + } + }, + "testrun_id": "p2", + "time_consumption": 0.015398740768432617, + "uid_list_sorted": [ + "_XzMFcHYZEem_kd-7nxt1sg", + "_pavPUHsZEemK6PYOxF9rHw", + "_rhV88Hu9Eemborg4LxXa3A", + "_9ahP4Hu7Eemborg4LxXa3A", + "_fp-i0Hu8Eemborg4LxXa3A", + "_Y_h3gH5CEemxr4bbKXhxkg", + "_G40UUH5DEemxr4bbKXhxkg", + "_QjJiIIwZEem5qYOdmXl77A", + "_ZhyRAI9OEemAMMFgxXT6lA", + "_-yWo4I9sEemg3cv-3xZ25Q", + "_xiZqMI92Eemg3cv-3xZ25Q", + "_Bd9TgI9tEemg3cv-3xZ25Q", + "_NpOWgI9tEemg3cv-3xZ25Q", + "_xOCgkI9yEemg3cv-3xZ25Q", + "_5_z4MI9yEemg3cv-3xZ25Q", + "_n3BdUCcREeqsHsnJQYCN8Q", + "_dpJzwCcUEeqsHsnJQYCN8Q", + "_wMotUCclEeqsHsnJQYCN8Q" + ] + }, + { + "heading_dict": { + "_-yWo4I9sEemg3cv-3xZ25Q": "Frame creation", + "_0CnJgHu0Eemborg4LxXa3A": "Stream Compression", + "_2x4icH5BEemxr4bbKXhxkg": "Serial Transfer Protocol (STP)", + "_5_z4MI9yEemg3cv-3xZ25Q": "Frame processing - Data before the start pattern", + "_9ahP4Hu7Eemborg4LxXa3A": "Compress", + "_Bd9TgI9tEemg3cv-3xZ25Q": "Frame processing", + "_G40UUH5DEemxr4bbKXhxkg": "Frame creation error", + "_MR7eOHYYEem_kd-7nxt1sg": "Stream to Human readable String", + "_NpOWgI9tEemg3cv-3xZ25Q": "Frame processing - Input data type error", + "_QjJiIIwZEem5qYOdmXl77A": "Frame processing", + "_TzZlUI9jEemg3cv-3xZ25Q": "Stream Definition", + "_XzMFcHYZEem_kd-7nxt1sg": "Hexadecimal Values", + "_Y_h3gH5CEemxr4bbKXhxkg": "Frame creation", + "_ZhyRAI9OEemAMMFgxXT6lA": "Frame processing - Input data type error", + "_dpJzwCcUEeqsHsnJQYCN8Q": "Frame processing - Incorrect end pattern", + "_fp-i0Hu8Eemborg4LxXa3A": "Extract", + "_n3BdUCcREeqsHsnJQYCN8Q": "Frame processing - Incorrect start patterns", + "_pavPUHsZEemK6PYOxF9rHw": "Number of Bytes", + "_rhV88Hu9Eemborg4LxXa3A": "CRLF-Filter", + "_wMotUCclEeqsHsnJQYCN8Q": "Frame processing - After state corruption", + "_xOCgkI9yEemg3cv-3xZ25Q": "Frame processing - Start pattern and end pattern inside a message", + "_xR3PcH5BEemxr4bbKXhxkg": "Carriagereturn Seperation Protocol (CSP)", + "_xiZqMI92Eemg3cv-3xZ25Q": "Frame creation - Start pattern and end pattern inside a message" + }, + "interpreter": "python 3.6.9 (final)", + "name": "Default Testsession name", + "number_of_failed_tests": 0, + "number_of_possibly_failed_tests": 0, + "number_of_successfull_tests": 18, + "number_of_tests": 18, + "testcase_execution_level": 90, + "testcase_names": { + "0": "Single Test", + "10": "Smoke Test (Minumum subset)", + "50": "Short Test (Subset)", + "90": "Full Test (all defined tests)" + }, + "testcases": { + "_-yWo4I9sEemg3cv-3xZ25Q": { + "args": null, + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1453066, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 40, + "message": "_-yWo4I9sEemg3cv-3xZ25Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 145.30658721923828, + "msg": "_-yWo4I9sEemg3cv-3xZ25Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.90085411071777, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + "b'testframe for stp'" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1453798, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "build_frame_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 17, + "message": "Creating testframe for \"b'testframe for stp'\"", + "module": "test_stp", + "moduleLogger": [], + "msecs": 145.37978172302246, + "msg": "Creating testframe for \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.97404861450195, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "b':'", + "" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1454985, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "STP-Frame is correct (Content b':' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "STP-Frame", + "b':'", + "" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1454303, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (STP-Frame): b':' ()", + "module": "test", + "msecs": 145.430326461792, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.024593353271484, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP-Frame", + "b':'", + "" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.145465, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (STP-Frame): result = b':' ()", + "module": "test", + "msecs": 145.46489715576172, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.05916404724121, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 145.49851417541504, + "msg": "STP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.09278106689453, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.361701965332031e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0001919269561767578, + "time_finished": "2019-12-30 18:01:08,145", + "time_start": "2019-12-30 18:01:08,145" + }, + "_5_z4MI9yEemg3cv-3xZ25Q": { + "args": null, + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1487162, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 45, + "message": "_5_z4MI9yEemg3cv-3xZ25Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 148.71621131896973, + "msg": "_5_z4MI9yEemg3cv-3xZ25Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.31047821044922, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + "b'_:'" + ], + "asctime": "2019-12-30 18:01:08,149", + "created": 1577725268.1490715, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_frame_data_before_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 46, + "message": "Processing testframe: \"b'_:'\"", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "STP:", + 95 + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1487837, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "WARNING", + "levelno": 30, + "lineno": 100, + "message": "STP: no data sync (5f) received => ignoring byte", + "module": "stp", + "msecs": 148.78368377685547, + "msg": "%s no data sync (%02x) received => ignoring byte", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.37795066833496, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1488256, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 98, + "message": "STP: data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 148.82564544677734, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.41991233825684, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1488624, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 148.86236190795898, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.45662879943848, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1489382, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 148.93817901611328, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.53244590759277, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 62 + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.148975, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 124, + "message": "STP: end pattern (3a 3e) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "module": "stp", + "msecs": 148.97489547729492, + "msg": "%s end pattern (%02x %02x) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.56916236877441, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(17): 74 65 73 74 66 72 61 6d 65 20 66 6f 72 20 73 74 70" + ], + "asctime": "2019-12-30 18:01:08,149", + "created": 1577725268.149025, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "INFO", + "levelno": 20, + "lineno": 145, + "message": "STP: message identified - (17): 74 65 73 74 66 72 61 6d 65 20 66 6f 72 20 73 74 70", + "module": "stp", + "msecs": 149.02496337890625, + "msg": "%s message identified - %s", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.61923027038574, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 149.07145500183105, + "msg": "Processing testframe: \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.66572189331055, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 4.649162292480469e-05 + }, + { + "args": [ + "[b'testframe for stp']", + "" + ], + "asctime": "2019-12-30 18:01:08,149", + "created": 1577725268.149363, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Processed STP-Frame is correct (Content [b'testframe for stp'] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Processed STP-Frame", + "[ b'testframe for stp' ]", + "" + ], + "asctime": "2019-12-30 18:01:08,149", + "created": 1577725268.1491826, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Processed STP-Frame): [ b'testframe for stp' ] ()", + "module": "test", + "msecs": 149.18255805969238, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.77682495117188, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Processed STP-Frame", + "[ b'testframe for stp' ]", + "" + ], + "asctime": "2019-12-30 18:01:08,149", + "created": 1577725268.1492636, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Processed STP-Frame): result = [ b'testframe for stp' ] ()", + "module": "test", + "msecs": 149.2636203765869, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.8578872680664, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 149.36304092407227, + "msg": "Processed STP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.95730781555176, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 9.942054748535156e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0006468296051025391, + "time_finished": "2019-12-30 18:01:08,149", + "time_start": "2019-12-30 18:01:08,148" + }, + "_9ahP4Hu7Eemborg4LxXa3A": { + "args": null, + "asctime": "2019-12-30 18:01:08,142", + "created": 1577725268.1420813, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 28, + "message": "_9ahP4Hu7Eemborg4LxXa3A", + "module": "__init__", + "moduleLogger": [], + "msecs": 142.08126068115234, + "msg": "_9ahP4Hu7Eemborg4LxXa3A", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.675527572631836, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-30 18:01:08,142", + "created": 1577725268.142131, + "exc_info": null, + "exc_text": null, + "filename": "test_gzip.py", + "funcName": "compress_extract_check", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 12, + "message": "Compressing Streams result in differnt streams with the same input stream. Therefore the test will compare the decompressed data.", + "module": "test_gzip", + "moduleLogger": [], + "msecs": 142.13109016418457, + "msg": "Compressing Streams result in differnt streams with the same input stream. Therefore the test will compare the decompressed data.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_gzip.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.72535705566406, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff" + ], + "asctime": "2019-12-30 18:01:08,142", + "created": 1577725268.1424253, + "exc_info": null, + "exc_text": null, + "filename": "test_gzip.py", + "funcName": "compress_extract_check", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 14, + "message": "Compressing stream: (30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ", + "module": "test_gzip", + "moduleLogger": [ + { + "args": [ + 0.8666666666666667, + 0.00017547607421875 + ], + "asctime": "2019-12-30 18:01:08,142", + "created": 1577725268.1423514, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "gzip_compress", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 90, + "message": "GZIP: Finished to compress a string (compression_rate=0.867, consumed_time=0.0s).", + "module": "__init__", + "msecs": 142.3513889312744, + "msg": "GZIP: Finished to compress a string (compression_rate=%.3f, consumed_time=%.1fs).", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.945655822753906, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 142.4252986907959, + "msg": "Compressing stream: %s ", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_gzip.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 59.01956558227539, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 7.390975952148438e-05 + }, + { + "args": [ + "(26): 1f 8b 08 00 54 2d 0a 5e 02 ff 63 60 40 01 ff 51 01 00 2d 8a 7d de 1e 00 00 00" + ], + "asctime": "2019-12-30 18:01:08,142", + "created": 1577725268.1426442, + "exc_info": null, + "exc_text": null, + "filename": "test_gzip.py", + "funcName": "compress_extract_check", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 16, + "message": "Extracting stream: (26): 1f 8b 08 00 54 2d 0a 5e 02 ff 63 60 40 01 ff 51 01 00 2d 8a 7d de 1e 00 00 00", + "module": "test_gzip", + "moduleLogger": [ + { + "args": [ + 0.8666666666666667, + 9.751319885253906e-05 + ], + "asctime": "2019-12-30 18:01:08,142", + "created": 1577725268.1425784, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "gzip_extract", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 123, + "message": "GZIP: Finished to extract a string (compression_rate=0.867, consumed_time=0.0s).", + "module": "__init__", + "msecs": 142.5783634185791, + "msg": "GZIP: Finished to extract a string (compression_rate=%.3f, consumed_time=%.1fs).", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 59.172630310058594, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 142.64416694641113, + "msg": "Extracting stream: %s", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_gzip.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 59.238433837890625, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 6.580352783203125e-05 + }, + { + "args": [ + "(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff", + "" + ], + "asctime": "2019-12-30 18:01:08,142", + "created": 1577725268.1429036, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Extracted data is correct (Content (30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Extracted data", + "(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff", + "" + ], + "asctime": "2019-12-30 18:01:08,142", + "created": 1577725268.1427226, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Extracted data): (30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ()", + "module": "test", + "msecs": 142.72260665893555, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 59.31687355041504, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Extracted data", + "(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff", + "" + ], + "asctime": "2019-12-30 18:01:08,142", + "created": 1577725268.1427855, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Extracted data): result = (30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ()", + "module": "test", + "msecs": 142.78554916381836, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 59.37981605529785, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 142.90356636047363, + "msg": "Extracted data is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 59.497833251953125, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.00011801719665527344 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0008223056793212891, + "time_finished": "2019-12-30 18:01:08,142", + "time_start": "2019-12-30 18:01:08,142" + }, + "_Bd9TgI9tEemg3cv-3xZ25Q": { + "args": null, + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1458359, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 42, + "message": "_Bd9TgI9tEemg3cv-3xZ25Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 145.83587646484375, + "msg": "_Bd9TgI9tEemg3cv-3xZ25Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.43014335632324, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + "b':'" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.1461418, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_frame_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 31, + "message": "Processing testframe: \"b':'\"", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1459, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 98, + "message": "STP: data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 145.90001106262207, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.49427795410156, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1459382, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 145.93815803527832, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.53242492675781, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.1460197, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 146.01969718933105, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.61396408081055, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 62 + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.146057, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 124, + "message": "STP: end pattern (3a 3e) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "module": "stp", + "msecs": 146.0568904876709, + "msg": "%s end pattern (%02x %02x) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.65115737915039, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(17): 74 65 73 74 66 72 61 6d 65 20 66 6f 72 20 73 74 70" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.1461058, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "INFO", + "levelno": 20, + "lineno": 145, + "message": "STP: message identified - (17): 74 65 73 74 66 72 61 6d 65 20 66 6f 72 20 73 74 70", + "module": "stp", + "msecs": 146.10576629638672, + "msg": "%s message identified - %s", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.70003318786621, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 146.14176750183105, + "msg": "Processing testframe: \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.73603439331055, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.600120544433594e-05 + }, + { + "args": [ + "[]", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.14627, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "First processed STP snippet is correct (Content [] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "First processed STP snippet", + "[ ]", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.1461947, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (First processed STP snippet): [ ] ()", + "module": "test", + "msecs": 146.1946964263916, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.788963317871094, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "First processed STP snippet", + "[ ]", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.1462293, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (First processed STP snippet): result = [ ] ()", + "module": "test", + "msecs": 146.22926712036133, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.82353401184082, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 146.2700366973877, + "msg": "First processed STP snippet is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.86430358886719, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 4.076957702636719e-05 + }, + { + "args": [ + "[b'testframe for stp']", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.1464775, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Final processed STP snippet is correct (Content [b'testframe for stp'] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Final processed STP snippet", + "[ b'testframe for stp' ]", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.146317, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Final processed STP snippet): [ b'testframe for stp' ] ()", + "module": "test", + "msecs": 146.3170051574707, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.911272048950195, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Final processed STP snippet", + "[ b'testframe for stp' ]", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.146431, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Final processed STP snippet): result = [ b'testframe for stp' ] ()", + "module": "test", + "msecs": 146.43096923828125, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.02523612976074, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 146.47746086120605, + "msg": "Final processed STP snippet is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.07172775268555, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 4.649162292480469e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0006415843963623047, + "time_finished": "2019-12-30 18:01:08,146", + "time_start": "2019-12-30 18:01:08,145" + }, + "_G40UUH5DEemxr4bbKXhxkg": { + "args": null, + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1436596, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 34, + "message": "_G40UUH5DEemxr4bbKXhxkg", + "module": "__init__", + "moduleLogger": [], + "msecs": 143.6595916748047, + "msg": "_G40UUH5DEemxr4bbKXhxkg", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.25385856628418, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + "b':testframe: for csp'" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1437058, + "exc_info": null, + "exc_text": null, + "filename": "test_csp.py", + "funcName": "build_frame_chk_error", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 23, + "message": "Creating testframe for \"b':testframe: for csp'\"", + "module": "test_csp", + "moduleLogger": [], + "msecs": 143.7058448791504, + "msg": "Creating testframe for \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_csp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.30011177062988, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.143834, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "CSP-Frame is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "CSP-Frame", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1437643, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (CSP-Frame): ()", + "module": "test", + "msecs": 143.76425743103027, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.358524322509766, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "CSP-Frame", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1437995, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (CSP-Frame): result = ()", + "module": "test", + "msecs": 143.7995433807373, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.3938102722168, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 143.83411407470703, + "msg": "CSP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.42838096618652, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.457069396972656e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.00017452239990234375, + "time_finished": "2019-12-30 18:01:08,143", + "time_start": "2019-12-30 18:01:08,143" + }, + "_NpOWgI9tEemg3cv-3xZ25Q": { + "args": null, + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.146553, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 43, + "message": "_NpOWgI9tEemg3cv-3xZ25Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 146.55303955078125, + "msg": "_NpOWgI9tEemg3cv-3xZ25Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.14730644226074, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.1466084, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_wrong_data", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 53, + "message": "Processing wrong data (list)", + "module": "test_stp", + "moduleLogger": [], + "msecs": 146.6083526611328, + "msg": "Processing wrong data (list)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.202619552612305, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.1467297, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Wrong data exception is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.146657, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Wrong data exception): ()", + "module": "test", + "msecs": 146.65699005126953, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.25125694274902, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.1466925, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Wrong data exception): result = ()", + "module": "test", + "msecs": 146.69251441955566, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.286781311035156, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 146.7297077178955, + "msg": "Wrong data exception is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.323974609375, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.719329833984375e-05 + }, + { + "args": [ + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.14689, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer still empty is correct (Content b'' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer still empty", + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.146773, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer still empty): b'' ()", + "module": "test", + "msecs": 146.773099899292, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.367366790771484, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer still empty", + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.1468356, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer still empty): result = b'' ()", + "module": "test", + "msecs": 146.8355655670166, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.429832458496094, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 146.88992500305176, + "msg": "Buffer still empty is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.48419189453125, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 5.435943603515625e-05 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.1469333, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_wrong_data", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 63, + "message": "Processing wrong data (int)", + "module": "test_stp", + "moduleLogger": [], + "msecs": 146.93331718444824, + "msg": "Processing wrong data (int)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.527584075927734, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.1470454, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Wrong data exception is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,146", + "created": 1577725268.1469798, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Wrong data exception): ()", + "module": "test", + "msecs": 146.97980880737305, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.57407569885254, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.1470127, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Wrong data exception): result = ()", + "module": "test", + "msecs": 147.01271057128906, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.606977462768555, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 147.04537391662598, + "msg": "Wrong data exception is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.63964080810547, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.266334533691406e-05 + }, + { + "args": [ + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.147152, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer still empty is correct (Content b'' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer still empty", + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.1470873, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer still empty): b'' ()", + "module": "test", + "msecs": 147.08733558654785, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.681602478027344, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer still empty", + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.1471193, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer still empty): result = b'' ()", + "module": "test", + "msecs": 147.11928367614746, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.71355056762695, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 147.15194702148438, + "msg": "Buffer still empty is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.74621391296387, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.266334533691406e-05 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.147191, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_wrong_data", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 74, + "message": "Processing wrong data (str)", + "module": "test_stp", + "moduleLogger": [], + "msecs": 147.19104766845703, + "msg": "Processing wrong data (str)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.78531455993652, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.147306, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Wrong data exception is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.1472402, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Wrong data exception): ()", + "module": "test", + "msecs": 147.24016189575195, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.834428787231445, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.1472735, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Wrong data exception): result = ()", + "module": "test", + "msecs": 147.27354049682617, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.867807388305664, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 147.30596542358398, + "msg": "Wrong data exception is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.90023231506348, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.24249267578125e-05 + }, + { + "args": [ + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.1474748, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer still empty is correct (Content b'' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer still empty", + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.1473608, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer still empty): b'' ()", + "module": "test", + "msecs": 147.36080169677734, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 63.955068588256836, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer still empty", + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.1474206, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer still empty): result = b'' ()", + "module": "test", + "msecs": 147.42064476013184, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 64.01491165161133, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 147.4747657775879, + "msg": "Buffer still empty is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 64.06903266906738, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 5.412101745605469e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0009217262268066406, + "time_finished": "2019-12-30 18:01:08,147", + "time_start": "2019-12-30 18:01:08,146" + }, + "_QjJiIIwZEem5qYOdmXl77A": { + "args": null, + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1439028, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 35, + "message": "_QjJiIIwZEem5qYOdmXl77A", + "module": "__init__", + "moduleLogger": [], + "msecs": 143.90277862548828, + "msg": "_QjJiIIwZEem5qYOdmXl77A", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.49704551696777, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + "b':testframe: for csp\\n'" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.144063, + "exc_info": null, + "exc_text": null, + "filename": "test_csp.py", + "funcName": "process_frame_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 36, + "message": "Processing testframe: \"b':testframe: for csp\\n'\" in two snippets", + "module": "test_csp", + "moduleLogger": [ + { + "args": [ + "CSP:", + "(10): 3a 74 65 73 74 66 72 61 6d 65" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.143974, + "exc_info": null, + "exc_text": null, + "filename": "csp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 65, + "message": "CSP: Leaving data in buffer (to be processed next time): (10): 3a 74 65 73 74 66 72 61 6d 65", + "module": "csp", + "msecs": 143.97406578063965, + "msg": "%s Leaving data in buffer (to be processed next time): %s", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/csp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.56833267211914, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "CSP:", + "(19): 3a 74 65 73 74 66 72 61 6d 65 3a 20 66 6f 72 20 63 73 70" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1440294, + "exc_info": null, + "exc_text": null, + "filename": "csp.py", + "funcName": "process", + "levelname": "INFO", + "levelno": 20, + "lineno": 67, + "message": "CSP: message identified - (19): 3a 74 65 73 74 66 72 61 6d 65 3a 20 66 6f 72 20 63 73 70", + "module": "csp", + "msecs": 144.0293788909912, + "msg": "%s message identified - %s", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/csp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.6236457824707, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 144.06299591064453, + "msg": "Processing testframe: \"%s\" in two snippets", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_csp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.65726280212402, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.361701965332031e-05 + }, + { + "args": [ + "[]", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.144192, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "First processed CSP-Snippet is correct (Content [] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "First processed CSP-Snippet", + "[ ]", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1441185, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (First processed CSP-Snippet): [ ] ()", + "module": "test", + "msecs": 144.1185474395752, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.71281433105469, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "First processed CSP-Snippet", + "[ ]", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1441538, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (First processed CSP-Snippet): result = [ ] ()", + "module": "test", + "msecs": 144.15383338928223, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.74810028076172, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 144.19198036193848, + "msg": "First processed CSP-Snippet is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.78624725341797, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.814697265625e-05 + }, + { + "args": [ + "[b':testframe: for csp']", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.144324, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Final processed CSP-Frame is correct (Content [b':testframe: for csp'] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Final processed CSP-Frame", + "[ b':testframe: for csp' ]", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1442394, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Final processed CSP-Frame): [ b':testframe: for csp' ] ()", + "module": "test", + "msecs": 144.2394256591797, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.83369255065918, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Final processed CSP-Frame", + "[ b':testframe: for csp' ]", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1442766, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Final processed CSP-Frame): result = [ b':testframe: for csp' ] ()", + "module": "test", + "msecs": 144.27661895751953, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.87088584899902, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 144.32406425476074, + "msg": "Final processed CSP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.918331146240234, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 4.744529724121094e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.00042128562927246094, + "time_finished": "2019-12-30 18:01:08,144", + "time_start": "2019-12-30 18:01:08,143" + }, + "_XzMFcHYZEem_kd-7nxt1sg": { + "args": null, + "asctime": "2019-12-30 18:01:08,140", + "created": 1577725268.1407516, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 23, + "message": "_XzMFcHYZEem_kd-7nxt1sg", + "module": "__init__", + "moduleLogger": [], + "msecs": 140.75160026550293, + "msg": "_XzMFcHYZEem_kd-7nxt1sg", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 57.34586715698242, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + "de ad be ef", + "" + ], + "asctime": "2019-12-30 18:01:08,140", + "created": 1577725268.1409588, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 27, + "message": "Checking test pattern de ad be ef ().", + "module": "test_hexlify", + "moduleLogger": [], + "msecs": 140.9587860107422, + "msg": "Checking test pattern %s (%s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 57.55305290222168, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1414554, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 47, + "message": "Pattern included all relevant information in the correct order.", + "module": "test_hexlify", + "moduleLogger": [ + { + "args": [ + "(4): de ad be ef" + ], + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1410325, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 29, + "message": "Return value of hexlify is (4): de ad be ef", + "module": "test_hexlify", + "msecs": 141.03245735168457, + "msg": "Return value of hexlify is %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 57.62672424316406, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "(4): DE AD BE EF" + ], + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1412742, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 31, + "message": "Using upper string for comparison: (4): DE AD BE EF", + "module": "test_hexlify", + "msecs": 141.27421379089355, + "msg": "Using upper string for comparison: %s", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 57.86848068237305, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "DE", + "(4): DE AD BE EF" + ], + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1413217, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 41, + "message": "\"DE\" found in \"(4): DE AD BE EF\"... Reducing pattern", + "module": "test_hexlify", + "msecs": 141.32165908813477, + "msg": "\"%s\" found in \"%s\"... Reducing pattern", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 57.91592597961426, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "AD", + "AD BE EF" + ], + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1413584, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 41, + "message": "\"AD\" found in \"AD BE EF\"... Reducing pattern", + "module": "test_hexlify", + "msecs": 141.3583755493164, + "msg": "\"%s\" found in \"%s\"... Reducing pattern", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 57.9526424407959, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "BE", + "BE EF" + ], + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1413922, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 41, + "message": "\"BE\" found in \"BE EF\"... Reducing pattern", + "module": "test_hexlify", + "msecs": 141.39223098754883, + "msg": "\"%s\" found in \"%s\"... Reducing pattern", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 57.98649787902832, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "EF", + "EF" + ], + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1414242, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "data_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 41, + "message": "\"EF\" found in \"EF\"... Reducing pattern", + "module": "test_hexlify", + "msecs": 141.42417907714844, + "msg": "\"%s\" found in \"%s\"... Reducing pattern", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.01844596862793, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 141.45541191101074, + "msg": "Pattern included all relevant information in the correct order.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.049678802490234, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.123283386230469e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0007038116455078125, + "time_finished": "2019-12-30 18:01:08,141", + "time_start": "2019-12-30 18:01:08,140" + }, + "_Y_h3gH5CEemxr4bbKXhxkg": { + "args": null, + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1434166, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 33, + "message": "_Y_h3gH5CEemxr4bbKXhxkg", + "module": "__init__", + "moduleLogger": [], + "msecs": 143.4166431427002, + "msg": "_Y_h3gH5CEemxr4bbKXhxkg", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.01091003417969, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + "b':testframe: for csp'" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1434705, + "exc_info": null, + "exc_text": null, + "filename": "test_csp.py", + "funcName": "build_frame_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 17, + "message": "Creating testframe for \"b':testframe: for csp'\"", + "module": "test_csp", + "moduleLogger": [], + "msecs": 143.47052574157715, + "msg": "Creating testframe for \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_csp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.06479263305664, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "b':testframe: for csp\\n'", + "" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1435885, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "CSP-Frame is correct (Content b':testframe: for csp\\n' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "CSP-Frame", + "b':testframe: for csp\\n'", + "" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1435194, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (CSP-Frame): b':testframe: for csp\\n' ()", + "module": "test", + "msecs": 143.51940155029297, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.11366844177246, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "CSP-Frame", + "b':testframe: for csp\\n'", + "" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1435542, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (CSP-Frame): result = b':testframe: for csp\\n' ()", + "module": "test", + "msecs": 143.5542106628418, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.14847755432129, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 143.58854293823242, + "msg": "CSP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.182809829711914, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.4332275390625e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.00017189979553222656, + "time_finished": "2019-12-30 18:01:08,143", + "time_start": "2019-12-30 18:01:08,143" + }, + "_ZhyRAI9OEemAMMFgxXT6lA": { + "args": null, + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1443968, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 36, + "message": "_ZhyRAI9OEemAMMFgxXT6lA", + "module": "__init__", + "moduleLogger": [], + "msecs": 144.39678192138672, + "msg": "_ZhyRAI9OEemAMMFgxXT6lA", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 60.99104881286621, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1444454, + "exc_info": null, + "exc_text": null, + "filename": "test_csp.py", + "funcName": "process_wrong_data", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 44, + "message": "Processing wrong data (list)", + "module": "test_csp", + "moduleLogger": [], + "msecs": 144.44541931152344, + "msg": "Processing wrong data (list)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_csp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.03968620300293, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1445665, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Wrong data exception is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1444933, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Wrong data exception): ()", + "module": "test", + "msecs": 144.49334144592285, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.087608337402344, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1445282, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Wrong data exception): result = ()", + "module": "test", + "msecs": 144.52815055847168, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.12241744995117, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 144.56653594970703, + "msg": "Wrong data exception is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.16080284118652, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.838539123535156e-05 + }, + { + "args": [ + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1446762, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer still empty is correct (Content b'' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer still empty", + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1446104, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer still empty): b'' ()", + "module": "test", + "msecs": 144.61040496826172, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.20467185974121, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer still empty", + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.144643, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer still empty): result = b'' ()", + "module": "test", + "msecs": 144.64306831359863, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.237335205078125, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 144.67620849609375, + "msg": "Buffer still empty is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.27047538757324, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.314018249511719e-05 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1447158, + "exc_info": null, + "exc_text": null, + "filename": "test_csp.py", + "funcName": "process_wrong_data", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 54, + "message": "Processing wrong data (int)", + "module": "test_csp", + "moduleLogger": [], + "msecs": 144.7157859802246, + "msg": "Processing wrong data (int)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_csp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.3100528717041, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1448333, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Wrong data exception is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1447616, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Wrong data exception): ()", + "module": "test", + "msecs": 144.7615623474121, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.3558292388916, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1447973, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Wrong data exception): result = ()", + "module": "test", + "msecs": 144.79732513427734, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.391592025756836, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 144.83332633972168, + "msg": "Wrong data exception is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.42759323120117, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.600120544433594e-05 + }, + { + "args": [ + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1449566, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer still empty is correct (Content b'' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer still empty", + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.144876, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer still empty): b'' ()", + "module": "test", + "msecs": 144.87600326538086, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.47027015686035, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer still empty", + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.144924, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer still empty): result = b'' ()", + "module": "test", + "msecs": 144.92392539978027, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.518192291259766, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 144.9565887451172, + "msg": "Buffer still empty is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.55085563659668, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.266334533691406e-05 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:08,144", + "created": 1577725268.1449974, + "exc_info": null, + "exc_text": null, + "filename": "test_csp.py", + "funcName": "process_wrong_data", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 65, + "message": "Processing wrong data (str)", + "module": "test_csp", + "moduleLogger": [], + "msecs": 144.99735832214355, + "msg": "Processing wrong data (str)", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_csp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.59162521362305, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "", + "" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1451087, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Wrong data exception is correct (Content and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1450424, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Wrong data exception): ()", + "module": "test", + "msecs": 145.04241943359375, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.63668632507324, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Wrong data exception", + "", + "" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1450758, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Wrong data exception): result = ()", + "module": "test", + "msecs": 145.07579803466797, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.67006492614746, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 145.10869979858398, + "msg": "Wrong data exception is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.70296669006348, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.2901763916015625e-05 + }, + { + "args": [ + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1452184, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer still empty is correct (Content b'' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer still empty", + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1451528, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer still empty): b'' ()", + "module": "test", + "msecs": 145.15280723571777, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.747074127197266, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer still empty", + "b''", + "" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.145186, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer still empty): result = b'' ()", + "module": "test", + "msecs": 145.1859474182129, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.78021430969238, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 145.2183723449707, + "msg": "Buffer still empty is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 61.812639236450195, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.24249267578125e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0008215904235839844, + "time_finished": "2019-12-30 18:01:08,145", + "time_start": "2019-12-30 18:01:08,144" + }, + "_dpJzwCcUEeqsHsnJQYCN8Q": { + "args": null, + "asctime": "2019-12-30 18:01:08,152", + "created": 1577725268.1522748, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 47, + "message": "_dpJzwCcUEeqsHsnJQYCN8Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 152.27484703063965, + "msg": "_dpJzwCcUEeqsHsnJQYCN8Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 68.86911392211914, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-30 18:01:08,152", + "created": 1577725268.1527357, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_incorrect_end_frame_pattern", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 126, + "message": "Processing data with an insufficient end pattern.", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "b': changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 152.42695808410645, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.02122497558594, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:08,152", + "created": 1577725268.1524677, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 152.4677276611328, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.0619945526123, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,152", + "created": 1577725268.1525197, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 152.51970291137695, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.11396980285645, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 100 + ], + "asctime": "2019-12-30 18:01:08,152", + "created": 1577725268.152594, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "WARNING", + "levelno": 30, + "lineno": 137, + "message": "STP: data (64) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "module": "stp", + "msecs": 152.59408950805664, + "msg": "%s data (%02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.18835639953613, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(2): 74 65" + ], + "asctime": "2019-12-30 18:01:08,152", + "created": 1577725268.1526668, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "__clear_buffer__", + "levelname": "WARNING", + "levelno": 30, + "lineno": 69, + "message": "STP: Chunking \"(2): 74 65\" from buffer", + "module": "stp", + "msecs": 152.66680717468262, + "msg": "%s Chunking \"%s\" from buffer", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.26107406616211, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 152.73571014404297, + "msg": "Processing data with an insufficient end pattern.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.32997703552246, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 6.890296936035156e-05 + }, + { + "args": [ + "[[]]", + "" + ], + "asctime": "2019-12-30 18:01:08,153", + "created": 1577725268.1530066, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Return value list if processing data_sync and data again after start of frame is correct (Content [[]] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return value list if processing data_sync and data again after start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:08,152", + "created": 1577725268.1528456, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return value list if processing data_sync and data again after start of frame): [ [ ] ] ()", + "module": "test", + "msecs": 152.8456211090088, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.43988800048828, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Return value list if processing data_sync and data again after start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:08,152", + "created": 1577725268.1529253, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Return value list if processing data_sync and data again after start of frame): result = [ [ ] ] ()", + "module": "test", + "msecs": 152.9252529144287, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.5195198059082, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 153.00655364990234, + "msg": "Return value list if processing data_sync and data again after start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.60082054138184, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 8.130073547363281e-05 + }, + { + "args": [ + "0", + "" + ], + "asctime": "2019-12-30 18:01:08,153", + "created": 1577725268.1532018, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after processing data_sync and data again after start of frame is correct (Content 0 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after processing data_sync and data again after start of frame", + "0", + "" + ], + "asctime": "2019-12-30 18:01:08,153", + "created": 1577725268.1530867, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after processing data_sync and data again after start of frame): 0 ()", + "module": "test", + "msecs": 153.08666229248047, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.68092918395996, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "State after processing data_sync and data again after start of frame", + "0", + "" + ], + "asctime": "2019-12-30 18:01:08,153", + "created": 1577725268.1531472, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after processing data_sync and data again after start of frame): result = 0 ()", + "module": "test", + "msecs": 153.14722061157227, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.74148750305176, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 153.20181846618652, + "msg": "State after processing data_sync and data again after start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.79608535766602, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 5.459785461425781e-05 + }, + { + "args": [ + "0", + "" + ], + "asctime": "2019-12-30 18:01:08,153", + "created": 1577725268.153426, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer size after processing data with insufficient end pattern is correct (Content 0 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer size after processing data with insufficient end pattern", + "0", + "" + ], + "asctime": "2019-12-30 18:01:08,153", + "created": 1577725268.1532793, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer size after processing data with insufficient end pattern): 0 ()", + "module": "test", + "msecs": 153.27930450439453, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.87357139587402, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer size after processing data with insufficient end pattern", + "0", + "" + ], + "asctime": "2019-12-30 18:01:08,153", + "created": 1577725268.153351, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer size after processing data with insufficient end pattern): result = 0 ()", + "module": "test", + "msecs": 153.3510684967041, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 69.9453353881836, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 153.425931930542, + "msg": "Buffer size after processing data with insufficient end pattern is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.02019882202148, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 7.486343383789062e-05 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:08,153", + "created": 1577725268.1539254, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_incorrect_end_frame_pattern", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 138, + "message": "Processing data with an insufficient end pattern (start pattern instead of end pattern).", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "b': changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 153.5813808441162, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.1756477355957, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:08,153", + "created": 1577725268.1536424, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 153.6424160003662, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.2366828918457, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,153", + "created": 1577725268.1537008, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 153.7008285522461, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.29509544372559, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:08,153", + "created": 1577725268.1537478, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "WARNING", + "levelno": 30, + "lineno": 119, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 153.7477970123291, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.3420639038086, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(2): 74 65" + ], + "asctime": "2019-12-30 18:01:08,153", + "created": 1577725268.153868, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "__clear_buffer__", + "levelname": "WARNING", + "levelno": 30, + "lineno": 69, + "message": "STP: Chunking \"(2): 74 65\" from buffer", + "module": "stp", + "msecs": 153.8679599761963, + "msg": "%s Chunking \"%s\" from buffer", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.46222686767578, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 153.92541885375977, + "msg": "Processing data with an insufficient end pattern (start pattern instead of end pattern).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.51968574523926, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 5.745887756347656e-05 + }, + { + "args": [ + "[[]]", + "" + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.1541502, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Return value list if processing 2nd start of frame is correct (Content [[]] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return value list if processing 2nd start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.1540108, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return value list if processing 2nd start of frame): [ [ ] ] ()", + "module": "test", + "msecs": 154.01077270507812, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.60503959655762, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Return value list if processing 2nd start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.1540773, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Return value list if processing 2nd start of frame): result = [ [ ] ] ()", + "module": "test", + "msecs": 154.07729148864746, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.67155838012695, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 154.15024757385254, + "msg": "Return value list if processing 2nd start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.74451446533203, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 7.295608520507812e-05 + }, + { + "args": [ + "3", + "" + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.154335, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after processing 2nd start of frame is correct (Content 3 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after processing 2nd start of frame", + "3", + "" + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.1542237, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after processing 2nd start of frame): 3 ()", + "module": "test", + "msecs": 154.22368049621582, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.81794738769531, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "State after processing 2nd start of frame", + "3", + "" + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.1542761, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after processing 2nd start of frame): result = 3 ()", + "module": "test", + "msecs": 154.27613258361816, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.87039947509766, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 154.33502197265625, + "msg": "State after processing 2nd start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.92928886413574, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 5.888938903808594e-05 + }, + { + "args": [ + "0", + "" + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.1545057, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer size after processing 2nd start of frame is correct (Content 0 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer size after processing 2nd start of frame", + "0", + "" + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.1543918, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer size after processing 2nd start of frame): 0 ()", + "module": "test", + "msecs": 154.39176559448242, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 70.98603248596191, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer size after processing 2nd start of frame", + "0", + "" + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.15445, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer size after processing 2nd start of frame): result = 0 ()", + "module": "test", + "msecs": 154.4499397277832, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.0442066192627, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 154.50572967529297, + "msg": "Buffer size after processing 2nd start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.09999656677246, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 5.5789947509765625e-05 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.154993, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_incorrect_end_frame_pattern", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 150, + "message": "Processing data with an insufficient end pattern (two times sync instead of end pattern).", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "b': changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 154.64401245117188, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.23827934265137, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.1546972, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 154.69717979431152, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.29144668579102, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.1547627, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 154.76274490356445, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.35701179504395, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.1548865, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "WARNING", + "levelno": 30, + "lineno": 133, + "message": "STP: second data sync (3a) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 154.88648414611816, + "msg": "%s second data sync (%02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.48075103759766, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(2): 74 65" + ], + "asctime": "2019-12-30 18:01:08,154", + "created": 1577725268.154948, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "__clear_buffer__", + "levelname": "WARNING", + "levelno": 30, + "lineno": 69, + "message": "STP: Chunking \"(2): 74 65\" from buffer", + "module": "stp", + "msecs": 154.94799613952637, + "msg": "%s Chunking \"%s\" from buffer", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.54226303100586, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 154.99305725097656, + "msg": "Processing data with an insufficient end pattern (two times sync instead of end pattern).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.58732414245605, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 4.506111145019531e-05 + }, + { + "args": [ + "[[]]", + "" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.155135, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Return value list if processing data_sync twice after start of frame is correct (Content [[]] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return value list if processing data_sync twice after start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1550477, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return value list if processing data_sync twice after start of frame): [ [ ] ] ()", + "module": "test", + "msecs": 155.04765510559082, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.64192199707031, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Return value list if processing data_sync twice after start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.155088, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Return value list if processing data_sync twice after start of frame): result = [ [ ] ] ()", + "module": "test", + "msecs": 155.08794784545898, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.68221473693848, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 155.134916305542, + "msg": "Return value list if processing data_sync twice after start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.72918319702148, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 4.696846008300781e-05 + }, + { + "args": [ + "1", + "" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1552517, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after processing data_sync twice after start of frame is correct (Content 1 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after processing data_sync twice after start of frame", + "1", + "" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1551838, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after processing data_sync twice after start of frame): 1 ()", + "module": "test", + "msecs": 155.1837921142578, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.7780590057373, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "State after processing data_sync twice after start of frame", + "1", + "" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.155218, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after processing data_sync twice after start of frame): result = 1 ()", + "module": "test", + "msecs": 155.21788597106934, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.81215286254883, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 155.25174140930176, + "msg": "State after processing data_sync twice after start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.84600830078125, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.3855438232421875e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0029768943786621094, + "time_finished": "2019-12-30 18:01:08,155", + "time_start": "2019-12-30 18:01:08,152" + }, + "_fp-i0Hu8Eemborg4LxXa3A": { + "args": null, + "asctime": "2019-12-30 18:01:08,142", + "created": 1577725268.1429856, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 29, + "message": "_fp-i0Hu8Eemborg4LxXa3A", + "module": "__init__", + "moduleLogger": [], + "msecs": 142.98558235168457, + "msg": "_fp-i0Hu8Eemborg4LxXa3A", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 59.57984924316406, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + "(26): 1f 8b 08 00 34 e0 04 5d 02 ff 63 60 40 01 ff 51 01 00 2d 8a 7d de 1e 00 00 00" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1431673, + "exc_info": null, + "exc_text": null, + "filename": "test_gzip.py", + "funcName": "gzip_extract_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 23, + "message": "Extracting stream: (26): 1f 8b 08 00 34 e0 04 5d 02 ff 63 60 40 01 ff 51 01 00 2d 8a 7d de 1e 00 00 00", + "module": "test_gzip", + "moduleLogger": [ + { + "args": [ + 0.8666666666666667, + 6.29425048828125e-05 + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.143103, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "gzip_extract", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 123, + "message": "GZIP: Finished to extract a string (compression_rate=0.867, consumed_time=0.0s).", + "module": "__init__", + "msecs": 143.10288429260254, + "msg": "GZIP: Finished to extract a string (compression_rate=%.3f, consumed_time=%.1fs).", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 59.69715118408203, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 143.16725730895996, + "msg": "Extracting stream: %s", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_gzip.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 59.76152420043945, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 6.437301635742188e-05 + }, + { + "args": [ + "'(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff'", + "" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1433418, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Extracted data is correct (Content '(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Extracted data", + "'(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff'", + "" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.1432679, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Extracted data): '(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff' ()", + "module": "test", + "msecs": 143.26786994934082, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 59.86213684082031, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Extracted data", + "'(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff'", + "" + ], + "asctime": "2019-12-30 18:01:08,143", + "created": 1577725268.143306, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Extracted data): result = '(30): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff' ()", + "module": "test", + "msecs": 143.30601692199707, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 59.90028381347656, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 143.3417797088623, + "msg": "Extracted data is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 59.9360466003418, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.5762786865234375e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0003561973571777344, + "time_finished": "2019-12-30 18:01:08,143", + "time_start": "2019-12-30 18:01:08,142" + }, + "_n3BdUCcREeqsHsnJQYCN8Q": { + "args": null, + "asctime": "2019-12-30 18:01:08,149", + "created": 1577725268.1495078, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 46, + "message": "_n3BdUCcREeqsHsnJQYCN8Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 149.5077610015869, + "msg": "_n3BdUCcREeqsHsnJQYCN8Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 66.1020278930664, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-30 18:01:08,149", + "created": 1577725268.149832, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_no_clear_buffer_after_first_data_sync", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "Processing data with an insufficient start pattern.", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "b':1'" + ], + "asctime": "2019-12-30 18:01:08,149", + "created": 1577725268.1496124, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_no_clear_buffer_after_first_data_sync", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 100, + "message": "Sending b':1' to stp.", + "module": "test_stp", + "msecs": 149.6124267578125, + "msg": "Sending %s to stp.", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 66.20669364929199, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,149", + "created": 1577725268.1496964, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 98, + "message": "STP: data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 149.69635009765625, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 66.29061698913574, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 49 + ], + "asctime": "2019-12-30 18:01:08,149", + "created": 1577725268.1497684, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "WARNING", + "levelno": 30, + "lineno": 108, + "message": "STP: no start pattern (3a 31) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_IDLE", + "module": "stp", + "msecs": 149.76835250854492, + "msg": "%s no start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_IDLE", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 66.36261940002441, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 149.83201026916504, + "msg": "Processing data with an insufficient start pattern.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 66.42627716064453, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 6.365776062011719e-05 + }, + { + "args": [ + "[[]]", + "" + ], + "asctime": "2019-12-30 18:01:08,150", + "created": 1577725268.150107, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Return value list if processing incorrect start of frame is correct (Content [[]] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return value list if processing incorrect start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:08,149", + "created": 1577725268.1499264, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return value list if processing incorrect start of frame): [ [ ] ] ()", + "module": "test", + "msecs": 149.92642402648926, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 66.52069091796875, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Return value list if processing incorrect start of frame", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:08,149", + "created": 1577725268.1499977, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Return value list if processing incorrect start of frame): result = [ [ ] ] ()", + "module": "test", + "msecs": 149.99771118164062, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 66.59197807312012, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 150.10690689086914, + "msg": "Return value list if processing incorrect start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 66.70117378234863, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.00010919570922851562 + }, + { + "args": [ + "0", + "" + ], + "asctime": "2019-12-30 18:01:08,150", + "created": 1577725268.1505911, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after processing incorrect start of frame is correct (Content 0 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after processing incorrect start of frame", + "0", + "" + ], + "asctime": "2019-12-30 18:01:08,150", + "created": 1577725268.150192, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after processing incorrect start of frame): 0 ()", + "module": "test", + "msecs": 150.1920223236084, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 66.78628921508789, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "State after processing incorrect start of frame", + "0", + "" + ], + "asctime": "2019-12-30 18:01:08,150", + "created": 1577725268.1503477, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after processing incorrect start of frame): result = 0 ()", + "module": "test", + "msecs": 150.34770965576172, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 66.94197654724121, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 150.5911350250244, + "msg": "State after processing incorrect start of frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 67.1854019165039, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0002434253692626953 + }, + { + "args": [], + "asctime": "2019-12-30 18:01:08,151", + "created": 1577725268.1514008, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_no_clear_buffer_after_first_data_sync", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 113, + "message": "Processing data with an insufficient start pattern (two times sync).", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "b'::'" + ], + "asctime": "2019-12-30 18:01:08,150", + "created": 1577725268.1509066, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_no_clear_buffer_after_first_data_sync", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 110, + "message": "Sending b'::' to stp.", + "module": "test_stp", + "msecs": 150.90656280517578, + "msg": "Sending %s to stp.", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 67.50082969665527, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,151", + "created": 1577725268.1511364, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 98, + "message": "STP: data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 151.1363983154297, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 67.73066520690918, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,151", + "created": 1577725268.151271, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "WARNING", + "levelno": 30, + "lineno": 110, + "message": "STP: 2nd data sync (3a) received => keep state", + "module": "stp", + "msecs": 151.27110481262207, + "msg": "%s 2nd data sync (%02x) received => keep state", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 67.86537170410156, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 151.40080451965332, + "msg": "Processing data with an insufficient start pattern (two times sync).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 67.99507141113281, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.00012969970703125 + }, + { + "args": [ + "[[]]", + "" + ], + "asctime": "2019-12-30 18:01:08,151", + "created": 1577725268.1518493, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Return value list if processing data_sync twice is correct (Content [[]] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return value list if processing data_sync twice", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:08,151", + "created": 1577725268.1515605, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return value list if processing data_sync twice): [ [ ] ] ()", + "module": "test", + "msecs": 151.56054496765137, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 68.15481185913086, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Return value list if processing data_sync twice", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:08,151", + "created": 1577725268.1517072, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Return value list if processing data_sync twice): result = [ [ ] ] ()", + "module": "test", + "msecs": 151.70717239379883, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 68.30143928527832, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 151.84926986694336, + "msg": "Return value list if processing data_sync twice is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 68.44353675842285, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.00014209747314453125 + }, + { + "args": [ + "1", + "" + ], + "asctime": "2019-12-30 18:01:08,152", + "created": 1577725268.1521492, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after processing data_sync twice is correct (Content 1 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after processing data_sync twice", + "1", + "" + ], + "asctime": "2019-12-30 18:01:08,152", + "created": 1577725268.1520069, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after processing data_sync twice): 1 ()", + "module": "test", + "msecs": 152.0068645477295, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 68.60113143920898, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "State after processing data_sync twice", + "1", + "" + ], + "asctime": "2019-12-30 18:01:08,152", + "created": 1577725268.15211, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after processing data_sync twice): result = 1 ()", + "module": "test", + "msecs": 152.11009979248047, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 68.70436668395996, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 152.14920043945312, + "msg": "State after processing data_sync twice is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 68.74346733093262, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.910064697265625e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.002641439437866211, + "time_finished": "2019-12-30 18:01:08,152", + "time_start": "2019-12-30 18:01:08,149" + }, + "_pavPUHsZEemK6PYOxF9rHw": { + "args": null, + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1415348, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 24, + "message": "_pavPUHsZEemK6PYOxF9rHw", + "module": "__init__", + "moduleLogger": [], + "msecs": 141.53480529785156, + "msg": "_pavPUHsZEemK6PYOxF9rHw", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.129072189331055, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + 4 + ], + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1415834, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "length_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 15, + "message": "Checking test pattern with length 4.", + "module": "test_hexlify", + "moduleLogger": [], + "msecs": 141.58344268798828, + "msg": "Checking test pattern with length %d.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.17770957946777, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "(4)", + "(4): de ad be ef", + 0 + ], + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1417487, + "exc_info": null, + "exc_text": null, + "filename": "test_hexlify.py", + "funcName": "length_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 23, + "message": "\"(4)\" is in \"(4): de ad be ef\" at position 0", + "module": "test_hexlify", + "moduleLogger": [], + "msecs": 141.74866676330566, + "msg": "\"%s\" is in \"%s\" at position %d", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_hexlify.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.342933654785156, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.00021386146545410156, + "time_finished": "2019-12-30 18:01:08,141", + "time_start": "2019-12-30 18:01:08,141" + }, + "_rhV88Hu9Eemborg4LxXa3A": { + "args": null, + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1418273, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 25, + "message": "_rhV88Hu9Eemborg4LxXa3A", + "module": "__init__", + "moduleLogger": [], + "msecs": 141.82734489440918, + "msg": "_rhV88Hu9Eemborg4LxXa3A", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.42161178588867, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + 4 + ], + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1418786, + "exc_info": null, + "exc_text": null, + "filename": "test_linefeed_filter.py", + "funcName": "returnvalue_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 11, + "message": "Checking test pattern with length 4.", + "module": "test_linefeed_filter", + "moduleLogger": [], + "msecs": 141.87860488891602, + "msg": "Checking test pattern with length %d.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_linefeed_filter.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.47287178039551, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "b'test\\\\r\\\\n123\\\\r\\\\n'", + "" + ], + "asctime": "2019-12-30 18:01:08,142", + "created": 1577725268.1420107, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Returnvalue of linefeed_filter is correct (Content b'test\\\\r\\\\n123\\\\r\\\\n' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Returnvalue of linefeed_filter", + "b'test\\\\r\\\\n123\\\\r\\\\n'", + "" + ], + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1419368, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Returnvalue of linefeed_filter): b'test\\\\r\\\\n123\\\\r\\\\n' ()", + "module": "test", + "msecs": 141.9367790222168, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.53104591369629, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Returnvalue of linefeed_filter", + "b'test\\\\r\\\\n123\\\\r\\\\n'", + "" + ], + "asctime": "2019-12-30 18:01:08,141", + "created": 1577725268.1419742, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Returnvalue of linefeed_filter): result = b'test\\\\r\\\\n123\\\\r\\\\n' ()", + "module": "test", + "msecs": 141.97421073913574, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.568477630615234, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 142.01068878173828, + "msg": "Returnvalue of linefeed_filter is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 58.60495567321777, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.647804260253906e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.00018334388732910156, + "time_finished": "2019-12-30 18:01:08,142", + "time_start": "2019-12-30 18:01:08,141" + }, + "_wMotUCclEeqsHsnJQYCN8Q": { + "args": null, + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1553516, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 48, + "message": "_wMotUCclEeqsHsnJQYCN8Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 155.3516387939453, + "msg": "_wMotUCclEeqsHsnJQYCN8Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 71.9459056854248, + "stack_info": null, + "testcaseLogger": [ + { + "args": [], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1557658, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_after_state_corruption", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 167, + "message": "Corrupting stp state and processing data.", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "b': changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 155.44962882995605, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.04389572143555, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1554868, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 155.4868221282959, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.08108901977539, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "255" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1555293, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_after_state_corruption", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 163, + "message": "Setting state of stp to 255.", + "module": "test_stp", + "msecs": 155.52926063537598, + "msg": "Setting state of stp to %s.", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.12352752685547, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "b': adding value (3a) back to data again and changing state -> STP_STATE_IDLE", + "module": "stp", + "msecs": 155.6093692779541, + "msg": "%s unknown state (%s) => adding value (%02x) back to data again and changing state -> STP_STATE_IDLE", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.2036361694336, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(2): 74 65" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1556487, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "__clear_buffer__", + "levelname": "WARNING", + "levelno": 30, + "lineno": 69, + "message": "STP: Chunking \"(2): 74 65\" from buffer", + "module": "stp", + "msecs": 155.64870834350586, + "msg": "%s Chunking \"%s\" from buffer", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.24297523498535, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1556854, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 98, + "message": "STP: data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 155.6854248046875, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.27969169616699, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1557224, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 155.72237968444824, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.31664657592773, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 155.76577186584473, + "msg": "Corrupting stp state and processing data.", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.36003875732422, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 4.3392181396484375e-05 + }, + { + "args": [ + "[[]]", + "" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1559024, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Return value list if processing start of a frame after state had been corrupted is correct (Content [[]] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Return value list if processing start of a frame after state had been corrupted", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1558187, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Return value list if processing start of a frame after state had been corrupted): [ [ ] ] ()", + "module": "test", + "msecs": 155.81870079040527, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.41296768188477, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Return value list if processing start of a frame after state had been corrupted", + "[ [ ] ]", + "" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1558566, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Return value list if processing start of a frame after state had been corrupted): result = [ [ ] ] ()", + "module": "test", + "msecs": 155.85660934448242, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.45087623596191, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 155.90238571166992, + "msg": "Return value list if processing start of a frame after state had been corrupted is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.49665260314941, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 4.57763671875e-05 + }, + { + "args": [ + "3", + "" + ], + "asctime": "2019-12-30 18:01:08,156", + "created": 1577725268.1560216, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "State after processing start of a frame after state had been corrupted is correct (Content 3 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "State after processing start of a frame after state had been corrupted", + "3", + "" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1559527, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (State after processing start of a frame after state had been corrupted): 3 ()", + "module": "test", + "msecs": 155.95269203186035, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.54695892333984, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "State after processing start of a frame after state had been corrupted", + "3", + "" + ], + "asctime": "2019-12-30 18:01:08,155", + "created": 1577725268.1559877, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (State after processing start of a frame after state had been corrupted): result = 3 ()", + "module": "test", + "msecs": 155.98773956298828, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.58200645446777, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 156.0215950012207, + "msg": "State after processing start of a frame after state had been corrupted is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.6158618927002, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.3855438232421875e-05 + }, + { + "args": [ + "2", + "" + ], + "asctime": "2019-12-30 18:01:08,156", + "created": 1577725268.1561327, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Buffer size after corrupting stp state is correct (Content 2 and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Buffer size after corrupting stp state", + "2", + "" + ], + "asctime": "2019-12-30 18:01:08,156", + "created": 1577725268.1560652, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Buffer size after corrupting stp state): 2 ()", + "module": "test", + "msecs": 156.0652256011963, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.65949249267578, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Buffer size after corrupting stp state", + "2", + "" + ], + "asctime": "2019-12-30 18:01:08,156", + "created": 1577725268.1560988, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Buffer size after corrupting stp state): result = 2 ()", + "module": "test", + "msecs": 156.0988426208496, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.6931095123291, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 156.13269805908203, + "msg": "Buffer size after corrupting stp state is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 72.72696495056152, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.3855438232421875e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0007810592651367188, + "time_finished": "2019-12-30 18:01:08,156", + "time_start": "2019-12-30 18:01:08,155" + }, + "_xOCgkI9yEemg3cv-3xZ25Q": { + "args": null, + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.147633, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 44, + "message": "_xOCgkI9yEemg3cv-3xZ25Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 147.63307571411133, + "msg": "_xOCgkI9yEemg3cv-3xZ25Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 64.22734260559082, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + "b'::>'" + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1484537, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "process_frame_pattern_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 39, + "message": "Processing testframe: \"b'::>'\"", + "module": "test_stp", + "moduleLogger": [ + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.147737, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 98, + "message": "STP: data sync (3a) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "module": "stp", + "msecs": 147.7370262145996, + "msg": "%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 64.3312931060791, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 60 + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.1478052, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 103, + "message": "STP: start pattern (3a 3c) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 147.80521392822266, + "msg": "%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 64.39948081970215, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,147", + "created": 1577725268.1479301, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 147.93014526367188, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 64.52441215515137, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 61 + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1480007, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 129, + "message": "STP: store sync pattern (3a 3d) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 148.00071716308594, + "msg": "%s store sync pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 64.59498405456543, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1480904, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 148.09036254882812, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 64.68462944030762, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 61 + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1481595, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 129, + "message": "STP: store sync pattern (3a 3d) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA", + "module": "stp", + "msecs": 148.15950393676758, + "msg": "%s store sync pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 64.75377082824707, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58 + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1482272, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 114, + "message": "STP: data sync (3a) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "module": "stp", + "msecs": 148.22721481323242, + "msg": "%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 64.82148170471191, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + 58, + 62 + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1482916, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 124, + "message": "STP: end pattern (3a 3e) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "module": "stp", + "msecs": 148.29158782958984, + "msg": "%s end pattern (%02x %02x) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 64.88585472106934, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP:", + "(21): 74 65 73 74 66 72 61 6d 65 20 66 6f 72 20 3a 3c 73 74 70 3a 3e" + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1483846, + "exc_info": null, + "exc_text": null, + "filename": "stp.py", + "funcName": "process", + "levelname": "INFO", + "levelno": 20, + "lineno": 145, + "message": "STP: message identified - (21): 74 65 73 74 66 72 61 6d 65 20 66 6f 72 20 3a 3c 73 74 70 3a 3e", + "module": "stp", + "msecs": 148.38457107543945, + "msg": "%s message identified - %s", + "name": "STRINGTOOLS", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/stringtools/stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 64.97883796691895, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 148.4537124633789, + "msg": "Processing testframe: \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.0479793548584, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 6.914138793945312e-05 + }, + { + "args": [ + "[b'testframe for :']", + "" + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1486325, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "Processed STP-Frame is correct (Content [b'testframe for :'] and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "Processed STP-Frame", + "[ b'testframe for :' ]", + "" + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.148533, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (Processed STP-Frame): [ b'testframe for :' ] ()", + "module": "test", + "msecs": 148.53310585021973, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.12737274169922, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "Processed STP-Frame", + "[ b'testframe for :' ]", + "" + ], + "asctime": "2019-12-30 18:01:08,148", + "created": 1577725268.1485798, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (Processed STP-Frame): result = [ b'testframe for :' ] ()", + "module": "test", + "msecs": 148.57983589172363, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.17410278320312, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 148.63252639770508, + "msg": "Processed STP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 65.22679328918457, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 5.269050598144531e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.00099945068359375, + "time_finished": "2019-12-30 18:01:08,148", + "time_start": "2019-12-30 18:01:08,147" + }, + "_xiZqMI92Eemg3cv-3xZ25Q": { + "args": null, + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1455705, + "exc_info": null, + "exc_text": null, + "filename": "__init__.py", + "funcName": "testrun", + "levelname": "INFO", + "levelno": 20, + "lineno": 41, + "message": "_xiZqMI92Eemg3cv-3xZ25Q", + "module": "__init__", + "moduleLogger": [], + "msecs": 145.5705165863037, + "msg": "_xiZqMI92Eemg3cv-3xZ25Q", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/__init__.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.1647834777832, + "stack_info": null, + "testcaseLogger": [ + { + "args": [ + "b'testframe for :'" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1456487, + "exc_info": null, + "exc_text": null, + "filename": "test_stp.py", + "funcName": "build_frame_pattern_chk", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 23, + "message": "Creating testframe including start and end pattern for \"b'testframe for :'\"", + "module": "test_stp", + "moduleLogger": [], + "msecs": 145.64871788024902, + "msg": "Creating testframe including start and end pattern for \"%s\"", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/tests/test_stp.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.242984771728516, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.0 + }, + { + "args": [ + "b'::>'", + "" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1457665, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "equivalency_chk", + "levelname": "INFO", + "levelno": 20, + "lineno": 142, + "message": "STP-Frame is correct (Content b'::>' and Type is ).", + "module": "test", + "moduleLogger": [ + { + "args": [ + "STP-Frame", + "b'::>'", + "" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1456978, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_result__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 22, + "message": "Result (STP-Frame): b'::>' ()", + "module": "test", + "msecs": 145.69783210754395, + "msg": "Result (%s): %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.29209899902344, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + }, + { + "args": [ + "STP-Frame", + "b'::>'", + "" + ], + "asctime": "2019-12-30 18:01:08,145", + "created": 1577725268.1457324, + "exc_info": null, + "exc_text": null, + "filename": "test.py", + "funcName": "__report_expectation_equivalency__", + "levelname": "DEBUG", + "levelno": 10, + "lineno": 26, + "message": "Expectation (STP-Frame): result = b'::>' ()", + "module": "test", + "msecs": 145.73240280151367, + "msg": "Expectation (%s): result = %s (%s)", + "name": "__unittest__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.326669692993164, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread" + } + ], + "msecs": 145.7664966583252, + "msg": "STP-Frame is correct (Content %s and Type is %s).", + "name": "__tLogger__", + "pathname": "/user_data/data/dirk/prj/modules/stringtools/unittest/src/unittest/test.py", + "process": 14677, + "processName": "MainProcess", + "relativeCreated": 62.36076354980469, + "stack_info": null, + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 3.409385681152344e-05 + } + ], + "thread": 140565878331200, + "threadName": "MainThread", + "time_consumption": 0.00019598007202148438, + "time_finished": "2019-12-30 18:01:08,145", + "time_start": "2019-12-30 18:01:08,145" + } + }, + "testrun_id": "p3", + "time_consumption": 0.01386570930480957, + "uid_list_sorted": [ + "_XzMFcHYZEem_kd-7nxt1sg", + "_pavPUHsZEemK6PYOxF9rHw", + "_rhV88Hu9Eemborg4LxXa3A", + "_9ahP4Hu7Eemborg4LxXa3A", + "_fp-i0Hu8Eemborg4LxXa3A", + "_Y_h3gH5CEemxr4bbKXhxkg", + "_G40UUH5DEemxr4bbKXhxkg", + "_QjJiIIwZEem5qYOdmXl77A", + "_ZhyRAI9OEemAMMFgxXT6lA", + "_-yWo4I9sEemg3cv-3xZ25Q", + "_xiZqMI92Eemg3cv-3xZ25Q", + "_Bd9TgI9tEemg3cv-3xZ25Q", + "_NpOWgI9tEemg3cv-3xZ25Q", + "_xOCgkI9yEemg3cv-3xZ25Q", + "_5_z4MI9yEemg3cv-3xZ25Q", + "_n3BdUCcREeqsHsnJQYCN8Q", + "_dpJzwCcUEeqsHsnJQYCN8Q", + "_wMotUCclEeqsHsnJQYCN8Q" + ] + } + ], + "unittest_information": { + "Version": "d720b191532eb97d77fbb9aafb67181a" + } +} \ No newline at end of file diff --git a/_testresults_/unittest.pdf b/_testresults_/unittest.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1e9eacbf27b291713eda193389f0c4efd3ac8413 GIT binary patch literal 287973 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
    DfsuQ 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%0Ay(V@iJQY?gKd8r!P zA-2T)IGso(g*t@oo)z;^Uv#ELl0=-{wZz?O{v}ulijh&6r#Lsw-M97v2bU3``!DD2 zzplr!vi|=GkGhaD);E3rL}~<_AHw`6JZc_4&U%$$XEdj%>a1s5p~z}1-e@Fpt#~yw z2u0*a?95HfNa%1Mac>_TI0mFv;Fr9ux#uz;J0}?-{irx);3s>YHc_>B9*S57=!b$G z>Sw(49ryIDY$^j<%<+$k{zk{mFFU7c@k6b@1U4{=?(tiv4C&h!uawp9=zY3%FLx)| zZ)73$Z)73$Z)D-^$A3WmbJdu$Ns2>V*eFc2&}aHMiw@~ z|3(&QJ^mZA@Jijv{rtZo3$QP|-^jw?Kghy})7A-)z6<03Ko;7+kp(+Dw{uVxbkII1 z1B45aE(;7Pf+3kz1B&MEwTRID7Fb~M;1#Ib>e~h{g^DrDkV?syAW#bgW6P@Z1!j$i zBxRG(MC*$8*10uBWMXpnh$gkm;=tP(+Qo4q>g7-(NZ^nX7vgnY$%oIx;l5T%Pa%z} zMi27qd4nNTnqanjzJ5hS<)A|HSZ$iO1Q;FIf0TuszmbR!>&?Um*RF|NIlf05aUOhYDm;0f@jV$Wg?3|HF-AR z=z=VuuDZbJ{1T38I>HDo3q??Ml?}U009_yrAlUq{?p%2n5`xw9!B z!sY-9&6i|peQ=9AWOvNEBW?{NQ8_b4e_Ssa1b-U4Y2gx~2qpEX#u|Vj4rxAOC?wGh z7%jT)G9(d@h-={jPXG^4oT_-hu)$cZw~ru15F4E#jEtFQrVg(6HtV(wzQW1s&kYv- zNSI#;Zs2EptTa>|-xG>bE%vWEt{9W8xWSd3}7_ z4v_4M=G9~k1kA`EQLKR*o=MGmPn)s41cx1iF*Mj?5iYl4vgoQGzByzZ7^@GhSUA7` zK;g!45mzyw$q)moi8FM;8ws#7qG^qV3|N*bATn1~e8e2>ri%E7k!h7^Aom2s4?37x zhc=Mk0pL!TX!xw)Cm0DAZIw^Wc3TkH=*h2i|vh%q(X~X(-wkP zZ8*%m)@|{$MAjfF)o3$32ZfhWORlr#l-4-B57!hUuMe?k*M_+5!ye~^*EKgBN{j_J zwTT%4KcZO^Ks(SsIhkEufj&DX$sLa+?#NJ~xxeWNc+rUOCyvGCgahC$uG|1;fllY|OI4rg)`G)qpQU${#gyirfMjN25hR*?>Zw@K^; zN5>h}$ZbNqlI;YrK_bgJ*`hJ~Yt!6lv*+PVFJHo%-i;B<#%Er%=VOTBAo*NfD43=e ziu~U11iQPpVTioa-wt;fxH9Bzow+5ZC9-D@FB!YNB+5?3=?3m+NnPLkAf#gx^AvQG z_I-_@GbT?C)4!ueXGD>OH&MOIdSZZ2E=|LqjYA5l^T^|7@+jvHcG_B0sntU<1dvS2 zxYVi@{#?443E>u35N`Dfk@|;ONR&WWpTU*YM-CiP_qG}*4m*ki_?7a=RdB%}UY)Cq zf6C)=j=pbArhv_%CN|fX%5B3zhd+;h;n2Zqrx-V5f4fFo3Sqpho{<8HNXV=>`0mTG zL~Ad;BTeXTi3=3j4{^&GE;JCYTHOI@H5ibQI*DD8I*m=K^xjOnD#li7^v4f^1cOZ)P z4F<8x?WYJTJWY^CGE3lRkk3yGULgw*$?b=zVs#j0#=Sgw%Brk-I|B3Qr!4Wp)MQSm zY;zoQrQ&92lQF*>`XL3=JVRgP{K6Xn7b}$}iD92|X3Qbg)-;5bii#hMF!oB;F8ZQ1 zl}TKl`Xdh!FFS$AX2H^q^X1`0xia1nfjEufHQ1xVwp7(>Gwz_fzqWPdYLqEwnE0sY zoL%KI{J7(zSCzCELv`U zT^BX0Jk&9Y50PJxf(TK-?TKEGYU~hB4eZ{(0E&_dJix z<8(FcV@G$%=+duEo9x_j)4s3QCxiQ4C8_-UgZA;}pdf-jD369nWNP%0XkqBr54PyK zWZ1Pg1uS#20uyYQvJo=ahd)%Sk?P%MA2AZEL|5tKQx@nQlKb2T`g+h3XWK`x%^oNX z%YLm`UfVo1NZ_^?kB~O@7$@@W70gdS7ac-0{nSD7lS>3Y`gp#xC0j|@^`b|T4-#G7 zI8aH;Gwiy0)Fz)2I>y2eH?tY12O)z4zPo+ptQD6ZmstngGnsE1%v>6UD?8ZhU5 z-Ur_dzrFuB#Nc2Wn8WNM29fUa@W1Z%hgVm>CtmGN`R4O;<%xd42$j^kf!bf59Eqr2>FlM&Z2ZIcI#aUVW>e~dgIxa?Ttu(2%X z0Z6}H`f=lO8>nxI(DYh2cS9=B11)&aN*05ktaP-TNfT9=-9p2fL+s6<9)MZgRPOp` zCl9FE9tbEYjA2dhjZZSdTN7SL!FJ`p6VuTJh_@7XH1;=@L?NvHrvJKlSQu+#8e-#Y z0Q~2iN?tbaAYuLznGc$v-;K;CT|7z1j{!guU17`}&boTE;x&1rmV78{vIH6%?jIgL zFf}(GQn8E@Q!mv)%kNEn0qxaQW-vrU2$1W&gyE$bgeTPMA{=>d-{J<{)tbvoLb~Dx zjd8a&UjwPkfqw!5dqVt!f)mv6fHN5#bQ~l(%>H=FEelU-urARqVVAwK4fCLV+c)7W0{_8G~i&Z2|_>6cp= zfgb1&47V?S{bw4PE}O*$uj8?J9pMk0Mh}U(T1y(vxG|!nf9y2PVLaLJ^p`7b2ntJH zX?WNqY5X3fM+B|{DOAKzpD65WcP3H~4?XtIG}h^JJr@37`+g!ujb88=;Y>lW>JG?? zh(P4>)bZKWI%VbJ)I7+J>^wo&+MzidTp}1E8~}|wLWIQ!06l!D9Xwi@5p&OMuSUGOqge|v8m{}`aUe2o(Ly< zve%J4fyxyPME6e}3J3>@xE74rB1Rp=%a0o3elnu%pLfO>Wd)KVHo=pT73YO7;yLuH zaX;z~M(c=1yL^K^;@? zQ;{HSogTB#8W2sF6YvBCNH@ci#!duE58CQzQXu)i4OegpB@hXwFWkcRCKK5tHW@Hi zsG58VMEhDj3KkR1q;e1H4u~>VgBJ=de1AG8_1eV(-rqeZKwzonexw8g7)7sI#r+O~ z0FV=#p9a!uz>-+(W>n>`V#}b9$L_W2Uh_9TbpyC){ zy^)`QD+t7}{<<^O^AhLj@~r1Igatky{J5{Pw;Bp5Su?<#{J1zuJcwalJ861{gQRMd?M|Egf31NQP4Ou+w4~h%^F7ebkP#8{xlWu7im=@odcGegAmx zcfHuy++IYo`)P9~X|W`c|9}e-zu-bjbZz3lNB@)N+Nl2l7cNZr;@NcJ=*0SXe2a!h z+r$_sL1>VAEB~G}ch{c%(+oBCUbFu&`gn|a#72fINtMA$f=MynG-0`yCQGmXC1A75 z?7^gpr#@Q)W=z?1VNm4LoIUn0+RLfd0egPMg%bOzdmb1~w4=<_4!uCB{@s%~zL&SoCF4UR?B&FR?oY_46_p?PGhB0}5CS%8YcS{(p2Ojuw3Yq!Tzs zawOKSK)})4p-~R$a{H51FE-9`UDes&Y{U*<$>{5#6E8VuG*&!uyJp4ua&kec@}gtE z{X@(LkrOEXV=hc|8__9Gygr|Q29c}ZAuXFub{z|2cx6eP=73wKX5)Ufjmaki@*}dz zq_mI;g~o!*l@tXoUEC*$t+ZcsM}B0ILEjr(^qZAHQ zwQroVP0INnJ z2?I5#u+HW>eY&O4hCE2Tyxkgy7a_VXz&7;1nu`*yWq=)Rm|bK z|DBD`;*?P15WJe)hE^Z}c7giDZC=ZMD}RO080WAPxix3T6ya5eTudk}t@&^ZNoT(n zGQ~)Wt;;J+1n^l4S(Jw+5i99}C9d~B>OxMG4G$=OAzdUP2C}h5T&WVH@yc0wXQ@mY z%gBAPCGtXEszuFF3?O;xQLT+H~@2Nz};Hwu%*_-YDz92OyVSv|kp zv3Z6D0aF%;BZ_R-Tl-YA5>wSvfebb6kr(`Hz993LLjr+&2D89opzH)KcRFFHLF%Qg zaBrt(ihuK;H^3Uoh4lNDm1VP2a3r#+H(QdP6%!?zThjzSUDRYOy^gslsMe&G9LfYI z2Gp0A*-e<_lg7}Rr9wTzL#pzL?`iX@py3S`lPm&R@?|=q$*vrk3=O(%$#9cVO)yp7 zn_1@iSoyW0tD3tnGv+H5pJ;M z&O$dCbi#WwK(2Xfy_u=ZMB#G|{=W8bY1lzrVG5Ga=XmL^8WX&#(>Q1v&kBmgcDRK< z=VbLt8>b<;FU9R>2IH*2qfOnEdVa&s9}VVGGa1v3r%~wKrH?ZJFi|_2wUY$B(cU36 z>XI|X?BH@TC=Qw6<&l7hR843OSpWlP7z7kb0r??-NQr4D-7!&MZS-q47~9QJXA82y z92E^gdy`?ONnjEEjO_V;yDi;J8PHkwjcP{!os&M&z}(<(p$E!+vrfbeYh(8Z0CR`* zQ%{7mko(gTykD>#ct1tz`qghcoaVLqm{SPE-R>xR`2u(dSa=g~fu@`2`B3KMj!<*c zXAUXr-R#R@GzD`nv5xX0yAJ59diiEKoFvgQL zCyl2w2phZC7jO!I)P1p?H_Q(Njo z%&M{01mybggw+$_YN+in27Ma>ZED`wR_4ZP6tQjHOHJH_v{LkQ7)qL&~hK z!0$FBNUNmuDo>Y@(}H3f>(8cEXk;k6QmZ(Ps2aA6N6~_?(of$)m!9+ z9uRbB_cnl)JT@o%2gaWzQ@SuyUuHo-(Yc}b{tKvqgLp_-q^y9Cy5C}^dBJz{_da<~ zBKL;%_4)I_Yd!;iEkcIYF6}*s$^8`_vj2Pn`}(`xyT+lYdwlPHr-1n=(}KTEV49lo z#$>bgvnK!Y5k*1FdbCfeB!IrL1i%tLT`Dh`7yZHoPVo<(FLJu)zpX0%TRSYr|2}i< zTI;{K3-5`jv|!cJ-SUSLVn;iRRL(0VmB88$V;lAtw~n5AqagV6QjxEAHQ zO8+j{Uw0H(=UW&V$@j_h!!rT4aW3t4nx}X3;dIx*&sXQlPWvu;TE*~sp?Ir$yZ`vL zr4R43HT!+l6YxTEFl@`ODV9z{Qq&kNWP1E>T32Ouh>DG?Jj_$rt|z zUNn0rgMu+EJU_1uGJapiCZeqk3HX9ofQL^J-r{;_*H;L?#7I875z41TXr(P5ol=cM z2qW5tJWDdz)oH|6h`+kuL-@=wjsSgXmVA$DfI<1d6hf9td4G-I5`WCNK z>LE!#%)y%{hjiJSl1w?n3g9bNitBqw+1cOY1eFBl3E7Q*jjI5%bcsbuZaBbW?2UwY_nM^z?>}&hH zQVxc~AzC4EH92P93%>5WQFeFj`Rc%Np>JkbT|p06q>-7HGoUyq(vENc;Fu62Jam6Q z5rJQ+FT1eSO7!Ig8pU9#abbaF(`gAI1W7ai6cq1WAgv6$e~JJn95x{8kG1-YBkI4) zSXvwc`~<0gMURa{JGIn6m!yEk=bbLNO-}MZ?85$!BaSTQ{=SNODoalZ^O);^!Q|sGf9`gz5xq@~zZq27m{Z^I z-}Y%a$UB(=B5|4$gsCCRgZ(^ehjKs0$uaER2ub4)eLfp!w9xk1uT2x5%Wai#o!NU0 z1Gs`gi+c$M{)cEF!)ktz#6v_UK&L3o<56Wc>9oK$8F1+U?NTBdL%bGSFK!KRtD#eA z!qkG+YoY6fcI4(jW+$>W&`p&9$4c1#)@BqlrUV0REy-r1oqAuFDXC!Cnn)NUMy#P) zTd3#~wUB#_1ckv4c_&|Rh&uf`-0&_rRd*`H?I8?w$j{<>kqU96y-RBZd5>ve5$rGQ zS3}qkBT9rxwop_+P*MxLct(JNZqo)<1fm?>VIxZouxN!DAP)*{kM{5pAb*2dzQ_?f zAo!B~5XfFgo{;+S(~RZL?6d((!F4+xpX)ilT}tUHts>|pdmyY(WRgwOR)oW)QXz<;OxI*S4WWw9f-N49>uJ z-eN@7;(-{VxbcpvGXz?81U_@g5a3ozN`p$(g45|2G4?TPV0h(ehsrEh{yCylD%7r6 zlm13`z1O=A^cXYbQi5DL4#T8YlhJPtzS_=^)Z`E^4cj3vP3tzEO3Yk}iU}Nd3LE!W zYWwN16*#p^$R_6lBu#f}Ua)#Q+mp?Ya;(}g)fU?72l%Z1zUsk@Mf}@X|B~ZI%o20& zL@*a3Pe%7Jz!H`INNq=p zU`qn;K4cc>yNr2kgEp8eVNSe^1coVyG@ltr!sgc{?Et#&`xzW0bqO@uS^jNe|3}|= z46u3$&np!a;O-?dDJm;nw)tLojplzvvLgm!w#FqD0@VGKYBI`>^ET@|)o#19 zPN0DB^!nV!cxfU;DS;~%BkGZ!4l*eWBGL@@cI|Bbw~CoKwdDR9WiY9NE|~IMR*@`F~+n#8=_}_EN*IL@Y+7XK1 zT;2S;5@tE(E-9L20Ez4$IN;ThU1cngNE&h>+=--Pvz@xV1JTCn@s1iPXd8G&d-3Cg z4qqOVdiN8<+cVtgklF$IW$$;mGVU&N5f3Oz$rAP)@8mEFm~eCuoY3k2m%lKY{_8KW z+(j+CJ*Mp-i)rma1yK;zhyRbi&{g^1qiD6c`;^6}ev_-PlIbABDXIctKP@yI+Kh}( z6ePich5Vaj$z(K4Uzi1wo)p-J!+3?x$x@F`ZVHLB9@s!v?9Wh_IQX2bs?t$+xIL{@ zovNB?o~gZWCL=toVX@|um+Y9pHiTOM$oO0NI=26~IUSWn8uIY3FUdeLMK78?(RCP;rj?qG-~sx^gx{ak}Knv^D&316dL)u|<*0);G1x zn4Y(wq0n~5tcxU?s2ow}9$2hQd+jikmS)V*oYYhiwKI?P&adlmSF(mSs=%b+`WFBx zs;-y`h@B1nL(t?a2^f;8!``6>puu1*U`{{x8*6;DxF32^iSY^*Y>o0ISLC z5=ZmHqkvaUUGBD>7O~y|8Jw(2NjLqdvFYVDKMVA%H*|dzh;lnS$VBqCb066#@^U`HJmQ)lRH->Ivkuix7=<8+z z1we)BTP=g1Obb8oVX59skXYEbVhS?$3ot~jt!jS44sVAyqP2kWL?#rPFfZ5gXUO<- z^Y(i9Gw{|Ah+#A;<@DPgdE%+ zpNilkG$(eYF$(%ziv@$3-JrpFx9Q(kiPOCMIoM}Zx>7}6Vi3$tb#?jI zUo(M53mo$KfYiM4AAzCy)F72>n;GdnYMG>QK4aE)qsP7;6Foj?b~?Uj4%gR2 z{4BKBIzU2r8Z{Wt0iD*wR~BUD@_z&dPTj789irJt-oFr5jzi?@39ZnQcP=( zZf<^dmaJ$`I>j>Lg#Y^Jt{d4RWTeeeOqdNz_Ce+Bym={U&jFeE#1ZHV-&+q`Qco{) zDLKVdCf}pJXq7871wIy^w^J(-Kmk1iw^OBnz&ZIG)(a4pRL8BES=AY311e@(ouwMg zs;n!x&*`GN8&>6(E9V9kVZ%>LmmW2cuSH0V3&9wYhG}unW~sC#yw%XjWF$pI$YpZ0 zgZ@3)J!dzpvmtt6cW$#U{Idfof`NQKDq%-C%!UDLgNDf#LIjF&l{6O|J1!z|fQEBZ1+|THsYK)_f zb_5jVxXsIPK4*InUBpYM&yOZh2g<(CEtXF0M!x9>F?#G2XdG&I3$Qk3<1euF>!z<5wQQ-d*yJCPT==9V2n)C*#CF7=3x6jyHEcA zGW|H1{*O$*-=3BKZKj{5wlxkrieH|7!Pv7XaZZ*?KZp~dZ9!=KD`Cxja25?Ii$^eh z{P%~S`E}6sj_h)*^z%Tp*t<*Z9w$~!mlaiowsZ?uZl(lPZf-l`D5+%0GIp+&$7(UC zM|A~6Zg#W#J_+X1?{BhgG>@fKa?i$oBq)LPRLU?YLf&FlSP?$T=V0h9P7{(I?g^1CEHle7>?h?;% zx^@vz1Nt$6pcsqRkPK$OM!1@eLIlSyGTh4wYXC;x?g7+#*@$QoFq||O4P6LrD+^8^vW z2Ov2PVb(~aaN^;j@j&J@mj5O+ks6N=*uf6C9|&oE%%@pi@ph%4_YhexJe=y4X{Ns_iGXd%P|vSipf>)*#qgU)DoG ztVvc;sdOxyrYnOT;pD6P$=6b=|LBJoAyN&lBuNIE%#V@`0`18ph>7pc7;)=WgR2WF zUT&5a6j@`5~duXHS>C6R*YME6Ws%v@s3uSYbjsQs2hx*{+?F|b_p3Rp;#w*{m ziEqZf*1vDF`{(oEbI#JQwb!GsbKRo6>|fkJ`G5bC?z*!7$lmTpL!Ioa+h#0Cs*s8^ z?`LM9l$T{`^h*ANzdUly)Gxl}8yK@W`GAtv8Ugb4Adm#Xc3UH!x&l2|}dd$lk(8t}!h(hS6q)?!19O z+hHoQjy9x5ire*t?@cr4Xdvt9n)kF64hf?#2+I1;X`A@sogMzne_1bdVT`%#$OFy8uYsJihl}d zWphc~9{C!wkGDo|a}%IuY#$L`-)(Y#J0-bOYLncTmYj!A0C6P6u#J3a&?gzBEBBmR z{fmLtvuYtj*W2v)FomIpBi;vVxPcw}Em*zJEVzk))>eq4|3bVzNqU(M8M}00IGpNR zwARi?LtWgtB70QZS{{G+>=7QSGS+#)yR9B+0q$atcs+PSU5Kl(z2SV%_9q78BHcQK zK2>kDo^{Y5Zeo9|$CT>=Eh_@OG2@(ILx#zZX8X7Bc!4|rqZi)I5dP#Npp8!UK54Fx zAm|?(BHY6w3e%rWtTjWVs{p9Y5Ekq~CtyRBv3e5CW_ZI2OSX?ZxOwqg(MDN8O({V> z8K}wEo-e-V)ITH4Zy2jsu>(TJ>y;f^xPz4!&vkm>uC10Er^@={?vDCz zuomR06iu;)vKV=;wh&eA{ORspByU9Gy zYf<-Ve${l-aVf#maSIw1dn4D>Pkn%${6Opf-yxZk{l64R{f7AcuZP?d9BX^xw)>AS zs1{KL&T@}zOupb!i>xt1!OUj!vn5smoxCfEhLWmk>CErySwcVtXq+{0v_)S7} zof{g?TS7~4bzp9f`)MqC(q5;Iqh0;ET;3m?Pl7BQ2AEko@bg4TL@-9KBnyXUuRE*P zYnMiiXnS;WVj?WPSvdx{GxEJ0-?vZapcZpp43Pb_Zj9I#SQd_ex^tY<7 zpU%_34u5n6E*wMPV7>S;6q#nhuiuiA5Cd93Kea6gnG|%_?(`HG{Vljm}p7ayDjRq;I#kZw8DV- zY+mmWVr2O&J)2)Ve5&b>5gT2BKTI2d@L{I|76 zn>E4>D>I3-qaR|%oVbMv@OTHKY=&pC_qi}a-r;a%QK!8gIZBSX5a$*xl(hgwVwH zpNJz%>lO!A!@P3Ny~lVc?V5*Y6#9;axi2sdhwu!SkQ=OSi(%%5rIW7nd3>1ANY@MR z8+q{*r@>Jg5J}}?v`+Cq%dQpR>-#c$t zII$qKkZoof@o5(}23{u?Ftk^%DB}0((+1AaaiHxtcydq^FsaGSW8t{wE`XMMI%~** zXb`rfi|@kSH`GN44bcEr24wKM1P8ynWqSzdNvuW&19D%UBA=kMvUj^h^~|Hu zQI_zUEti|9;cT5~%cX&f=jOmT3+7Kr&*N5-Vxv<`MqL-o<1UERhEz!JMbh3`ekV@v z(++mgNG)p3AshJ!pC$xAtA&(pVN1noZFB4Vri?XnjjnZ!_XM5>h{qJW6JBnkjZ8tf z1eh~mgM?kJEUHcoYlP^ib4`$S59Rm?$rD@I(iT@kt2{0a2;x@G=Y{OY3xRdH^2cTss`7Z`JK zqFTq?-HWBAsW!}`&pE{E6WN8~B^tSN2s91OI*7yBg^}09GMNh+J zoDt-shqw|Rx)V>zrm8qXI9OmRd_0nN2X~g7Vdu1)vpl$|kz`q@0{cTZ69%;sKnEPQ zQIqZ&Uw_KL356E0eO{YvirZp#rUfqcFcl9L6k-J{bf{A==fW0tEp3aM-Ruk5Q;^06 z<(5|)HNQ(o7HAP*y!TwnW3*ne;(%D;q}8l+Z*|&K&}dtgs4cVK@Z0zHT(TI z7&0i4bY-mXn2VNpWPQ!%5elZ%skIX>G)jCZ&&Eq)vDh)8c%3SPQuZ?~Z3+ba-@F~t zwZ_pz3>j1%3Jr>Miu9JuZ0dG9)(ZGfqCx&tGKFl;h`!bS%Pq2REjzRpBj^WB#;JFK z)p6(5RG4+ysSRpnP}BDO>Iy&HU}sQh&`{_!cp22>$I$Z#VJ1vdbDYa_Kgl>IVP@^Se(#UWmucUQqTRBkHD8gjYSRqsFB|Ow8Yt}z{X%Fqmq*4O6 z2#<*yp+!<&kp@IYd&K~q0ME;fM9B1x8hd(+u0Jy z(z>8o+!s(A-g8rTZ!bHu17h*En1Wlx<6;SsH8sx)bfbv+doKCoAcpE>D=%Rso@{3| z*SdFJEO1x@S^hc6@ykGfWfy8cugwArkMt-w7?)LMLf!^S1bA=KGjBaB*?TGjp(1tV zS#;^bM(c9uNC_3NBp9=3Xa1n&?!uB~PR5SdOWF?&J`C^mwt`St`a+JE&`O&Xs}?xe zH#H4i^Xzjdaamw-K);W?x<$KY$IYiJNgY38Gd_&=rPkKd4cjRA2ieFOb1fp~nvt+o zqd0DvD*3 z#8ymC zIR-J)P|4o*LYmnNHDRFb6dZ>7ZQN+5peci@=F)2ALtw|apUVPmNgm5RUOMuM$$X{+ zzUQWpR2g3uGGYhUZ!bt=82_1Dw(t;nhQ=3c|%4+zLXfg%|4h?{D7|FNac zWVZzUq{5)q00ZV;WH*`bw4GpZ15yi24ffPK`t~Q;!dEY zLaff8E&vz+R&sXsd+9?$M{}q#D1hH~Bgoy*l{p{?H{ZwtvK`KgdUm^IJ|l)IF9@Z1 z_M2thcH0ny9l%BxqRw!4KiRiBnt0g(!cp6es|QD;LU1S$d~MU}Qe;qLSouNI;#OC% zPHNFBpVuq}7SA^22Wao51>ca`&-xPd$Tq<5G%&j14h%Jo5HaQ|2F`$kkUrEc@i3CS zFK$7RH+&dIA$^m;&LX8o*Yd8~7qgFTVbj(ATj+^_ofS%-q((24OXmXZaTxDz%jL#p!2Zx@v{WU#W$8SoVEB2bY|SRO_68BI2Evwsk5|JRLoyj@r*oYbPZK zzG12!nDy#T@K26gPeeg?G2Kyrb)6B95!? zr`^p&WpDu4dZ?cRygM$=GZR35443vVS;xVp99+Zv~V9A zyhM8gvR-UveYiWAx5zokq6{INf8t%!nn5!i`D|w{y@wzgbS$hl-hqkzR0Np697Ry8s)An-^A_@XmLpMX$ zr7NE9@UK6J7}0DNEZbko#nQ9WN3{$NPb?ke5*+(#e}GMnXp6o~sxWG`@+)GsRI6)o z6J6`WENTww7IQox-$P?W*uBYf1xN3xUHzmsHzvS7_Af%Qh0$N`GeYx>lhY7@s}wYS^&ie| zgI8ZlQu^a3))l?w{vu}LwSL4Ub;nNc_3UlW^y90EpRw{BOc~(zHa@?k@iEAV)aeZ# z(+f4OLN>9|S@<%w6O;?K1I1QA5iIGXk!zVlz3whbb9aSPQo7JcdV^O!=*5OsF&O_^ zuNL>NJh|2&Jib^KR|rM z{EL^&C}=&|-FEGL`L#Ht`_2{z)O=}A!OzIhQ~dMfnxZ4vAy^|AJ;2Bd>wgxe!?P0Q5V*aM;n*; ze4lUE+(9LKS_%;T^b>uZd2_XP^k+*KPrjY*M;}|(RSKfqhvcLTT{yHww;#Jt*J0{E zA5<-3|3oiU1^6FAwzb%~`aDx=v(A&(jYfkOmIJLy~(gMlY znW(_>Su{qets}ILQ9Ox-&2-F*J9#0ftdefqa+TnFe+1+B9)7;3=?gH#_|LfQ#mcKC z`#SNya=e>7f{y$NuD(M`uk}Rh2wQeEParyNf7aIQd7}GHH1gPHBa zXQ7!=&0RM_Q8O-b2QYm(_rMKE78DzDHI$^No{G$Ezx_AKzFL1rKt}*I;LZ)KUGp1cSPL@hRF}slKw!`onZ4y^oXkE&`*r$d1h5pu zJDj6_bRpYO=i4S|G<$2C%xp})N2ifN&cPVs{(K*`O%kySOF;Q~1^9UW%=@!32@;G9 z*5M;>e>V!(@Ea_V2sC{Al$~96=Ekm5c;9-&wn#YSbQsSwBDPIo^-4c`zR!}Nq|23Ld2ICLJXGZ6X0;uHDFY zONm69EE0JZJb!Ic0hIey1oS$RT`5NGKx9C+Cx1?Zav&+zR~D5ib|MnADmSU_3s{$i zO{(gNY_80;c|P~xo)RNyuw}_`@ShtZCzuY7X5lr`R!!a@5xQ8iPeUcjgC4R?l{A@e zDT~u^7i0QURUf(e4b^i(gj7adxi^$qNrXKcJjPWnM;;C0o4x5(rq(^3rTfByEM4{N ztTe1D4T(2e&|Yr6dFq%+M=eYf)z2V^H!VvYr#-uf-#->}P7>IER}5Ko*6FiTH2^nA zb;LWK{$noWp{2e**Rw?zn&M#op9_zlK7(UnNy(5k_HMxV%A*->*saa_pPS#kuTD_Yzb3uv&I7f- zFLArCNOOaauS7F%4fw98(r}0e7oG?D5)^Ex#$hm?$E|HIKUiNGI3DixcSsDL2TSRe z+v-C#?hmU!lW61Uv+egcpTFOl-|zPDc-{;zHt*ePmhk&jCgB|2>bb*F;O*}}U2+AM z2wroE!Pvxfj@0{48hT6webDagl@%lJSf_-ECL_&~bD;P*TIt#pWh?oT_hAh*8#P~X z1PVX%>omEb4J^VB%d!(+(oCyTK=ruO&smTxNEW0Uxd9nEdC&~^y3I=sP=9k38ak2I zEn}G8MQHL5JmVgjQSS^$7rM<%bJEX~vq|D5p(31~YOY2Rq;MV8Y8}xOwx%jW^_592 zJes_uTW7w_{j%0J9aoN-BWasA_6t%D&7IrN7uW!13Uk4dL+eodLoPJdjDai?*rDH; zu-05PXCta+!Pf$H+)ki5<#`LfKmE|0H5vU{fGLr-OEBWF3+NWj=osE|%gVG7aia~~ zccy>^4zD{l3XIVbms*A@gH4U)9%ibu=a0&+f75XY(n;sW7EDa=U%$3*_iBdL+UzZ! zcxu^}>4G-RmK012xB1rsOo}?+ek3MC%O6I!Pu69^RTBn!L~Di&jbM&1%q@{>v9s}l zWn3X=jD`mS&o$hPi0-$jW@EZ_nR@1d*{q*y-jL(uVBz1x??x82g?T)nRKQ7Y{qn_Z z5Y<2Pax?OjsY4`%68ljB)_|O|!HMYnhJ82!u&H4H-par@5jf)%HI5cu1a&g^xtiWc z#{uh7%iYLC*pv{V+}A5S`vWn4ca-8Lq&5!Tm~SoBvQybzN$Ji-6|i}-QV~}Uj2tGj zHIWcKr`r^lTipKT+-E#p9NnzoVjZiQ|HK=#ZKJ6c=W$nx!?E7bz*x0yL011=LuS;l zJ&^9ue6|05ilxg}rB(6p0xOMaCLi;{ywB znVxxT5LLM}_dhpxZwk*VSdM*nCH{y)^GSAh1tr&sPEblYf~^DbsusC~DIw}52-SfW zUD{>pY&J)8WMQI^lsoo~+1viD65roh#d@MKrOp<|V`p=}ku<}6`uYHX#H>lgH@iLM z&rI+`aFzXP87uNs{lGx){?V7aZ)dZ$Z?C`S*XU?7nho6h$z0yU8H>M~qa*m8>rqwD zOg2DBQ-Ft-00*>$2VzL<Je}6?Dmp73V(k z_r0qLkc1*z=aiphtC6IVWMVx*0wnv_9e8(1{LBNR(>1wQD*hXiZ4T8?p#|Q2GoUzHysl0Ofc! za)!EO@G{e(2^A@)rsPj9_&+DOG|=;ukHK9e3{>ieC^=s-Q$R#p_iu_xiO&^B@ZHxx z&6QO2CMoFFpd^1{;ZWe$0-srA%Zt3)wA}Ppw(24-q%Pq-82jh9ywQS)Y-IdiwDki> zvsR?8!cjBp598ZbHfTyba^kq~Rv26WGaf2510`j8{KWSm zlLFF-ltcJKcBZne*w})F^`v3gqlb_$o*FDqQ-+{`?Y>5(oV%hXdm*G7bSCVn>J?m^%l(XJa;KJ?y-Wy z5oH=R2SGTXbL-Hg)CO^Q!5NswmG1qRSznqy{kTd5|3*GQn3^SwyvbxA+P4diFt2Hl zH@xu6vK45r#$UX=lmY}B?An*SoJ8CR@^vk}N(wNa=)=!NPNwjIvQ`bv!P6EVBh?rF zAWdp1CCeW=?!95~d5;~VBOhvX|I{e;pdBbT%_&Q+ltqy|kZJCe7(UjKbT2QoHc@rl z?%|2XPKI_h$v|!8!7g6hvNDV0*5Im?^AyJzEla)SN%WQn_7XKFPi}G5<;jy2Cm<`+ z%oLVmF_B13bd;1=lzb=0a}IT2IYv-)zNhY1akt1i-%0}SBH3D6CoaKfv42{$y+XHm zQrriOPf;)_N|7(lP$UeLDBEJwsRZR)dr?B2*uX zCRrc#+GvuC?lL;HJF?h|;sR;wCQ*$A!M}5wJQ8P~utH%-K8@A#?$n4RaJ$?1WQ|4z;OQPP(i89wF_NiBi;XoBy^#_jILz?c|Ks3jSY} zuLbD?PoK%eqAE5 zX&mAZIXr>&Wbpm92Y~b|_elmSMXl$27~k+z8G zc~@>lNEtOuG|n%H+|`BEJW|mz6>Rb~@sUCRP!ETEEJ}g#5B}6kOiC#u6v+hIj=BS5 z7tt}GIKg`t)J~>ft(idnip5pdWd~`^Tw< z=MG?=5=nR;B+!}bB&%h~BeE4v62_3Ao3icqSYs=|p=LmSn#fjS{3%F~iU*dMoE2(e zv>yQjJk46XSu6>u>tv?rcCj8mo|4wqb8YEuQ3%?;c#6wHkMj9NfKBBC?BoziHEB%! zZst_aqcpIbMku{V!>+g^HM9*^7})i4hcpLZi(4#>8qZ}S51Ul@Qc$K2-U;1^f+wV= z!%>JwBP=f&8|2(&5}z^RCODSuj6sWK#bm}ToTIX0Tl`F$&GS>MH7e%p@^5mnuN~- z4SNKziEF*}=Z{Zc#y>ke&+*pwPpME_`d;Vh-bFa9(G+-N0}%BZk|nX9lflljIJUg{ z4nsR?aD+gdA)pqdaD?QF!=dtf$49r-9%+sg;6PkxrQ|35!e=PMN-HFP#bs7q_60Mp zttSRDpxSL_gC{j6<}!L_E!ifV&nEAA-@5T~)NH0{7>a2na-DT16}KwrGI6@Jh8|s_ zI*)C1v6;W=zo*Zz?q6=*Je)S&|Fm2cg8MIi3^c62$VK~!J0YnL49DF%J^OOQw`W4B zRFIapi72jk`rVn~o8K~O0Xeon$drJypF!WK5almEGBWGQL;EJz_8gx|_v9D%ZA1L7 zg;y2*Z_xWu@r^#ZV6{ap`*J}g%p@)K&jV_Rg0(E026xOB0}B7lfM#8>0a$X9%1^wy zPj4}qV=u+Z&-=B|%o+0&_PP1!)v)SF(JBy&L`n3ZUnK=#10n(jD==UF)8*+xP!sgk;dPHZ{USIjxiTEsxfrfi@}h2m1C$mT+GIv)Co zvmvspQhPqC2dV*QxK+mODvG(+ad$~hfLKho3@+NKr%VqcMyXFMCibK=Y~aCVZaTEU z-b$cS(2)$^X!WZQUC)AOD_d(jJ6;kiXT7s`IsOSX8a709Ga5nQ@C3IM+<&H&0 zRZdR86=y0C&#;y1UMzit&febj&Q*sR1HEA{Y#p=!G|X*$oui9V+X!$RbvA zqfKLVVDbR*v|xzXh0AvFY&8QIxTaY#q+n}77cS1gbH6nbJ@sL%rZFm0jsPE|McOM8 zA%gdds0-m9#7R04Z(eL#{6)#+Wg_xQj7l703hSj1#6$B)FIJoG-f34wYM7XkEwqsx z$X0WZi`3ngP2b23RZ?>M{8A-GI`^bW>nW67g$=HYqvQXg?44tLiNbZwz1y~J+qP}n zwr$(CZR^*z?cUAZHg|X5KIcwm&SXw*&LovoB`c{){ZVVx_pbMQpXb_28tl+mba*b% zNK+vU?uDRXF({;PS_^$ zq6~V_$au|!S5FmlWX}Z^>1)kg+c^*q^=<~HXZjeKCn#cX-A)Fklfm&eCBvirEQ3XQ zpp#slQ0CvK(%;s`it);bm^NH#RupaJVS^NjWl#Wm!IDMJS~4#^J+0ISl<_5Ff;0K>Jomhob4;ilo2NTqMct@5{od zI(rntmPsHFETJ@;su)_f#vPOg*r)$;+S(&fM}(_1wh&{Mey#2H0dq%Ls*g-SXoc>J z*?3kMOkrpxvqA9Ccd(1FxOo{{XJCE7i|zIOcUXo07tQkjU`^y?Vf`=G#Q%9{z>NA- z+z)Pe=SAHk)5b>^zFTJzA~KvTGDQMHBO%62umH8Nz>)<9>Fp!uegGmYuY`zA(?wr@ z@3897tMjrrUCk$^C@MUa^R7T>a3mJWeXtvy5zw8o+tT3tm+KCv)R?9=m9Wcsi3#SS z7X47eeuQAdoI1I{R4EhJi7fqZ82KpF8*-JoKEKr^1`Ldh8(%GgVnhZ;Ou|9vPXQsA z1Q-Ma1SNF`wEen_`km4xT;LQys30Cd*noVqP1x}AOL%_(u3}^_0Fxo;5|K(f*ddsf zA;_iq3DrM&Ree0)*f$g?zJIjr%rIV|EDutFA$vFGQop;NlvCf&-5;RXxL?bzyLc!J{_7!0S^J z2)A4hC>%O@hr&&U<-*`9Yqj2Mp!Wm9-8Jq9!Zj2D7s?9LS|CEHvu?;4e+p6*Np~~^ zUpThP6zyWEKoHSr&j5zT#F-?J8YQYvFlspgDegNdFs5q<5HY1|qHvjkNGP8an=V*RscmaUd+zw!FHIR@8G+PTI~;ieY^ONX23dL1Yq5rQXI(>Nq2BG|Q|M z3e%n-RBuu`jFVkaOWc+h*K(d=_|6E9wIVmDvg$g|8&ZQOByf@1Ky`81UdqY2Z52D6 zB& zY8cdVfvN{0*6BBhHGEv4(~ITv5&VJW`+5cXID3LNv5%*Rr_aBxpVZvI)y})o&)w7S)9K${{goeE1 zZHjG5wet6L{`n6QQPfmV*j|4Jhrpi=DlfsmX(vy6#NuwNoQFmQlzYK7y*3~17JRsQIFP*03z~OL zu`j;Z+cdve{+l_?_w;V{-t(OLdOTxMu~@8(p=MQCf^d(UN-GT7Q-#>wtf9Fn$_5Hs zO`wUaVXOKKCd^YM7CB|aDhG$M#yyq9ISN{&ZQ7B5N@|jmb~PSZ1Rg#$mos$Y^WZqFUjf>R%v6}Z>XdIjP+$dhPpkDd>bi1^LV9S&rDE840WBV7L0BPRZeWV9ofIjaI8ksEg3o z5k|%uC1)kas@DChV0`fdcDA+F(=9SgyVhd|zTutI11a4pJCMW2v;BFuqy0rYw*B;k z|KA?R-WToKmoBz1c<&q6#@@TUh1}Se^nss|n_t8M@hx0qfST4*Km|NgvH{A4vG1p& zgUUtAQHL^~wS{iKbo@(0O?gMiv#f{m`960oYI_KuZb|Qv21<5VsG}CBM^@NUk4*2 zBh!C%mH%Hv9A-}T|FMPf3fJ2HaP&VcjD!LTT(vK5X3v-fpjrg#ECTxJ)KDxF;HUp0 zp!0p7iYK0an3v%t73rcigsyM*)WSCq6-RnJ9)x#mtdp_HyKVYTq4wJ^lRM-TYi+Md$xcAdFqTA3w9}_4|m< z{;dWJ{_2x_TiN-%I({1YoS9k4)#-lxvfblh*^u`j`Q475Z1>>0SKa6J@Q0t?ge{HR zmj&{W1nJ&p=;*2&eeuSLfo&dSAR#_^t9jxrx*tAQOV}!!h=B?ONO_5C9|_-ja468@f;vTB8{aMX4FBJ&3#FYsxw? zhbD4P<1;j{)^76jX`wOs$pdLP$dn5pEJTw4$;TcsqREodIc0G?bs?(qP<1q4kTrq+ zTWNy6IV6hyh$Ny}?=snqVo? z$R+t8?fO4=<>cP-^&bwE<&yI!OK-?5dXn>XW%~?y*f}!!;5_Ub@Tx>7O`T7fav#jN zL`R8S{bEgMSUX;IX+ye)ywSGmIt4<6WnkTtt0gu**~P~w6-jdqQjg;q1)q+S5iG`Q zjGMSgfLblajf4vxF;2bBg+^0z@SCdXLcR*#^Mj;8Z$hyYLmO-5v>|EtYlE^e|9Db>}Xu2FJkqS2w;^0@QH%^(>uB*2Gh2+a;c+hyp4H z=ly5lr_)W_#7rTmp&wsaj;wB=6n|9_%h#NqUSn%+wi*iR?OxpXu3LXN(fb-H`bpqL z$xn#b9Pf8&$XL}<9Z)>O*`Y)PBe9?i)iQ$)MjlDSkfmV6FjY1+W({2a(;rV-vpY19 zCk8nrj@`FVh>Tl1Y@k2Zd7}R!akP8;*aM51P6^*fx0xLCTlC)7@pcx}nOkvSLUWi|q+(^>CKkR(JNFon*&e<3C_{ zQ8d$-t&k5~4#|Yss8%m0a<2Ffv#MYO0-s?$IJNv{1!|(&qCnzxj&iKEuaF`Vc(=ix z3PlI26!TiCo0g}7{oEjC(DG>N(?DAbapRhta07;g%gLRKTzc*$0Quxaqn4r6kBJ}C z@D2?Ty*N^_3>S8U4RM831w*3Zaz0uz*T$7yLCU0kdP4K1n&e@dqwF++H@Zhs#=eyl z3X2rBEzx4_p^a2bClQ`Y&Ss`Zhu1?&k~i&7t#DixM64*E<7p74G@Co=a}uE`le#h_ z&Smk#QRD{dc}z){kb?@5QBrdZgJ0p$lsZRp-i!^rGWNmetX4P4)T9!a(fRO0 zLSBQ*Ah^llZNj7mPj)X_1>LNTws!o{VO!)F?x*}xqHS9G(`{;A5wou0 zNKXK~H=~9vT>;9%6qMGg@2f!r3q~FOBgAF%(Ad`CQHfQ1@k|P2Ban8qKC2gK*2QVJ z!%TKESpQVmlK{a%%An~`=hXD0npIu*ylKCfgPRq@K&d==(WNOHrH{#AW?LTYaD0)) zR5K$T0m*WHBsdAwSQssI(SSLqI+O@7GnQO;t*g{>URCYQR4eC57>#y&&-|dfd5lw# z{Ei-S^>U%*@QBGQ7(6aZB$cnRJ|s0TT+u-?`|6+7r>>+3CuWG`5`T^XlGYe$J4ezh z!oV-3b(D-wVk>c-CMeQwZ)9Jt%Fss{M((w;8T0%a^@i0E#icu%K9YV<{(WsIW>AB( zybd+(DhQPgsS(tg;%ZCRF;M1*)FIT8E$+Ip-Y1IL?X40&s(4Y?F?3SRg3e+&q@|C8 zE51JmC`4~Cl~>@MR&O$u8uq5*lR?54>+7fAtDiKNUripKPIpx@G~3+Zh{^SozCDTF zQNR#Ie%1><$HBxxMYf&M^Q_&kb7U zKoxsGTl6Zgec9|I_q7wI^ucCaR4=m0=AH|a-N=eG`g$9ub z6H@k zEyz{h?7~0R^V^n@m9irz5$= zNjo--nzp@Lu_0T4B-DoIN}EB1rIXSF^o23>;{z>|$F>vo&4d7N5l$A0AhrJq>hJ_y z1a?;~1TesY(Yn$`)J9RhQoD;+dj3$D{R_-?A2IQGNX&HIZa%NnGetC*@|kKVPDau8 z_xWk{RF-fF>|{g!?Es<^fP|yOx9zCb5Owz!2DT0cZYklclMKn;C4A+oiE1C;Mfn>X z^kpXOdnNQ~-OD9fbwt6*S~`lyt<}q>kkenn{1bsRS;+db3s4Ti5kf0(2kqsgz5aOA z22uJLO~K6csYc!|YVU(t6`Z2KJYm~IQ4_YG0FhGK(_Sm}jGc= zDE8sYuCzDN5R_?EHJy?`jZ>x`Y|d`r+!_Vuou@%!wIWOIjg#ZABXCoOmh(&2#oHa8 zAceP-wKNP+v@G`Bn4>A4=9mp<8H}W9Ze%x;@Jd4tr!H5+*8jx95l~TXRL03KGHu@! z`*vlK+HmmQS>8OssBL_g0LL{dGpeXO{AaPeOB>#piSWAn5+Awg(oQyIXLyv60U6Lo zt;eW^+_>QQAkM|ph$OU{xq+XAB$N*uS_WZqU{cQLe$kk!H=7|8b?$+RE~;g|$(3)J zYiT_Z2u0w;bIjykUk-0`$#2Mzs5%IPHR}qL&J{>)yE7*vCwJxOxpLyRQPaQG8&X3X zGxt%)lfurdu?1lpKj#hk5r_V$fQKy=mIa6ey4$G5GqoPl=q6jHvL{0BgM`U({R3=U z4OV_=Lr(coW8_(bA+8lwQ(-KHm_u4iC-2oIw@CEx_nWST6^;mbb{$R21mR3^%V^1) zFh<+~+R>X+k9H;l;7l%;AZT+{X$^acvN*l8YM>{sHoUa&KKI*fmeJS{PpyM`%RDEE zV%6)GawQD0!VT{m>C^dQ9$!qHAA>(udk;>$pM9cEc>c@J@tTB$w=ES|hwJQ1Y6hZ&O z=By(I&3d6&(?xGN$1v^{rC5V#`Hg1yuS^+R2mt>L#T~A4*&LB>YyTwtw#D6 z_lHcBGz7O2WPC$l-P>Tk=&rGn`{}^*`-8mm8y87eoP+tcUWV{dh`DmM|*xTn??jIzHXiyxw?DEu*w0b;^q3#Ig(=T+5)vdi=d zx)-L+=rF8|uA^tE+)cQ^QE}IO*Q!FzVtMH5DQT7)&evuam!qU9Ow=LHuDSP@bKy$7*O>=ddIA?)_)Ccs>ieqybRpe%ri|#J~B~SAc685|&%AvGDtiw;7x4VnYgK zh`oysk24FFB=L(`b<5(Gh3Ig9@AR=gRW9)UqBwz41ki#IS_JBKV9X%aIL)F5xG`V{ zgz3P&5xbWHTuAf|9}K9YCxg7(n9-tTVBa)^U#o$~a9pmCGLErl z+A;%Nxo{+qa1;xWJQxe4tbvxHE(H%$8f4PR3at!n13(&U$dj331Tiw3E`|m~#XzH@ z-Dei7Xihf=h8kT35{CVFN*QUG;*d;`=Mo6QJOf=sV*qi6K|ExHVML=P0|>@(`-G$C zKTl{HfO*2jT>C8z{E(#|Sa_yOhX$s)S8gmpL*fm?fq)h0h*-7{NrPQJi1PR6z9M0_ zzzgFDWmH(0LYa|bvhQ)N6_S^ljg4;T=-pSMouiA;&yUqjpYK~YqT)}P6Dd)w{5*Z$ z?#n=OV5r{sZ5wICeTv8>iLclkCrdp^Q;DMmoz%cI zQqfWex3Wp*VRn>Km+~g7PNgxsR&GF*@+rP+Ix+h=>$niVC3hZXJkU{zkMgoMX^zV3 zaB3G=AXTv|a57y}Voy8?Cx;62S7W{`H`SbkHFuJ>UkFV|D&1eY&K}WW!p;aZF}M`& z_bqsP^6;cYM>pxZ**w%s>etR29`<=~5bWMx=+)l4>CeHpyLSa#jQl+H zHM6y4J{Etx8B9@?QvekX?^TXH+}#_Fd^5fl`Tgj?G5GhX64qUFPXvC@&inIqOgP5h z&->N7otJyJe`8NP#;^IaJaK-_ z^y9$8l}01(X4g2cBK3xsQJ*%6AEl2bDHly&G04U2>0A1%<(-2#lU5q91IasS`j&@8 za&%_fOAXA{9lXfnl7FV&dqt@}?f3xlR_OPR@88hx9x9@^+8r3!W+o3A=+|BTs;53VI; ztCHn;@>XhwseJ=W#MyXk)zp}kQsu0~Ots7$i6Lrv2%51LZ<$J?_4A)=Gdaib4X{vd z;6Jq_ZKcBgG=0W+ct|re#c}^=nWDxqFO%r^{D9)+tN&)wWn%bm`oUS4|9=E({oj27 z4DK8uOme-tD>uSO!*?6e+!*HO>Hyq*90X12iI_@pip|-tk7{xF2|`Ls3OIKY140Wc zE4-bhot3Ba^CDc`*vqpSYHOhUg~VBRosalt_4@uG2C6cVnBwLs#CIE~AVsNN6Lv0d z{&%~7`s_<1Mo#@4oUXI6^!D-$v8Uwz{2vb&^*A-X*aHN=REg|&=ueiit4FS`F7xtt zG{5h)LhJhno7DCxy;v{?&z4OOg_nc+8C2%t&i`g&xU1UJUEfUafcuuNY%aaeQlbHC zWP3jkiD+|W?~Z5U>u-PYWajJ3s_`bcKMVW@CcJrq`~m$WWx4wu6wTeVYBj8`@7+lk zD^tvxTtnTCzIEJH?oFZR?&mUK{w}xepdA0XrT}*Db$LoAJ-l+ce z9wD}Xgr6{xDbAQD8842$Q1{tMx3F;`{&gsXHA7xJrT)E9*yMU{{dKBd?D}Y%3r`o< zLy4I)-@>W@V!wM0!|06gl8- z4p+~oXaKzVm#=(}WDthIxoL3J22XqfwL0mQT(;NpH0~ z+rZ7aE0A^ll)DBmpbXR^5a@Fb?Ynwkp1pP%Az5_ca{ZZlI2x>bnGqDZ$8Pr8Hwah@ z+^+5A7r>XuE!zQQg@2a{Dfe5Eg{lvDl`57v?l2q!8qT8b!DJQ198ONbP>`-a6)~VktX)fNX90$S<9#ep0As-w z%?U?}aTi|lpx7{p?{2AvrHvpv`bj1ha{|TE9k-=g_xp?YmP1=jK@&Y71b~OKLq%v7 z#8;u-saW(3W~*I+EOGT)rS1&9jFlDM`XnSjbZ-5aavYDv#R- zN~D)b1V)I9&VBwo!r{?$&Key9o$jfHH08_ntvE~W#Fzd6&*E#0g$*Q!h4-oS=6E&9 zNROKBf8mZ4y)^_YyM6g$VSydT96164Bh0QMGjKi%=3|6ruFfSH`)B*zBu=x8B5}3X z=s#Md9jn%Jji5))N3?q-kO3Pl$_*gTL-^`-4O4rkh2oRNjfHpQ-G}oeWWk_ec9qJW zg|tucloxR=?=2<(a~i6gGZK(8sEl-Q>VI=goX12q>rmeGG?HgNO4N;;M7)+g#ztsG zu!ql8D0{`xr#3m@g*Mf@F4b`M)Hu0~+9SKv&&fv2BNj$SHFYLL+tOyQp=UY~-|r!N zqP~rnC4K~yIqK9F-_6=E16c;aHIv$Cb#n$)`#)dHMdB7(24%+{E3D_;Tx*}PxW8R9 z)M+{$_xS`#zM$IK$4uR<3Vn0z5f-*b(Ryc4Xpj}lLxDMC@?WgfjKth56O)Urf**R7 zH7F0%gcKo#iqZfyT1z^_Ewms9qVWq<9jeUJ?jJ*{Ka1*D(cGKrNpazICMM*yx`xUl zerh(0^ufUdG~MNvdoq`--b0CQqAR~GX=8`(yk_u=J~skNf{RPmy-EZU@gmNd;<-MO z((6PO({rXhME-J!VA_wCLCroD$@CSJR^*LLsX&jAL7hO+J?(ZHp-+k9tk}Kdf?Y&r zj}&&+mpWRn-Vx%6&c6PE5&HQf(y66Ukd`)SpH5ALmT2_ZCq29!*jGsIPuc)o|vP*#6KUkmqiS50#)X9C)QZK zO57f`L&c^XLo6;)*PN^6u(cB}dQ(}bIDB4kxDz)=F9_x>Z2dQ~Z=LB*xY-#$(Lh%? zaFN~@QL_L-VlmNwvGfod6#Wv?glA7hRfjs` z@_fg{$W6S+qNp+j9DOUWqCurG*6q7h)lFf2(bw^5-_Ci#gT1AHwVQ}5#tj>$OYepe ztI14n(93s;yJugw3S+cZqMUqM8Vspn9N+^E8omMK1at4~aP^ zjyj)@Qj>W_&7kU75NG?d9mgV4=TI>UjYX&~5!Kbz5pX~pk6`koTNu(3X50)jX5Hjz zv2ki5+m`6-sE{UTMKN)ZPV%861%};@Q#SVR>R)OD3!+)o#U53MRbXV$Tid9Nu_2>W zEsm~3z@U!A5b;vy)91<;hq^=Wzl;nY3{(ERato+=06`v_{|35?e7{1E(C3oyGenaN^4+lGbtnEHxB5r*=^C8AdT$)UL zrRgFUj2SuAwxMs3TJY5#Mu^s3DZ&Crnd$}6aEd%L6JkY7KwW*vS9F{Zw44;^xQLWn z`D(ela=G(zz|RmLUbI#`Eb%S*DeKwm!<=3(kC(%`&BzPbAo94P#;Nel<`ZbLr7a)- z3g0I5dr-aByIG(t5W?9EbO}lqSix*C)v!GG=e#AEm%$I6TtB%!&R~uqqB^2j3MOvf zBAtf?k8QN?5t!!`tsppYg*G!^wJ5IaeaBk;CZ7DY=Xmbih4@dKnfX4%>T|)gGh{<@ z#`bRLlZnEKhfg6(V|(Ek=`puw9zwMl+)#rYAAA&1E7z8gldA0F_5)Jx3Ws8Ipvxki z-Nzu=oh(efrw3p~&6S!v&KxvW#~cB#MJdP*WF1!B-0khA8BO|ozzd#^<*z+Mq}MrA z$nbPThE?9+%a(Hc{-`o2Iuz?of{7}Qh)?AiJF94IeiL}ojGVA^ceTtJ)e|>)jkpmV zC|zcM4c-dd%+$ZFSqW6$VzMg>|AV9{(EqnfcgwDR`nr7$8F7Mv-urrM zN6(zbk(ULo5b}36HJhSC9eO?YY%2&4r>A-^XB5p?j_g2Tu9e2P%fPvc^B5$`U<%A| zVJjNR5MfDIVn*pv86mqRXZrt+m}U}9+B zlgQJKBqH5q_`PB)WJs1+rBs0xF}30if3(idHoe;cZbo+UW zj%9%izBd|=7E?P~=H5@GTUp%weMp!2du&0_Lr~gG!GpF_F&ux7nyz}bRlfgZr2LNE z$)_2YasU=OQHuN>Fl4mcG@-D$_g1U&p%$k%?S&chgy>cvpFx{vT2ol zfKG1uFYc>MQ8bOBa4Ez&pdQE zYrf2)-{7plG9xS?d31TyZ5mVL#4jXx8N?^~aoEB|z5jCbwh)mgGzW9+**)XO8I^wH z!Q^tF!9xH-BIqN*9k}W>)bT!xe_#BTgtfgQ1>G=@FEB$h6j7{OuM)7IMzf+yx;@G5 zVdS@O(?}+`(jSi75JIM3dZ=CXpWCHzEMVwZ=3z~bl0~_MxChmHB(gn92)onybyjLv ziGWRU6~@cYgA`$Npm~sJgP%z9+QE3g&&m8pdJ`T9#5g%=;FMUdp5Ql#4*n^F*U2Lk zjo>q_(aU4hRokBRd3qN7i5=_`i%@k71N4Ypw)d9pjLD*+JnrJEOmZ9CT%j$k-o13Y z*3<{uuWS@s)rj3zkV~CL=Ml6hTG4aH!`A^$qWi-3yddeM90l{yhQyBnJ)@7LwmhJu zH;@&3+{;E4=g6_8(%=FTOqCyu(MD2Zq|r+hqqbCAvJs|8qlhFTctHwWspg?!d3A6p z&`CT_H&hP1kwa3rM3?PyjUj2h4G%&*`JyDF z9pp%y4~@v0=s3nUrbBBxK*d3?Vl$^0>UvVCrGdh0g03QQtG9&*3T2e+W7@G<&ueZzlF zgxMaq62pU;Q&m*xamjM&ms;uJab)8ZDn(b1`6LU;Nf4&hvtn?);x4dJy@2k$=x04-eB%@SUY*F+TgSqR3h4~MFC_B%?d0Plh-618< zBqb(S$^O=dGHtrHRp&-Di2maJ?2uwxh0QHz4!o-ayA8RG?8FJ}x6W-@@;2@V=N$Ux!z%r#R^6)k9I-_%FihWaR@S#9+k}AD)0X)zc`Haso#{jzUk2Oh z)jlyJBkY+(#M;J=2l5U%ninp5B zXJizxABo#6IYVC+{usIV@mzC_MTVPuy~gIZzC&Cud3c8M_R_qaBs~%T+_RdW6yNPH zls7T1iGPYq3nLMew=``<>%dhf_v~aKtwUAJJ=+{!~ITQst z3pFDsW&me`ju%ivbOPBcU-0d6#6PSEQDVUofRoMz%kP!)3r z(IVq)s*rieLl-t6P*Ri7OTfwEm4jY@F2X)4WW6)*^zagX04A9_Mo}i1u~`GEF=Z}4XoT^c3TsG zs3C3*a+0QOaGT?8P~Ff$5T;CH$HZY#JJ8W!B@815llvnPOWq<3i5WyJa54;^@iNR& zgN9)Y;S9}rbnVbYFtRcXXE+mu5sVH3(++D;z_ipz91d`49VEb@NO6!XNs}?4z_X7j zpbnmAAZbxE&=D~q2!qyQW}qp;;Tc(QfEbSq61otah(;)Svvw(o#^Awas#|cFL@=^2 z3}Ybw0Ij2@9mWxi!-O&VYX0LQR2ZRdW@(14ciuOpZC)#mup@~pOr#Q>St|pa0fv!_ z3`iW-m6l3T_)LWq=e)NfOxQyeHvIjO69vOagCoSV91YI!b(8exRg&G!&AYEuJHr-& zD18;%^!-12*DH|o0E1kJ*SD|NJ2TfC&EI6rYC?Bp6UA6O6N!-*0iu#l^(LB_vKJZ? zd7iDC3P+MnDkhYYc{*DXU4c640H_4wcr|eH9f7A+Q_Y#Ss>d3b+}2i`xkc->nmL

    qyo{IOV9OC#;&Wx*0ZCmQK#|5a<|+y3g@v!yRI^!Iq(=WfY&qjTFD`TAjzeA(e^cn|t*^m}@L z{CREE;WmIihEP?moOKQMXn#2a2?x`X|92WbgqW+xpG&N>%DxcXutkUe?Gf>kzlZm= zX-gmXV*mVt7;M*u-=5!=z7~@1cGz^yKoFb=4TqQpo>H5+8ab4tfXdd87hahDzs2V9 zG4~tB+0CsNyJ>XI`{dbEnph6O6<4dBkEmD5Tw(82<%?ZPr+kO%IT}xu+#C}4OCTFb zr!l&OG((lhCZ+_CDW_J$BI~r8mG)a4O$E%9tIW!*SdvVwCnmW>+XI$D$r-c_IkI`8 zEydXdTD$)ttW!7XS7sHREBbeoHW?)x?kCGCzt93qFO_%dz zD^phJ**MJ$huTW%X5it<6!leezyg)zNY?gp6Oq=+Wl^9s2-`oCxsFTK6`D12YbT!| zs(Wg;q!?pyx0wMsHO_47ze={xG@WayGpz==1Ev(x*Bn%)&P72WW}Us~lP4kx$u>=m zC*|nc{iic7O_1Wc6H;U&0RHMu$>YpRO!km}h+*bK0Dew^?Ivn-U$gJ*9c|1Fxv~)A zHO-NjWFNMTnCfqu3sh6?XVPHSYM{=v5-2R@AJQ+T%E$ENz>Id&7Q;qO zHTgyIvfMZDK8t7G7x;iA(|N^Hjaeotc@W74dMy3YCp`G@vdw=p*D`VZH(p^@1_rkO z>7L;S$Z_G%+m3MKL5XiD{t`FJun6c0r*7y z9e$d6`+7XI=r`W)o7vO)Yg-}Z!4NH@hMp{zh5D|qwQhL(uN&C@*wSpm%oxigoW-rt ziMJW-z8h&4wl2s3M?%@O=85BMfBr{OtevXwH1%Y%cU9JTI=LTl83#U1o(x3X9wk;< zFP!G+Sz@Bv+1N>NMgsdsTNVVvft^w2-CrXwKXdTfurj`%q0|`u`#C`glH;c&kRi;^ z3SyM=CBQD7GmAoldJ8YLFNUd2(UIDwO$-eg6HkB(IdM1d_n^+*SwR0S(Cbbr@0a4= zn^^#v=g*e!BRix6KhedV5Co~JT+P^7mrqmgtl1x@fZsJ*zmU1#fEVLmb=JJ{6S3O) z7607`P_m|z!G+bKS=!6VIf+s3gG}oO>yl^p>lW+-P9zJ8Z0jLg95$dCj$)ZIEXmAi zB;}XN+Omac)XLzy?Fm4j{ydj!+#u5}c3&ZJ+Ct~CHT5bB&=#1&Sd=%Vds^eh(+o=B z++^tWe+QMGT#ElECY20Q_mh&RK_RP4(e|`Bdy-B>(EtYAM-~KRZbTu4w16k3FoLPk z$aSD7NtQj(8uXDBYYXEEY5E@cmk>e}aj#q1rfi*iBrQtSKylBe-vk@zf#1)v_w~Hd z-c2r%6bur#+~RvEE*I@WCdf<6z*$SCggO_ab2|@9o+?0lW@e9{%S2e&mxiU}FRP+2 z$)s#0o}NwYY#UEIA4}vmu=Huh=c6;wa7D@ir;(M&HAH44M&!W^D)HM{6e*yOwj6lE zTd0%S83_692TTDq-=Oy!# zb!kXh86Q_jOSZm#y&=KQA38@o3! zM*NA*%!~D`w7mqAv|o?_7Sz<>IRomi%K>ZSSj;G~+T{W-0MA%wB2)McUrD`j{DEk& z`8B_pgktGH_Hy4pZrb|&TkR%);yWVM%<4}@9BCG5)Aq+%27-pA`=v9gp>?2`6#N6{ zW6=)z{)%+|;AKJEw2vpi6%qM|-pX1F-BfK0v(k0j%MJFdp-&=na!HI}2(+L^=D+k4 zb5t4HLONGmouCq-Q1l3ANy{${9SP>l(G#gVY!w?{$h$hH9cmG&;>1~Iyxi1C`Le)B zG6>rAsfDYIN_@=n$(@xyT+NgmsZ86N&L~A}S$NG_+oT}VRHxu}A2Hj*zKQRA(clreeE{y3R}2K@_GYZ;YPo}DndRun7R%_Q`kYcAG3 z>e5;Jt>?>eY3|)am^O$pLuY4}A7_5{D4VI5fB(C?%`3|}?@Q5_k|$5@iFeRX!J+oY zB)&pWukhTJ3g)5pd*O!g2sUp^{bPdhKv3#WztmuvI>7`5avRRkMg|tj?vpxAOBJF% z3{$_JSO`n<2EhzDs}4}q39`tP;ZH%eF^N8>aa@p3>BcxsqoGUxj*+zcUB7Qw0s60C z>O_nDM>*X%P-zf`_c>SJu#Ifd>q2$LND;Ji@Sv#?Ki#46Q@&tks~@!QC&Wy~yMswM zW27g(=atmukC@+6^Fh)DQ=<1RTXiM)8ozgcH-Cp&+Owy&Bb|TceiOYF*L)7mqx{t6 z|DeCWtUubgIePEa`Oen)X3ypxX9h)6NnPCsrv{P!$+YcOtx-b5L(!&aQ?RMS2!Bq} zP^TOD>+Z8uxqI%}$(%vmq2^GzkF0H)>mx-yX-Pd`B6zF>hd(ZcTw`>+J*Hz2MK-dS z6?01YJey>yvCa5NWSwpUd{(S~N&SEgqSpzx&|lDbi8HfY?L^#ZAyv5}acAJXv5~r` z`$(vImAp3}PE~slmL4Itpk8$f=geiiTf5lE;D%-O(&iS?lK>i4a*-_HDXJU}7|zNt z#u^8622ARd&~PbGwZ2bXHV-(%GBETF%q{(b7GzmF<|FM0|i zIBgD6y$B(KgY;bRqx7WH+Ngck-Mn~x;A!)bXmL`qHA&Ur?kC!|r?QH4&^V zs)8+wl7@YUG@U3h>_U%?&*GzpO@KAoGv_xhvzDK0DY(v5v;FC+w%#|bFp>w}IChct&bqANq$foEV^}{?D~HzF*oTM9VY9N} z?cEKf*9g2?4fV&Jr2QV~Lk(TO6{X(Qa2BVWFb6c(4-wajQv>POI=-(T7 z`gsZ0A0v>GA@E+UwyoT4cGB?1fpzn&ZDW6|{Vuuv0{d0e^M0_e``(*(xn)gL zft!yzFS3J0wCG3TX9Sa&4K7%N!pnC!8P3$$hU))gpHUubT;J6q#1e<3qpqT$nPpsAT{iCx9V{h6B?aTGxaD2m5rXl;~3% zoPn5m$dVpL8Aa$9I349ZZ9ER^okls?b3v6+3-&6Q2!DsLliG8KpG>1g64D(kmQq%`RqGiW>1HL4C(2BpS1JXKBl ziV~C5FIKBxsRNqy#i+*eu!UlS4Oz0dbjyTxUz^p45-S6lI}r!-bR)jO5)=%io-XY$1x zg7GR?J+)4yjm@)Lp6fr#%!WX=xWD)=y7UT{5O`@dldD^HibY+BNYyZogM&&OvUa-*C;|&v|tV00}s9?^u3>eSD6@M;H zim@ht=dVzwn}ELcWQwh#pNi<03&&4zGG=C2*~|Xxbe3B_3MsIXkI>>Eu;4R3v)XZH z?!BE^4efOQL_f|cAt_o_U zzhd6#ecU)0gdeZcmF{=f2?#3g(=^dfyZxoRH}Ryy$6d!WTs1v#;*EZ|hB!0F0ioEY z*MkrBFoH#4Y~9nxfh<*f2Zx;aNSS>(xXwFcF|Us4u<;c_f`SE4opp4@B+^p`-}syD zVpd^zbk%ayEQ%JD+uEi{@AI@a$hntO{j%5yJ<3%lhOa@}xR)&cM(xpcFeZS7YV&YCK^R-hrQov6M!>@@_8 zaU7Y5ro=9OD>PcNz_-zdAoVjshPB;e4?ePBy4nJWaP{9XwKmQBnNB14 zUY_XPUUgtzYd%ae*x~ZLptxPjBeUG_$Ct z$EdCxS;)3_lIg1{yHaf2>Vy~-?ptA;gzMi%9tl|h_xQNGrtGW4ii$~1zHs8J4nSQn~oo3F)*?#^^H zPKCG^^-Q;k+Sf|{)?1>{wztTs(v$WY)H*K zuQjvj*j;u_9+$f7nx3+AsuGA^ui=yd#NE_dHcp;rqv(vTue@nuvtG;bEG%#ZcUv?` z8NR9uD>oDc_Dqov>ww-*z7A%$eHZgv&Y$wt`Z-5zoGSk;;rC@*)_%P`UCFo$jC0_#>pf|E z7B_D_+`xGoYL)-^Yj%J9HCME)WB0;G$A86~3BcfnP`#kFlIoyB0M7R=e|C}PK4Qp^ zq?~o~s*77kj_vuYARY9lYU8*y8=6JcTVT@GVu^O$Hm3;rA9M2&Qw%j{ZrZo9`SUZ! ziZ7v9j+-~{eyQbz71Xh9;P8h$g*0O1|65ndnLqN{B88J53BPI}RQBrSE|Ux2s=*K( zq^$$K^@YN+qP|M&!Tqs!>_jfwW+R3Dj#N&$xJ8J-FaT59Ic*;4`XEq z6y5I%@*w#b>)g7jrPcR=5mu~7F*o06Qu%quxhUD(!l@CDfu({agN8&r%@j)Tnxu0` zJ5JTIm}-0C?jDtyS83R9;{oVc%bZ@V`3RPCHKz$1`6=h$%jA8K#H{)1uAD}fBUi*vb z*&W>H3Z0WE?{xNdMBuf=bES6udxN+x4~EDsxs1Zv2e>XHAzyrkzb;34He~4@J%opJ zsTpRkTNcvWl4asx(4g41kNU1~6d3W(ci8iWrvB_HV=h*#ePk1QS0i|&&M1uNd@kI$ z^=xg=MuFauoByKs-_=@p5}R3RyAM;#ijW@J}i$P~j;!|2Uonb;Y)1Cp(pbSf(+0kXBow49gMi?S_l-kb-*Xf=m2Ww?$c$xW=!;D}VrDzz}VfC0oi z3pq_uLnI!7MoMs^Z~}qXY!soBA%~2i8m=DTYgOufu2O&ywM2p zx^1xR5(`bYUT%FF3)Ui%&><>{`f88AEH^DGem=IEVv@8VAyd6s?OqXbZxfMlqSA0x zcU&*jSy!yH9GXU{Nr9S1*|ccB?=oQfEmz^@R{Y{H zZz9+CV8$IlK?8UseNO3UFDT?KgV;UeSX=b~uAI%7R(NL2u)Nf$!$UDF8YIDSJDt0iKA@^FrS>ajM-0*V$qj4*OHC|I{Q#w$~2h$NYp~>@X0b)K)jbo z2+sW*ZH+6WYVS7l;!3$l(_(sS=XsB1)6XJe{wJtZ$!)Niw#USBfs;-jsT%5@iq#PW zfLE>dXE?~KFbNjya=H2&M{ra`{=4!`s)&+X_5AAbWdl5MfVT!7vTtN5;ZUQ*(MD;c zx{q5kt4jw@$DLVe#9WXIx(3V3i9MQa&6)CNQI*x+SIo(Ttq*W*0G5K84B z%erZj3VE{=yc%wg)FMB&cZwM+fl59~o*@Xg^dsQbjdkIIJEJy-=@-hHoH`FLvGZ%^ z5=eI|m#x3(y)7{GTG4-q?=i9bC#*HgFYNk%Y*2Kf=2lL|4)}DUR{BoH!p4TSM#fOQ zyikr#4#xV{P;Tp2+82&kBXK{~JwQq2i~h8Z%nJ|8+SQVEBq@rV6LE)Hin6?;UgVtx z;y4mRbH2V`tDr7@pltvqbyT5v|Aql}ZDuZ|UusJ53QTWIJ)XCSs<^ubRK0fY)^2uq zJw7*I)m1q7Q@ePw{G}*Gm?GxNj7)7~O!=mKJJ~zhING{7*c+Fp<>=t?r)%K8pP%7l zax@oSb!}151KIX|+Pm90JKTI7-Q9g;dagQu_8XMT>vQ&!{%LjPuw>MHe4npvi2c0$ zYn^+|i=hRVtojSg-$hA)8 zNJ^+i7p>aS-jFJt3$>mX;PuG>a zkQ|k{IB&>-a}k$Hal(NW@xDeF1DRL&Nk}}tpywK91ig620Pm7Bl%~)~u zUU*vtNR+DHG1T;J(8fb`OR6u!P3meG36wJemOLO%ofT%);m9hVv-iv%MKB{x?_F2` zk#TGmm=4k!mD{cvE%3*UTc%{^DiSNqn(y`y^qG+xtu1B1JhJla2R_32T6w#Kjh2}DiO0&+0JN8l_SRKWyMMVv<)}Dp1!CIH!55nI>2d0>1B?s#G^KU zvC@o*Z17%5EC7k^+%EwpEWvkHTVuAd5#QI$KAMvF^`_G+lNwJ>K1PEsSZh3VNp8J| zxc9XGvu54W!}LZsbGC^c5PKai8XPL=jkW?AzdY5^b8>}7ZXey9ZQz_RpEbHF5-8oY zx|#XDbsWOIep|*o*rUpzw6|-?wOYRFQL*0J({J~LqN|gKfA^tL=*|pexYu>G?~<_z zxzx-cV};G>qGxvE#p%Zu4zBBt7}iVjA*W@Q+l+v$BkSD1`5e-mV1%|=Ro_g7T6vET z9L+MGx-x;LmYhb)8a`N4&>_-skmj7e3z>pY+up4^taxs zli%n7G-?Xk90#?HbNVz#gvcAsfym>&aK|rTZsMf3rXbv$r+PXwUQWwBZSu%Ubt z@q)?Ti`xd?-3>?mZKgT_D_mC;*XbWQQv38|pRwjV-AEHqp+hq=*g$@#8O&j~#3>&u zSVKn43wav056e0F-&i?(DCw9iQ9LriO^{YnYuMa+E$u(^?=bPq9LWkovU~lw4CBTP zA2gYTMXsV@D$P2mA-P2jEHovxHLTXA)+){F-*U!lv^6&!|Gti5Tyck~Aq|*)MWKZD zK7)Iznv91~7r}F~uwQ4^1G4^^Rt>|iG)xQjP@|y=k7*^=)1D@l3b`>R;2XGxpEf70Pq_d=9-tBEG)(~#iUS`qKR=p*IreV~*htvvU%l|#S)qS|Tf75(cL=0~K_|@^Yy#1&RmRf8@3go(} z8&8?0T{FZ)BY4S_p7JydzE=X#7C!MnV2t^IAOnX7J#WLFDJ9K_#a}ED?l8^B7i-Mg zpDCaHF$%(;0U4h|Bgx=n>n7UJQbNFK(+4%(Up=%;mLe*qj|CABjny6fg)IFy(1bVj zI%a+A5a!5AGIJC^arZHk1do&(_IUr59v~6MZ;%(9OIYIP3*_$o-N(HKLlhFX7Tv*) z?Vy~|#gV7xPv^T>*Aj-)LWGMHK$8ZC_7yOaZIzkWm8Kj%E0>IFj}E@zvh=&&K;(o_$hkN?alw zVD#=j_W0m@QM}ZisH=k_FuzSxYZH?$w!S+S>K6LG?F08CC zDZ#zXd35oqYSWRE8vVgkE3C_Y6KZGtc}jIvJ&{W zefr6nemDev9cyOv9f=5JEH2hnkQa)=Fe2AmZ=9W9FK3*(F)^)2C@nad@gX=-{U1CQ zTgC^Kem{W?)do;4vjT)W`dF}#;OKzc8m@g;a~6a<|0aZcDrE4J=d+GX*{&a1jiR<) z@7n$-FkOxlr9XFiq)i~V%ZbtNQKeN3Hx#`RQ4Fb&9p1g4KwRjASz-n=>-}tEgSN3A z`wN{P_b#A2H~ue7>?N>8+hZ$2$2H^h3D+F0`Wf%HRDD-NBdH{>@-Lty2db9pVceAi z<)@S|Zd*{p@H^xlUW)$(bXflFiwN!-$tS_&9IW^3DXiDtp&r>Ga_rEmNnQ8NLbwYd zE(qFm%C27@vW`J8sKl{Xuy4&utzOmmGMauL*pW*1LW?qMNns+bB1OkuG!ELe@Hn7f z+#Xzdpi+qhsXe-(CmxKx-T`sxfCNlr0(z=}KPv}pYIZgOUn|1$=ei1Kg(Pgn{#{8n zrV96Uix_$81_soeg{1!XO_2i@m==S=jBg)@IrWS@u-3@D{Hgu^~? zj6h>&vh;plDID^x4@i+!)_Ox4hz)hr;D71PR;mpV8hJb#XZh^Xay%|m(Oo0EUMkZ| zo-hZ)wfK0W3x$47QkhB=1qp1`2^b6g?YtVtKFShf6f5Va?W6en!TXA`lh9MBR?=pbCibpOXJQiW-<4vbp;TW#ponbPHlUWe3~v%uy}( zMQ-mv9DT8OBqIP=x1D%BRXh*71Avoz-2zT*McpW z>MJ)Jj#joqNb;A|t)eh)bCiR%%MraUyQ5sj(DHHZ>9gCZPG-ohtqR_Mg-Yq@Td`*4 zs?=$n$;tbc$o%eQRopka9RzK=`{L+%-bxd(ypRZG>LZlZ;#}>CUtF#UNz?bZoc|}w zb>xIY4BBSr%NHf4}|?nhQl32X_%lE-^M1E_}}TZL?{ zEpd_6xZcx=;6RL*Ep?I57+tjFNWf`pM?kxBaJ>Z;Jv@f5r5}GB<7tzbm(7D{CrK~Y zE?WgZ|4v@zXrA>LS~sZt=)HzNoFN)_1*-VZcaW+4MsAB{pyGw^xf2|p^=GuW|3n`| zN*Zc@Rg;_*1JwamNYw(2yYrE}Sr>tR>@AKHn_)^G_Bg~>-X@+frB$+Fa;l=yl(+A2!_ zy!YEbZ@1DKf95@OLjWlz;r(-f;;{(uu<+i$!%*y}n&+maGUxL}b@zDp^2_#i={Ne8 z=jy->RoQCAFTP}RaA$XcF}?T$2l53lrybYQ2;DEAXx?mSr2I4tP>ahmV25u4WKGp4~4?cR5dvi(gYS7w=1Zn0mmaOyS z8L|efl~FC1#ZEX4nRg0XxQfU+6(H}A+OTE%!;8w-?FoCmSHt1gwir#)Lj%@hce7*# z1FShnNUB4)7U#Lk6SRipGRF*6|J`;}&L_a&vL;?z^y!MeBO9X4iB zFL>2%4X2z!wU3;I_1Hdrn?mw^6CXCBc6kvN9!N_f%c}!iF4p~%8%rg`iNFYUvT?Qg za3}&Rsah-7qe!bMEqU?Gr;-mU&6@X*^NV3^w^*Tm)lX4P{xCLe*49Z>X}BY4PyUl1 zwRz2L?Sw(bV?R#^r%_kxsQ3t?Ca}2~&gXXPGFw+8t0m>>>R>_07$-zA1t^B#LZLzx%*diKMx^;Tb;UeBO&TH7 z$~T0>d$$-NwZMsYVf;&}2!!Hba~?IVX2%G>?;03qYq1P-lOkmeJ{yUa}!Lz0KY3-%;n^K-HeWE%q8nR>y{AK(pX>#f1e2!SDEg&3Sn zII|Mkh|o_Lq6YdJPOqC!Z(Bnqce$f5@|&j{L0*aNi{Qp@RSnbm_R_zG;Jd^|<5hO{ z1NIz;+!0fmtgm!E82Qi)by_oF$m;Bt93@L$;fyWgV9o5~E(JU=<*?W*>?Jl?q4kdj z-rn*j>s6Fplah2toZ|Z=e+E5$48L!;xg1w@Vgquoms{ai*Ui9p)nn9(gf z?p0e%javV6m>^mGOyXImR3a=bG82?(5G_{EQjPgHjOG z96;zcI0Pt*#H}GeZ#8~9 zXjz%ZAO+)%vN)N?_=cv=($~_%TNx!>w+#MQ6hAj`SP>sH7p0?;2`3=ytbT`%+c?*? z4uL`~7wk3fxW+zxFM8%TL1Uy5;E!k|9$XHZ7fBd)gCyle=3XPaTP+ogQg|$xgSuJO zXFIbVk%?|GepoSNR?#r$+7;`p9bT{ItV*$|f?5W$fYinKZ}pu%(k(9`ynnTh6D;2$ zulZv?&<#VlQ(pRY-|X6i{*{bi$u*O4o9io{_PsFDY91I{;o1sz^oL@58H+$wa2t{% zK1XRM3xb1|1m;7fza{uRGGw@D5vP^%uL133&xx4BSj>n; zzLw`3n-B#bFr~!;+edWfL&_3sY4~nrAZyB;w!>$vO770Y*8um+UqyMWYA5Gr@?j_?-X)xRjFljCxfpgjKL#Yhrk zR;Jp>$ zse~o##sQ5h&sHayo4>`95sC?} z`ktiWY!DDu$$F;CPE(ndfS772jwv_mIb_I`SSi@VR3&hR2zc!LG>ptd9O)cnbJ4Uh>yInc=IGO84YRZvPs zYjA;ai#xMq)Ntn{)O6(t2YeMJ96+lr!~z2M!C$;7s`)h6Cf61sL^4YPTit$Vp;8e-X*h> zf>Ont_(kRU_l4N~-UJo>YAT|c5!4JjzJJtFdPo0oKN31~g$H|K${cq%bpwo1m=tt; zyXxv=?^=gZY`^E>(eAAeQsFJG@2-xX4k{9QxaDd<6a{$$BD&Q-FnCr{a4;;#-;1B9 zfc+LskEU6bhk{{M0t$q+{7T+%lHx@s0X0$P$Fza%sM_zuO3s4VAs*5+c|Ki|4o zN$K!>`A(N^poBRYm7$Dg8fsFIU>{l1Ng=_}Q37|M9?Gg>{TkhQ7+8|w;G){#fLb`f zq01tA<2f7=iK%=)7#nnE`ElEifWIL}!`t37Xx;Y$l-fAB7>FqO$Z$|-9*LQrc((fa zF7~q9U#qcwcDwyN`R~;3&}UUP+n5)O?Hy~mXIuE2YTe5nTu1iWn`b&*9$z~*UE0lm zsY*Rv&hp9~L0u;+@&R`7IBzdC)o}72_MJ6bRWX&|`oGxjmj#*19&hKT2^&wlR-d*W zI4q|&?=J5Kp3d8qjiQbxAS^)x)dBmt@<{4o5e?KAzQ02(Aj@CuTP4OH=eL*g2pM$S zdO6O`bYFTlV$yFagU1ZW!sUCfe6Tk-_cvwqCQn@C5<1QdBx5jBrA^pvQr3yifu+-F zTlfMG8WIi#?ek)xlEc>VL~;k`x;@w!Ly=U>5~3_E6cYEdIo#|R!zpx zBJbs+^TZf8cmoH&T{Q4coR-W3(YR$ zH=ARpB~r#ruGY%?>9trsMEcxx8axnrF~_bDyUD0LDc(Dm>T@7+TF{KQdW-f9Ey5$; z8!rC7Iv}rhmQ2zFtCiXzXPjTGM0nUEE}Iz5zXwL*D^A4QCzd%9L{^KZYsuoA0vpCWCB zS0?+iPPRk9)w6O3ATt1K)QtyC<>Ag!hjO=D`_+G6nfE<%g{o68%N2e;N01mvnqA*-VV~Q=C5;8B zeuNjQsATqS5kgYkv98xbu~m(elFW z_O#EfA)Vur&X<+`GL-U4bgKWQYR%%vxAzX~8&1|oWg}lx!{&O=_Kjkc7PAO=SupPc z{K}WEoX17n`$(BCXC_dy(sM=w`9L2EE#Q6&Z2L=BFL<)`Th-<@dbSdkZ8~B%&=5a1ZwX`y>=Bv?T*vLj=UO&=I8KSyy%y`2wz;Uj>ZOUzQu(vhp z?)8jKF?^`=A#cwazk!rAC*ndkCo7acj7Gqely3we)Ik0QwT+W(hBz6?LY11Dv?5h<~z`)CZy&KtN@?QAgG!;EvSK(Ave<*o#MZ-Ue?~MtU zDp?t-R1?jnEJGGrT+K8m+VWhiDDHmoG5_%$adUS>g5o0ojF>j}jTE9oo3JzBsTIK%>jQxgOK@C?z4xjAgu#{U*t2bpAtWGvm% z&U5|>=Hx^HBGN-xj!xM+Fx4>Z{zK865KE@C%GZE^?V57a?6nMLr5!-Cv&s)pUvwBJ zEpLjlK)&KW*Gb-k5CG|@{Kt31rIP(`#bE9ohJ;~eyt}q*gc-86ZMw&6BfZ~G)+B<( zgYR z82tP06NX54>lkb*BG=>inJv(5#EO*RJMPG)2x_e=6Ny;gU!s4-Y$Hr%k8kkN5w z0oHl7ny9gX6je29vD*J5_9 zeC7L!puUEoA0iNE)VmP6OkQSg-WMNs8)$k(dn>F!tgQSwJPd~?n>_c|Zmo{j65PI=q;` z5#w^xakgy5>8aznbl-}pTzw?Z%Ez$|`^yKiAVH$&8SaHlno7WoZW-UCIChd8H^&T7 zZm}^P@4Bg=v=8_9-rENJ?K4ih1d>)ikpB0XZb-2$wn}MbNmWt7UpHETl_(w}o#buC zyFf_;C3R#c4N59mIMjcCJQQQCiS;O>w_l@i;qPvX3d((0Db|wqq}}A`cjXT&29gjW zz&=KMeB=kYQ!olq^#_Kj>_s^jz4^ILm{H>l^d>>$_fhZ(2GRlcv3r-vccN?yOZm1r zs|L0yRQl{SWnJL;AWG9bYk|jp)QbaiKbM_<&j^kkK(4k9f&Mjf69wJ zUTXY7ZRAa7Ul%Lr@+IFRw45@)Hu5UNA%bFqBbxQ-crr!3p#M8&hU~xUuAKlrQ!A&gsAWi>ny%Z3)sB3V~5qKIo$jU2GpPag6Gvs>EU7PmGxjANK z^JZilAYx#%H+4)fVP)H@Z999#ge!3!ue=J$AI$Vj$#`jdi_NIm)I#&k7+Gg_&w&)! zcN(vw!8A32bL-MGJ%ScB*9E@|#8eE?i!Qot_8H-HYV2Iaa6P#066=Ue9-C>0ydX!; znqsK+IG>m1muDuOUE8Q78MLqfd}ap z*vJCjaTSZx%9Y*CNU8fUkdSt#DyENd%?A%{Vi3WUnvV)2;V>}qqm&oE=g<_yuvRgQ z92Y=cj}5Zdj$w_JSp^2wRG>3?uwxpUb<%>t6vK25;JZe4YvG>j=1yp#d+3K1+mc{l z6kuPn%(bp(4)62n>+M2RFq5XXkQKd0CsL0L%7{V@4I3MlBOv9Pfiivd zUXo>~LdEN}eygvq6u`i7g&G#oVdN>SVdt5;f2vGQ-^glVo$$_Mcd8^y!xT?-eOphF zA0FAq&Zt)cjWO(+dJzX^ntUfzn`8uIwfs@cAAC27xN2a^XnZEnRB^Iio1)KpE)Dz@ zNS;Yb2I>zDMV^dcLru1!ChOTos&LNm zn&y?zAsjL`*y!5=lr>s!k0;59!%RQvVbPJmJuZ7sZ?u4UXTZE~z3&Hm=Um8Z`|KJY zIvkj)7~dSp(yGQzInb-d@Qjo6jUFwz=6MvU9lKKZqJn;5JH8o*{ADh)4~{7(~viRGah2xMN=znLV+I>5bn zY?r2CAzmwd82o5|xX7$RCS=1x=ayS7!vn@%c+ao?nct888&RkUobfE;t|yrxl^Z1i zJegHxbZbc-3R^A?-Lf|hrBzQF@?>Q5VaL%iZcodp7q-Aa2UzOwX(Sx$B!jcwG?l?o zIl5X0?HMqwQ1mLR?))Hf|Lm~qx#-8eLWaK^#=;}x&eroKGK7?ScEe9{r(ryr^(QTb zbNuRnMuc8-o7T|wCqU(JK250aWFqH4dFiX)pFxb}`x=emTQLQ>&JJ5S?{%_qC#GeJ zTl;ffg_)RBI4?IT9#~6CQI68UK~LjcVTYgO_cZhcah5I-is?eHpodeGHiZrugVCaS z;-EBW=+_IX0@Or;Fpu3gZoNVkQc$kSGVjgw4k)-K#|;g02`T3@Xig0iaI5aka3$vp zZddEE)6Lb*aMJC@-L;xs`8&K_gu{gdW`3oFSnF|Z(}|TFFf-?gN3H;#O7{sKi2Z4T zqDa5_Ock@3V6{%BX1rcn)VD!iJ)yj=tNv+VAo1*Giig`&L(F7x#GxFJ`qgSm7S4HC zJmyP;T|R$78Vf7dLPw;?Lu9!@a?eJJUp4>gKkkl+m{$VYTP!C%lPtNcl^)(>Rr~Yb zQ&eGu)LMg=CGIl*mWPW|Vp0+$VkN<)I*4YMdrFf{Q&4O+-gWi$DdLYT;i4rbWNEiO z+cE4K+9cwS#HI{FPCInev7M2B5WCRvNKaEN16d~G(u#JAo$X=Dr_T?7CVET3tM)D= z*l>K}trjdDY$Ff&yuxDXLeQBb`odA$BlYlPP)_(1q)wB`tJfETc0KlC0OAa1-p zJc|pWKxg&NJ|v-n@K+el|J>QDh5|x-`~wqUo)+vR6w#^hYLOx3~6B@qT07p=E-mwM@X~HpQhab?`E3dfM zacPA>CN_VYhr&O!+?QK7-4b-3*}NLmnAiV(BnXRb6_E`%b}_KO83JH+q!Yuhmu^Zf zboObXE$sp7OqK0Y}3B5F4W;QexyWu{NUi2FbBsq?q>VgguWy8h_WXE z@&M_i6ESq=@t5gaS?oX*&@`vf(=|S*iSmPm)OZEYmQJw;N_FU?r z4lMcisot;Nb!h_1Z~gZqKDW`5lo4bzwJYiHti5T-5o#BT-}WG;2wjIEj>1DdSU~Zy z@t?jqDV^}N{ek#Hp8Dpxx!(n4o^ntIar|r9BJ=}>;)>j;eZN-Oe(bIUh9{d$7>+1Z zP>*8#;zz1UAa$p5Lezjlg>T+~0!{v5Lb2StU_^oDcB=&PuuYhXYPN&ccUgBdEkbX} zKPo~Gj(8~#((v0cgbCnY-EX7(C8V74vF2?e^i(jdGy!V|Q*yZw#g_`pxXDH%_muix zn#NF10TFsoN_)LfBJ>doG2{X2z=D548o>2We%r@y6rqQP2&D@MqZZ_$9v?810Bm+2 zfOz=Rmxv2lve=9L5!4~2hgPuD0CMcaYz;aIG}Q=|`hna=_S6B!q$;792rw`8d*F7>< zu88i}{vazu5pc}Hy8&>hFR0rP9H!cglEs9Q7H7!eo^-st*<{-xoj=VeP7$4aoOZTa zT4kudrQEE?Oe)cYcHEWOMD3^^Pd0j347A6&10YuRuE)rbKxqe!;MI1jc5i$Dxox%t z>>`i#7k-KEF8ITMUX54*E&c+t{DA+i_29TAkjQ);ujl{2(&5keIr z)PX$#Pf)_NtU9O${yTJoRs{~TI&-ZKJ+xOwkD64h9>zYNq4bMaf{rW%6;Hl;yu(~W zTf6lPm5MhHW-f;5NVru0h5Uuw~6te74qU9GK;%Nfxp2KbR7Yt2apII3UjXUC69`4dEVbC(TwvZ@8IL&$X z7;_)6eydOn68JjjiuE1R)wBb3ASd~XRbR`xSu@yQqFFOi4NkiAfuPad#*mq2Y#O8` z=H_p`BW62iI0RvHVAv^^&GF@V)yQh#-87I zsPspLU!lwgRqkcRvnsG$!n5iwN72_-&a83iTSF`tV|tlT3u)LJrIraGIavEI|%@nQY=DVa4IBJ5!>yoj*Ss zY}3Pw+}NDJwZlAMd8xMtpkkl;(2jXblN*_9pX}g&eo9s4Utpi?Fyoc+b-xkLqM;5; zXTi`6{1f|RGLX|_$-8L^`mY1a3l?8AqM0L%jNyvCN)Sy2wTh+$f_t~Y>EBL$jR3mA zM}h)Mkovv?CsUQfGKH8F=gyFM(bRC7@o`P+5KcbBUrLiG@BS^+hW5an2EAn`dh5PQ z+EnwW`e!nGO}dKy(sU2?Ed^_;6y>*5%7!~v+`B_ciP<9zb)UFwG};8 z1t^s^;yz%C`&Ldd-@lMkqV^N7Pp13Hc})v}n5&5CNLoigW0MGS}bg=dEXtm`UO&b3XfXVlZ_j3 zrg%{z>jeFxWYU5^EI-)BLl1*J04nC+WDRI0_Iaq+-%p2xGzb(1{$_KOTo5Ws!2a8) znF`WCX+tLX6;8MadbRK_c}a6XdyF3ViYBna6U-sU#>UnB9_pCb)b3zFPs%|30aVTN zjRs6nYeitcQU+qx3nZ0+G~LSLmY4W%)lD4Bcx(V;x(U6XO}}{>bgpH+fp$aKm@ZJT zqAj4nCTmw1`M23>8(@q8B?uVS5D<9Q z;op66Nu&V=H;<{3zG0gb3hlA6KS7KIEKHcvQdSj|Il*ptqi{0lGJ#AC8hQU70dbn0 z8^p#R`;l^G@w_#SIEWU)(S4}c#oD~=gYa8%+g~)000tsxXGm-ZODj6$*^SGo=CPXX z=*?{CrSSACmNvc!^&Y1%7k!~`gxc=_lf`f(_W$@#0l|aY3Y1N^(bq}b5`c}gu~|3aV3cJ zTvFN0#AlpXft|%CquLPQG-FrHsxGLcN*AN?T<)+_aYIweCO@cnQ zhofEbjYhflzHz!M68D6*)DA{zg+vt?pgWr7*lie5*|07m-Nq3B9zvPjhv^Etr8S4? zpnIagal{*iEcKSl0z4g1h$wf|e+c3(3Dy3w$XqYdVDOn|!n1PXTM)T7&Y>RDsfe1m zIi?U5z%3?86ESxTvPj{MwpoSgd%;b|bGOTJSrLpp20)ms zXwmFoHZ74~z(k6^O_$0feq9Qf|AkCYjOR`@X$Bq=mRLhxo&4CXWJ0(cTO%nr|2T{% z`dFI|sbMs>O$g~c&C~)BoRauc09I*b17|x`ABd8FXASP zOLzL3jr)tds+WUDhR^BI|2cl(O0D`ss_yG|fAzF=_iW&+TRr~#zU00}`;v1#(c?n* z^Ibdght2oebwjFB-?#PW)bRTD#dRa&Yvf>H>x!4&bMO~=xyGd=5no%Zyr47!7e08Dv~-RPTID% z@U_-(K9W!n5fS(hk)?g2&Tn|YN1n%0><&WH*1xriuv`Sz5nt@BzCOQ4_57aC@r)ah&|d!Ya~49oyT zKRLL()N^sW$*CY@V5>a7xjeG!erqLdgl1yo@JBX4)LrjI2R$I980!s&D;p=8J2Vr( z1%v=|SHuLmxg+>NOwi;> z8Y#zvLc)0`VAvx>bMkf)>^1FKU*r9Gz``wC9&9 zl32VabtD2&&7yRp@IztO=LR$t)TGM{UsJYyBW>@`SNkU06$VfdbF8{&JUsEK+olv8 zCd(s6uEW*Z@Y0%gHd=-b9XOU*8)MC};okWQY`egv zI-^PN-Clzzb-P&Oe5a+d9 z6KydrrnfIB0i*4B8g>Gb3CT-E;9Ix+e2R1I?^L2O(#D$D+Q$J(%2uaJHz5AG%%TSU zic0Qt%`Kv0C+q)ZRC|z1sDn(JoX9>6pRSJI_)g{O0}U6+p}@Fh3{Cynm9Kn1-o$0O0Tm zHy9@&dRS@1wByxVRDh7ki5*;+RaO5+5h&Wh$z_)1LNd>+fQfCl(H6;Q_8PVXuwqEm(*qA=rY%MsB;w$Z z8&ghUR4x86VPK`7v<_aH72AoYG3GY(R)QB!krK2-*!gg#T4>fPX2|_ly-aFI|0<_MBe7W&O(g{8HN;;dm2}}JeFtx42S zJV~RkLuW&BAaq?nMmbS`3bUplF8~8}1w?tHd_19E!Z7$g=)jt~nr`h>G7&gg-*D6M}b*`$xkYfc$@;&k^MTwg1S zqiE10ePEns88KIfj+505N35dVaTtjJH6787wFdja%eZPU>WBZ1Wi^o6B#GD=txB>Q zoY)|6K~$}3BL-ZD?1pE{4L!ammd6|&_YxL`jl!j^4Ot^^tqm82oHuH`XIm>iTN^o) z4vFt0i)gqkB55A04%OFYJFS8_c~>jre7y~ob_ZGIy=q=&eofy1YH7ixS{z#$qZz>tUF%ah!-5j0LC!UPkiORv;m4@Wpt!$lqqe{6 zW#C*lya`eXN7-swSNgB`+b;3aVue!}K*1G4^{SADEqNuRCAP_B%>tKYRwnBmAbv?u zbIM2h??zoH<_lfANx-IH#rMNMd;F2O7n9RK%A;Prt7}8E2n=b!$!CmQ;=Un4p1)8o>_jcwQxBr@VhcGE>+#%RgFd zk44neAl9d)G)1@L*kN^hLQv0gGD9oKQQgA2US)}PaJGxWG4pLJi*l=KPSUh)f|3BO z7Q(6U(LhbM+mWcO0--7^-sXSKLm4|G<**rY>`~WN;1Pe(hFo7*_VQ@3>{{&}}ga3+$Ejgoat35|Ok+zCQMRtH|<5>nLZF*CL zM^!Uzz4+xeFRQfPpm;GQ2kuCxp&zYKH6m;ZOghLK*mj$vXSOgu+wC`5-?xRpUy^ ziLlwxbUWhqCsLX{z@{k#FmFG*&g+e(U zrxmos@r2~g>4w@@FEZ%KpdMFbV&c9bTz~pFCj${i*f{a%deA}SQUvuWo5L?nUTwL< zAmoZhs)iz8Ef#(>g3i!28g zV`j!+>}A>#W(fOF~Pmv3dL?Bv;&@OdP{oug6<&1}Q2glFlnv z=_Q8C)##;N9NcrtKO!VW?htLPBg}r2?ljPz6k2fnQiPk%bY@AOSbEljds#~rZG~1t8A6Uc(LK;Qxrj$U_m?s)0&=}mcNc8 z0?|Dm)V1uInro{A_QiD@u+tRVzw3ZlpGZK9&cEd|wM&(yu0T)cik~F4YMWiEs)P2R zg#%R{h3655qR=&th5If7UW4$5Fz;2wDr+(d)`(MzvR1j=p&D6-o|}o2SLrk0aF+hv z71EavrLTKs{<%SmmD98fQAj&F5QmOGY=TjL=^Ne` zm%M1JhDEzowR4>e8y&Y%Du+%MhToxRlfU)6F2QFZH_0Z@RUm66tv2N+zp8nUNdQByj2!GI4`5@%cdR;N7$Ou;y8ksshD?TB2 zPIOg5Z8bh|Js|qlEmi3tTnT^E!nJ0?BEH#lHfdrPXxHu1VM`79F?#J7B%>wOi@ipk z9FtHb!nfP6&AVoh@~O;+_lWY@01ON#IXYgeb{jR0Fno=XBi_qDIqDWTDLi~(1V+c` z={V!8e<(z68=;qTK+zUaF)=rMMdq`aJAov`*>3`Zg3yrvM+b%Pz}9ao z;fp2b2P6e7rX1?8P6JI;CY`x!1kADNi^OfF3NRsduS}+^&X6O8uS_=T%kkLxwn@i# zs7>cI9$=}7pzLJemWhktP5ZD7PES{LSn9 z*G9^>^jcs_Z07omyu(T}Zqo1e^XB_ry`xMw_a3BC;?Pevn;mDm3>3|Wj8X-1G_FPe zv=RgMc$^->42~QlNyjGnJNo6tsqP(ZW3|Y5huI^Jr)Cs!wlU-d!oh}8$jKBpB?pK^ zK+L^we(JM7tOx0!(y>OdN$$eQl)6?d^*lALD@D*WH^|nx>}@L z$MPBtZCP+Vf_~db`vyIC4Zu@+J3-q<0nP4JD{SCUIic#y(`rQ;lqJgj;Ws=G z?=|6n)C~S>gUtV{Q2Sro_&NUDnnH@&WaO_xcB!R4TXt@$KNUW36wZ&ejzk?~^~H$@9|jkgmBf+38T!r9f5D7^liqXJx&@O(oV^wNpK{ zt0GM~mc}*ipSWiUZcno7~S&CB(uW>`NBLJ=Xbelw@*%0TjZHvlc zHnIJ$DeH@hg{cnN1bEP@WNsXJf%JGX!$vTJm!q+8vevyfP4)iYiNyAEX*N{kfvrY9 z=51oEr5nVUmizfURz`@#t^9OgjRuLQFKRK>5ghSUK8e~Mv7<3_DvNOt!~MeMq~bWx z(s#5ZV)!O2IW!%1p_ZiL09Ls5nRn^N=M0y^kG0v3d4^}P1~#-3-)Bv1zQ;!N<+7N@ z3xMBf>YS%V;Fgt;?xO>C_3cq|EY7PUfQi=9 z*3q=t7q?%~tX%H@1)ANf@oxDA&2IAcxZnLx&}=CD$KW>iuBY(2tyhbmo44PGBmNqP zLGPtrx9{EQYrb};hmNKX?BI;fNk>38daFDT-;PA!&#gU&(Akqkr(0`JJzntk^XC`7 z+ui5G#h_m2)%@M_@;96HW9HT9Rq558%cyXtL#yt-fO?Qs)l(a4eWSr(MbC{>tu)li zAjIiI!{>;5BH!eIpHxePbmc}8-$AU%5qT$S?Se~{ zafis+F8jV;qQiVshP6$Zp8j5ERs2%w0}e^>8U_vOwq%rhY=iI<@i2$d5!uh5Zb zw(_VwP)u8-Gqxy8U2ssdwXMP&9AYm<5(#*6iGNX%u<$%P1)$hSgt-5XClI;stlE_U zaq$>q0p(wn{#fx%0fJ4LKEmYDSwSDcXdl4H zy*ySV>|r`4)!`cU_xL#eE4`Ut-uKQA*xSz!#_P|If&TYTK)~J)AOl#vpdkTgJXXAB zJYKwRJm#1w(PsbA`8etrC_pX*v*&+Y?0?YF85vpr|1VaFflY~lNtuCBO`P$N>X3;A z5DJR|153y_(WyO)r~Ppd6-K7*k@pwZ_ny-OMJiHUuKg|xI0Gfn6D8D?A1FwZRvI;c zAIb&h1?B+t3uKhnZ2-q3^`+30_H*n>o%>}lF;5xdJUWmI5U0Ufh>$j*n0R>(n2WDC zq%9^{bs9-Y`MJeKC4l`7j$#09_$NWnpW_b_T4C}I6uN_d241{Q=~t~qff@Upl-Lf;@4U*KziA8R-S8h~%L zcK&trkbmKN;|LTeXQ6=vU3(B>dB9t!U`uL?h<%<0HvohXAJ7Cts6j&~!aM}_YT>we zx0Nms@-p)P5dCtmW_&Oxuwn*`Kp1To!_k50Cbyeak#%aK9qs)H>M;Kb_)$5qz=m%+ zTmR(_x(E{RBJ%lZ!Py6Q4-R8I!^;PfL9~4UrdubX#&t^ zn8Sk`2D;LZwFmjPyL@MxK4^#S_if&WJ_i(BijM)&@%ni&4mHc*MKZAbv3sj0Mq}e6hf@;mVog(j2bix6!1+Qs)o4)>KCJb zyY-11sDGO{_{}v2jU9@<%>N-TB9QQmevXWU3M@2d9?lNn_v$W%atb^$xrBH86tyiN z2nd1{B?q`~_6*ELFz+7~goX?R#ihGt@@mru?)xDiAox3)PKWcO4*L!eGt&AHMfR%t z-Qov{5B3l!2$+N{Ugliqet?2c^$X#r0?U>9~km0a*>|Lc!{Wu0~?9@GOzV`%w~M%XrPK zyNGkzUhS5gZM~q>d@5qOCuVDtiDn$YFHBGwy8FwAc}b@VS0O+XFHW_`DcG=FrT9Z# z`4631`V3F^Gjr>j5p&SUsBE^X!D7$HFpu1XLGw<_;{9{Uvdndns{{EaNtpR9`W7NJ zt7WJxC2V$DFO~&=Hu8w<(j0Y~yFcTVbeL6F4)w>-c>yX~!4)s-&ToI+Lx5{V$*{c~ z!wc><$a>?#5xuWVR;?iqju2$#Pla^8uIf?Y?Ed<#6NKl+;ND-}##vk@TQXz9gySVc z8Z{PT%q<*!Sy~$JW#AlDTSu9?Yp0u|0k01}j)cZi?&@kuZKZ2eg>a0&=37G3(RQN! zNe8rb|1verJyn{RW)^K6c3TIm<|Rv4VKq+GLaiK-zdCLM-W^yJp~i9^tP5$GI6?*U zIQLc89~ISJ@w6xnvUmj}ba$c-wgui>dB@Oz4E)6;^dIlYuAP$@fXl!ImiNVTcDw0p zxHgU{Rz8|C1LbY+XWro3kCndwXc5^(=KhuE+kgE*rq{`pquy0|KQ_UVI3GrM4N5WC zE;8`}l_cl)-LSYGRl}dhd<3l~9};b)pu1!{61|I7VT|+ZUQi^$7AGTkyL4JPuBjtt zUX)F}WOa>F#eR0`bSj#Dx{;(Q0eu+djRT`wwaeT#{FxAM)6UI)^8{?@j_s-qosT<# zl%@K&)quWXdmp{xrNLH0*jl>Z`jTzU#ohCvd*7T|+pMC0@^K^>OS&q)+2>jtUZ_u%5W0ksjNZ4;Q0*sYv~9O{P01#GgAjTVI^lxr8qd!Nsnc@<;FA*%|A zPlCi2U~jC1m~r+ogEeStoEx!3239I7+an!%D;Xls><7gn0r$XrDKVo8!Q#ysg@7L& z={Vf3k8P0}dyU05Ckm2>2@YSQNT9QsOPrg^dW69ZYJC+gDI29z@MWy5L^~HFY*dzQ z(EWqZ>^c6#?LAk<*`nXdq`G}$Kf`bt^@x7Rov*H2vI}5Zq%hqfNpmn|h9tk-*`BeE z#V!MH3Uqa0w*oG{8O1ZrPFIwLlG4%Wd@1OLU4c8v%}h8QhTY@4&eIVH=C%y#{+nR8 z-f7f=+ut!FZvl#(=ds0FDA|Wf2-(EoE$L1rHQV7amr@uu)|ST zIFFNl*W`7jVACOF2ZTv8i&=~ey7lwj09j<5B6uLi?Vgm$yscsOVp%&7zs>cXi{=+2zo-FX=Ved*4>u>dNxPyIQudaNHQ--)H8VjjR=*5Jb}=uQY)oY>~y8 z>l&Gy>F2%hy=}Np({s?nbaI(|vy{E1y7#qkv$^;0t<`3mx{ySaGAReHjoDA}tbc&T zNTZdgj&W-2c9<}hWkfc9Nmfa?I*kR!ZMjG5>skymo3I~#LYap*F5N&{zK4F9;gfqJ zwu}EAn_S7E64^!72kU%Z?FeThu>bHPUV(x~?9CunzYT5SY7k>YkP-q^7`WXrpg%qU#)f zN6Y?R81(8G82{TUEbP@VvFiA8&mnV!mm_%hbFxCe?8w-Uj{^45c1G0^*i9c!TG zyQ%F&rDD%_{7B%d_H$R;%{+hFx6u(FaH0g~f&|SxIhP&M&i&6bkGHS59IBtfFU^f~iZ6v6Lk|X21)L~-F*|t9=kB#; z6esd;c~}|>*E*^3_0;?pDdsr7RU}-0d%doFR4O@+uahLO>ehWp^<4kTp`i$hDL?sgfdioLftyGbWtALW4bw!~P zW|aV|$hvim#sRdnwj4xkbS+RNTSmgWp&ya^Uq8V?g|SlhqJn}QvyGm1-|39vx!Z2J z=j9QQ8R^Fpg3`LbFt2dC5fOdbHFj#7epnj-1FCCwgWas z$~i0X<+2cR*=btqL===lT>N%{a}>XNwiqkt@WtLy{|ZS@B^QT3rSF0 z_L%TLc@h^kc+NNb|LJyXPl@Y1_9+h7Nb8MIXr`XQkAB(Mpljulf>cD#`0VVrg|s}Y;M(e=^LZ!Sq?Kc2&#M-0>rJrHgMHaa7&)tcH?RnlAE?*XMJGy z8d(gVucaxy(Bt=X`aT;%2yJ>2SGN}3+!Yx2!^ESn9dmTA<#En#I$!^jggMSf0b-x-U|5-sSO-&dvmNw#=Yr6R-jT&pi zw+BhmGR5moWOGudt+9#3`{aHU0^xqePx6 zEmK9f2Bn3~#m&CORJ&vUpV3VidB3l%sm8@8|G6_dYM4ESR&=(Ww(R4f1$l`=zziAU zB9VCd-^L=e9W?3k+`RX9k&27fGEQ-H-?D`bNWsF&!CyYA{@ zT$4mC`WfDh0<4#;*)mAO!$rq9GcXj5Q7lyvP)P>GYSr$k1uUT>!rF=>olVQid}o$P zGY~gucvriDvHMc?*ZO~>_@EgeUI$mkLP^MGvO2OLYTm~Zt73`q8Nwb-{q=TU;i)|+ zl4VYcVtJvOJJ!!Er{D2dQhcIWJ;(l7pw>)LJKj0*i!hS0pDe`)j?Be7ei|X(mo34M zDPeLgRZ~D-&`7U`oJ+vyBqcM8Bsthq0Iy1xGMmtO?_kV$$125f?Aqx$l zgZ|_2%AVNq4RMTa2fQg1!Y209Z^UFHwtS zESXoAFwzk{duL{97hdOxhQ69qmV#qb%&g0q^`$xO93ig2pVrBP@-UJgndEg0!dk>s z?I0B%MG}LLDv{rPq=#wH+C=TG^c-*=+wZAJh51qv8SNb7WTNIbc=uU!JduD98vA7N z^%-GUZB*vDufC zx!v;BmFRvx6-Ve02Mxafw3|$Rpc*7I_d0`z(gmKV{DAa#`v%U%rBF;J{VV?X=t_Lx zu8>YmBc`ST{i352d4+-i=FJ_n5PCNso)rx7JGDFq_5N?%lfNa+YU2XGStcgPwl`j1 zGkQisv|O^;^V#eqdahE)f&$5jTZ-F+^<{-Pvf0z7w^xGcgz<6XuatTm@%cRwIxb?m zBUQW1N>xFBTLL%aIdSmHn;Xl#6{@ZVl+6|tO|m0-$<3M5{Yp+XuToNKyIal&-C?O; z>CJOgsK>p7<%W)tp!22$qStV$VcNE+l%4O@c!L#XDYY$nGT_~)x2$q|WfggWjRt>b zH&w0YM;M{uBf;CsNWtXQ`qnlGXknL;9xYVPgAS~ep{XKQFSkS?9@#w=6AvITrIspa zMk(lSqMolD#TQF!&38>&2XR7h9^qiRk&Kd?-#m9DfpDPiANjQ9)`t8m*P5zo3?+C- zLJ6K{s;l^5DSqtFGpzFHZ3RbF+eOkoMLJ;){LH4yWog5wvoLrEB;|cka}+gmR%df!B*l@XwrNsI}%J=r*w+7wikm+p_1tm3pwDl_2$sBUU?E7NX=yR!>V5)amCZ75t^~aWy zF5(Llw}o|PmrEjq5u)D7*~ z`skpXa(7RM`72F2c{CTn!UR3>cvIBAfYsJUOSF4@BA_)Yb|GqdXZ$g|NF=1Ngw}F` zP}ie|V(AoJ6p3!nuV7~$!xybAp*C=^#;%xsco<*)B?Jdjtc!FvB1%`&jH8rTag~9W zI#crd)Ym(qg-qSnQMxD%ou3+bdqe!oVP~IIH>^H`f{UYW)S+)4|AP6qq{)xlrCgX4 zQ>SnWb9A_b;m4s=6axY!A8Zh?!@YGSJ)P?Xd!{$;?_Y+CERBn}vX8CW};waQA*@K`#V7gF+bpjZ-IPTfPpXaysfP3e7_v+OF40{;-9NYFc! zneNhB8j?aepES?e$$632V?tAD+rQg<*(86SGS}3fuZ84<>U-2cvHfd?gJ__4L(EPg zC=@8IZ3cGD2v)YmR#+3vFFK;Uo8i5be@_|jqX)tdq9a`kfMSp~E?k**d4DqlkjHei z6Ex;t`T^UN>B}{sci9{&TxFy-XCaLYXJ=;_t_?G8u!BAG~5)zQJHLHP?7vug!H8xtcc9yTU=S(O)Q+dJkk?Vo+; z9M0~*Dz*(Qa}WfbMdzqCfJ>U_Y0V>lDz=*?jPikRZJo($RV-^yPL*Gy7`ybWze?7R zf%GY^)t@|l;!GD)*Y>iJWe(tC>(UzuZ>GlU>>|=w6yK^$`UFpS6QoC`%{N-taIHWp1hO*+yM=8lz0m>Oej!&_P01iI$C?WJQ)8fp`whso3 zNzmrqAabVl)p&b7o6VQ+dVQ2t|HUfyhZcZeTY18zr3*@vBx9T?ciX`+a|8G!j^>@i zQhI0-r#kq)W;jF&lUow8iOD|8al5rMth`Md)5*8Gcx@7?9LB(Rc)o#ztK3LdS`sKZ zA$1VivN6uZ&pkt$ucR4rI;wF$*8|~ddX||se4V?ams*A#A(glqy!t?t>eeQD?ozl z=@Vp#mFFP)di23Ig~a&VH~0ocrtW|A`2L?B@~_9o%=uqDK2}a9_Wxt-{a25Vjf3OA z4T*|T231bBYAxYb*^dVnU!B|DhD~H*0FLg1VPt_=$VLhb|Ggv@EQm{n6*-3i1rcm9 ze*gRyk#w$fTdlkwZ+h{2^?LPwc<`x``4H=ZGHk&WK!p*ygTDGF0+8b3!Xg47Pz-^C zKq1vNUu4&cuRqk zw-0d_xDsUWhlAJyaS+Kihj#?T=)cNG2;SwFv=`?lM6gZ#{N&@~^CnP}<7*2mq#=jz z1CO)^!Vuyi#M?n&_;=C=pc7Ah_+so0QUzc{UUp*Fi?{{22Yl}jAPxCh zK!^vhvaJUaCb`;blD32bG3w2xRgdm{O4*(zp`)bA`=LKJeJ&-hu ze17lr=R4O#zO@Pnn7Us_hmawdynpsPIUf(fYpMC;?q{cp8Ri-o`qhX-z(7AN_g5F% zdX>?accTvvy~l@`5V`&J_W}XJ0fvWzhXMe?xdHaAZiapuyXteX57p%Vm146B%KKw) z!T$5d0zv|D@z48)0OAqcK>!#SghoQS-TgKAAV5F>^vigG^uZm12Oz#{VjYEXd^gLE zyaapzQw307Kmhu3d;NMf3Qs{p2em)HLw`2td;caL1G@-c?;`(jmy|)gfPz3o0J?*U z_)~O1NdXMW(+mDo6~G66p8>tPRe((a!XW^BU!%Fm{G6|Szyor8hX*0w&Kh>uqgW9F z#P&+qf}#L!6ygE>*j4;UzU^XsH%|PB-2YgMFHa61sihyNefk9p*2tsx@&lk)bR$pz zp7tp)`G1iw!Q5*#aUn1)O+N7#VnHBCLO?Nyp=5Y~2EX|a^nS_9sg%)!RKbg^aetLe z+4YXgmA4BRAo#SAKc2LLrhtNci@_Ardzmf03?dIt?h?k6OInBPS$$dv%R9cC;Zreq zalDpZgNXbAB!GvH#|N~0qL2bXAn-?`z}WwYS_kmu!@voU1k5vq1LEl8h48J>P{-(t zn+W{i=-->6LjWI|W$5RRt$Vq@6?nRh!Yq6EG5J~G1lfnKCr{4|-INO9uYmT8s#3^% z+S|rR7~z``;zKyZrEKUIek_aT*OpWk$Stttw*bkS+F z;In?2P#$I>-Z}62kXL%v&P>y%8fCQz?2sOa6sd$)H1t*E~pezck!{td(!4>;k_i z(>R$DTsX^RugJYrWwdQ|>ai%e9bBPXRTlHj%*f%0r{K$$zx_32)xiYS>NufhxYvba z3m#@+^ChJb=_wDoTkDIfJ9u#a485Hf87)%#_86Wz%Ri)E93CglO254wDv{@H#)exJ zyeHW*domFcSq?Fa8#nqL534sKFCh5f)~dbZIi@CC)sCGuUYWvs8Y@DB!Vg-Txw#}; z1BFiIqrDdKjjTRB_biOR7My%@5V<_3vfrAXkd~yBw>x5;`=QqFFP#Bsh4XXRxTO?J zUw25z`X@B4sqM_tB&l{9OtbQ2P2ig4uH;9ss=b#I9J)+sYA<>oXM7&EmQHg*OdD5w z3oVEIx&}erVM*|@q`|wd^YT4F`?<2O1GDgIfTGlYN`iS96*1qSJt-%=@P2yr`tdZi zkl&^x6^QGS=1G4qz)D+<*Oj;gPdVeErJSaoYHf@WMtp7E$NL6+kh7znLU(Q#!GwqYejr3PO_sd-%l-4;|#Q#firSm|QwI7HqpsvtP z-BWQ~7U;o}yov*|n88|M^6vp@zdg5#W6q?_Fxvv>l~YQ--!Z zrsZ+(5zQi1{NK;`+K9QFteg*H;^kdm(!;RgIvL3VBn#|{UK3QQ*i0ag(<+y-zgdB+6|Dd>m+WC*Q6uqWUudF};-{IYw z?XMSE>LK5<;4*Xfgxw+-l6Q*-WmRR6qjf!@^{lE&3E#SVWvfBt*}6tLH@yP<5+vLN zMmjuc!%PlF``u|G+DjGB%N;iyO>aDb*I3d83MNa+tmAiN@$RJnjE8Td#*L37??BH& z$0_I6NFj4owfAxA%kkj?+Yzmd`#%6HS{DM^;kcTu0Sr3Em0$&S$P;sXIZY|h1Mpp! z@~C38_4n+kfY$x2M{HITCm~S`#))B~S1i=VY?#h&$W1E+w%_ri+0MatPqp_y7Iz$n zA*^H42%t=B5l=-W3bzwV$L3~M0;r}yEA;l$fe-)4!T~^e9Tod) zvW@MJgo@vq)!i_9um>SU+s6lz5E`L%Xk`7cuD2g3Tg=>;3-Q+yPF-6@oYx2@cSCvL zB_yluDr<4lUA2tQn~e6n?6k4x{X~m$1{p(2SUlNyLTBLz2e+GSybXU^l)b&^%3tJX zbO3l@=E!IkJC~8)(dI;ock^ti4}Lhk!g{kzYi)Af*9fCPESVPiJpH9?J^Zql%IL`1 zapW9Y*^BpRK+o!?Y=J~s{>=5qpz*RaER8u*eB6=_Nc~+7dK}tDgZ)$vO=4f>-Z0D- zz`kEiV@}o3e1EkI?TXlO=%93+px>a3=SJ#)6d7c%l`!{>vu`H z$Z#EE`t^y zOM!-%-B4ypB3mq8oKtWBg3F*9z%65(8{TiIdOJw({I;vgiha40V%i%KHKt4HLsenQ z<@&^`ui<9HwScaL|o>}XM^H15&o+FcoCo)4fzL&SwmT~{jrKw0>ihsWKw@tTUJ zExwnciS6XxV=RwFXeikTe(Q$C925JxLuOU*I7lEXyf$!vz#^}benC;mTo(qJJ9WiE z4BJVjOA9>YAfFt^O<;s05i!8mB-^HBq-xZTbP*EHkzx_?6az2groJ7wZqw%5zEl!} zBtfUf#gsHN*8-~C-N$rG@X-YD{x$Y$ag#}NHei<3i@Da0T8M!@c2P5^Vqyt{4Ia%v zoYyDO;Y`J9K)p;fb0XJmh|xl>&7*ft5UUO4#oEQd*;xA;vmjCJ)&(vr_;EHB23T(I zH3~c?^4f8OFTRCj0HUJ)Yb%yi#ablkzAylG_ITX`E|Oxmd~^L%0KKkB+9ZQ*^gAF(|Q| z&&6uTG%kX(2-*y;TZYl~>B)k2N;FXj0qLTe7>cF39>ykWm(})niCcftvOe67HOOi3 zyWYXhQpXZq;m~J0DHIf2yjGQwA7v|1l{qzpjPH*JD`B5W9o{nm`A*J5Kmet0eSzhk zK;7C|WC8d`)&%nGRsIE5)bc|{xo){~hVg5gLMnZJBp)Aswjr~mzBV*4sfNC6xOS>(@T(n$0!yWM=p&qMIZfQK1mcxLkBZ9`dN}-h$1#s9iIZg`y|b^Q0^RsHOjvNs_=a z!k3ASy-Eq*O)Kt8o3Vd{Hoq;gY+~gbIyLP&YdJUH_O;OzrlDXLpRMtRd6#X6nut`S z_^ez}Mz2hP`nhYSQ;d zoYtlM9a{)76WHj0owJJG>>(4JT$=l-&&kf3qBDH%mwUvdAL=fFisv039ht*LEY18r zgu~GAF8io~gZ%(rn`Lq0Vj}Vd?lBABf@7+6=o5~Wxyb0Ieo;LK_QJ_Ciq67$r(W|p zT!z&c1gBXUYX8Zyu*TWq1P4BGwp!s7yRFFw0N*=`ocAUifnL-g6{~_bTVKg}`Ubyv?OE;0m zO-k6_6oxJBqbx<#@e}ClQ%_Tk@x^q-l+3J+LcG+@ETEws`{?_6+I{+}RHec`;AQ3e z@5C5)Ukg2K38=IlUEBUt0=o%vbiFxRs*|DzRv|Q#F!5IGt9r{x;HC4m=~ebOk?$OF*3ObdO^ z#(Yk%Y9TI?@06D-9LL3wUec29th{MGc5#;Gd3hU!Gl=J_imvrW%h|OUkKU@Wsr81u zFxvt6Wr(&B>k2~l$h3p}pet+7oR#RpJRbnC3_Ycyq@(kBrx`jI$2OwUed)K3gZbx|#|w)vO# z!PSy?MBpqi(&hEzpnrdU*v+_eg-8U~_Km0z%{m=9i)kU;MSJQLEUL6bsUmB+GSn+x zzMt=mfm1(vS@B2{s%i*wyOfVoad2J{c{|a%E0sIU0lu^&VIr;6@C7+W7 z5A;q{#imgPu>Grbnh*(a!(CX@QG-Y?gx!1v3GnS=-iPGiLQ_F#Wnb9MJFwl2aj0uQ#ehnegHH_;U|;VVwrNc5zQH_)q9oglEi2V zb8nvTExI%t9ys?;VP?bCm8jC^{BL z95bFzZ6$-WjAS~R2U_gp+L4~2J8DTp?|cr~n-8jU9LT)YP#!_%l56#=ZzsgokUTfH zJRK>^LrbM-_06rP;mJFSZ@D!8YEQ<$hmFC1K~7q1$Yd)~=Fb5KN+-nmPK$}gXcvRJ zsf0n7H~CW9mA9!pdJ7pEvin2>I9k)h^XystWvHYrC3S-Ih&TrkV0O~V(~#z_47K@+r2t9nFExff(h7pJ;e6F7k;_u#zY;!WFk9oo#FP*{hjcV0EL*)-7eDBZA@6N zp2#onWi+usEiUjxa@($-Z|hZT#rfi-XdmXfUMt7iJuu{c&g0@CNe!W!qKC%{DBqk~ zhvTbIpiOpJk1kNdBn~RU5gmC8e+v7y!{L+D>wjMV3I165IOT~QrIKT|7_hd1K+Q`6 zZO|GA3#FMN29>2^vG z7}xyko{LU+`TYi%zNF*~^TQS{G zLrl=d8UdcfREwLmxTf@=t|_ZM*N9qVm|*3(N;nNDJ4IK*&ShXd12H*Sr5TOpt3{&| zB-l8}(P=ao=KY4EcR$rM%qPdMnj=&{5^=`n)~tL))@i1{MwT!|ag?*qI_#eik3RiD z->r-+@dhol#lFkJo(KKxZ1FL&XpLe(dS(_(cOerw-rIY66!=$ zK*{s2h48nGL0#m)oI4>@{+c}}Lc+2%92_P}3Mq32;5RcBD#w?MmtC9h{c*06=IMG*M_xVmG_i<9Y|h5f zcdd84g}Fzs3Bbe1RZqJXv~VopmAR(3KFF=H!!Oc1rDNpd^;4iGk|Bw>dZXf=h#|A} zI1WjxO0F8dPPlLm_uJ%Sqg0^>@b_&E4|tM09^#@}23l@Hp2f8x$`a19*^hrZa+7CK zmb!Jfi$J7GbQ+mNu(#ibUzVG>FDr0+yn%^wQ*im)s7OJq4$-FGzW2N1T|A0-S zq@A}H^#>~p@qRonu200lP^x2NKD)bkkOgL_?LT4lKRIsmeVZ!WinF&Vou3uvTAmg9 zw=x~l!g76%{>g+GP)2a5#-~9%oM~p~haYGecvCSFXR4kHglRY_-l>09??7VamTFVw zzJ==$r7Rsx)@>w7kqCl+nby@yTI0V}rHm2A0b9xXudtH-=Xp$g?i!A&RrNdxWRG2; zG&6_VpxGtv4P$$nzuK#_{8iNRn-70tJK^aYdMrAvGRUP$s_N*^DN?{L$=7zXaZsKJ6weW;AvKHCV;v2UA zJ`Nb_!54A1fT(YW3${i-WiNpN6DxzrM<>Cf5tBNtG^w%_C9N)nK-V22VcgkS9@4V$ zmw}_I9N(u@QQPsW&ZkLiNd`i59Q%W4Q`ShmDwwtw06YsK?pDJM}_k_V^NusC@qbO^;7^_>)Q+ftWa& zp@(f|A~H_0kG}Eon7gYvIZ9P9FbAfitM_D zs)iQlQl;@rbo8>oF90w5+4VH+du+V^7k^i}iFNk-z>+_5KHJk1W=Ja<^BPMan#SM| zz@cOS%xxI&FcSk?@^WD~A481zh4?{bY!|S&BkVBX9N~3OfgLk)na6X1~am)Qi5B{P|Iw~M=NS+vZ{_y*D5tYH0c(r^yCm}1nmXb zJPyGAEj!was}K9$jGA4Rqh*OcLX{=7a6X8&fh|QtH}Z)j`J=q7`=`b?_P!B4x(h9@ zymYsme|sY+fjK>pzep(a2d(d@C`{@pr?d5bo-J~DjV$znSlDIfXl(d1s_p(_Hh<}_ zbXH~-Hcj~U`%XL8?r}5>oAdgXNHPB8Zonl4j2aUC@_IPoEC6i`Q)wATO3Xng^@W=y z*>{a9qaN?MuzsHzaK@&TDu&jGK^-p1W6>il0>6NpD53!1Pl|cmC~&g!^GdC?j>CS= zl|vDS=tE4^C+srOv~zj=h25;R-1$Ft*Zy}3@P86?O#e%)_y0!Fu`vDrB_m_qz|~fE z*EoWts8nQv1+jQ6sm>A3Z(IU_A;PeY!fqr)gs6efQPhx-)Dn^q&e7125|GXzyv93T z`+h(DZ2fk#TK!#LcIJ01Z(Z|F8<;O~?k2a2?Tl%t$o`uaMoa@jYi(H>0bmz;_=s55`%zFT+1{AnGn0Rp=PO*f426Vsy z0jt6qgvWvDh_K;=5Qy>a)eZjXk8dJUb8><>m%j zRrLdQuq)#C&^5#u2)SWhpO~2#=mcTF_bLa>Kb7;zJ@^|z#J{r<73`zC5C8;uh14MQ zA3gUec@-b#JqQ#NPD!`$8vyxZjVwwO$PYjOT_3{Rmpb@W8}Bkk2(Y_4_8IU4f@Mnc zK?3@^e7#LYPcwL-A{%-YyxV=HHL9z(E-9OTv^)qHM?+H*2o%gOU>cyL0)Zexg2L*E z)(87(j$uIiX@|cHa9K@2paP2i-DY^n`B`oHX9(f+qYjDrUvq7fiq75`=rlmf0U85% z%UCes*Rk$b;k{q^OEdKsbNaWN7+n$Uz%%2~^XnH%RDU08w;zbkmY-P*+^VpFN9c!h z1?)w#Rfox^qx>>Ja+OJ`2IVL*PK)DFIOKhBDB#Pf1qJ|VQ4c%5&i%bVL)gE_SWCPo zmB9c5|NGow)I6~F8)Xb`aT??&w4i1311-F$)oSc-c*uwwwz~WuJSVYPcohJxs3e9K z=>12?FS1cHzEun;07|3qg(-h`1p@3XkqV9jd|(a_imQMxB0#^nf{1AE?Gk;M0F>iy z91;QysXy!O_-)+5BaeV!-NQc_Y-_6jYBwu<(AUUgWEqu;cM|IKB4X^2#>?BW?>JuN zO&5E-EXemiRU$Mq{uC((Y&=|^#k^HYwOqTXT1{?tD>@+FRY39PopBXV`HU`b)LqnrIY}lt1HIYj9#qiB@Q3Lt^^owm9UJ!r+Jq~ zwX>RFqhfnSMLn%ndX&iF%TJl`ajk93N!u(xjMQ_Ho%zeQ=Q!ByS`GugvJCY=awpa7 zQNMS)`MxOgj+j!36D_e*m*@w;S*9KxBq3WL}7kbVA7 z8t6$3$H~jeE!m4`)W%0(c#;2k=p${)Za;P`A1tW4)1;;(Z!1rlL>O*Ux3cy!jgb18 zfa0exSLscO*gT?4JHFYy`*VWM2S+q@pgoSIADjSjZ~GBz#yN z&M!dS;Kt*XJbYCfdm$w7T(Z6&6+6^d!$oc%SeJI8*f@6sN~QA1+&p)&2A6PIn$z6= zm_!>2DAd9)o2M*W5izw*FUBLOx}cyk?sD-`O}IXOW~Enlrj|ait=srg7dI}h2JKvZ zF$FxE^{icpP9ZmVV%audn)wE(z&BO;cepV#=^G5uuim6x-je&c4JQ=}w{mY^{IRFk zm4GHH8imv2qyhd0px_oDoceLQLiiXqR82uT$qS(|h6-07L?61t2%jHQSIaotw1o&F z)@|rv9{W+zbK`~|;4cX%El+tUG;zPONbJ)!yC?G=r+Zuu)&n^6KFB^hTS-lQcI4aui4u8n4KozPX0+@kn_MC`t^B&NztV@- z2zYp`BrlwmOLaK}@!LiW-;PjF(RV3gSE?r%>n+_;9YdHI-n31pZRBQvyTDvJb%yCW z@DZ0fTAhv-Hx`bKuyo&V4X>NNbfxhBdIFD|o|%Jw&^&(tm4NIeh$-;oE3XZd67|lHyF?Ab#tB zszYdX28(17($*i#Yg!ePh>`6JAwA2w1yc>q z4N+~@6QWp*j@p2&B`Gq?rOw9+XPsOUf^f&xwrgBLk4mz!=hL!^d-_{&NOE;JA&&kHSZS#7Ar*sMz?2f`SibTw6ggh7|9m6S&!G^Nz>uId+9^ zb+$6u6StCq*6b&o-%7w00PxlHe3gp#V2AnF$?S<26UfEJDf6iTV3*{5q_1L5wF*y< zkpYfqa-St@PSyZFB^}2sPgK_~{rgJWKHO)a$=#@8S=V4efwObDSGqDKN4T zsds(9p)NRzOQ3|y(vtuulW0cS&L@9Dw$ydPd1*3$?RtD9U*o;cG_pD2HR*wl!9asG zHla#Q{Am$i(xe;l?Govz``&wA7bt!xUZ`oCX4soErl8sbYSp_>l3^5(23ea#wm}HR zu)Hu`+frhkN6$n#U1oWs38#Z@!3*>Lbo^i5vq9+9gWU5dQ|3$O9#5{a-5KdUQ)>xx zs3UO_l4Ki?K>OPZ{h7s?i2U#YKVRK|eDLC32cwPEgFlNwcMD8|J0inSxlM8TPsT0Jykr`*@iDF4 zN9pUUV;|tp#6Fg)|4=PXj;3^=KG0mOwJG{(1)89z%RFYXAJyP)S-i|H-0DeRIw^in zNU{raC6Pe8wnUg!<@@u?1lrotO^4j3eu~dzb9|gbNOBG4-~9 z?nt_qcUwq-+qz?i(b7FibJlCrj}!6EoE3KcxXw2KZYQl7YCH3@(N`-w*DfF3q)~!B zgMFC@&-Qy(d_-krri#ZP4Y2FXATIUX0_u9mGUQ?iWN3Zv#p4A9`o-K4l*6*bX)V-6 z&Fk6jiJ3w1V#laHyYA%E9m%0Q%!z3IGiOj`Hg7gv(u|SAhrxj@7uISP>p_{UjaX?$ z7q+#^KyfDT$SsW++sGja3U>P#wS}jLelzrpM85kosUtAWwj_&hlb$=>cIm&1(OA{4 zI_4Ocbh1CZ$uY_=+yt+)B}-+a#ZBz#x*Ib=PP45a3_8HjNe4NbC7j=!I6VEWdq9c7 zTaverhmOZJ94wbCobV(lL`DIr8Z$iM=ibT+F2kJg01tEe9_hx!Q1h8VF+;dhZiTwM z1$@lMrb{tw=KSWh$Ixom@I8(LwP3lczEI{fgOD#R$1Wt#8Iro3c-VS8hd{;Yr5YiF zk*7N=$4#>IxsViJGhF)4^S=8I=P&ih3967(*K8({-Oz)S70MNU>hcMf>may6R_r>_ z-9I$dNhWJSuO1J__1Q%!X>Z7j zqMW+1BOF>g?Sl9wE}?i}qMC!43i(En56=iu+lPD|8@k}qB#*nFU1CrVO16Y8*-Jgt z5H*K-O}OM#{S`?$(%4vmH(sYcksipe?#OEW)!;<` z<;eay$~SFGEvkKE!{QFS3BL_4A~jS+%GV#vp?h+yo!PC= z?BX)vDHRi}p>^L2P+F7-{JJrF?YV8L0qQKLOEO}}fifZILPR^TqOJ^Btb1;3B%`uv zNBZY{wQyq{wqv7xody0Yk_09Qd;J&@mSsX{5~hXuSoW>?sA^}&mBK;ea8cT|bo|G$ z8yUT1vAOUO7mqc!U&-Otn9=8P;3Fus^HwmFJDat=0_BOe6 zPUCJ;%G03CPo%E*zdAA`wnSofmbctmFXpM?@PI1mo)F79rj~=IE1$`jeqYKsrt3sQ z5Y0M$nieiD8B`~W?VZjI4GXt8UFMxY=Q)X95g$6woe{3Fsx^hjNEGd46 zg(Y0iz6~tD4e7&~U#4rePbCIkc5WrdPfN^r+qx*K?vjB$zFnRxJwW_*Qg#8KKu<3tmTc)a&1(z) z%ErI;lb++ff+F-B65cgF=r3CW$iCkuFVWv=dBs>j@--P4KAc!!>Y*swv zpKEy@_2MuLrj>`LVvDj%R~}0t^YCs3y3+FXwLM1ItIhWeAFrraiXKha;u+r!t`_F& z{5ZC73w2ztqJwGMIcTfh+D!4(-cr)w)z1x{NaZtdwm;t|D-1Tz9};pjRWev-KpgY9O!1tvB24JH99)J&w}o}F=jURvv;zAW*il8cv+PWfhJcMJ1iRi!i{*1kG)+&Ic3{IiTqNigAT4E=HgFzb@nR{m27^YG^f z8NX6OHHOBcv9Vm&>;Z*(2!DKMAzI12?Em%re5O>cA(TRKlK$ z*T?_CqUy)#7z}<)dSwUavKRXDlFmw+R7|x=tFRiK2IhXdiW=48NyOW+NYJu^*)BvJ zqopp-5lmYetO!dz>S|T&?!UxQnEkE@Z!Gr|sxCaqPxFHGV0fDIztBAG#mcGd-jseI zA`5#Wze}M{p&lyOazO1_D9}-A7!qXdB6*koIFp?6PF*M7^epa-Go1%S$?cSv{oC?2 z+0Hb0c8`nGv0T|+N7?aDG+&w8Z)TjW-z<^PJCa#nut|HpovsE)?Niy8?QQ@2nVK~C z^79x9Z#HpPiIq`Q`6v83d1njEw!LO>&SRdbMO`NLuTz>3JpZ#>k!3T+*-<#9!_>x@P5bm|0$0pMW zcZ78Ed4H39@AO&I-$up93^2x6!u>e{6DQ0!&NtoX`Ohq|Nz_i}f%wd16*Hfe zEY!t;@e6IR`NZR9uCLwM1PzvWK$yiH$}Bu?RgSuyQ>q{SeK=r{M5z_{ad^-Q#+ z=b_MfEQ|IzS9g6iab&Ug>Y9aNZTTq+LE?hlwcZy!)H91yeR;G8j5bSH30d{PF<5_y z6`A|dOIXriYIBmNtxGF*rO#K6RrNQdsJU{dx3W6cg-^}%YMx}>bFi{p zMMoJIbvu2Kk~?Z=JL9MGI?vMSiHn|-Qac}fahioBs>saimBa^X5gc72`Y}; zw%>g1Iw>F&UpiZR3q1RSyp3k@!z~F7TY}RMG$y9g-`~uN5FdIkJWUlb2YyPvuaQfn z4{)<@Q~D(Rl2OY8(N`VKqmqb+e$!~FpZ+)h+5R$c9xAaaXZ}-#nKP%~)aAJ%Fqg%d zPteVA71hQGL^1EA&lGiVyaY{QNq)@g6(!5MA1#kZhJjs-hnMM~0V++t*OvWpJsK#X z(N>2Or}U0LDmk+l4Q666wc$I%8&-k4-!uW-B`Qm!&<6!Gs3r-y5c=> z!+WlmDPSDAh1ey1j~FhRmiNJv{AQkG6r&opho72Lq6qTQFh547Trxb+K1c^GyEK71womsaih5FzA5MG*UGN@ zn{YoOW|;**IBj5DocrSW{>$2jc3%pr@}p8{DG@ogX;av+81Ix`uCCevlSH5{RQNg) zF_g=dSNXM;2!|juzb!eb>d56oPuL#j%3o4di1ee}>gxJ* zqNGQ9?XESz1=>@bN#MMj%%?}>Kn_m0x<_rws%{!FZEhbZI5UnG`GnB3*Gphp_bu`M zl5mjvJym>Z@elRs-njmIa}1$96eoVsJ;s4pv>d;N(_art0^w{ox%33`VVgwOMYxu4 z^FLqHdATbS_V%_2VwR$h&9+@18!n}brgI+gJ55!TVH+b3RDYJke@96DFIS?HU7NkI z=(q4`xT;v=Lo?&u8-QKbMaKaKJRhG4_D?Bm-HLb>99@8$^~buU_HsSyhJKf=1TLfJRmhA~>fR2uer0Uxa`LPk zd_ZlrTrrwSgQYgM=Z77BM)s8M6n$M(g<4G^_jWX3*=1?jCx`c-m_6f1Y|?hhhQ5#3 z@!{_2SW0>{$ea6BcX$+Jfo^&yVwv(|ViLb2G8W4GHd&1ar(!J7SetvB;F63Ahw_77 z@aF@OsD;(kz0c)RuC*i^pb=S1T4Y0hEqezNaray%{ou+T;Wlhie@QJuEO zcO|EXg)Rms_sZt>5e%9xZX=>5N#ADMNMmW2l|am`5~58oPW=I!&iQ;`)Pw4RGt1ot z=*nd$?J;*0sxcamy4J5Zh=zP<=;jPxo5>!EK~EcuV?yrT)TYm4{6%X`w2>pa57$Xq zg2Y_Xe=3EW*Fr>B?Os|5UB9ZFNFPue5&5#n0ImmU{3Q>#EVSM^?Ywc1Y!#M{%9!c; zdzlX^Earcn^wP9cZA(xFQ=$!?+m+YpG1q2T!kca(qK(SpK=rseY5_y>?x|ttc3-<9 zYUL&Q!Mq{yHa8y{vY4HU{EzsNI6+aN&YRI9&NC#Ncgh5Q(~m8`4KC4ktWx~4)ZJF! z424JBt*^jWz#uKhLB=)%pL~S+3FSZaIy&qPweMF-MXA**zB%)1Ft$sxCf?FH_+(r? zc)3*&^={d0Wu{e_EB2@#j1(Tn7Glz|(*eb1r}ho_Q#VpcBZkMZWgqYPOg@7~YT-;P z-V)*h+*7mRb01nT)$~n({(opZtpH^Z{9&?DD=5((V zO3ipcR^*U5+tsf?W~4(~K_X+oT$6LwkMw|ErsCr&Q$SbKY2p><>$7FWORCNiVaTOf zm8j;US{t`WjPy(MB^-1}f9bHE=}e^MQ^nQbr9XCeC9L#NB3Rl)%Adp1K-VUcMV-*J znDE%g95E;Lpr9<$Qae-_ZOm+k*%EN;Xh*&ud+8Yj%&;t$`6N5Gv*Xe>M*k(Z{ZtJt zfcF-R=62ecR-Se#%Wejd03}a@QyT3@*QfT0n{xq6FVBgxyaD?#v*ySz5VBoX!~dzt z$ISe{DYKY~SlHRw{%>fGjcxyrp}WN4kn{B9 zmGbnIrrFjA6CpQDEXKs-28ADx>X$>~ zZ7UG_PSF(zuLkco>~s86lZf`SKj&{*nGr8!L2r3#FZcjp3Ij|jP1(r(-pLpO=z7*4 z8^k_$5GkMlcVP;{3WWKM)}2U5LJu7%MD0z{Z>~&11A$?#W=^B6-^T0{9b(DC+J{xT zAs2sQXB7Kb(_ckHfk;(qmw)32yDpZ0eS7CqZ~`#3GxMd1ZBd6{m-V6%S4X5>8DK|5 zlCsMJn*bXao|~JSp9>4*0v5<8N5A2ZZ1smH@JGev3q{oC?%o547ifmqJkYmhMmT{H z&C#*|7i#a|2$in;rgb7$%Yoqup4gooM=65XNombln=xKxaava#` z_xb%bo!D%6X5ghQuYdLzhdH~ZsVl6DXIYT^w>l*O$OouL`wuq|T@K$B5HK(>5Meyf zz-j+*1yJpe^dX|AwvQ{5(B7>bvHgeQn8R-k(6``eF!0@OW6D6nC^+z0z-=cmFJd?K z5#spoW83fX!*Bahf6sJ74l5=b8x2)oC`{1u6VoP(=^Vc{?Q%4;`f@lF$7#{fN zFZ(LQx1S5Tu!TmQ$8UA2JFo~sa7Sd|7|_esoNMaI5*(!4E(JQ%*sdAbAVFvZxsm1LeQc&m2c!jgsGD-+=6r z`jG_#L|t!6G3X^B-Ih-+EYnq@`s+nP5FH zyMEF~A-!wj(^F4QBDt434~qUehG;>Sw^h))TRdXs!GJ%`Ul)Ie9oa*MfgeU%e(Nh; zUB5`bZ!=wmRh)phh4W$pG9G@&n?Zh=wI^i3vJV{@rRMSU2N{T1QMZ00DevM>`bY8l z$6m(axQIe|es6{u!CXFzPx+8sEhn0fcT3^YsCm%S0kCrT48{I&@ng2-P z>H!7=xP(kPet?OCT|PlYP&|K4tBH090)(Xg%nK5g>>Kna2a7#`aDU4`8~)3ytVS(4 zWC-BTBJw;4xHGKBAxeOpKr?s1v7BFsYb2)y{7hjLJbgNTPH^=h{3<1a^@XMBN3QQ$k>i#JW zG{Z?>=7K%lUmvuF3Xk%eu@0vxi&W5fsJ6&~EQ>VamXGtPIO!uj&0E!{3$=5u`IvY5 zkF1DOmv06 zUwqZVTt({v(-r1sI1e%q(Q7O>iT1p^lmO-}=EKwnv>Hn;_S%%jsuRQzCIr{y_9 zuHg-{j5l1kR(mYD>ZN^mHCTLCI+Nf6<%+PQ5OL5KU}S9LY?zs~u_%duSkr2VYf zs>#{Jb#>P{f$n+f@ZAIQSXkpBk{k)UgkMzoCZ!_K z@~VzD-vrWKc1D9%_b~4Jo(we_5>xK_f8_{D*QNRo&IwdWN_N&0>GVr_;IjGB|@Qts=$*=q+2Aliqd5+giDk|mo3wn+rCqW6qH%(PSC(1cjOQlA)(4FZH*-i4oZb5$(Xa4F zLqp#W|MJBLnS2)JKJ*+a?BwMa=u>awg2B+>2XBGDzz2uF%y$KX=_oE|GOGs>6W+tW zC-(W)zTa_GdlsdM$P-UthG_i}NPOOxRg4$z*arvWG2mn})C&DP)F z{P>S>;}^~tDCjIAmb8xh&%T{QA!y#!;#4#Sf2{KwG}Ta}#d|)uhfj`LDJ=B5`@cnM zSh3UBk}iwg;&~37WA0?<&f!Kl z%0SGR!5@E|u|+Z;;?Nom8Nlh{^1Wmd#YVd*P(Z@;W9aH=-njUaau!B8uDCo zI3!E1Pp8yG?ifWV9I;4p`EF!v*KsRgF)p9NWkcl;*M7{$sJiuMc*ZF@8-$v7)O_)M zd34sLY@mZ*-I?_K9~~A-FS9`yoeO~BOS;l&A7$;mTOaSABzuieX}C0n(~fC_iwRs? zlBM=9wPvnXIeX>m@ zVqgE>>j~*6#}#O``vglyq@A1VFF4~>;z|+mTBoWVQ=-6+uG7%?Ma4A~qP+bu5imD;_cCxwdde zEI#?jDxR8>cMf>)2j#0n^8ARyrEirJi67;&!fNK@u&UfU)fA6r1^Ki0?7$+p4d{~^ zYvm8oWLyOio{YK@o5KVAe9|NwVgYXK6uZKLYFx{_cfO(gXbOk8vae=cG;5hEFUKMe z`slB0K~3;L6?>3i)r{Au@)$1rRenmL%o;y^=xZPF(+Yjd%HHIyE*sHcl}^B(?cjMB zJbq05n?L+XVV6(b+VB#&fC!c2bQk&C-A*qkqiI``e{xZ-1i13xW8{-4JJkW=$J<_d zI#uk*L!SBPx)!9sV5=MhTP;ebO&u`EolJ1uq^ z6qKVXGc_+`L$r7L)Zx9=Q<&?A1cJdg{xfKn|v&K)B3#dF}wfXbI z8jH3QkA2T}M5N;RlDTy(96jKdA@CuXweN-;Sx0ekftR~qBqj^dJuPXs@ZN@vL0P|K z350#be@wH|{hqs0g`ldiTe0GAI1^g14HYutD37#J@bT7K zCXk&p$m#p6SUqn#&C5UQr=qQ|7OG0t=VcnVq`{z=IWtsP)gl1H`#pza4Kg+b61Fw+ z>%wr(^jsh1+CcAo(_im&OE-R_tl)EScc27da~jRbyP&3?w@%5_3U$5t-6n2Lv=|^s zy|Ze)d?#O|X$T_WlK>l*8srdgsWfMIeDwSCdf-|>t-d{bS;0NW=NO!@ere}QX; zCz0N&oT>=`gNVPGuGZ56g3xTgO`{;h!cxu^E6Zjf=_jmj!lS zo!BDrNP1>g6)xqwaqWGgTLc6{mcH6;c6&E^<*4kEjJCVV#Q{o&lGfIVW*yRWTk!w3 zvh=$+g!0>m@#;IOJ`KNku?50fbTrIldq~`|$=KfrRkrtsIde&6@zdjZ@34(Hw;f6l zBD;k%_CS{F>#i>2(h`lY_zr{fYp4<-26|dlfbyRNJSbp&ut)JfyQU!X(X0xW0|s0T zV9@jg!LJN?Jb*zaJ0wUeR#b|{%QL_Qyr5IM3{FChnKsN3iWHcC5VGy`ycqvYX^4jI z=9c0exdK$oBpdK%8v)0V3c~dL7TVEtoJ#+-c_?WO|2<*AyEl``8lxPcXouF|Gu?5Rv_oCfMKCwzZV~2n91xsNk_ektH&RbW|T9$2LTWIVRl{0m;&-wK<-l5`P%JOT%$I8G5- z8HmZjrdkEwg=fRay|d?hPW`yRt2?Wo&Bfr#38+>>e(^mVham|2tbXBJMATSoqnO9) z``g5l*=y&oIibuO+9z5sd{@HDx*Ew}pZ`t%ctYj`QvBKb85X!;S?N5AT&{EqGL9MG z*sP42XNVFxbEde`6#{*A_kJ~#0AzxahUt5T)I(OYIar>=79QM*W_4F_9a1FaOe$NE zl86GNf@pLGq--u8>`jsfI<)K%m@T5)u?T74IW?xfr(>h|>|(!zX8+0Wg2mS!7F=28 zXPJ_36-A(1e2bvf^r@+bH|wF(l|#E@HuETHm^nC8jOXb2BaP;x7v7 zY}7bPJd1V;t&!qwG}RBBNq4M@7Zm?A5m5m}NSzQb>EXS$4IyjXs64QMY!$CA9+ib% z$0?5GmvLXA%*t-m z@p>E$C#NZ6`F9PNr&w#>lewlYr5)yHI;Y1`&=&(7{$(1hc?Klzhm)j6cV@G2Sb0O3 zya!*G7(iAb^sK>Jem1arYV+b@KxWuj<`Ebt1!+}9Xvmf;@vN$&)UtRT$fA$xBdh0O z{#Z!SnVa4?)TVfvWDi>LkyU4HVu(=I5=zbyW?(+0Yx9<6i6NpytI{u-Wge26U94lZ zesNn0DKduCJQrw`wUKdJ^M%x#gInGM@)FQc4{S()?6*0{>v>ijW_N>^j`UJ>XBH6M zyAkI0*5>K$=j@|Pjj?1iY4cnecm;?C8>_=eqoLj`T2c%e^UV2s9pblQ2eCR%%KjD- z0ka}>pgDG{VsWygRFhrW3l@9ZNJtH6e_#yG;r9JOhKUm;nSV<9dwI#a5a1lh2WO&~ zFETfvSh(nAtdD(pg;5^@f+9st2v7!od;$Cu@Ymi z_MLz-xe#}&wSQCMNtX{4KTVI4A$O`nUvuy{9$ok8!p}9NNXk$Dj~NB*f*_KN#T_WS1{`UAYcU9x%+X` z>nxHg3kx6EeXBF7nTLD?kou?S{_wp2fa~eoE4;vJEFvNkPHA0BcFh%NOT9ooo1r&t zq$yA6aX2HV{fKQ^XxEpaA_F0=dcwtE`bu%>?BnzD7kV2|LAKC%1->OLLq@C3e@m&t zbj!a&4al?1@B4i7XH79Cxu33ppzd#Tt~}6+kJpWO5~2pVButy4J%zsVla5pc;d#V8 zFlL)i?^c*C@sw3T@qDm-UMXxCQ5E+fFu(6or=3Jit4k1bMB2*qRG;_`4Qj8el? zxizxc;|30y=*XdXQG%2JR7D< z4#5P+A<4;p?I?@%c6!dYyW&^zxRcOSAyO@{*2+^dCQ6fHWD!aWEmLg?7uUwZ5T^~L ztb}VAd}w&DTbDL?EuSobJa57aEsL8%JnAd)JS(`^#9h&EYpgkZ zGFA6c1War#o-kynY}jZRMtq#roQ{!~+=vBiVDiw4Y>CL{t`yp&UA!e^Z;FHpt8iy~ z^*}q&F~%52q!z2^mJ%;9AsiB16f60>Tcj#s$_LcE47YeA-_Cm#Ph2&(e{~F^`Tqcgs zX|H?#agUNzo6E$jOI$&_mNhJc4+a+7%<&Jhc-Gh&7+ybzxPFZxrFElWHrR(v-8LVK z+7>*eF)2f~c!{1zdWH6RfXki96er)?~ z`&L*q({DfJ|OyvsJ;B;DhBCM3{iEv#ikltaUM;1g~M2}$t8v2gVyD0 z3vmO3X`j~LQ(MwBrMBR9m!i8}oX*vaKa|^qH5my$$yb-*kB1b?fUM968JuXozLZbF zedZm#PQg?bG|YlN!_&`$v2poUD?#q-PJKg}TI%XsbdBdhE5ckUGqy51AnSDRZsRx^ z6n7=^wzvEp5TW|Xi@16xJ)bw=-Xg&|9m)~Hj)Nd?WCR*g@QU}mlfu{{0mHZm7Dfk1 zj~N;?zWYr*j5V`Ky|3+Ox1I~6>f3v+9fHS>ETtAx@((8(+etniFp5MqEN%c*)CvnO64rByHBf^PZ&J@@o zq04x;^q@0{gxy8v7@6p=b0yv%iQi{#K^3ed-!UsK0ZNFTD!QtzsukrXv3t~^V^K9u zEc21oJ}}vaVzHAHXeQz9$OWl05Sy#IXd;&ATaz=1yFrv(2ljQaRfEo4KRgaf;bTeT zynyl-QY1xTP@>R+c8VZY^vC01jU$RuA0K%)g(DPtVvo!Ue+aoT9_+)D1ViB#yVh8h zH1?;1iJiMd(Znz?m(&F}P-N_$LD6{mBrSbpP&;=dW(M3L%nUO1RWEmo^}0==R*p$D z3o5RV#=ctF7ahG7o$x}@M8uZvG^Wn8%g`uc@g_uNtS62_T%qptYaIDbk&Zo@NEqJT zB1Ve!X)uzQVAf!gHx=PaFI1xw{8iuB@p(tf`JjKa3!`IH1YY7af)2T4D6dkf<1#$0 z+-o;;yLlM25 zp<65{-Usi*;Uc!+>|9hPZaOBYR(u%i4QNM2gpXS+g^_S~NVzKUG4)rOdH>qi10pzy zM0CDiw1yPqjy4l-r==Kva_44XnNB@AJnvCU+kNmtp2c~+If?PRLPTWlRJByCSDGul zz1JazSE?G#Jgi50hPcr8PZ7~w(z$u*>~F+-r75DS8gaby&9kyf&Feq=E&@Cso`r2c zU`!Bd<*XI~=aQW8^`zq~J}gR_tyOO334eT{dbmZeS6~%M2Bki<%VQG7VhV3=G`5Ew z;pd+?(ftm$VhW^#u7v%X4(Qxliew2Va-U&fzeB;JoDE*KrZa{hBii>@iXZB7HY zq|s?Nz(n!a7dgG&$g$-gLWO&M#p9hfd#F1Lscu!ocpC# zrT{JCCI7*=&eAM;UZ~18uL2oP>L(;F3U5N~Pbp_NK(^MY6%Lvq-aY`Cg)x4a80jL) zPg~q(S^;F`(J&h)_r~YN+vu`w+qP}nwr#wAi~G$i?qZg?JSUg=N5puW9h-$}y!5h#m$T@5!^5|(mv-vZ zD{Hab&Kf;xo8XzkRUVqiaW-F8+8=dH0wc3NH?Rt*u-8oWh&OuRGVcmwPHTf zKkDH-?jhHpcctYUvG@3(piEc$3^6(6nwqu3!#Qkv58+R-D-0i9E^-+RRTSQ{X0R;h ze5|TW(IJQF%9kRHLz83#XsqpHrjG_|Zn{z|`Lpb7y+#j>EsG%?)|~+mv^p-Vvf`?G z1C^i~KvmW--4m4;!#1@TY_cyA7eb2ltl)=5SDGe3*=vB=K|hpT8Phf*jdj>IYSd6U z+qAQ`BK=IJx*#}>l(fi~lt?gVkeJV%@?e$cjJG=ol?*kvf4NIyi?lc;JnXH4U9r>g z&`%X+%5+4Sz>lP+qYhb`c(D0nq{{PmuTjAr1N%Yi*Z~F4U+= z8Cwq1{KF|c@4cfQMc3P=M>jIKHDQ84$I6*%IGC8%{8y$Sf;w-Z)}r|Gj=1uk6NFWU z^y7i)`BXk2z6tb5jQ1ER|2|lYG97x_%_al&JwK!{zHYwGhmE3LdtMg5@kHuxj>y7o zMK)x01l0~2?%XNe`toC_Xp>$Ylg~G28l{!@{xH}>qfwiXUDaQp%^}Tq2`T4Ad)`tQ z$*nHYy9mv^_m6*C1^Rh9svOg{ibQp@^O2wMz7amp(BUiqrKo$;Gt}7)9OUmwPIKH? z$y9`{0?E+{^sm30mS_?14>UPxPy<$WZg&`@?zJ~T(sH69_hk($c3PEfUI}Pt3M?fn zmfQ6GW3`c74@Mh!s;H}&EXGl7U1$OWj=6Y2ch0rv-z}o24vA_<_taXwMV4N}+&<@A*jlnhBdDF}ulXN9AACgV;dY4R0hFUhO;!%If{OnSkuvVFApUZQt>U|n|9KgKS>2>QBpB4gw- zcgiodeJ5ZaMzwwe-dh$yWIjgLKA!ci7Sy*^AE?noOY46EJL~Md zpn##E#oB$G)MHMl%-@(?@%NyAM}CCL?r-A6II$ne)wjZkX($bL+th=yb7Zos2qj4o zL2{@p4&Y85BqNz(qkLO(S5w{6 z76fN-;LK&tFF`~Yst=u#CD7ztka&221C;cA=TVej@8+sv+?-u>H za>>8Ou`f;Y0-e?lV<&*A(<9njij$+yEcGxH9yE;)D{V(;(1;V`Wpfdl=#TBH6k2i)DoPW z@De^jG@)Es1?UK!k*%Xj;NI}!UvvZWmwJy!leMXK?*f%AG{s3Y#peP)!{ZaGSuQW2 ziv-%SiZisdNEzByh{(UVNMB^%#0x)SrU~e)4zC*TrSJssi($<H`8h&CgiYGg*2~ZhTp5z3mB*<M( zROJsWR2RFDxRwTsUHF8Srtfw$dq|&M8oHXpTmQw>lAA{H42&@;Ia^R2k}$Zhr2|wr zb+!@N>(RXjfRaNt4&xG&DUS3WN9dMa8>zw#Gu|m3;$=C$jw0@uWDC$#4~jnMNzD5Z zkmPdc@JGZqbmjLz$r?Cer^p66lMjI`A*UG7Nz9>7hh-D|7>eBBQ5{Y#Z(_QWeT>(q z|6UG^9J2ou0z^}JFk8}k}^);D&VeuwVv1l$#(ZZ8WA z&QNB|Kcq~`6ur~RX6y=n5px*P8i;=!T0pmD=39aCLq026%Bq_Z(zdctCo(D%LmtcayqcS(w_$T-7%YIn^O&A9oI-|>S=#vsnT|FM1#=hapck= z;nnn8__aLlO4L=e7zpjrvNM0!X5Qf`AtVAgU)R{T;kF#}j0UH?uds5Q4S$gZ8kRdE zhUV;O8NCxap?-qQk6!hxoU#6SPUzt+%vK_j>v~}jXZcS0?dZy)B~BS=C>f`{lxZR9*W1E4)1Ft?j#hiOuzWJXcAjpAccR9O{CiYY@x6-^QK$ln zp5pGoB~Nq|L!#KSTgq~+4Q_>6Ig~O76xsId4>?oK{UI9#CAhzARCyv4j@9LotJp{? zo?=>xH#(3ZqxuIZC&>(NlB?v*t#UpWQa6~AY^9XnOx@HC9#0qEDUX(i5w^J9Nu3Nb zXE}eRiP`&<0$Kc}cDDEX_jaZ5OUVb-18G@)Q86|UV1h}{2Kh3(3i0to!&}eDssQIW z?Ey5i@$7eg?ozpPDgMS^IWtw&QZ+Vil?FM{_E`v(R1w543ic{x^b*q7&KIkWHX zK=r$A-CU$_g#>jz2jwo>d19YsC!g4fh}!sU479toO~XQIv#Uz(5*+R9rcw?v;mE|L zAbKc0*yJL1HJvfkh@GW>1(6|sQ-(pz)QX!}Tb*XyOw3YQt{rdvgxMOB_#OtI+IefC z^KXSqtZyI0?q-s=Bwi#7<#~9~y59$CX2J~#LfEcoO{a38hqM{Y0|c9}TOc-M0T{b4 zGNZv!8!-Mb!;J`ari`I39%#CgbHf0G_z61Q)tL~uSpgz zzexs5g3&ztzegVx8zT8eQRiqjD>LV+4Vo{rZl4Rw{kPYbDlf>q;Hh24MM(ctcf`@( zLmE7`6GEM|c|42slwDWzgR6Z01+RyBkNPUPq~rtx_t!s1YL?R?6Y;N^N`iVk#rACm zj);ujgV7Jq);Mlk6Idoklgc&*FO$?Rk6A#Ls%qg^QIB;?X{f#gyo09Q?!S1KCTtO$ zDY}ZZ?E>|uUf*dnXBmxQ+?^BdaKhKf8Vu3pmMEX`uFe5L#(yeD~C*{ zfsqAEQN2a)A4hMNZ%ds8ql=VnT+fWp_pvdcwO*q4RwG}Dj6$7r!W8*g#}yNdAw?fi ze&GF@OAww3lRKThZdH#TIj8R$y*0N8KXJ&~)9@kRHs>$W9_Dkt41rsO)|_;$B+BsIw#K@v#W~ zK7^H?*YJo@qi+?cK24zHooZK#JHT}UckiB%j~Xov!?8{X8jjb2eenKXpsCAN z@!#LfoJwr**FlbPrwx3sHz{Fi8z4s3ey>7!pPf50TXng4_h7UwU4Hym85bF5fK!g5u$Oztn+FpNRmi8%hyI+)ti*}&Jejv%9f{`ZN zt*6Ya(-EH!?<_(c_!iV`FAv*+c7^;+BRKt()xT_KN2^)gY-JC7n}GI$jW?9dwioBb zSsmc>$60H%Lt})7w-kKQA%*aXYQprqc$wT{sFmX>pRS-y9KeSw(mDz(HFa1!%q?RX zyWol6QK=`wWU?IDj&c`bRFal(MmHeGWjX!OR1xH`6h~#Dwwml7O=0{?*6$!)mtXKi zsgbc&RG;qUF)g7Iu^$#M+2D8DyUHXGWeaaaK~p)9yx-Ml=~e@-~b> zb&OkU$CK%}5>Oqfoss`SGDm=A`zTpj@c!>6OJiHXz~!tP_TOU}mxZi+-cUCv3avMc zo!aL&v900x(9F=m%uU^*Q_9-uCii_qHmDd=6d$|k7f3f@s)s|lM|1EFAeHCaMw`Es z7?krdJmbS7`}07UP7%pw9_O&1z7y&zEaAs|<~=t2$eK(mrHcr!Ii1C;?={d)9PnVj zLm8Vgq80a}!yx0}43eL3bJ7Y%iY~$3Sg}DDZSV=VDk`xoxe$#!CzepHs`PFYBuaQ% z!H}xEN-6__Q?Fu}v@$=cUW5_VEcYK4>Ug6N=D>ZV@TSsnVdfS?$+1!qmg$Ni|*tCnB+ys0nk_wd_`pd<_;8k6RC{ zUGL^I1b5C>{iu}$ILlNui6Qxu?T;Ax5a}gyXT8sW{y{|tjp+*TXwFsS+3lZQeS$d)=dXC^a zubjsr>*-8xr1utTbNvG{bk1^$xpH`jVWBRoC9Mg&)+ECPM$jIiDe-XmH`_z>LGs6E ze%z)Z43qL#UDq+KR)$7J^E-Mj!g7G_^8#ynOtaWal&Qon`_ir{%T$UXM(J}N8Y%+z zyAD`PcgN06xNr1^w4G*5wt6wWa^;EwzWIGV4y7}^FrZb3-cqo^Ijb_hc8uP=#qZSd z_SHrH+8WKy?gXmXr`dFAH8^my3GfJECGAuS1*Gh0xq1C+&rhL8>4pRWQ zO%oTVElThDPVN(XJ|_=}n^aiM2L#RK#LS#Dv_KvD$V-$A{xrb#8$>ac_)LT`PZQR@ z213wcK~)_u<9bQV4e3PhJw^LyVdBf%tf#!liuN(cyU0J;=nV$B}t@NZs z^D?g@4d{s$v3!XswOh)e6l}c4Zl`E~;t_2DMi5|jFBQSNB(Hd#)gW}?E(LNrtMz5& z11$uX*^#JTXhioii^)M@9$=?I>TmWU^>s29s{S^cPDK>k+ z4SfcUkw*tLPdx0m&gdeDtgzzRDrZ@$>Ay_bCj3`8yn$7XsoAQhPdMI<5JU~D*y|m( zi|%D0fc9#w4>ySYj=R#=T|0Pz##*8spb$q}a+)A1?x-g2*7z_gp3E27yiM@^j;G?> zN=AayV)z?mcyYw)pP^1%?)iaqx&8nV{GR3x{+ta7}HJaVy*_|{G%n;6p_pjm52ZFm>$7!xjI zS{g7zI+2=h@M0ERPB7Y%?|5g;?;fA2pMSjs#oOR+YpTOOhfY77B9UmoHSJsS6%_at zT{?5zpQtuhhC zxs3#F95+PZxm7DEpWS9Q2i|+>IUCDivr$!_J6OlgXAfHw5v~T`e+gb^S5A-)ul7Ti zQwuk0!Ey*YF=dl5U&l2;2gjuvr|#BSx04!MOxU|O_aa+Q-iPfXX+rD3`f`d7!+TdG zoo;BJ1>Sft#J3C=i02@>n*6*R-2@ZOm^mK8{11WYD8RgCiW3ccs4 z1>xoKn9rVvWQ*4qE=|68Vlp*}46y+|zI@%#7%~C|bgI(Es{e3_yuk%MrsSu?ZdQ6w zbA;Bk-F$AzzNA z;XO*%qvW=^$d|Dn`(BWGkDnBAP&p1~U@zmFb|wi1IIaG4p1X=kD>y z(71{pO5@HI{UL@Eu@-UdzrVD*du9rvEgdVd?pD-zy@#c<|35+L?KMj3ocEv`5R z&*EU6N2Ag?aB=KuaTO3x zFD26fpri6$3ODu(I;km&Dw)0q7=9a@$Rp1|tL-U*1EsCE&(cK6mg=-We3(;XZT}U~ z{m0xA*cnGGsyv_dzT|Z=2m<2*w zT&d6@ItXz|HlRT9u)01VsjGpT1)^wX2nxytKh9zy3CQ!ClpAIKon=3s*+-w#uG@7d z*W2{=laJ{spJ_V|4VP!oqw4(>1XOkyQUD|nNg$Nw=VyTd00Mbo1PBzeqa$Yj0vtlW zPe=|}LI{%oAG(AOA_4*u&G(ViN5LwC4FzP@#swrm1Q3@-BB6r>0SXG>5AO}I42_m*O@puQkkx#W6>;xV8_{6wnuUj-Z~x3IxcL13#;@0(8zI ztmEs~^aFYW^n(Te_u1b3AbEuaq+t*I_rQIB zF7^29h>>Duz&iu-WAvq%_uS6){Uf^Y0HSX0YJcKXA?Q z-|ywsf`B4`0s+DY!UrIr0|*OE&Yr6UhT+a8?ERakXX^~lyE9{N<`3He8wS4w7WhN> zBpSF)0Dv-pdT{ui8}Qo#Awb~IvIGTM7qlj55cJznxQ&p>XY=$a#?J##!r%1853pA| z%O_`Q9;`8F5R>ye;MZ$NNSj@{kwNwPYx$m=7YMWkyhlqw27`cr1`0?rgby?%f)C{V zlPQW0^IZwE*IRz^2b-P$VAgWp=%drHwU?ytan<(@=qK}%0f$x_!v9n+n-4q!sCrH> z@7JvPpNsbw`JF!Hw{qsUl?YW$Y;@NlhY#>KmwgTL;_MwAh*nz-#S^k=|4haIoBj#& zXm)xzL|sTH`-iO}2B@Fi11mwUTg))J}X3!sqj~%SYrMaLYyDqSx&J0&7B|Q z+_HxNf*>gd+PHbn} z7807(7A951LB`Zw%i@5P0fgAIIK(7t6HYe)a}9N{HiW z#Xvs4>FjHwsun~eOV*C7JU4@N^4DH89&&jwWecU-S7Z34{yl4a^nx7+8|@e@ayYI( zGQn+D)H5zHl_YPs$*F7*1NA6l#p)Y}1~cdY^Y}9V_xav*HiY?8u%Hsjw%e@A;@Q#8 z`}<8(&5UsTANbvhYJ`okCEvg!g30k6)?=qFjK#iP-&E?_D7aVpaQye zt#2>S_}y`4Hs;6cF!G23iSn(0P&Mm#D2D`Y)PKuW&$j%X_ft&Nfsy39RRS87u!Qy};u*1ADz@5{*gKs$Ha5I?v(3;zJXy*l zITZ`Bo)X;-6DOJE%C)oh)S4?cmEs~E>=*G0dN2u_qOy=tvS(qvaS`EBZraYhi&t|N zZ-T;k&v|3m%Q>J|$VuAIA4L4*R8sDIDiCy4;*5sGQSbaPzy3^;$v2u69OTnvS)VaF z#fG*ny@T`c>D{Ly*0qHj579Jq2#FvZ$xjGtO{%V;i21*<{g|BSOS3^^(Pr5-qx`3t zd7w}orHPCDx3`4Z*hsBvG0m>l*AHrotARv#!}kOD;rAn#@}^}fie#xz4GZgyl`);{ zRHu}z?m+t&+{AjI+ZWVuA-gmz?Fr2;oea{@y1OV&;S|R5WXGKIigVbFSFR^u#^{l53+})EH8{zC4sT{Vag+j1_3oY0eND%00cBa7rtP9zXnLBeE_Gs~ zKCSGkbR#t12sb~zTyx_Qcgrk5J>NEYV=9X{aLGa`-cbCGZH|Zk2>ST;=2h? z`YMKw?vqx|O(J8N!H*2T4r3=ZTq(*fIMpdrgPA zV8!Yo548z;Jo@%Al@Rl(gP)(uRF1A= z<-jCm&8D5pMu5)xZJ1ahwP;__T$_+XfYqkG0yeV3UJe2IqwYMNs_oNxeVWwySyGcUSUKf0ksb46}o$jt4ByIH{UPqX*?grQa{p zh$cz5D-E-B|B8X>l8M0rR*Er!#fv9xPn?6+DP0X-3*nVA=@!H)m#XdLUh_O9c zNSkWYp(lH(FEk1qmT9)j09K(3{AE_*Z|>&_=*e!`IPK=zWXTSWl8>#VT60#ey2$2_ zZpe{VFm>Cs3oZ3m3g^f{op0d!-Iokmy1P7m#0Nt4u8m z{xl8p$)Da!1hilpoUgCY`QVMe?kPt9NGIar`xnUy&opGu;Ht#nO`qV+eiI*Rd;PNl zt2FFNTHpYr#4%`KppTrGgCE271a^LMT*_^qC7~)L@@%jxl%R7P@oLZ?>ny?V zVD@rw1_Xx9GS89VSC#Y5l)^Sk_t8g*qbRuVT5_v z_dVqkMD69T(llqFe{8S_=qqk!EQf_{O$OQIHUzAKwiOR{IZLxe%(`4*J_~Z<-);Iu z9V>7iCr^M{_f#w>a=RJ#OB%YkDNwx10wT>MAHg7~4l}#%WKSk*7FLmc(H9)HBs%qQ zMM|1$<9fZ0W-hVsBj!&zU!V>;XWNpDbk^k79k*|iFtdL5H~m)ZUZ)MD*fE83t`q#) zUOfHKM{J8a&`VBpKDe?sVTl2-vh$h)f+b6wJUT?D%A}=g7WgxG+!`)ZAX7&rYJbX# zHFR`oJmKdlA00d9O4TH0i(~D)y>43V44~qN2eSSaSm+|gTGQV7tUbQ*oJeOxb}@xg z4uQQIYB}@nJDGMN4(ndaRI&2wO>!3o=N^BZd7iI(@akQk)zxQB2IU*AXs1)DSG~2L zq^ulI$|?43;VpXA-Ff5wt3N-+own^_w)_d#MKY-hoV?eE^OLk{nS(INT*MmQ?7-ip z92O?XL_nf5ljKjqCxnDObovMDeJsY`5DFvPb#W3E<_SDi2#s#mgc))ZyGk@Jy0g3S z`?&OmG(U)HPBJdIO(t}wfOx&V^nn^=_XdveUJm^uOj;b&`iEG4SIdPrZnwpMBFL@i zw|B~Aqp}k;#&HRD!6K}7<4<}P5tXL&X-$&Y896pXkDN=#+SYd^CiHRhul3BQR6V+h zsz;dKx5IsZMt3T=B;^bQN=wx&UzEt-v6FRjUSV8T_JN(0&;PL^iTy6~E=m;E~a{rMyGpVo94Gi*rC^jVe;7 z2Xq+lk>K_8+obK1ubn)5v7zl`!N$ZEo$(#*Y}#u~gmvbFZR0FhT3&K6Y&$Q}I^vq+ zHt|{bp_R8+gbBwg2!wsf=zEhNd4?Ynz4SeivRYNvaMF_~V!_-Q_fubpt}~ohSzE9& zkd4VNF~F~`4~xu9Mh15`swpi|;up*&dDIQSN$77*G9=)j$!yjCsdEr97fh_BhAV?j zs*P^J@H3gqTc>;X7Pi**C8@aTAu4lDS948_F|7^YunYaT_zoE4-+MN_-C2q1S`Edz zkeik-fe#hNQ7M5Btw^LurR6FsXGa3cUhEQ@; zvKn6fAVMKReUr-y-pJaCeI9C&tc9JnX_UJIU9-A?(PGbxj!t~(|}!u1xMNRal9Oesw7_}XaGV7syn7#x#G5CgXNeMO0% zhV#CBez=$1#=m=~{n30pM#Ko!2`qBBW1Q2CLc68FO4@T7X=y@xyr@R|(Rz5C%#9C=$?n|gQuR;OO5 z5A;63S|&Tm5oIq78_t=PsKXV}-k$-ZI4lPzV^I^JydB<$SChS={1nk%3K}crA&;kI zyoMyvNm5*G@$L%8cJLkX^dtISD&dVp+VsLGmA#&`pW!Ed$Se#1?sm;JRo&Q+arMI* zO*B#!UJpmPU7?OBA5@5NEI)T~xE-`Dk;gTi)yR~g!euPQmYqeasd<~pz!--M9fZVV z+^??>!DSuxdO{r*X7c`i+!z_EA1x;`O*P}qzIV#~u7x=~a#t-s=Mt1&4xOCE?_O(4 ze{sw=Afb>`pwdGfP+XOr^&-J_Z3!^npYpnp!b|N!P1*97$*wy!OK@6f3u8FGU0@=^ z#Ljx=+{_7P<~?d7_{#o$)JEGn{xKp_o9&y)REiPmf;#kyb%MaP!cx=&iku`-eSo4Y zkET+Ai^Ij}-N{*>Mny^VAWrm^VZ^l^Kq6owF6f-~NfT{;31)kEOeP%>Ok}CoY4vx~ zxWpUp(CfL%#Layhg-h$L#C;V7}8pO=;!eU0E-d#!;eFP1PjN zL${m z8nobSg^KLR0mEs`8c^NSad~*t$?O7+K%4sRCX;AkW1`s-u^oB2f~%Rt=ZvknGCM03 z_PV$FsK4lLX5@RGb~0o}!ZAsq7PV>{;lejw#M5N;jzc^ahN*)dz&?R~uKx1AafL#D zf3KCUpM-lSoJc(HdAH>EPyIPwaYylc2a8Kg1ys!2+f+5Phwc+ z#vqEQlIr=**zViyUXP*0|4oVJ{Wf^l*1HTRGO#?CR`+tVG{jYTzxHQ)&3xD4g+o8nyYDm}QHfZv?Nc z_PzyFOC{wS-TBB>9Jm{mi;LLWMfsf7XxE!G^SpK*P}krQeC()vMadKAY=}l3eCt1{ z$AvX8hY77nc_^yli!YwF>S$KEPD75pWkFO^rqtO{oRW*ZMS5#V$sgGxL%Pyop$jHS(=fjAz^U1lgeO6b=kV$&wko_zGj@y%}J3%yJn<%!UTvK}RI-PR@p8bI3 ztJvyFe0+bN0uXuPL;odE8^@~8S4wO$p-r3^xRmzwx=bB*7yzTj#!3ZjJmi^t16@+T z&;CXUc|qUC0pHC2!!FCi_W;ioGsA;5UlKwWQse+6d!S!UtYfH}Z?@5dEUE3{S)_$m z@`E*lJ$r~39ThWn-DSRFcOET z!*lyP1;fx$f3|Jj{PB%kGd>#2x)UMp_=<8;8YHW2XV1ZerFf!lBSPyGJ0O?Qy;VgA}@v24k3r~7mxTd zOvhUNBX$mv_fWYQUMSl_-GwPMo@bG%JCA=!zh!(jRs3dam|lyRnz3Vq8CDc7X+i;J zhkOJ7Ju+qh8S5wb3KcX?><6?R*_4TLwfoDXW&;sJG^AY$IwvdISqr*;;Eif9 zWk)|8*VmTt_xHUg;U~6}(>FQtlxP;fQC}#}SOjB4KE#$7u)Aqnhi5yyx0>k%Jm?(| zNr_yFJ$}VDf*#SmPK>p)!L$*E@X%8LJuw@wSjEc1`)xgVx3_vG5Y;%>hU5-&V>JbF zDLje5j3&}x$1en%Fw|+U^Y{dyB%WQ*olc7aOpQKYw6?eaA5q>Zo9v9*`VT{8TQDH* zPUw?^!@*M<;u^BFX5^mX?sf3N5S@5jn`#&CEYDNp4B8{)v`p&Rp3@jVB~wWH_qB#| zoeU}uFzy2^)-cxHI@(OPn6gfi13%w}|kRogs{rYuyK*(tI4f2`3@i3ph%g?JQd zPHUf2)TSYV`>yrC5skov7eC z9mNw^Tzzt_fGDJv8tCD@-KLcv)ldCN@a=_Ju$9F-`yLO4NK!GCG8{)KrTKF382X5A zLZHi;z>mPOVFeTbi)rLo2$^n3NunNLk?sb*0|( zmqYCFO1${Fj@aJlqEw7Dkh{!%dmUxz^y$xZiT9#E>{YUHECietFTUb}1@@G{2g~nM z%1#GKOcaM`6_^b08ijQUrKC@tyk8N4+s;0q`Em!jkGOi0;TBYTY*+r2 z8ReuD?W3C)U95Y-*aEkOqU$m0(%Kf_fI69DrlYc1?h%rqJuB>cB4|iQYw8sflb8e% zO1o{<<*ItZ7FPZRnueUuU)?ST_xcq4$u6ywy9w79_^Xl;Z1jd&uG3Q1%FTV>$mn2n zqDV*>F{7cShk# z+y@)0b3E&0(M+chY5?E^$n+DZx>*b9jZqF_Q$d3DT_+5?^sTR6YXn zc{;;eRHt;HGm$cb-Q>&9oE)9+Z=?+ti46CMQl=z4-R^d_8(DGr@cVjQ&-KEh>JOKD z*ZuQ>AqjXi8PHePmwpOkP=~UyQL2&g z7A8NKPClr)7*Na3lojwK6Y5DwElYf}%c=GSedo^1>aMZuM`wC%)c%35x!}2p(JFtKwfutp zj^4%JfgAI*Fs7{*>UAk;!?`TF3~7aa9AEhOe+pH4gj}=NYh)A~b6Y*KhZRk9ytrx& zG;QOiV12S07qLCcH}8}N?Mmy!Y`X0@5MZo_2YLh*3Yp)L+TzSqF5DO5hZ1w!Wf8^S zzLmQ||JC1N!1`xZ-dUHr^?KCITnuqboyK9D8jBS3MT(37LUyEmbr4zgvLwv(6LoZYu{zs z@MBF}n$ef`Zve}@x#0wbNFdw`*=CP3Y;9T&?5%>34X=AFj?9qcMk@4w*Y@O|`hrIr z>1Dk39~**USs>DV80Oou-?pF8oH>>%9yezKrF~kzJf}~ypt#+CRJrF6wNt#u_g5ya8MLfigKp5 zyg?>bFZz5N$Q^&MYYf`2t43gD>ROxB8n`}yww6m@gJDO?^;5b4%nM&guv|SyVfJ_H zb_0NRXzZ_s{2S(_L(f{<92r|#qW8Z4vR`rG&*KJ1bvTk2IkXw5#xP#E;C9hk;My_E zT$EE0uD;40Pw+684RP%Z-X8~-`GBQTFTUX6rwU1Pc0 znR0TKu2eE#us8z`eR^uyl((<6KXa;ir&GDdK1wS@G8_xz()(nHRN-NYPjznhpg8Ab zC01{p`OuHc$jPyNrfJxWW}_~|LWuJ`PhGKJo|QE7BH795Nw|PDV}d1kgF#~Iz*f!s znMhRW=7r<3RS=~r(hZv3h#RJNPF6`Lj{U~uMx3unA{vS`keuX>GMG9j5>hIJf8P6w zY&DpnvK^MwHk#zLquxo7dh#%eTjG#imU&c7 z4TfVzv)98(1x9)I(e3Tk1eotWMe%iwDQB(1P)a+rfHjTQj5oW%IyG$08FaIW!Bvsv zXz$y`y5v0Iz80~hZdI=(foyUys zG@;Y+xnzKBvcgu=>|0szLq!1_y~k&tz5(OouYlNtW$q_T$%+XHN1TBVY|A>L!K&Sa zw%^?5S(<)a543BattsLrHclMRt&Vq-7-?-qYo1Prpktp0_%4Rt&+*MmBq(C@#_4Fp zr+>> z%@<$p32dVZ?l->c9@C`%x}sqDZz~Gs|1q2Ys~K~!|5wjB8wVT5|9M5>2F{#iwdx9j z*e!Od@Rx$g^HvzWJC(sS4I_lXGaP9i5-I46HcU1QjkE&+MBoXlK$t`_NzQS`W0vFg zxAxh`Y9+&?rn|QL_Os*Giq8s`{E|n=R|GtXM;i7xVjmpZzX-qtS4gOi9RLUt+Miz# zBr8i40tV?tEz5rqB;~@Xx}Ye1L0w!UN&oo$dqZ1K#;6UI57-*5^+!P*35?rf(6#i>897uN58s`dVGEHiylaa1o0ciF~HzQ`S&CJg#pvJ03HK4A%8Uc##UipxFCN}dlnGRZbKY__tY5m z10dM1E<*cufe%1||Cr0E=l${_|B8a>|Jn2RHw5rXBOXZJyS-5}!1#jqcKJ0Ag4c)a zXu!t+`2P4h9sigxfTK_=`se=LRii1htSPc8a66S7|COMk%=ZTH^HqTK*Aqtp5r>ij zI#46H+qJp*HwUlff=>7QWbt^gv7yg-X`W1Nddq6-3S$LHjNp|32P!r1g+kpkT z`dgAQ@RO#En+80vc--5Fg)z4LhoXa%=+`L@0-hxZerg{N2-xLgklt@7+D`@xX&3zz_f=I^+$>zov_X zgbM2IZ|%uE;K}3Wh<~0xHI$PIkoGt<$Q}iAe=S!s0w_qdU-189>>Of63EDJ#Y}>YN z+qP}nHt+F0wr$(CZQGtZe=^A|W-*KERHc(n*P>FDy!AbgAMstvIEdkIfKULz7yeyT z%o}!)U_jm_|DG!C1-=3Zg2*qh-m=#ha1>zB-`zWXr@S1Cr)8DjmaUYP-n(0M2$&P# zU?ds&g1iOz+f^PL&Kf0?yAyqHcVokH+KYNm_acfgYpT&*No@M>o4=ij*}|OH1{dA& zr14_pz!)Cx@!`HzTsh%WrDf*EHRW!#6xWZZFS$OK4k3)(d1tudL&}9}W3Nch=@Qp8 zjx_eQ)^$+67E-HQ*Rhq$)-7ZU! zv#i)WHI9^#KMHiLx2JXgQe%D}R!>?HtWI`i!^hO^zi}B$Y&RH|K|O|ZiXoZe&Z^dA zdh~bgSGulr&tj#O@lAkKFEh%jKVM zy$ppevEW>=p$MyD&o}r-I5RvxO;~qF-}^TQ*O%{#S81Xq*&u*mZrg0q)lKAGQx$|@ zZrVT-<4qIa$h(s?#WN%;DAD&k!CPVJ2Z_Nxz}6)MRJi8Uw_SF)ebr>iYE>h^6%Z}; zwcF}UW>ud8xp2c>W4b7nKNAzKYp{HZJROVnc0nGSpZzPrQH-y;W-;MFxGv45v9>q_ zD12tg-W1rH%9y@u5%{qWrcIO%rTk08>UePasAd?u3L_WTXAXm9Ee139lwDalW!)yX z_Z&y#V;>d0^oUdZh)1h_T(&a7kzIa!Y~ndJtX5e}1%4V-E!sSFc1jzW-IxjjV^6}i zCI9XTG|}YYqM{!Pcd~l$8%@z2x5OAl;D9!VRCX?9#Y!E32%Af%ttP`$U>OTYV#WCH z=$a&6=hNgyfhe(%G6M$ES4i@kEA8SGT>5#jU1(H>S#@A4`lMXWXd@({?rIFkwcM88 zCeYjHICplF&3awkq2QBQ>h1SIB*J18)<3ec9Kc|IT20zfv-XWMIhZ)x0G&xz#3at|I z77ku?w%GAgwR#+(uv*=Q^n=OQ)+;d4%hgP2=S-tH?|6=8asO7102+zc8hn*m6_{3W)jAoL!;aDiWiR?$cr5ob!RCMTQtv_AtRm-dvS}hpwyzFyh z#_)`DbS@UkopCHN47>S7Dge2`<@Exy?P3|*dEN2CXk%1ptDXI!;4K>1bFTXV+tNQW zYlj$~kEXUEbw?p%9fZ$@w?m$Map7H!{^06E5%~iVVU(!94&sr`4{D_#*xo9ib? zBZf#l>(fq!G?+a{m7)|Cx>VEa54fl#it*D`SC$lD%Q3t2u;;ICqa5HFOoX#0zWZ`T z2bcAxVqL5Y#G~4MKlOE)?=Rxu%-*f(Hb<=NwEKzSQ*PbM#wWA?(u@xC>+uGcA#cP- z>UYuLgM+0EM>IKfQ3x*@t&LWg3=0{d_7dlnaYNIpb0mHAyUElh%BsTZ0N8Yq<7UpK zYu1FpG-PE9v9}?D7@o3`jn+q^X|gA&zf^aJi}w;dmQpSbfW}dvz2-!3SKIn^!K`TB zW+8*b=Dvof3^UR6j|cYv#heN0nbBxal@oUbil99yp@2<8U_?$@soy|l+4o?3UDx-p zk!YmI`^+e`QiY*WBc0AjHn6bsf^_tmwue^1=)KtA84UVu1OI)#YNr5CtPeBJR_Q>F zj}l~9X=KqZSib~zC_fR9snm|RM6?j0E z%$FkBT#{j-ASZl#Y4ZZoOe8!>h9TLXJSgd?O47=WZp6OlqO`x~XI#2IVorrfLqr|e z&o<%a4Z$Sm5wYR2CptlFO2V`>+$`!9Y6?bD}whucSO($mF*N%h&U1Q>--Oh2e_FtAwbJTQF?`M-|gV zt7Lq5F`4a@#t)$^K{V{tZej#M@Qa|;h6nD+Dk7!f(MJ4Ki@Hf?shD|#Fy*MjP5nk| zaK^*ld2{_V^RqEyZdRcrdvf?QAyP(_3x}RNg^X zntA5kJ!xV{p4GXm4o`A_IEJ?H{^IRC5YN0O?!QUxGJb!Oz<{_7LlRaLCx=WH-f5EPonr7+*;okSVtO_Zn7}X9Wfb3;g zbO6ufikP}gw8S;d8dKHh7cmfV$>lLpJ5Dl;ls$$ve*r)SepziPeMM2MgxK(H|5ggnqp(o znz+5U(YbeTxeT0jzp)eN%)isT(AIxXb1HYc`AeulwAdf0Z@a?7!>7wwytbTXxA=uZogYhL!EEOFwR`BA>0k zBd;sVlYd?C-t4ND_iN;Hlvg&?zaaP8BdZ|rDi$@7<^AV0KNxxWdXkN42G%RPF~gmRep$Z;xDni%G-J%P!f?mbyNzzHqjZbr&q!@ z@o6&1LG^|&h12K-U}sp|J&(4MqTF`l@u#Us=-0m87^XoG*Jxd7)4Ni23aREk=sn=7 z7B1y4NdBBk$tME7XQp+!-ez1NIBwf7d4lc!C()3WmJfokGS2^l&dWf ziL`0#PX**{J>A285)r@S2=cMwsO|$=1%M=Ig;`J%lw8gAPvbXpRe&jJPUP+R0Qw}U zH~$@w#0nO=c>JlTuR}W0Mg55yt_y^{mu&~_RhFM`W0-&c%_o>hu5jmrU%La<=@~E+>QS~6qdb6bXVolJEPjq< zd%vve)7A3m@?_5{E$mXm(oc%748A_PPDswED9H!T>yBlfE=w5- zv%9g+SdSGFnUwLaiQLQXqBZWC(9d6iGwxe*Wi`ryUDJCjINLojE?x1;2$tQ*%!^H^ z0)>56>og~v)%-SseiNU@fj2^7Ve5i`ma4q<*8;@ci*=5*Ic!47koQ6A*v+%LW0yjq zm)_fVBIxi=j1Stn?`XApob$}`r+iD<-5x%xCAIJY&NtZi75YNY)BR<%&P z;S1QXILMNH*Fz*7O?7x(LBA9-n~{o+=Nj#-Tg4JTJoH=-lQv}pQ!+0?`*fA~Zx2X-_;9ogD6@>~4-B^pWw9|Akrk>Q91Q0TH!DsMe}V%m=D! zMSxcrue0U1cANntD-(}Y%Cc|Km*CMQX7E={IpzfD=i9>p-09L%zE2^<8ZA?TI;Hy= z=Z26&(&ayx&4LW^ra#3(w#a^nEm%GFlGnD;|0&U-& zp=24avrIRHQQVhMAaR`P` zoJ_wiiQgvZRQb=5HwZmB_fpZF5u4oz{nG*|YHkBR?W6qha7%jBtEuzZo&IunuecUkWIkz)Vj48i&E zssoFW&dPH6w24jPcI)5)54Q&J&@Fw-lX3eUNF%<@_~#TPt@JsU2=MD zy%0_D3r8_W9T(pZs-P#m3mO#vJy{oT+*e4|hlxL#?p;TYPhM^cJ_M-}08rYJ#$JDw zCdHvHMJ{$$wOBopKR)ja+u{AH&f#&ZAA2}JVIeZt;90NHSVI!;u*fPrXUnW@#!yI@ z_aRd{Za?=dn=V$klk4$iX*dvd!WHxK_1wc4M_CQtPFrFWPk60=@~jeqI@cFHXY9hBDfY?KO|Fq5;s}>~XG?0s?MPol z3$m<6GC7=`#VNj+zWc}FQ#liZpp+s;k`GVA@s$eZcyj3|&;CxE;on@dH#4kA%UJgC z;`i_#K8m{Fd(b-7BnGy{ zsztn?)>$qzS4SR;zJ#<;j{6S_WhhvwbapeuOeuB+$PAp zHRf8haW8gt%`aLD^I>9!WX+NT{=5><8;Qlc%vfbfx!3by!n@6tG)v!ZdaIloxvK3CR>t{C)=#Y z8=OZKhm%@bX3W|!v--OPQavU~QQLYeu;>m#e|-BAyq^;Xu9i1t*S$00XOMG2YBh~f zB*~{K{Ym?&DJSdk(QC;N?lOdu!_9Mq7OR>0ZkVM%wn;#GnX0VxREINyJ`YsV+wB3? zocjX-;%{VS3pezwm0qkO%Z}`zN%0{ z$d99sRne=W{&T_S;7+E|_^Ti%=_P#Tc(_Zihz1$;bBCrh)z-oV*NL4;6Rh>`$b2

    Z)aI55^yfuwfTOuIhceQ`;VY6gp;Rj*>@g5=%w9K1 zAd<_nIDMP!g}o{nvOw?KcKue|zVIqCgq0)o3F`Z~Supa>jvP64Z*(D*7|AWW4*EK$>X{mQsD|K zEY>TH9OUB&(((ZL_Fv^LHO9x(b~)YIo5>S}SU$bmSN{7IU^*Y{Y*MOckJ3R}KwRzB z$AsF5HB{es`OW3DX8tMn4qG#X+R-Yrl?N=^DQEs+zsbDxx1!0656b4QCd0gTxv90> zNdA}Q=y`==iZJBjIbOzlhaeXP-!GALyJmUn-wz=*)mWGN(>+|BImDk&zASS^tEb?e zLr6aEJ_nf}gy~1(DIVZiX|)F$Pv$zwrSk`ya0LBb00xmfWKH28w$bYFLdfw1gYqB@ zpLDp8KyM47c1UI-p| z1^9)UnIb8d`xRqUCYv|t28dc9*k1w8p%F3)I~KR*e;GkcoGLra5-6~(gXu1X|jpJ?_EG49e&#bC6Wx(HEx65;DOw-F}lb(Cc!h*IYhxh;Tym*JqJ5`^Px4#_3oS`Yb?_q=6ZmJu`EBR4 zW(>u9@x6n45FVZLNFj-80Es$0mgPT@eXp|ALuZQ9{!>8ScwynsW_bH7l*;S$@qK^h zDw8o*sdQ>DvjSe8mxobu+MY4T!y1Tl;pb`{eIqx3=VCVv@?3I2Z|6-p70$ z36v5^-dx_(Pvc4T;zyfePmT=I3J{EXsbYLvD$GloRdV{a~uRrJMJ+Q_!ruyE~KN z!AIQB-4{E@4ku+Me*QBpw0vdcUA7YDf{w`;v#5+=Rl>*+A*udob%vKaRSrW2jRWPD zyq`E+dQv#2YyV85ER%LHIb|tlg3&LR{R8P`Lz(#{Fk3im=n??eRyiayd&D`j>g2g8 zO!68*I+nK@-m>YLF_ck3ML{ErI9u@CeQ0ZA*?ujV545HJ(FI(;075$D1s~34H%&o2 z>VctNhtEGigyqXw%`z`HV46B;*B-ZZ)@s%_{dF`5rGbUl+io~vk)(3e*1gH}Fnx2l ziTtu$`5P}&a~kyL%x^etzk{!97C}p&#kNzMG25gTA|iB(?Ub({b@h1{4ns48=bdGw zkX0DNs<6HiP4T_$aP;{UZ33)my28aUnprkbW-%yi3TU7o8qBWx$qZH@+Iv0wx%O)& zT#Or}Y!!!cJ~G*D6V84sU|}HoYw@QkWI>R`x>!PiGIyIfXx^NoC+*XQQFBWCt+b|I>?vXC;?(hr{%r4MH7|z;*SG4gXqRmuDfMQw!)1wU}oi zsEZ4bU>}e_Mg%vIY<4~qq_TNgHW3KSALn||I%l9YPmncF(6u!H92=XjU&as)C;$=} zT|qPeQM3RY5EvIBPhzSY!pGQOib2)f})6-Mak4;l}qM_`E#r&4tOoGzA3Q^!j4^_3o+asL*n1n27mR`O?q+i!p?|H#{{6YjCn>23*&8 z?*QQ8xdzDhi!C;c@??)?)9Y*6pNatR%fBwP`IH-@`>PAk;U6E2ch_5=OfXjs3Uua2 z-wue)p2_)y{`q^V`n!4jyBqe4di-lU{%bF!MAy>dUwQts^7~sRdo9p{_lqTvwla+A z1rUXBh8ghBTg`TtTc`@66`*tVQ>(VJj^YJTU_ib3+k$vR0_p^=RThvnUH!YB>VK5s zubWN_0izPg5%}X(1@L!$eeEY6&P(g$Ha{MY{7mYn8c2x#)Sr^H{{$hrS1u+v6Wrk9 z%;F*t2$u=P5x8qDztsZJ<<~nBu!_bYf_VuPfOZz#0Mb$9-MV0|*#Pxh`U(C3urBIb ztP4Qxem4TXkLn)#9$16)H`-$zph~G1kvl;3gZ%)cZsJEw0W5SEVj}MiTM#qZkC-C( z!5K=D`b59702!r8)#Z!$#)jb~@0n;HE@rMR zZXiF5W)}Ea+XVk+W8C%yn4jeI@6VZ?KVdoZc5eIyEIi`*37QUb{;9~t9zeK$grE84 zIh@hOEhe*n{lEqB{eS!Y{R;trwgXQnq#qHS`vo#H`c^in6p`3ZvKfn>Z?E$iJA4VZ zW>}zeyQ@(3iX`Q^BhodJk>f}zY0&&LGG56HIl6J(+0Q24-e@JsHZjE-?4_@=IL*&) z%+pZ+Yyk<`u=Z!-bcDL1RZ4{!7R2YtW7qQjVhn9gx2xA@zAoJ~m5%y@)B&UD7%Pz_ zaEM2lHRJb(UMea1yW_2}_QediEy+91|5?uR2!aL|-HvD$L)iATITtU6tF4ALdwL~x z{uxWTEkC0C4G|8xq!dqQMPe5SLC+*yJp&OY9`U8s!$DSBXh(=sXxXzUD;dp${EKSE zzT%0NzBCE%V)+6)HtC4ZOMW_)G+ZO0UJa z{0MApfXuVD)R#4DMtiMJrFU#t8Y^EnW8A-}eW4pUuy|smoBjxKo9L@v z(^H13P%wS?oA^hBl5Jsr{_oSvkcp0ozp{1;`;lpIt6e$AxgTh*&GoEnG_S-iF;lC0 ztwoEtO)DEwX0^WB2qZcikRv91-OeJ(Y;mOwXITnxuWr{H@H+z~tD%I|S6klavWo3gTFPQbO zOlOzj!kur1n($Xi+0qa&SM!Q+W-B;_|ENxziWw)w7JTe@5N%)M7K=mrX7-~ENPl+3 zOs2Bs``A@aNg;AS4x(5oIB+GkS8?s$9lOy!kJ!~T0*}E!XRia~PpR5p{o~XmT&B4} zHqk0Q*4tlal?B(z&05XW>OICq;i)(%iJOWX_FD6&LJpVlIF5ylfYnHs&5|v8gqWye zA>-ihXnc{Xvp^qPNEhh>QKy*l*{*`d>3y%ObyxOcM7DyC39Y7P)0O>t8dMQ)?r9qw z;DysRxL#ARLNcbUj7_SQF1(^_?d=wkUrQTP%psx1yYaL{;|f=ak&NYaqtDm|80ySi ztp;0770|uZ7~Vle(V>FTUojz`ly#dVtcx0@i7~pVuWqYKm^MrMAy6th-Y6Ic+kP51 z`fspIzr=eZubKWuMP8NT3jkYPWl;n37Nz0+oo^3Yh@oZHaevgEWhFoh}m$kjT*jitxs*ItA8b0P7(uYB?TNjQqjmm zf9OAI0?V>sS#PU7XI;#E+RJ4WmKWNyKpFI|_*r+kSpTfQn)LcIxwoRg!44}s_kUW^ zpmRQGrj$tjwETPgm!&V7%?`soF0^WGb!x1ikpM(>8i% zwam~qUJW|G++V0PQmS`=Iz=#TiWmx@MyhMtOM@8A0-S+YEA|`Ke0@cHuwPi(#dM59 zGIzXgR~Mz`h3c&^g~daDypZn!8!yAxu$ZA`6{VS5*ap37c)Ldim_fwDoM%Ah-vr!W zcG%s0R*>u+u){ZrX>f1uHBtTRicW37aaepc;I2rg@49mz9ky8^+q`NZWW?`)>>fYQ z*=sfh9+B?Qm@=h-$>CR&pQM0Y2zgI-O6wbI2lz?YuhWHAjC^`oZ3b{FS68}8bA921 zuU~1t^kYVsEAskq3>Pf$GudH)bN`bZ1gRVo=O(nnSs8fY(co|dZAe$WYR1}+BaKm% zO~y7;TYCUr333Fe4Y_D;0;bhw21r;b0Tp5}QYz#li`@xpA``RVZo#?ODR_sN4>mQS^4 zC5U}}gio|r;nb0QDIcVO8imj)zsB!g0P7CR`}*avIxi6ueMum!qp9Ed$TR6~=oL@e zX!SKS)JZ%JHjJc3XKNvlhRP3QMrcuFcDh-Z8mKcs^RBD7Ta#ME`g5~X*nF1|80^wC z^a+||@#9{iyxZ(?Pm#$GgpO?))yGYkHlQi={vcC=r4!%=5IH&CBAeqQ^yu}!7GOAJMc_V>k-cks)}+D9pSe0EU6Q7X3b zT%&m48PwD*W25l1-jb{CbVVr*h`x58V9F&x7S7mdf1S$2cv=SiTy^J*|%6j)DplKdj=3Y0!bSn!ns*}h+UJc>pR5OKOUr?s_Ei8x%k;ceP?Q^*L>*$8>m zA+>@27@A(sr&wY8n!=$7Ds+Uo@y7}`ZYV(2Y^nH%Dx;-vlV|bUc*LhufIVv7kF;3rxl-^W)-YN~O48aWJ1zJY>6@y{C2?bZB ziPr`XwJHPZ-f6nnOTr-e`-@e0hNwZ|yXq!|A?tm6PkBAIsD$SlKo(-9fW#*f#mJrk zxAi8hiwLQWkSPB~rYR$rb-lPZ{tS!kB^v(~@g>>G`--PP)enhr#Hdeepvg!(FuZ3S z?LB2PJ1MRXA%P%Noo5t8?OuORg(gd;x9<6u)19NOF-&`srO#3co|t(SGoz0ZbM+Cz zr>j<``zLMzNVdb~Tc-EX2OdC`k&tMgce+S48goJ@$nouW%{;k}55C7v=O7_j z)dF|gr(&wwWkF~5wpH6PpU>C8K)i5Yk#F26@^6IfXA?enE#S3920rB$BM#b1^FRS$ z&&xthqV7VF1>vAP;AEKPYDS9p2-#cqVkJ?(0rym?_B?Ham}2&QN7;aPDdjEqJN?kl z(ox9y_64f`KpN$ncPW+J;?xZihi)Pr!4Ws2Mkr8B{Qyc4S-MisB`F^9t~94l<9N3N z6?SAyX>_8I)$ZeN#WRVY`a>{3+D5>x0<#-xPGRbgYaC?KF}r;@T>Y=(Qa!zNxoNeM zaE6|Ra|4%9!TY(Zm0b)>l)a2d;`+NwKqyNu+D&Yb?9b6rk!|~*eF`lSRc6yzYQ0d< zzjEo3#7WS;y@k=5Toa`wo}5NsSqp?e1mn3@jCHouDh|(AmYJDl8y!8eg?!?a3T@mE z2Txoa7Gg7V&0psVa*GZ%LV%)#vC`#Bn6lQK>_w*FlDRphBax-FW)Mv zvTHR=hGk2C*^tBkaF|45rR(64xLQ9C9C;ClhPoOQz*Wh0yjLxc!FpS9LQ~gC-n+#Q zyqM3LiweLge)Aa;?XyEwhFlw5sd$Es$m4q#Su1*|ZIeEsOop9E`cduu!`HC2LM@4C ze*lmh_JWAXuP$SbS#mXyxk4picxcNf2P=Egs?%UFXfo}$m6atau{Cr9%LGdb%Q{K; zcp807sF-kI+Q}&s^LR)^Xs3v2JHpK=EKzo%)fiFiyX96a)N<{-6Zz?IgNt-pDcRJ4 z=flU}IFu<;*K_VOkh#byA?)&Br1cpZ&|T81_oui!pp0fSU+Ovmv&zLdNuL#8vTWX| zA?{cy#PMhkqPTesQz6$nxG86ffB%#Dp7+qvZ!w>&VK^PeyO?X_n|aoh5!#t*D?dzK zLhh~jTwDd8kE^C~Ob{J~)i$zh{;i;G^#|k-Xy)}f2%_a@A9tGYn8kPNY8OqhW!0j5 zM%GIN_gN*rrA!L*Jcvl~LoI(W1n@Z2TD2wO7oon zaT+)rUq-*rs3IDYI7XYXB0nJ`J|fm!%N@8LTXYnMSbDyc2j&Wo2|#v84SE8 z6)!0In0mN4zeCwe?isb~*8cgbnMW*XP53fn(2T9PK6JWHB{)nL{1}^TdVBrGC??`9 zQ`BjJvaTIs*E!uGUEU3XXjYQwtS6A>f6=9@YbJ_8ic?;I0V4;abk>eN_p{Mo!k|=ZMR)4FY3Z>opwng820)l|? zDjkc{9owgy17gFwHnr)~rpU(_I<2oAn#XoAe#ib;i(kg}{5Z)8n&T4>h-})N-1o&E z6dEbN1jGEyXTD89$pXE&gVkYYP>So{i8KSz!*#nE9X4;p3|7Qe8_Nh3Xc~bdgp6;Y z;5Ekl7=&NHSl^GSu~p(|t{EN=yp7-rTpueM1DrsQ^skXv5;IlAXHcyKUH=&qd zsDI+YX9t+zlET1XOLdXGCJe^JuD*!2c@s=)U-`AV9hi&da{$bTd6Oad?t>|@lSkM3 zKm`ZCZtrkQdNv36jGlP6`W2|<1{ioI!F8PMZQmcEb38jZ6760HUNhKXL zHzS4;KpY$mr%Rf^a5&J%m|$|nt*t4#6Zkyy7LB`0Cm*%rfVkG_s3*E)_q_E2xoIoR z0=a;A0$rBun$KodF0rm;r!b_~kplO0FJ>6(G{o$d`iLE$OeFtRJ0o+lLP^HkNbU?Z zf_)4G&*J3^@3v>>VQ)B^9!ZF}q;@X6G=EZ4L3O4(ul#AlY4N``$y%wueJj;NvxFF+ z=Cp?q0!nRGZ>hlg3)+{P?gR6BBWiX=0l zzAY4dXr#11RG^wwJw#XCGX^~^5^Yr|_>JgJDr}V*#|9(i45~)n7-zTcRF_pt7U@-Y zS>#Xq#n1*)kTP^_r!2V9Ya}0+#Eg|4-(^)5&7@(;`fkI*mG$lV;w^aCg%UY)VVVjn z-b@PrM`CT}7IsXVJ^Cc|+Hw z+P@rGD}wEI5t>v8MkY>&2(J7o-5H@?WLIFQpESu7O=#x0-50e`x2cP-W>6tNz)V%E z86nLCGzQJFOS38Q>X!>P)Ds%`5B4QdRUg25-|;hpoMPv-Espelfy5MMUaxKh#mqNrNk$dS|W;w!bO{kyA{FT$HQ*- z_sVkvg(&`3U8lyyh-U593j9eG$VHpWmj5GZV3cg*3N^Z_OJt=q zY`CAQM68e$i}PTzUt(+p;3Ov{v%xZtJTm17gWXUyyDX-sWwug00|(OH!`gZR)=Cb( z2s*v1!uE+KNJ#nW_KLV)Vq*>6abYxzNz8@bjgh!uMI+W17-0@tlViB}UHP76Hr@23 z?fnGSVMP;qLO4O-sp0^!j>-wB1{}5+3Cg~nt{^*urgtGUo7pJb_Ya0m6jHkdtXnTf zOt}7#h!IEE!O$Q{hB}-&dR|KLPSM)wH7P?=p_;6IMl2zcA3VLvDW%yA#UJ&%J^gdT}CEFQdzE6q{7qmcUh`WBnUbh@8Ff^azcTiIMY0qbUQ=VKhwn) zXa?*?<9JJ;%PuUcBWet$)qte$AXz56IGHqo5~_wfnfVc&n5Zk$Q&KEO6RiDZG%G8u zuPkzi({Tq7c?ml1=>U&!F-ZLM(GG95@dL#PNr~yjCcgUk=OhU}CUTp@dVkalbq+|geXWzm<4#E(rWdBdJFRZylb^z~CBhIWZ&x=|0hl&E?zhQ5$y9-OQjh1I5` z8&F-&2!2>3l8mIk)0>-dIc)$Devjxf91l^xzY85sCGAPc!1ASw;#EzZT{buB2bs1E zP^LzhnzLU^r@Yb`Uy-oKKsu_j(mBDL#7pxKmPbnkodxa~B90>f(|ZB-iGP=J0Jp53 z;us>%d6hHQsS7q?vvZ4uVH|nWstW2%2_2XMvqONBF3Bu;wbZ#(N@wpZ==Y7xmnY;t z$l{NM9EB!(u^1U0{A>1>2vNi6rz_kL2x_KCy-BEGy3V0+d1&UgyZD<}X7=L5DII5= zD|K8VhLs1TcMG^WMyF+4qLGXy{k%;kfX+3$3o>eI()&67@KxA-&A>AQIUDTKGg<~3 z>}&Z2y)KaF6YYXgsD3tRe+NXx$!F}445utWQW*&Ky zk2IK^4qIDFY*k#hlp|kPBQM$&9b|Wx!Q*rv#U!2Vc1l3ch;ga&9bQ)l9(df=cIbQd@QrQTd1mk3Gqy(>UdP~fz#P7h)Qbd zB9R?#@lGjrfeS`CiC|D19{;TcQ6Q;Vhh!kmfHBl-=r)J=LnW`&U%|Pe(_Fo;sueZ9 zc-$sxCN)+q-~_hRB@&fL$XyhSlh**U=F)8ei@2xa$mn^)=|LXk3dJVslkyNiaALD? ztHYZ7r%FQh%7r|B&i(Z-X3Cdxz?Z0#?1OUie!)booP(~#Jjk0NOsOW~O_cF4zM8_V z7!R6pzpWlG+kA+8d5vVbJ3;ibLt}vWxym1w9KY|Vp=~wihJ7*i@>ruVcHv_FoN127QKPh+ zC3S0tMK3Pe;4>lUDx9wKSZLTzy94+}Q7%dUrq!+@_TQP<*c}EBBBjR{aJOoir@uh! zj{54uf@Imq^BJ-|6z+7?!UIUH^JmQ~Kd7F{FoUhwb^A)0H2V8nFRq=`vtB2klCyT5 zKiF6M?oG}7Xn*4*#}qJ~phm7-U7U{5u|s`zso5osg&2F@pznFe@Kjgr29sXBjMmCL zS*0oQK+e)q=Wxg}8VjrIq&ih*E_zA4{xNTPP&vMdwBrx%q#wOkSD3Q5u4TB(X%B+Q z3mBTeL>l5(6D03b?!X$nvOE%74BI@tX91jB(f>Bo6sgPJiq?kNMtqY$4TJLO(LOL} z?suU<5p_Jtrs!+nlRtT($7$3VeeqZ=+so?e`%g+o29Ue%CEv@vBL$g1s%G3D4;uvP zW@?BHzQ=+ws!uJXkp?K2mHp zBY4hM)<}r;ca^p$P*xc<-=cFqN?`_4cag(NS|@rE&r{5cbEK6mI2mS_;k)??p03(9 z_&gS#xQ2i%%r26TG^QJNC`143b>{%7TT4XcF~Zlz5Qu5c+VGlIRnO*$9q1Yaa!N)3 zN$n0`PVu}3GneUJAf!Y9e?B|qU@m)=_nTxgGm0Q~OP+KU)wr6=pHU4=|__nO@6`QD1N*u+V%AdS9yj)GsX34u=04w4&@;-a_t^Qo4L z7DCe;-`PX;O~9c*)7)(ewY0M-S?)omNry3u*+kLj|IKO$8M1JybZ4v&lz*rWzg?_k zf;rjJ_Nii!PChB8-&PeFG{fL-JlNWWUXS@GO!Jvcfr4srFRq7oHW1|p17@G{?=D$C zDZa5Y{|ArSWo8S_NGlZ-;#7eR6HLvZlRk*cP|CSLiD;J&@?zsIt$qmE!`5=Ah#n6w zGpwH_Zt1W*kPJ;r$O9|P79ch`0qQn)2Pl<|VO+>921?HG1OlfR?Ydo}-RQFiU&Soy?Nb40DEs{?}Qc z`Ef~kL^122*))^J)gx(NX?Vq&G`};gh2V8ylp+z19xbCY9W;(W+`Im$iW+)}ox*tg zH2;=Dl=l_(P`2uoShAzk%%r)9$yTLJ5uAs^NmT}i$0*kxo7dZ$n z@l6)Tc@6GJW_Z)Zc{G!4Pdz+R@n4qMKU!@P?@E8^&Agh>hdNWZ%lpXYu ze=@)w3s?ye#NaC})R>;Py;!3|%dG&$AEe}0g9}&TLp~wXL!T%5{kZg*Yed{qrQLXp z&7b4)lpfbe_kG{d-LW2=oNY-KH+k)}y$zgl4ES$ zfg1p_Y-cFxyZc1KT0;QY7?|t9n$`7kChaNA$G6S-l_ms+c6-0`j~4ZFJUS&EdtX_#u%S!#5oNqnq(a<@=sRqZ!LhCMl)NJ~beeWG^t7Ru6+qBEYAnAFduw6%yb zm8dHoQIKuzP2#_;w5kiE)FrJ~Q9mfXFod{*-?|JjjYG>ZC6<|8)0(Z=IZi#WwdQ#9 zuN7iPe0$oL7X~;ocjY8F31Hy0!{Wn!jP%MQLbuBtX+t2I9PA|4RCr>={)@452ogpK zvUS_GZQC~gwr$(CZQHhO+qP|Y&z;R%&El;pqbj0y6_uHh-#G=f_86S^j;J1@c|A%e zUk#E>{5)DdxDAyeuTqn|YjU?uu@T9b+Hc~+TMq_Rit#=mN#vS> zF0)nF9{uOWTS+m=%4_5K`f7_>%Wm6QeSCC|)F@{RZyHh|gH*zjMs*S9pSA-fs@)zjd7-XbZAkow!2B`$o<`@8O$USK(@r)F<)0Hq7Cp7 zs!&8x84Vy_Jsj$T4hAAsA%B>19>7MWfOS8stbL)tTQ#Uci6q`R@~;G3t#{+pIr0z! z6QN<6qj-uEU?U=`E<6on_LE&0uyOM|R`B*{h{s~0#Qn_JR%?rae(~$;wiJ2C?oi$ftG^IZ@Z(WjAyNn1NZV;G2US%zI!&mP z-#ouq78&2)#&UkBz72|k5M842v|qQrWTpsL!Ca2>yCi)%R(0WAd;WXL%FKVA!MR{u zQjak|6@}s(A>^f7;o^8p_(8}D)F)2p2Y3`Zi^h+WS?6gRNIEzXZTKZ1%Ttk76ZFl5BxXE&>Z5T{O`m-V zI!B~dqC?2?HDy15UQ+q5HwkrLN_1?&4%2-5-&dg5yBPEsccsfrd_DxGkF-0wti(8g ze0n#BJqDKs3F;>8d$9WM$G#sS zzSJBzWH%0>A@vWK6>Ql2zOSZGH@)LCr)+Cx%c5cSJ)A}MT6o^n6A@b-neUrS2&Y{4 zpa^_5U}$9G1$Z>yK^^%E_e;crdjAchNJ9Fw*0`>2=eU)eY1pB<-!m5&6SI$3d=)%T z7^1#})!bI&e)?axpK=|QISiRViG|ajn%&t|{{#-d;O+j*VhQU`j*X|$sR^=nxmR#j z;FF^|Unz;i55q6V;dKX9_jb3ZrUHQ^%WVqPA8l!XjgnNa$z4!}nmk4`lT3KCr((#8 zRCbknYR3dhm5>C+c5Gg-`=^k=gB3FF83Ri;xT7fBI$sTX;$p(i8Hnbf2gUyEAOwVl z0tHGT;k08Zz9VjiS#%jxmX*zDvVak^7fVqcDilo4s~NK4mj-e!#!UlYF5>^2by%>B z={1!zm*zk=cm(mLeiYX5-GXWvBW zHL5*n;I@Wa$4Fu*ew2o^{JNW%9wGE#vDhdpOCZ!VU6s2 z3A(^Jd&kM7Ebj`@xRU=v;~EnXq2u38ZRb~=fcTQ)>GKVui^_4qzja+NJ%l&bML;*z zu+~@^KTN$)Y0t9AozhvidNme<`!_- z7V!dkCTue#^B+e-zIYc+zt#iCo)^c8$$-b&e!`kXCD$8wtGGX{n}QC#@#3dT0dqlm zKS9>Gew>@~M3iD1s(&Q^f|-xBMKla?YPEOcheLMQjzgi++rQhXP5(_NK(K3au7E?Y zpB^)G(pzw^V$~50s#x}I@pIB7{+X6!YHK`gzl1z%*)`D9fyY`fYGMY@GiA#rr=y}X z#U;2I+aNU78}@P9q0sRVC6Nin_FxihoW`Cd?k42`To{^S|!I?^pQW!?w-H?g#PykBwLw$8yRtVRut37krJ&RDBcY-_s^#IkJ8CKN3TSQSh_r(5}09(2Lb-I?ehwr&1;UOOc;Gb|U51 z6-EQfoyx{HV3A7+K(3RihvY;vpjA!giTV>fe2NZ@_Jxz1^ZZ+P{U_e8Gs)sA9F-iR-&9EU}cyD%Rv&L7!> zJ$6;OcpMb1)5PP2Y|g9%T8`-jcDm4=NcYd+tv)g6{m2bh^^m8G`RRVzFT+>v=r?0P z$KHh72N8o&e>JVxh-t|jv3_mF!M3@%aW@Aiz4t|(E*I3BD4|WD(H18P?ppqvt#(1| z_#<-95XwaSPX@AuIyT3{1K!)6Z7q$lzyPrZLC|~Xqp|y{29(t&VEh|UG}s=jg$HTx zwTr_v#ciDKI!C$poFxRyB*Z6A{k*Uv3~Jq4p@-O+{@?-&CW%Lzn3Vw|ThAA(Q<~C{ z>kuFH_qKYJrBJlox=)qPR7{#P=10W2_;pRXyR0+opAPa5bW+;KeXV9eZBZ88EKM8f z8onK=Gv<5JZ4r_VILw3*4$<~dN9uv~W8`!KO$sp4w$5BPZ))>Yi9@UlRvOwC9<*}T z8bcd9dVLAwC)Xxb#0E+|yh>A)gnsU~j+q#PBuSw{_Sq&glEM?NW!mywf%)aug{s<) zbu!G-iz6viNcuiuhw@E%A5=^K<~D6fNR9*a?Wm}@xte-=o3G{=RKIslJIzD=W^;%6~>Z#aemgY?v+pPDkK9M{{@m?`* zT;J$Ch?sKo>3Lm}x2ui(PszaauD?$F2?#B;qGO2jyC~k9xe3jb6?Ml`0_Mgy^!XxTXO1Jyuz zPtWu5zURa?J{!8A#rg1C0veyX!t&fV3SVhVK#8|mk!79X@bc>)#$m>MsGau`JA73+ zTxTIN**h7)AbErhn+Tm)Ui*&$7fxgK&(LG9;DIc#;_hTzT-GD%cy%9yp6ELD`Zf~v zduaJ&m!zX)k5?0ekhl~vk#u!@89D(p#YJ=1%BPU%tGka&Mjh}k+dj&a%?A3*kNP6P zjkxg&n)Q1jK1Q6bcbZdzNYJyDR)4Dz%Ee9VHPobAOqkkEk)}jy-dK3j zJuY5IH7RR3sh@V1(v0^c?|RJTx5-I?=I_vyQ~Kg=qP+c7u|phvddP-D<=cR%$^xRD zsmT}F;{xv5&bg-}f?HL_^?(nr(Ztucl^bZwTO_V4p8WRt`T{*Kc}CKN>C@4THS=Z2 zv=;k8L_ns$AlFuj04t5jEc0MkvEj#%a4JO6p%4e0v&liSSlDf>y1LIj(8e0NG``H& z*45fO1I-yeoUXj&`*TZ;f+x7GX8!G557eT)h;z~mQ2sjv5otXP(Fc};C}Myuhf4)H zu?x7R3L0<3*0ClqwoO{2uP*_$GF=EubHep`WVKAegu?IQn{eLyM=_cnV_}yR4w-ur z?FS@$L*LXibj2^DNPMg=%Z41`DO$3m=y6}Dut3jMstQ)5q%|4crbe!j94a0=&OON6 zZ$awIL*p?=^KX!O0?1@f{uHtxtSIRn?QFacv^XeS9AML&R+mD=a>exdXV6E-hdy>?;LlQbKpww0Z|!SXuTly75r z@wmJ6K>uIm7#t{M5*w76fq0P2*lDGHjc?$@d%v=ADr*`bpTMS#Z@&?pNyw?XJhWAq z#vmTy@kxa*(>?cYFdw1HUDTzm`*D|KmFfiFEy31vHhq}t=Jn`YK@i+_fMf6n$%D8t zX4+z2ljuh+!y25D`~?WciYV5wu^WoH_Msybe7O^qDm#p9J0x~R#wx8oeD3T&%H8JhGckNCM`Xk1OOyzUt0Mb051+Mn#=g72HJhCu znqh|JxxX>1!bIJ(73*UI8J6{rM#78Uh19(lV$;0ldxwz|T9+tU%8Dc)%Zb$iGIy%0MVW*%IFW zqW1p)-6;rfMDjpX%b66Nm$?V4zo9rhgT%CL6Kd~V|Y6jsN77qrkHtnr^|8iXO0 zx19*Pw!`mHD_I7~!>J)WxnOTm@@WbF1^FAW?T3S!ou*!Z)F($K>HSmxB6W$sY;i@| zi^?J5+=y_avC+};M2~S07ciD=RQRm4S^K!`5HM-jrL5PJiyqW!H?z#;aJTnMSLjtW zCc#5b(bp`@qj>Z=JYM|%;(JCgy@rwBVsoNMl0LtSx+6z9swU8nBbtASkkD`-GvZEsc;t!K28I!B{WHKOe%z-Z(@oi>$h7U{^1x+l9ufkm3vD zQG+~t^jy_o z9iHPj(Uh0b9v30K)mwG)#i%|;UC#^$4l-i+C}4giA!9X9mF1R+mB4X$eOgRhX}si{ z)0FCbhw$|&!`gJ}+K;`33-`E4C6T2IzJDJAiml0cc5X~R#;5(#y9sRR6dQ~vlJ3Fg z5btM0Ql%z5D8kem0Ho#dZp$GQKDGwxz2ufuW(~-{LMj$Y8ZkByLIz4o*HPWTVyMg( zekCmbnq*SOff~rB1tU(hwv(s7xp+AR4{g`0XK7%vguBEhGY_2E!refhpY@x($SDtGh1JGdRj*bx|!(kC` z$FES3x5D$px}*uiG+I*{Z@@|gaJJAOKp6j3%e-@eW4)-F)(o=Ox00@Nk*tGJ}B`BueNzkJVR1Pe)Nu6eG-5mt%Hp zHL_h#JR64mvjwV%u6wm_@l85ePPbtQ3FUOrMS!ET=XQaEgC#A*4PO~1W{KPmHtzGH z_5=Y;L&Qi?*9vvepVJtLAj$(S`5Dr1&e~@nNi90ggHGc7KMPqe-HaIj>74s7ZD#rT8K>jxBve~G zHoPHYxqkBthtMTSs(y*OPIjmUf!fTGx$uXwe6iuCz~l0hDeCpa5*W5M4R7A=NR2Y{ zi?7_+qz@4Mw9(6J2{>1Gg?x31ORIJB5zzg|eb>EHm*pIM zU(u)C^ZpkeCbdFsvjz7qz*e>85V338Q}e=?PxR0^krEtwf)~t_57Z+GF-CUs@vuQF zMk{F(S;k_!^F<)siZCTMJY?VqHxDwiU0>-@gTcB4k%>hYChZy^fjm@YcbwuyJuoE*fzz z7bBlV>`mSS`DbPiX#xXbmLb`Q2Q{xIqwY*O-w{i?2Gm4z!< z@NbhTSA>?Kbge7a`d3f2Lpz$oj=b|bT5FwC>1P9-zE-t>t?1SY&~k(_HEF1GFU0xiOguUcQSB%_kFc~bv7RP6$Z0v2-TMo z$sun<&CVNnG8<2vFa>*|o9chm)qoFX(bTo5KqTNEtGHYy&p2*qR3fBQc0mM%6Rb;! zvRT(DFE4t;E1yYE1(V$)Nwk-zxSUPMVw+4b_`ANpegN{XX`lZmTFd!=p|woR|Bt2p zU$mB$o#X#RYgsrrIR1ap+7=UK?TuB?$Rq^qKw-i8{oC8x0bD3Ix4^Lf!dnnGH^~28 zJW_7GxPAKGe7hBlvbmf-w7qJ4BqEMe%t4~9Vf+i(R%2OUnxC@)2r)@X1zEv70eE?l zX?b~xaVRSqGm1#>=>FDU1KULwH z*?lJWCN2w~%!KsEntXnxuNS@-#G02$_)zL9VFcl&@dH2zMi?aa-M zOsec|OigWo7}%OXfR05ZsVpw&LQ**%F4{j%s>Hd00h*8l{)t% zlXt8G{3tPfqXc=nd8}=$0Y?d_1n8NK2+rYWhXnU9A?%yofIL0EwI2E)Vgms6jZM!X z7yvTUHHLm7;E;f0{zmgD>)D+^%@>10;{gT!zTW1t*vx06t*dEwe$)S4=A8>4u?!<4 zmH*;@#c3(bkD%`J4U7Qh85-w-G0r(T0IaW{0qXu@Nb2lf^Q3-Hs10naf%o6L^ySNb zwVI#&$N~=eql6&e_tYEN@*%;1D1KqO(RiVI2+s%Z|GcjM96$atU-uM#{b0WTY9yB@ z79Z)MBmXkL`)HnPrfGJ5jes)^$i?UR#@GE@2S5KZD}nxWjRdi!i~g#T?3cl9Li}4I zPWWqBoDf)@K(QvWII%K+d0G6X`o48JrJ1eryJLbj?ySHBh6LpP{G9W7nVSK0Na6A) zzNJAyY8L)VQ5x8q89#gMqG_rDe7wAT*g56}gAkzmg8-Y;#RS&+Ofdz-t!$1U90C2u zJpiL^t`B_ksHma+|LwP(+YLkIBYy|212_x$A#nTudxt*+n2-2x<6Kbq9h?#9eE5%m z3?OG1A7ql?2Rwjj{97;|rtyzpK7DcGPcT0{(hq^6bP<0TCSU0{NFciRzhiHzKLR*; zz8`*w3qmR1dw~KkqA800kbAP{UL62X&XnwH##F)SSz47Zf z-X**9?>d0K7q)+|e~;i9>EFY2a58Gw&CYXP1z{a3@N0JYIGcN}cbpNhd*#WEjwa@=Blh?Y9D z{?m!EkX9rujOu|YLGx1 z6hS<|8b&q^tx?vP5cHm0ky173N32ezVzHL+b|FObl}>@Xj>T3Kt~2+ z!3)tjaA~F-(JhNf`B^$z>{W7ZcxikB`{u!`rzIK_y*C#k87@IxO=(i?sr&wGQc{9X zrBfa+A?>l)3;3^ol(8#~su%jbB_uwK=?Z;4v6|hxR@>yH|XqZF8s@L^diE+5jQCJ654^~F;J;B@K zNqh@BcEgPiLMFqWP{m;6@Tlh2J7l|6l9E52{HtTlMYA)=nvLO`Y?11mKl$`}*?DNp zfvljbbUrHtaY!7NJd}s8-`8fcorj)VF4#wc?hTpzu8uB!IT1~rp(U7-2hIfy0(RNT2ME>m z=is7&t~4CA@ly`#L8HnE64QK!wf)f^@GVW^hEpoITmBVkeoBQnCUg30kC@ClxBCGU zSI4sg({!mNw5#F!Bek&zhj|=w4jUY1A7x&OxGH&#?{$0mfdr}Gf6{7Yqig{0#=if2S`&;cQoUe z+}Fk8QDhy=xI0@y=RRcQu=Uk8lIRU$W_{dAgwxr1b z+<)>;31%Nz`^B(~yzw&L&wP5yd(2vxpEw2hf$%40isVm{r(?fF^6{HBO$kS|M?>ip znH_!vPa2DEedBkr4k%WJA`U@M*#>-sd5a0spZ)FW+i;UVa|KU6_}CxVZ|UE_Oef6! zZ{#PtiV&Vs;uG#&)0HQLPTz%~)C-&K(#Wt{nDgBg{5+QyUF+y}74b7Zk~J}KI&`Ta zX~q)tQFRTm-QS0=3of7U7sNiXTIv6EH0A(xFk5CFou)D4d|@op!j_XVe5I}#bY{6B zh~p&fqi><;>?=U4VTU%~b=UG0ribudug%D-@l19!JfZ^=R>45BMvu!ee7n}B0fUxC zJ@dA1bJ)uc;aD6O#TwY|lXn?$oil!x70Hw}aWSr5rww$>6bD zHaa1>AJJF2z+g@St!cyoTvPv~-T+KOrinb6U`f2o*~Z>jD32Nu{zgHhm11Q|x^G++ z=S@U(PGKD-CF-#+^3y1g5ZH(|W_bp{+-&8qJn%k^(FtQ83c6Foqt8=#mDiX0& zr>w9`hfk;AT=l^$Mf+#v8Ew3t;7IxKt-3>Ts7UE3he(ZIJaXif^W}({hO9O#x8K@8 z<)z3Qvx{ z9eHWDb##uHwWVR+TxKBDiT@_f`c(+Db>WuMiEb4cL>~uqW_j? z2e0bPAsiayn1xB?km{T#1j=QrQ~_nvdKStPHgBX9@XhJ7JI2oyunnaauyg>BQR4nM zJ#S>609}?AK(dfYJ%3K4uASaT&`pwa@+K=jAnqEJ$s8`l6rbJ3QAQ&on$sH5eukNw z=+*BgL>b8!BJ8Ltb4cBr?8J}l=4EDM4)-$_v-LN*r{)mL>6{=0-2A5>|3Y`s2Slo; zugkOPDcQtM)~hN<84f|cr8Fxuc!YqM2jA7gR{~3ZYym{!HKJ;eVCBUxr~i5!@-)tghNU#!JVw> z!JoZO=0`g=jDQr!&@1`ETasAZ@4qCgpVz`s`t9WTSz!ogW^Ij`IUU)93*JWRpk0Qe z_EsdJa?G`IHei`eJ$(C8;|0NT?|F!cedi`%0(qERB?}=Grg~XqWl{=nf z?3?klrnDx2@mAlRw}T@y4#z?@v0qsE#UQXYJR2|pxh-WetnfkQTUrq{&Mu}NP8*$#mKfz6eT#)wJ@S0OnrL|r`Kg@V>6r=c zv5&?Zyj2YH*+nH(ueJr$a{dn8m)J7N8T1=0dGtgp+$zI|yj@dfwoU`zYZ?Xe@7KD$ zAL*I0p6uxe$FIg7An?wyruyqtpns@kyRgMXS<(1iCq&EpBzK27U=`O|Rsd?QyPRXA z{yPmMs}B39ehU{``1mpRy5#E>>P2gnb|`)*DIRTedxZ;T(B0rN_oSgxxs z7N#A#s|LRVYWav2OBE&rcbCOW=tO$!HIXZ*qKN+qY8~hvUS!B|*X0>&8CsV}lg)2p ztx_&-hzrq^{*L@&f?O|_vmRr~5lHe)omL#&%t?tD2?SE7 zb_6hLc$v(&g6Ws?K;*V&!&gaj4`Bg+w%?gM?ZB?4GxVSpcrI2O@p13 zg*mmm`X_~MqMFio@SPzurb3gGV+*Mt(#(-KOK}PP;q~f(8ep!Dt}_^aXY8Q#1LOom zJIHf6Rpc(AJ#A_nBYi6vgB6;dH3D7mV(ekYo{VPMy`Mt1sZ$O2}<5>=t+-(=vbQFu9`Ro%0-mrO?zNhqyH?_;@seZyvQC>+xULO>x$t76Kb2? zqEf;Kmt}{#V~4~=ZaLU1i=)^W-iLN^)|y1QOsq~{Ib<6F zx~&kmvj?l{Cxjyt=Ua%=vBBc~fX(O*kNGn&r9Q3(-=hR5=pol3rxloHTu%ketQ0L0 z9smM2m3>o0Zb*x@FAo6S5~W`5OFY&j=46;{aIcSyT9*Dy!dxS^ZTo&c4Och7i~ygQ zR~N5q}Ra=DuC86QB=d0uqM525F>IG&(!swjz&h1p%w8SN3bv;RhvLg^q* zw}RdqbWy2xOfKI2&)Q?0bY_q|Med*KGJx@|uXe(+duz9m$!Vt*we53_BBXjfN&4uw zpKiUO>_d2kLv0HmpFl=SOq|HDfQwwss2ok5Hd)~K_QDC1#8BDC&l8Q1#gzLj&t802;wdJqi^&VH;mJQS>$kb4UxVC5Oagqrz`j;coZUv-b za5bJ*Xq~1a$^@QFSF7vgns6%@RP)#@)*E-)IFpK`UOh8%WZ0`<1cl0n?jO@T35g@$ z23q-(XAJ1NURJI9G1%~8AYgYbef@F}R<4Axf`0iXeM_p=#ZiP@sMKhd` z!NwYu9a<#LxTFAsJXSb1UQe+X4~+WqggL!^V!HQ3 zgvT%-lium5+nbcoPv;52Y^U0;qaE4H@0CZkbb*y5+~~6TnYyU={&}c*f@2p?0y!M; z2{A~spNbZI^>EPm;8;=&EekDdH}#g>AV1^h%}WL0$%Hh$U2=0}{2B6Qws$Wh$KtYu zO{p?98ot)cYA$YbP?`)F9ObqFS9Rgln<=j{e!xXNs@y7STkS*KHrwe67PS{n#-4v? zwaX$TVXZCDXAYqC?J)etf_JWL1QkpIW9St#kzhENDg2qo63;v$b)Ds8RgXfj72NLRc6p?jrC% z+3_D(tVb;sI&5xwL|PW_T_GwldEjT8m~X=Wgr8wc|I_v`rrXrT{(>^;GL-kPq zr`~i3X(pT0H9ecfF~z&^pEz(+e$&yuL7$;?g}gl*U{$q$CY&pT1@AdQnAWJ|7YRr6 z=xeueM5TvR3`87GR!OFPWG%)ws*)1O-8->qLKg}S(=WADd^|4Tpxdg0*)~aXu_oam z(Shq2SkbYDWLlz+DCH97Cn(3To_T$Y*Chu{xTfqZ8|7g`BF5efdp<-Wue_JaC?iFh zybqlV3z&>|tWmMi-E;$-ze#I$YWnj|?WK#>yRelZ6{-xYejY=Q3wcY`dZ|~G%Y(B=Iy+LoreN|PZk#R>lT6bbsX1tE(J9* z6b>ZTaBU&5I%6^wIy!a|`kjdKiuHMWY*mK_ZR$zPdaRLRM#`$?SHTv@m>Qzk7v!AbAtUX4MFwM zW^MW85uRHQz9b~Ne41~PvBatT<-Z9~BMM6i-A%qu^e+%%iDJUHTMw)yI7h-DCO9Nd zfFCJm@lMwh8+{j++McA~xDiUC3L*^sCowwRcu)TD)v6mMw=Cr!0P$AXh}fXJ-0u?B z^tC^!G%I@7hc(O>#W#V4>1tGFGDCYJ!RUT17DE6{n+wxg^L!EN)nL|3pUbN#*0XF0 zIY{ckvR|F$lyh2@FLn!Ysv)(SnDQ+%^0^~z?va87c{Z%?4$>c5&6j%oE+K?v=G9F8 zqSVRWwP{ucu4+8DlHQUC+nmI$$YD#g^Wt zs=NDBnupNetL~0nSey_|fA2NRr4UgAB8e4Qm`FCvKEzL`ugQ;3Z)HtfpTKLW32Su6 zr^FckF7be*KI&jyk8mHCNY{FoF-3r^`#{$^lX2TrO)?&jr$(_yx+gDpEcJ zI~@dt?-V)8{N}TBLUHI z>29Z4NQRL)xb|CSsxI#Mg~y#JCpV?9#FF51lv9^T>A~1cJ6-zbMA}|UWsnOHA&p+I zZeqZ*j>p=X>8dMJ67lTM-_3!tiyS~%N}*rOu3zZiBAoPK!#<|^2#yII7}*Q_vLfh7 zL9I-jevMt~-S#3-u^MFtB08!L*2R^?wi~)+g$h8_KWE<74cE-M-o%p&h^eh1$7{8* zM2|VrxWKc)3dU{8cJyLUkntRpWJjLU1&EGeCTRh05E`tXG%!~O!o2dtdd)GEku2GM zv!c&c_UMj2;hX6ft7mzlX#~jCyMwYhj>Zgf`k1EjQ~GVn<}ZG$14hQiJ>)V)H)1(% z!)o_fXLoT%j_Ut7%8tZ~)S*+&eI8yzzgX_wC#Sp6Igw)$`7O24BwfK%OAAl`K~8uPF`aJn}2?}w7uWWFDI6dAs}Dg{lvhd0$BxcXJT!c^&7453m1W@>kq;Lh}g zgic98w&3bJg#|v*YPBMN0LiItp4%@Z(~)I*ifGVQWt5^^7n!w#NmF3F4}?aaw`Pwg za*r!;WNuFAB?onRnS`p-J~O;Q3Qz!}ClHwM4}P}KGsMSKr&ZxJx}FBq@R}1kZp>4t znO%<(#Ymj93jIG_#Qin&m!t@)??E)Ivqv+AJyKE8-*dQc7-4b45>#&M%=YE%D`N{v zmwaNR^w>z33&XEbyv?tkoW1WI9{(HZc!jR9rR~wt{17HYUltoMnZNhqLut5L)3c&| z*XMmrBJA8yM>;k#ZCO3666y~!Gr6^cD~VL#`ve)xVOFlIqa>JVo4pyp)lD?}T?B{5 zQEfC7e2D-zc5FZX3M1mR&r69Lf97g``e)GV3|Z!_@$RrLlP7rqtD5-V&-!nK)w{81 zpJKq9wZ8-M8^TT=x%Kj0cv8GmY$tDtNrmTM(^{U3RL^cc^UoSkUke0coi}V7<{lgJ z`|1^iAVOZp$;-&GSVBN*`BSI2gI%h=GC~=Mr_74+h>$32F1mu@4u1b)Cy%#l7-BxP z>E@#KAcnJ}IisufT&cUIwg0%<`Yd>dWRTbcwBv+Ey8-Jq9G=1b(d2NMv<{T4%r{b$ zkNK@NrpfRyk$IOQ=B0!|iG|l++k_e;r*bNGmZ)S`AcWB7Cy5@BTurlDM5`DnYL@>S zX~!Bv-Ipw*{nT;CUSbZUA1Ef3(!HiyD(1?2i|)huRAXONTDE2U?<;d!MrD&JTi7kP zYwMzNR9@nPc>O?`K1;T=+Oz->p220YPi_I=`OmOw@2z5NQHIfx$Ph4SizkYBAMOPJsJAqQx9Jx+sq3ukpeWC56rc`Y%;Eb ztg%}p`Sscz9uC_e4e9$OPJ<^ZawN581UtBIaw!kW)n}J_L(FL+@SKLj8p*_~x$v&g zGpMr~>>lG`M@M#a(!zyh^peM#UkZyoY8ypYyE^Xi?=Sn(t z+svg)Lkb`i7m89b`gq?Yx<8rCjN`g?hETTIe@=+_oB?{IqG}->oVHFtnCTY7ktQB3 z893c_*-=jD#l=j&p#u(RHeokmE%Vkd%p5?gltw$AcyGDQH(ZExvV|X83o;DREW8t^ z8YdBubtw^*%BqPm_ZF=`HTeX_cr_0OXmAIB|1ixW$YHc%U`gLPkBVJeD-&}9)C}5_ z)UT3DYGLvurJGf}@_&N21qbqdb{4M9804~Whz)8+!jL_%VLNpo++I4!G1lYqM710% z@=w;z?^5tl;N+LdhP9_N`CcMrQ~)qA9o4jImc!Y~6qmU^*WmNR6%Fg(lE(6AmCum# z952B@=Cidv7rFY7JDc)jjk))HPA)@G{Pd&E{^ir7LU$-muyAscB_gLK423;6(Ww-C zJBZL3@E5~9Lrt{^aDes-+diSRETBRKLjxQU{d}JXS7SYGV)fsy<%9wki$6nWeYSsi zD@2b%4A25xfb7$nA1!9Z54Ej*BuHS-r#U~PM9bjFjchsRa7^aHwA2AuT_hU|S@gMF zGmN|jjIMsuRqADEa|Vc?A9Ignb@hHceBGcgK6VSZ$u@qww_#JDe#*dT=H8J8LQ4uCOBK37jEx*LM6ql;fya)%Q#PYju)DRUc6 z@vztHWQWqC_UWXWudapA%@9DkJXV*bxGpLuw`LgUcixUm_pFk zqZsX!O6m<(z3_~gQH__?f57yI#Q3{RU5RpcZZd*TK^{~vH zK8v@c+u=XF2b3KutpdlDrQo1`^;071VACHVE&tZf9$Hk!o`4Wc!6}Z<07j3PE9xY} zz6zI15^ro+rlTG%#!9%9+v7+O&zs5hLf7#}^UFYAKA({#AA@31We+J%_C?E`~$VyitcP7~*-+*5aU6J|z^90*=~ z#Ub%eClfS0QCf@^U%&$Z91Pt7m4QT@O`hZZEWY`G3rg=}5AJ@Lqcictt+FGR>qQE%H;@Tfzw| zgggBs|AD||1Ob<&HM+u@LY4>+8Yv=T*R3zFr>gSGSpcL)yZ~9-^0P>{7RpUpY@Vb{ ze+#T}ru(Ip0P^t#loNdcq;AKr=%)5RV61Z4ibj5*`lzBD1`!+tfP$&UOThzc@@_m) zLn@t<8g}tnThQ#BE=S$La1lS;ZXc~f&M2mIcZ5aIbsE;1I*>R;4Fyzw(+Jyc?c2;9 z3b*Dl--+dipx_4h2Q-Oza-HhTvJ=wYrl5~Sh6pTPZO6BWFyfXqOc)i4@12oyZ>t)( zqw(XJT$Xm^_grgZtkMdM`Xx)@@L+w*6yBaMNer;GWY%R8Bn7@=A^2gT-#}q{O7W?% zJ^h<<An%BkNjxA^w`k7ia0-__AM_oYccytR?UGkWgQw7#RV>*W=;VPJc9POPy-o1EN3 zSDbZl7}|;Z7te^}KO4(Yg)!mVN%+DZ&DT3E7BXs}947=WO9o7FT85Si%w857m!2=2 zdw&dycA?rlg$}H(h>0~H5k!lA5h`yVfSQyK#@DkSF|^+wQG>B?crAva;VgPM*v{y5 zm-amU-V{j(7!4IzStEiV*KTxtj7+`Nc{Q20c^_tTxqSIguA1=25F#M(Kw(=_$^973 zX*amU=&w+AW!7{gXS{+``bztYoP;g`9Zz$;;pnc>o!b;d2d;t7$@Mm_4}{#<4I+2R z{vez*>P%wMjZ}Gx%T7q)l8^7Iux&u*Ey+dMfgi}qv8qU>G2mvAoFXLV-(GifBr)j9 z)BK5td>(UA56=bKf1ZA##xfDj)Z?qW5bT7j3}U* zTQb-cy6RET>|V)oMPoCbaA#u{PwyL@ftXN)VpO}~ZSy!gDTp?ZbG%pZA5lbXi?wHi zRl)Bz=Pd`5IZDvY%TEHBYi18~4bwr;ccon>49|*X*mQ$ub(~egkhm~F3_464Sg(g3 zfG;ViGM-g1a6Z5c|0)l;j_1s6mEm0)4QZM@6-~N+%)3=;Cs&IShmvJ26)?5l!y*%{ z$*gK5F`{;Zjhm`~I!@Tm11sus@!=$2YqXhR_{|Ym{PO?1lr0*yN7KGLT+;;E%uKl! zC`h$WyrPF1MG$ftHO^X>&oj3Y_MsXA*_SNhF`!QA9%r$>sAj!7p?b0XsJQvveJ$7H)a$kmM(qNRj<+lF zh6mkXE04TT+;o=z5-6iL{+J~U0ELHU^*jiG+=WafFhFt3@Gz-Crw~a%XxQxXC~C#~ zW!%$89ODgK<<={qcMEjJ+O`IK;joOZXMU4C4ZJQ`KPQ@jszPMvw)Sg-pv!sR@AS@_ z61AdU6tpcduH~F2iSFQ|?7y6#G`VljQ5WoK#ajH9emqE;vUCz9U2}cKAZ=j4zCT4) zrT0_I)y~p5D(=J70K`Ba+=JTib2XMpHX0(jcT!)IsD6(=DznT4yB|3kjh#`*I{F?( z46|pY@bgwmNFP<)^s>q5%x8(^t!2+~Wo+wIJ@`sD=$qCbve6mj(WCd2QfrqR$G#{; zv5%NRjU^7ksb~?AD5!=jG?UfPzFcn@2xOP#9~D3b>f2_9L9#epzVGrFg_<0umTSW8$5$i>f<|A(=22+k~8v~Xa=vApWn=&N$ zxdC1nCd!q8klq!NzYSYTT^vFhzi`53H>~iauN4h_K0NO#|usq^^nT+RfAs(M#|*tU}zqasSR=kDZ{;1feJ&b?y0YzqBo3 z4z1J3s77t?fW9ND6+#G6i*dXhc|j~1k|d&!)J7g(^a-w5N%}7(8a2FveYOicQ+(L# zfaQ6dDP5Xn{t68=)4#07?5dIj$paYOG?1n6oEa{eHZ8`97{5a=2Oqhr(IVD^HL14! zYdMH(bc=(_@d=RUqwZL!R!NDP__MXAM=yd=#8j5Xs5aiV4a+o~H79%EwsIgc~ZEzTGy5XPcH^ zU(J19s@XBV3p}ouB%|@86bpb{oFYsSyT}12b1Hk*9TwG>lcdFx8V5|__ID#UK#5D9 zIatcp1i;O^gG*2Z@!ovKd~zBvOV!^#M7T=YblOee+7hWAX@%eXEuS~ zN_kL{*=XLuZ@*j#Bp$1z#C!^ltHNGvtlpXpIAtU%9r>+=ThrY1jWcy*O27+L_+!+h z1ONJhAFWiO>}VJC2m}$&K%fUkA2JaqpZPymnbBV~8@IJ=eoaN?>IelB!b@Fa2BlUl zkC@G{#7%U$)_pyyP<<4Hj|iXV^L2W^J#>F2)dxmCKfqcIP6=#WleNZHel~O*sY*+T zzUD3><;r8|8Ckmob$DCZI<>m)u=Ie(45>kiP_7&iNvZD%5tbj^m9E^26J3Ju`IeEs z9xlg5GC+F3AJ9Ie=k`*ZcpOcV`pw#OO#RU@tPB$AvkcvnN9p zgH_se&Q{Lb^BI@8DACeXN3Ido!#dywuvehz&J_hcwYv|pMN*}MbO(K~q(ZC(@sFGK z9xf7Sq`>)bem~_{A-5rO^pnmvC;PaEbz~TyoM(oXPyZsrk5B0qDSM@7?T*eq_a*hq zFjYZ2i-J~(t8LhyZ>jl$uR^v)&Tp}^)$B)L-B9maZ~co-cgymf=^M(lAQJnlzfBxF zmVl=t+9=%jKT4ek#RJ9!+_kz zo&jmT`bOnghPD#z*Enh}87NItOR#ihiXdi}mQr!8l)j|T zBrAR$MqwBciFLd&>xwarm^PKPj8#C`K@G56!P|Ck^4~;Xsv^5>M#VfoZ4Mc1d%}V zk~%4CZKrEDT~(Kyi=@4j{sTRdyW9KL`>FR|?9z7yL|$}dw#W_YFPf+0 zJY9J)(w}K)c^np+5{RR@ifm&Col|RLciRDCU2ourn!6WkIq_k z`L`^W@snVcHfmYpxQ*(RNlW21#@QaqH4WoE4;U4in>bGjT0hEY@m3-}HA@9)xtTZ9 zmKL9^4`$5!^3MeE?-M0XPEKj#Xf-_J-Fn{yn3pi25dRF8CE3&!^l^R5;uuXGNk8v; zx9F7;)MfJhdLnH<(U^AcczWEd#KD~P3=VcxeL#Qg3ad%rwm9;4`0(Wn}xLG2FQli5DtzcKkCDsAY0a|*%=*y zE5Qk-eV~0tHW+uHAU|Z@tpoJS(5=++N0Hy5#9xDgxu(*c{75f8og+;BLRN-bQSG~G z172lW`ARDCZIKu-j;w}S?l$e1+A0kL`N2pms`+uoCxnA%>8B;O*p6N%CSMB#nUJH1 zaA@_Rh)h_fK1>CrcVwHDdfia=L?bHg8&=GTokWdQBLBplkFJV%Ww^JIn~P`uf|r9F zeTC@Z%rnB-lyqTdc(N4l@S8xWS3<`vr*`tBVq9H#t6U3SVGWgI595VK^KCkzEpQH< zYumYpoesI3^w0F!y@Gh&<002Cy5TwAy(s_5J8>QqKDS0j78pItx^xcQMU^Kk+8&T? zIqxq1V7cp@2vzZvPVMflRu+?Y%M&r2ii`9ae$%*><>biawA^;=WPJ-UxGZ0$SU0QA zbY&A4vy!@BH4vl@)0xG75bvB(w5VSLp+Aa{zF=lD40D5eSss^csENRdw}~QE3%QzH zYSe6BPd0u5Dg@Rk)iaT7v<)j7c45G-OFm#dhQXI<3z5HC(;xb(PHzk*)t{*y$r|_C zLCll%IqJjiN7;FnuG4r2KlPf7NYyRO>;Yq%e!*Wy{YyE0u`ATyt&m($KD&7k$!8r< zN*`tIwAdch;ts*6?J+nNs%??A|AnVPr^>pOK|A>R#H@1+VveB9dK;r7MejO33op8v zvn;6&mXSHb>>-)EFHWhJ1szpqkjt(x+F-c*c%RvYX@GbtX8K+(h*q1B%!NU$(P;Ci zJDrCDDPzT=%4(eN!-T1_B8a_BVJ{u@W!*-d zHch`Msnr|zBpy>tr$(`WHrt+HN^-Khl>Gh%Umh~Dd0TGV3g!;crXmD9$n;pF_4nr<8gK;&7 z9Nxi{GAMsh@^(QRNIcIEiHP~eqK!t%PK)0OJQ7Ljt&K)Am72DiE!8xLH}r(gWBA)G zzENrOC*mG??NfyoQ)$k*zz;gw14c7f{`bgBn$m(EPjBN_o-xoA>|>fT0Ca! zHeK8%^${2*wFS9UO!PgHLnvLG!S6A=Z&ENUJIK#98x=9~merWk&Udl5YdlL9mSbYz zGb^o=GniwwKCgUP;W(txg2vqY#wDaxzlJo;dA7{h5I-iw5<&jOGXh2`aHcFc-VBv% zR8h6L6<(=5f6b71CEJ;t{AqeUD{2ukI@2rHcu-y=kv`4fqP68zZ$Oa{7F`b#+x_sR zzkGAUDKSVtSrTymm3oi9z=TtOv@^v~oQ`T7qwp<+=i*bk)f7O|v^|CPC|;j`#vJkS z?u6ij+JSRE7~#1TS#*NROD2P8d_&oJzZIv)0^%rOlk4rZf$we7ulsb6qtvZ*%LbyM z(S6o9yt=*5CAXCY5O{>M*)60eQ%H~z*>*&39bWV^wAiullyyG|NYJnmw%hqkk4|}= z0}BUD7VS?;6)rq_*H3eMKwY^D-#{Iu7Hx>>KY%e)aA_Ax9pszUW*9@$FZ^;Mr%Opd z+OJ7_}GA>BBI(>?|ngkXa#;c9#5Z;^1 zB=|<>+95wYqGfLw_HLcVhhmtFRFaeN!ly3q5U(zo{LcSC3g5LEUP zGZZSYyaNP<&ytk61;C8XOax~bxW%L_)1>lQ4n2Q5H3~hZ@ss{dPenPdfFk=-`m(6u zrU5gGC)72G3*_k4KwX8QSX?5LCTBzZ?mAjFup(6Kn?tvMNM^M#2PIvp8ZD_*^>%Pn zzqxoZ-c9gdrqJ%6^1xN$yRCAwa-W?g{=Qp<(KSok3Qkr* zbsXS6AZtG~iPV-IaWA4m%cng+T_k=s)BIarKG~&xxbF-F&VXn>SThK!S^y%DU7=Lv z0Ygnfisf4ttc6js3!$`$LZh|AN|E1Pcoc%eSF0n&2o+r{a17JV|5r+@x$q- zz--8>H|)a#8XcZQ;JN#rZ3dAXhxnb7+ypKo$3`$MS+H^HEMcB(avet0VR%09i3r3p zsvzXzCZVxKDi@Mi@g_xjm3Zyo!2kxu4bdxo`-*bUE;bjV4?X?Qa$vkLpDiBea*T5l zAgBsFJhDz(xxY(_DcqbrPUQ!TJ=#5ch)HW)?+@HByZZxF+;bV} zMcc~AmRMwE(DxL;clML9kj_a459Gt&Qt4Uukr#zX&jkL;G~CbdGYs!C5^zh25cWkC zNKX)tqA&^$muJEDdE-#Rh2J}5Wm;0n?CYZO+F|4c!A^QEfUH*L!pL;xmLYE~@5dI$ z>YNb()H!{&S2X<6(X(HhkvQi~DOLifUVLfR4-0^)IcLjYfkp z(2}StHn%L1C#}C449B8P#YV1HCk*2JJ<(jNhk4+Z@Y_-Iac=xeSUWH$b6n#dm}r%v zqbHPA6oXIK2_5xn6gb?i4V$Ni_p?247vzTC3RI* zGYxr#QJfRsPtD3Gj%c^}>^QT2@-z&Wa;APjPk9Ag{+pr7!u($hRc2PM|5H*~h&Y&7 zSpJ)!%E8Ua{J(xG(f?!n)g4?_^=h311cW3z5dm-l2Z(ZZOFd))1s#NA5e;&db|VD@ zfh<%PIZM$3sPO-}FP!HeIZoRTKh{1w8O_g^Cq1>DIVT;@Q|p&>9T1<6&j8+V7LI!(Ga@1&C^QTpkPxV~HTYi^T!;3&#GTAT@Zh2(WIv$!yAbu_#x{{H7I2EN z5kO^~gTO?;fB>o}WE9X~Ai@4Z5xoHbPAUI_YRD;qJaQmKNfII|5m)e{%2wQ|e&m?) zhZlN(*eQ4*DM0w$7Xsv1yU?bgp$?ePB*qog?|xOVjR9Z?025r`^S2~S4P>lEQ)N+J zUTJBme>JQ$(An{Ad?w;9v?wpgBQaHYCgc#ot+k1NOEv6a?K~LN8gOVV(-L7AFiPZe zlS>c~69g9=oNyi!@imlJI4+P1zF}So^xW?dqHllpAD~wtKU)MKGN5;jj@|-4@<3u= z$c?~$0H%gcFels|kpI9gl7DPN3D7$1G-RFl>JP~JfD%Bqt2&Gx&dxdv_|t9+Baf~W zvTj)Rb;X;i4tEMY21TfU_g~5S=O2j1X=x}g@S-SKumB0?{jtX~b3Fp)n$Tr|Y0 zFrFdQfS>tj8u6T<_0(Hue-{vj5Zsp#&~EK)?=>AWT%#n(?)FdUkARUdx{4FOsMB_@ z#CNKSKEWCI?Ga`o(5*~32rv;60F8)(0_66`oIp=!)xhUdvI++z5)ANZiP@;&*Lrz} z3EB3I0>!zT+uoFbbu0p;`$O?gng@jx-R}QA>->X%|MSner2CsSM&AmX} z{khxd=-b`)BW9X%ku+A#3mLKizS~hm9V0xm62AO(&G2)jCc0s?L=@)G$CN?nYyjl` z6NewF9O@x_>GI2>?tt*`XFcxM0xn*t|0#)5oq+|Qfk5TBllCcNw2c}!-qRYwTAf@>imOBE&Xcs~E zIJCCB%Cw|0^;7jE;TWeWV#(?xLW*6vlO1+2MxN002zRfTEIRrPsMv$(N+s!ckUP59;Lk=pv)fqjO< z4dc@u&sv=!Qv{#aTaMCRM!nZI#llkUM{zE4{6BF#GTROdK=>|3v7V?fQKI^Xy7_$U z0e@;%$+L{HMFoR0c?AWvh|Jk$Q^n7S;~eDzEBi!dMV0L-yYI+t{Xnx;kcxbF~-878+n#()GgfDWWtGm4TBVFOxg0xYp_9E3XG%UcqK^UixX|ZYW6Q zTQhcA5M3nkh}RI(%1Q%KWO*B0z1&bTm&9gv5^x`=A_}b8kK^_JZr*v^Edsy4d9-!d zX45DiH=sPAR^5#Z6oH2xI)!FrYGSXqPLT~Bf|QN}sIn0!()AhCBVzfI5bRRq(GkG} zv@*Cl^2=H=71TR@b!tB@<((umm2Kr+9>2ge59|h(Q@Ykv=Mq*g z9eX|z3xTXB8YtuL^XqpGW;hgZ5gz1@&Pk^Cl&JMofG_^eN~ZBleH>u1>MLA6IXjft zd6si{^N#WtG~p^I;2FZxhiY()L^aWPpO(h5G@Q0B+X&iHI9w0}aOC)sgJ|gjwsxQ# zo7b)81f0M0?=59No&R-F{3kn3leU+m#B5&v{ATBI zP6Lq5I5Iu2;!IXVnx4{pJc*l!JwtruP?8tX95ldrw8Y?2T}OM)!jIWNC3Cq9q2`m- z-iJ9rtiOYrRtOpN3>O;hynLS5gJXPDNcGNC5Tw+2{v7Dj&mYHmcYpy-zjKnF$-d?S zW8%iDCOVKrO+a_yI8rW1s1I`s$lALwuQYdIqghVmuHN{gCFgpS4v+polwSBpe*rxI zb43l1WE$0!Bvut0tWpRkxEvv>GYI^+?MaSIOwY5K|1_i~RDU+Ba!K~9RYWa3vWNWa zgRhj2JHYNkLRK?@mZwM1r%vfKGrgT6m#2&M;^)fcM}$BcYNFg>zq?D_nE%%Cy|{`z zO^dG`LzwY7jWziC0X}A|@?(Z)q3J`A#?(9pNXqnP&zsOWL0TczQjpiUck+-JnbbYn zxPC0K)$Oj@(#F^N9l3#i)hf0+g7kQCyq>(Bi;vy65PEq48RuPs>6h(vByZI4t%`jf z{T=kP)pGxU*cOePVi>S>fa<6E`JYbo6k)Xdtg+uEWnFA<%K4B+)Qb+;yW(cvSMI#l ztB2y;#l=M1RDS-w_J<}vc{bn9I5#RIbXemt7mjsTX|zTTmjArigJ^s3dRGsozxkxR z=hnl|N(4Zargmzb;S}x%Du3?wM^=RZskR;|M`tNhaD>Ru-}U$%Ksi}^0E&!P70QLe zjSe&gKd&Nrl71k=kiyQ{f)mf*7jhtj;!&BW;vcx>`#cX#)ivMnaUN#S<|Ov_Tp19{ zWcC`=p2Pj^EJNIddf+4+x0SwONaWNYmAMP z5{&U&{F^pN-u>k3X?yeyC-o=qbE92*OEOQ|VDhm!NW&kL6TueB15hb?I(aI~F>> zeV^e)q^+wH(yVcP*Lb{%LYTMNK~F4a+^>c_xYzS+>cW@wk43Ag*%`<+!nFXJHzAEJ zQbB7MK1XkmI``i$mK!rJGW@T!?;pBRtOx2M50@rFHtm%c{Hb#sRcXu%wr#mGP>%0c z`folw-3rx9j3TgIPSjtC2blcV%6RtzQdAS>*K$f$K%?DW&HhP6%e}mmulrdMW|;hh zp-#mx<1hwuYGpgma{{X-YRFHNG;5>+eY3NTHbCfO^AugNQhQGuReS3e%sFojDAoUD zNKDwj{w!&VZ*-kUIyW+Y8o!>7s@eqc>?**i_Rc#NleBSt0VkxdJvG1k&7~Vh`Ic(Q zrSBk|etdivYAc0`eO5*+Je`8G+PG?$dDn#9YaY&gKsONIt?mU&~+)RWKDl`dY7yN znIY!v+j<0UqKpX!MkUFAMY+SKg$^As$;b2@e&46p&(#?cRvvB=6eSp(>S}SLTs;!! zHN^V^13%_hD|(DKdA|HsRr##3ZI9UI=u|j;#DCJDe<%@u4A~m6V7E84KXC%yJo8fW z!5DvuOcO!7q3(v2cXX*%KQ5=^t<;;j<#Jw3Zy^*7C$_`<7u^>k7jdt^ewHPl<>4em zXfl_&k7lrD5w4dsF83l!T*^v>7j zhcvBhv`;@_Xfy(ow-Y))UcsV)uaW;)^>L=X}8DDUVpo?BLWhhnonCmA- zVVo~mwhN)gF~FPM+rH>4izY;D3>_k9xM9{TJP~2B0(apAdmIF;1^mw>78Zm~Xh4Xi z#aGtyUke*xbqNKi1X6xI%m}+(*0GVQsEfM*Pp}64mJ(Nb`qR><`PfZWe}}USf+yEh zzQ(&V)D}|c;sNyxFiOjT(i9f|iE3Sg+05m?MI-~5!xNAQi+V0EPDiY*91Smr6ExK7 zyac^Cf;bf2o%fy|_r9RMY))cI14F>4#SD)#ojPii-i;7GZv~|nSDe_n?dX5B$$Z@p zemx|Vb>}~O(Op?;_^*V(Y|MIx&h2Oa2L1_5sox-_mNRX-8Rh*W$*R)F-mDeTzu>0d z70@uZ-8RX(sYL8g*>)DOf?LeEJwe`Ccgr>zhPAm#yiquvf1H@}viByclG4gh9?vM+ zVC;Z{l9XGeG6GYfliI$2lVxd+VlQypGd1r@*&^4!L(On;ib{1RI3!`cg83pb5Tc*J z&O2GICE>7WrI!f7hJ)t&ZJE;IZ;^)>J3KfUox4YMP#^ncsC)H~pdgo-GAIJ$Vdrwk#C)|%}FQ3Z46!b62P6VxiaUp-H-2FV<2tR{z zW%K8Ka5)njQL64^Lc)Mo>#qute6Sp01?KA*9o03Yw6#I#)@hw666^50KuI&}f#+BU z(M;o0las?z`;^WrN;`&6#1jFMJ4$iKwj5sVY5QMCOD#0OQh&TqxAo7I26cpIS=&ju z`5efW6-7G`Zu8xF2`N9%$>wPK^jiA#{kI)E`!zDwy6$atMwJ}!3Ypxq`|Dw+!?j1p zg`uY`RjLYo+N@U=1ZFj(iR?4u#;gY7W|H^EWf8WX@8^YVnd+*iYk}IO$C4 zpyYYKtOkL8{N!B+xU7vyR*5g?$s49TLB_>sNkAwk(&#B994qt8XdoENkqCqHrpMsH z++xc4*V1zHfXt1T?!_|4WmFG3oJld=mFE<9pb)}Rq{bw*vr125tJTQWS^mOAKDejj zys%^tv-%D924{=Lg6bn-(21jo>!oQ(|E5XG0Q#dP882%ztL7!2_IE`z|6}^bu!l0t z^Q;D|9YROD>)f(`Sys)%pYgNt4wC*~R20tVJuoN383Tn)>Kb;Nn42f=f{s-;W(k;% zD>Dww-jfV=ZPmrg(yNM?(w}WRL5206ry{?OlIl3r3rn~wW)>A!wm1_YmbZEIoys#` zl2Zj=#61G$7az5cSPNzJ{&K|B-#TnhJX1Hyhhr7P)g{tCWdWJZ_Qe-#F&^zkGv0*; zPRhmz{!{86?k|NV%tAdM8aKfLDonm6%`43+WL@(PLz_94fp^Si8^`H*Py`0d zZ6-`_7F5wOV`I)tb>r^3DHnChoKx5S6mJA}LcSl7-p*joz^bwxyWn5sSgh!<9aO+; z-H1WZAmL#zywWKM+uLq?GG(WrIH5Za9t#|6XhE}8&aC-%zXwc@82n%mSTcPZ^%XV< z-Lu;gn_J{xK`-d($#QY}+mwE<8oQKUun8HD4{=IbdunN#F$lEiUaa0%7C~pDp|_82 z1v527XO>tibBZ3_P;5oguop*T&grQoC61dj(?xdpbWHDO`+t`xKU# zCc4~;2iY<~U}noe``FYQmXsdc``#Znp=(r4;^n+>&0cDKfhf1!BETP%)G&upI5+87 z5?u#NO4bsO0kiT)@Yu0Fl?wwo(+n%2r7U&}>d9+KeG%=7KToN2LZ>6m(J0^{ z1pCZA1}|_60~H&KgNa!QoxE_b9E-}V(C_LoLW!zj6#+Nz&Z570+5Ti(%8a&8BP=9x zEZ#q^GYejkpcc$aKAa6p{OvttMA$uFd>fYFj z{}||)bJ(2xqqk64C#enGzN^JB?g8+wp7PLqu+(L zIRK4`#Vgqq*<$@IU1n44!|XeKN<^#;CHG90oqe3U+k#`Jd#C`eV!|KO}mdgFfp#B;7fKuAU<0>I8einsW^8?sgJMqDS!P0_yK9;Q-oMec{zWhU8hE4Sqt-O4ss+T z!?{&zKLI_X1pc)dk5Eyy6V_8VXlgO{>x}BtUU^l*Jw3?GeooFi^^dMm?WaT8Omvt% zM^ciYzNk)-?kHKzPrO-j?3khprnoo!&4NdN*9K_G3Rf9i#MGTRMfkm{C<~JP=jm`J z2b53;tJHHTdU^Q1iGiy^Xr7#;+8d;QumS^5z#6jE6hByD20Mi>=3AY6eAk-uu}G*~ zHTj!1&P;I|Z|eYtS1SEx*bWY#4Q@3Oz{uZ^1XhXvd*X78D>0`aFS679rp&^nbP zFwgOQf}d|Q5}aFCWQu-szO*3g%y9lVrxdL%>65_LI>2EXN^E*IXXs!lP?^~ zr^koIM*o`wPWM&F)a{1vBUHR4?!|op4wnH;wfT^bG|{e>vDJKV8I$57lgMXr|J@L{@WnhRK~tCox`aE_A6`pI2zX90X>r*IIhub9*b8-V-E4DyF_h-8Qn7 z1Lc%rAX$X&{WHT-p7eAa_Zf7Vm5%f*i-6s__<47MAb$n3zse!+Q#L5d>8Z~x|7qP= z3g}8s9jv0&E8jv1O*q0dXoU`e7iuVY}ahz!9%wi(5Cl3n0z_gLEFC?7C}LI?A}(=Zd!>1 zBUj4C@6Y?Id4$|7C?kNaI5&?PljN}#8IRMS)ddW4#oFn{w~4xD1SaZ)Tc;)^iS>Ao z$Zyh%lt~!>_KCd_*49X4#1F)E{nKrD21$Y8qfMI%yNiZvdc*;x8^-A5N^Fj<4Oj{m zfUZ}0-$ZJ344#LkJ?)X>vZqbfxHY2!@^+5?nlmJ^&lQPYcRl&y=MBYPG8g-HyC6#s zvL24&X3@XRr|c#!pfJv(?5zOrntZMq{#=Zdn%6@*oL0KkE0f4V_in-W=3Ep{3~a?t zXtJjX%{aYQ#g1P6Dv1|%@=h`Kb_w)7jUnt~d_-{{ZYjo8P+$Hyyp$x6fnI6il1gAU zZ!1m~^h}Zdkr|0*>2{2$o}KPil}iK(2c5_17VD?CNw}F){x;d2gxXdO`n%G6hgkbOF* zt3L})v-+j*NkwF2_qJb%UQvol`>JQn~nHaPzm3Y`sxln5*o02-O0Xv_=* zf($H5G*Gm;`3{Ii-LFkg-T>M=juk5``oR>MhX)=sw3TLp!zhiA06r&>_m77nB4eQc z*V-BYG=LPo)a!4-X(o`wB!%O$|MF z;~=z+y%*XPkPjq>HA1i#y)_SU3??+s0RS60A*6OUy=2D1v=kO*WMpKTTEmZaZS0(c z1nG*$@)APai*kBY|2i0aWAIhESE86t$;a~WQ!;fqkcJJRr0{Xif+$5a0S&vLW z#WeumXNMrPd=0wJ0JTJT`y~j3bo*ihL|ix5yZ9CJ{Rb-I9Urc-UYNJDPf-AnjBgm_ zECRGn^U{xH4+rI+zuW82MCr!HL2wK$%F|y}@4xeB5D48v4=B|3*52!y!w!HM&AWa}{#`(OD;6u-np`;qTQ3 zB_Kqs$B$$s?MJMMdgf>23I#_5k${4Ui4KWW12nKPqJOL5=|hM)WM4YR$l4MFB#7Ar zYZzqi`ORu5ZjS*(Aw4e?Mt`2Esq(sk1%D9>2}!G> zA)%oE0V694_V@QQn-3uVQ3rlgD8re+fCqe0V|Ypb(5yb(e0uy?1tGqgGtjf8G(q{l z2;y-Dg$vu%VdnqXm;4~S^&)?2r2Jrx{&W(dBT|;`*lq88{|v%AN$|XVf*W#Q1oYn< zpvI^HpZDg6h6`pai}fWC%={yEgMD>8@sex5+UbbMU_!&c>q)oN;TK5hk(;E zai_x20!@?Z(y(?ZgO^G1_P#R5{E4taMhr!PY~q0Z>DOZ(S2V@NfP`(()-Pu3>I4@2 z4qNXWoCYT@IpOOvf2_ZB7NLSU2SOhQ+18I;+eG!;FQj7lqEh?TnfCS_y;K8#+ZSPl znp4cqehVm-oVQg5qIcb|Z?I**6eEt7d}+P*W<|Sax|oL06>U!r?^37&VS1&o0Kp$jkNb6yDYW`}i*tQ}M=i(i!=~aXI0l&Z z^QFvM?zE#APxb$+&}8E%j4gCwm3x`f@M3yDkcMNq*34&5Ia@LxW@9jR_%}ULS<5MR zNM!Jj*LB?!XHYwY8*Skng8;WMeu-AtdsZcT%`w$HFz;QFzc~t;IN-&v zzG(kOeO+mD9&(!Jvu{XTgVzZDQZ}6wRelVa{=S%h_TD5(Mi^EO)K*r(~4JW<|kw>Tj6ps^+tbOz6=L%t>R`*n~n0= zcGFhHS8SWmCc`3WDGE>u&aeB}D^ni%NTuaS}T;@bx#S&vWC{g$R1GT?0nEi+x6 zH6Tu7yN(B{KtaH5*YfUf>pXeN>*!AInjq;>Mh#n7Oz@gSwnP0S+XJ(woZY7wTJ=kF zamJZ_H6fUqn58JQ^G-lbuc}-|kHVNAuXpMEGMrJ=V6=PmfYS`5pEWSrzf0}5$K4bL zRh0N3b(jTTtAr(Fi#QdaC*$X|39n2B6qcu)$i}^t(#)n}KJ&yd%wu@)Z1s_TX%IGo zU~jzYS@L)il-~L(PYfRg>JU#LGmPgD`5{YS%r1_^jEfhg^Q_F?_ z%c5*=i797t+{#ic%8^Y{*3mip@KkH-FvHIs`cd7lJxz+ zbTL00D{(cXS9m(D?#BMUa4@Gml}N5?iU{v(&5$Pivx zxH-phh#b+Y7h}o#)l-Z0(YkcrVn%};<-vj?Sl!(n$SFwwNdV7Gb+Kt&OS132<<)_w zek%a#yt)PWrinUUMKWweNdUPgv}V+%W~KFvD-CMOa(nq^=^VTQ{p1iTTw5){-0TjPK4};r{B`3?9jgwXMu2}6mZ@h=G z;t3^JC?d|!Xg*$DSM!_E;tvkMoE5YZQ?($==KJm*SMa>2R_vi3*3VRZ^;>lgd|`nmG|~eiIKF_Ld3Ff&;@!-yNQta z&ld8_Bjsg7Z9}9+4Ck6r8Rcl!JASeU)bDTDo%XOJ?61|ptiLR2+ zO25K%ZrIWxY=(9q2@#H4P<2*&M~aC_e1_^Aymh*Em4}8Z z$X2E>sn}z+)W*J^A2V6sm#O~OFt@J)}N8T z6z#{4-2sW-5gd@qe8R&sY-zr5*B3??XO}2J&OCk`!`w`KSxxI5@=A zZ#o0S!?m02U$v|-DEw5Ibg=}|o~{#3y@mylae32X*Xln}zVuacPRn|n} zsjib_AUe{s6p>0Pn0LG1X!h$)n>AP0$en(`>QTM=T|_8b{UsCAmJPY4bm>bE`HXm~ z@NWL36+;!G^PtI@?dc^m6$8KB`8TdH`DRCGb|dbL`xF*NryM0@Ng^b|075#Hy?*rV zrY}r~Dg|0itZskyA?`|}8f)Q=<&<~y2hEvj_))V;$y%vHi_!U=Eup!2y`;obtSdvY zXh8vX?kuDL4aC7stzrz_19(<)#wk#3OeH6p6D3hxp013N++Afc9|u* z&lh4v>o$-bpipVO8EzyV!6#0%N-~7dZF08lbFS0yv|q7 z#utmtE1)M60VF|bope%KdSeJBOssd!rymKSsxyNMQh~%1V0L1XaQLMjxMoS7Zfu-b%p+X#3$B~nR&G6M;52=rv z*wzst&4)b`n?sd^Tv$4ub|uWjg-g- z1jQ8V>1jX(ls74s2WC+5d=^CblD9#s%N*$QShRC&v2w1$_5_|%u z@Q~h)l-tA$)J1Lull<3v9wrBkdN6nl;_1w%o$a$)vUl`!KUl0g2~j^em=r@-c;D0= zU;5om%DeBpklRzEzv)*h8{EhzgSseDgIBq8s*GBo%WlJH#~ea4*0vtfMLyS1?R8n+ z(?4If`c1d{_c-LD0mJlh({yNkmN;dgG@xo9Et5c~F+rUr*TNcKt{bDOlQO`jHeIvqn!|R9AyWIzdI?D4@g2+t>4UW?NqL zZ$*}$5e3UcG`z@*6Yz*q&DS#Q&!Y2erX3N*P2ppa7{6+}%+fvOql?~1yK65sdG-A! zdN(vjrvFF6Q^ph1fs3rKPsjdCB6@RzQ?`DWl#u{Jl1D~-dpU{j3&K9sR!hsyjW0xR z6gmVWX+Fj zJJT~(3)x3nRBMe z;-6!^?B&C@KU|)o?H9GNxtyoxTGKkvz)=p<>ujye^{a@d*o|_>V~}t2vu@J-GDR~2 zX>h)2K=qOrJ|iJ5L5;KUDoMETn?}68jwnd-F z=wh4_2AQe&fY%J%@>u?&{@~wFo(*E;MCiaCme3QGO8enwdl}i~R$Ocf7;R3{NA%tV z8!b+yfkW!kxhb-PpvTT3KZ)cobY9Y;Nitqyh0iZJxa7Ohu22xn?zly}WtLmIE|PU+4EeZ z5r7nh=0w3tv3C>n0=ZgckHBWIt1u5_wmj}aO?;hcG>qojGaTQC`#03kF9%b+qP}nwr$(CZQNtqwr$($`*+ew z4_?w;^BPrBsoHC=Z_7$bdYOLH7r~)A${L%DvYvklTXW{UnGJ}UH>VCT-zjS5QUUFa0oA6{k|*!u zQ_;@6YLm%Fv@CK*JMx%#eNeLu>_=)uOPVNX8G%WuR<@6VniTJ+7Dd<<9(^}2zMIRi zeu_A^zFgDQbAVYnQLaa+@wFfjVlc|(KOE)T`pX?|}CN*Gf(4BKYfC*s2n z=f|F25m|eX?B0?fmT>0PkXdmC{TB^lya()llkuDm=xJ27jWb#aS|d9IsymRO$9IpF zCG1rh*)%&SmmncPgR^>{s2J|s+IWduMYL@c5mx%si$>%OC9IrRfoIlA&PY!k&x(8} z;|ASJUyzh*XXnC-^si5#uH*FEOR`YaL9ii5jsEoPUk*S17hfth<3zT7oQ)s4D-i;% zDwnFTAWBlYXkoP-5on*mI2dKZJ+E4(j(_~%1dWC5VgYel6Z-j$e-QDzpup-EoJ!l# zuX_(*T=!8tA+Wu71g7wZTk=oGo{Rdqe4ieQ8DB9k>ED>*BxYu)XPIYrzGl2Xow(!j zyH_Y^?=VSnm`hEGoye?J!Ua9~Up5--z}~k`|Vv zl9*L}aQsZMcIeJ%QR|2pG!J`c-ENcuDf@?RjZI)!7G~)yxHpd5vDi~P*^-BGMk|A# zT7O<~)a{qi)~u5ac2#4F6xI^u6r`G9*0xF*54Fq7tPXN zj|!?f{gbCcyG!gl`9X_`r5?o{@X!+_=YY*X{>FIDtz%yFT6tEZTI8rS{n^Pr5r(Re zL{A`o{1?<)2_oZI#$k>4u7%<6{!-9$j#LJ{F$pecI+WQ2R}x z1(3_r5$5XjL_3`xvh0$b)T9@LwU$QxStmSS>K1c7PV+P}ULPh&K<1-abr}&*~4x# zHyvrTe$aUx>GebtN}AFk`zGwd5iJj?)36OT&E{#tY*dKr zUCUA;iT-tAS5SagfkXy8j7PsHGowvw7CW{+A-%GvD8aSyjhjB!vdkA_xZ;=a?z?FdQ>8!~dae|I|4q_WxAp*qB(E{=YGt3#fAP_693WEIup{ln@(C z4&kQ z8ST0C(OboZL-ip76d_+gEe#dc2MGohVB|N^A#$R?hajee0Ez%$XOG@TH(SF)?=yfB zD%ckfp7LWSFVfeCK~(}Ys`u>>2a%uL#vrGLLQakUlbQ?|;7^Dj|Fjz`o(v-odIcB; z=Z3K`Bbw074#GbL8)5s0(lf&x0|o*4vBGr0 zy9RvUNF($CGQ0X0`5lUib48P(g8~}@nz4g~@*5Ft{gFq93g5;yFRlPyata~v<+}WG z-2?yOz{;=Bzw2H2j`+!dhkwX&L7Hs>Fs-R$>MSY=Hf-fQJ?6*I_UhVBUH+ixT8p)R)sh0aOv~XzN2j zXWldOp|nSa3FL9LE7(nP5&Ylc9IC55$kL4&lDwN50TRg8G)`&7!zd^;;7`o@AU(fB zd{c06Iy1rvSg?lxcCc?L+ly<+HzU+uoeLNZ-C?aeX6iLz_bkKF*~_czS$aO=C&bl_wrp z|J=RlJ)tr#HZHKMoqg>*^jl9(j@RYa15`ke=hxK6Ca0z*flE$K2K)GBis427DTA5o zHDdYWDxUvzYuPaRS4=6Xq5)*m9T=K3p%wBNp2`1&bLwP-&d-px@3v42N*m zYpw1hkX`=@jyXB0M~be>`@5xv0w^HpcOfmT4Fn-t(6KLmLVBg*yF^c^ZdsE!UA+LvwMn*QrA^4r&I z_Q@7Iy$>YTR^$ixTMmB^D`?>I5hc2I@T>dVfvitYhYmu|6cIcY%BdQ{imOJ>=n3VG zMf~wq!a=#y#iWQm$niX}DsZaV@sXajKxBSi^Mm|-UU)Yz!6&*ieMmr8wKA3eZXA<_ zj=el1QeqQuwUgAX>V=MkJg(12oq^aa-tauN2e(cn1te8_YMOLvkZ4m#Wisi3HhqQy zeeRMEP5&F8O_K5FQJJC21BY%SJLDU>bapF}I~CC+vH_+Li*44^t>%y8aZrPVcE;P;rNBzS!tO^YK2PJ$i6ZnpE9jvq*;mIHR23M z9Q=)SUPE%NUvDVjqM5E&$FsFwjciN^f57}-4^L?+fD60MZ4H((w{41W#Wn{bMyy18 z&eoFV5gn-~8NfN}KbNairCDg3ZLRpGW}crJ-mQ!n3>K_GSEB)*b)l+agQOx}=EZ>k zTKo-DSvw1I4HycoKFFJK++CFL;bWBL14XwOy#5$rX{Yk`jI7=OawW-AP3)?0b4c4y zsXX-vUA?y|pP_{7%z|Pw%hSg%fJ02C%{Zp~d($5*mETQj&OWIaW*n*fvwGP5rpV^Y zq|#WOI!Dz9YqR*+j_UFYnRCq>L+=-x`f35o+v%Qh9HY^z4K7^rWfecuKUm{#oxwfP zjhah$N5m0&rE`ov)rj2dGdu&@Vrw4wrKs{f%dC?=X0GNgwW<8kH@KqPWG zeL8lgd_k&R{aHp!^RMJLldy~D@p^v6*MLpJ?MFJ*h0={Rj$cF93#}(fODyBaP3|U- zXr3;DOe{c-?BfM9REzPt+96m52m1)XDV%yal~-0hi*xrO#fWg;u6jzfS}?#%=910; zPUh1B843i!k#EIj8Lo(*kqn?q@-m0;2`~=ppXJgfT}b)DZCdkc>l zOsIYPBZvcAVZcP|PW6_}yK6U_$gAOJOJ`ituk6zRoyN#6c1a{sl6@*U2Pepxw5q^{ zAfr#=_PA05XJs{o$%)3d+4nv48j|XF?{qM_o=n0-rw*m2y;~i8fr=E71=I0(I40J= z=|FQGB#n#>He?W}`V8%Fwn4@Y1{#W3j)j_+Tc6|hTKDOkgV}o9I3{xExu{7cW7hl3 zc?pift8Y2vX4Gnq%WXOnc!e~Jio9|(>_hR;R{JNNb_y$O6*KO`^$!Ey1j-laZmEQ! z<65;}IZ1?L(9*<~$>`SIj@50bGpb8IdomGMz(Lr{RlxO;O22?j3P}%G?o>Rd(6mwh zvj@1Yz7&9L1)R@E%(tQV%J=<7I*MXcK6l<9M1x5pjfN6@wXEfhPpw+BVOvQ`eo4mK z^YTLt%-XU)k3krK$nc1=oVlFKZ^txMhY0AzF6XNtwLV?tXYwYW+0s;kF7P2^l;;ttsOAJApD@WJ#&4 z!$}B31654^kV_p8v~;HJjD#%4o0h`lH$I3u?O-@y-nEj$$t&+_MVD5&eK{jGJsDXL za1Y)Wlo(gOSp#ItG{afBE;X>VVQ3P#f;vQ?Hu2&%mBU#`5 zXie2*=k1+6e8WfOP#a-N{qInc8GY+;Hu`0UlIrPKPzQWG2EDWXCxg(du{_8mOu|sj zXVInQF78M-1I3N1;vw z+ZJpo<8rt+za^;=Uy55sO^Vpx#4>o%2?sNN*D<-p^3gfV^W8D_;CO6*p#W=&iQwvm zk==$$RKh+q(IO!wc(gu8=gnuOa4oGo&BUN?Qqgz=w@ojarn^Gj_jjgDHRk!n8kp+Z zs#ZZsA>g*wzNiQl@TVz3>Lnjy zb)#a&G!5xBq7_1|esL4c-bMsugEtq`^P)HAyPy!$Ami?|E$R91G~;#MuzA@UTX|97ais83 zxcobeZQcf#qT9}3#r9(Z#a^zLs;A2hc+vFukXi#QB{@ebAX0o@45pssYg1w3RK~g> zSZMXcCdU^69rs#3Zi!^4FZlhgQE`p4GyqfB>Xv-yM>yI!wH(Fkok zKdwrYCrDH{8|^fC+>BFM@f+^W6yt&cy;tf-)M4dC>zDU!UsGzj$Tu$ zZ~033>pI^e--`@Wr)gSuI6yzD>|}5c0x?f;cP6EfcX*J$hCOC&L|t3h_z7=M;%iIbsyd{f_aBOruOk;Xtgw2 zkcBo54H{LIWhT8UjlA46-Aq)>Kke5`8D7J?EH5hZhZZ^po7Fcw=Gzf*h_gu4c%BWb zt{2-ntJ*{#hHDr5E2BK*(#eMqd1aY-jSv52Fy6bEXc@^H-fZ$c z;rDy&voe0T2zG6)o^_C7Pls%+cUpjr6%>RM@|hQ0SZu=Ari<(ZBU*imeg8n!JqZLm z1PqT5tcoW}LYG_}(%l*RgEtUKH7BV6Q931ZkQoKJr!Z}3vuX6m@ovCcbIi*`)N58u zrU=%C@R}f4c3U?o@!6+qTE|A$O))}D#gddn6Xmym9VL)c>QX?NYe?L8gZ?3~cZBQ{KSI^N`Te+24?@|g$~>8Irx-=%&KCH>o-T*^^HKDP=W-N6_FWE z#DqVs`fzTt8bR&&sK(}zXxJNm#sThK!KKCXR&Ciu(7Jr<;Hq{`V(5vdvNsFW2d%e~ zM)YIFdp)U8`q@3#zQcp-lPPrhv+TVY?PekqPM5HIcGDG$!_{Z<#l5_)(Isb9eZ=_# zjE@*B?1d#6xmYD1jca}>k(26ReWtnYI$g)=du4qhSH~4vv!n0u>K-KfLQ^V;$3P~Q zHl5CQW=V6Pqz5-N-dtucFM)ATUZbi!DB(^!@DTv-T$alDDEcT-?yb4A#L%!mk%*mf zs(vWNry6IAJqUdmW6*c30+ljpGRVT&Y(+tL34S@rf<8+Y$5@%CSXu5}dDHbu+nj%r z0?y?$Nazc`9bnS`v|tv)@c0Le3h%qhUcg;P9LP;)LE|ne;tkT?sDs$$IA{h>k1t9$ zCqmVfPoZ^=;UI_S_j&lk zQwM2v#uqF=vOf;gfVN$cwp}HSaDmZmPiFUiBGKPxcAv&6<|;CzJ~Mdl{piYFf%P6N zN1nJj2{KFLiawY!p_D>h;1+`m_kv`;Yy$0=rW?q*R!aw%Z$hytvLYavs*-wW+01)U z&G4iGFRUG8sM`8we`cLzv^oKo1F?}u%G&|fKb11`Dq{b}Og z793sSgm@*mB36KZUvK$L^6OB$rwARcLP0a3StuF~v@GEg5T$z#mCi&eOgt@ZFicP= zuywHS^13Z~0CEXwcL~t#8WWybS@Co@?7O5?M5ga5AGOoz#qut9HpUbB*QCadpfJMF zwA1gnJ=n&-eIZQof?3}TY~ig&#EArcH6*9c=Sg!>LR3u|=`!IGc~eW%?0^@{!vJGR zcQ27g&vY7*FmdBekcc-(nEjzoEBH%vfixZ{imQT>?xMrpB z#d+4mj}Pjf7+hxT7x&a)dzMy;MeW~L)q;PCYX%D&_j*50+c^3O2C^};df84R*OuDR zN!uy`lXupQy1t@U#6BGs?jYIuvI(Z{Ck029S-IRi?vWx{;7N&&N?1WTFF$bRxz(Sd zqYY~ZR)w9@%UW}N9$|YO&`Ng5Ule2%FS4H_LPDrTo@Z9~shkVDEkpohtIm|#45w<# z6?GE2ClK(y=9s+J&pQ?jua3EZfd(rvFuyi$+;qn}i85rL6jxAVeBvA&y1$c0PIscD zo%3mRvR^j!XW*pfcw!$^?ZXM}(0NSk~L>4mm=$)+DBnmIwvYYFet*L==m@%@$R`gAvLK&e?G zwt>q_-$3dqU~)#9=HU40xheFJU>)!(q#OBQ{q}M?v9G;M1m^)tzU9$=uEoG^0IKfW zvEzlaan`EiRinfaPf&^K$XC9aAw0$2hHxKUjeQ{{ftd8fkndvHwT=S(hISaMZ(R9Nh)1EYB#0s&tZstopbqrY zClJw?*IL+IY$rhj^(L3$cOkt`lr?6ADQ<0#2k&>yQE=jZ3n~UpqBQ6;Er5!hEI56J z%ctloklK4@F(b5yC(l1noWQ7}FS!{asER4QD~=>;`BAJQN>O%X;vF)8&l2vZ z+*9&crQHM^#fR~T=JRti*t?6&D?6!gG#9vQ2p-gBi)JV7FxDdW(JZdQc@cHd_{TgN zCM63zSlVQ%<&PRmv~*9RZuoZtDX!+( zeV%QGUyJYHf0ACr5KET8aj)lVyPCeiwnd9|I`LP}b#tMYHZ6yMHhnZxL1np_S(L10 zQ?WUOa+%0x#3YZe9pWuj%&2TPh{OI*MJ$UgtZ!k`)1g=OPYiZ6N+Q74gOG(tJv!X? z8H4YQbA9jYHdA9K3G~gA+OBLwx??H1EZEwW8l%}cyVjOoKJ+xpe1d}wpxm&+mS~o> zAc7Go;qmaodh66+w;O!1rUTUzu4rkxS4gziTm;!)wD_wspe+=lkeSsZa44?HK5}-N zHBqx2!qcA~QjZ$%02wujJxxkI;&&1Ucam{Hz5=}+EDzj+;}rs}#g<;n9;*xIwyNKF z3#mKQsXs}lz|y*kF1~lO;zRcp+ty3#Jzf%D#*0h|#PWW&R@a#|hKIT~fPZ8+U_;`; zWvaz@Co(Hv&2$PyKTM$)!52znZJdr$p({UIm8!-kfcg|~r{y;D_;9)t{G=i?^J)2| zY)4zKpH$P#Sr-HEL95>4e5|s{12rhmJhcriq_Z<^$B`2d-!EQ0J5_Q@);6{nE<;FkIf9S9{6;TK zOu%u9vXCwNjQ4g!al`~R+u{P3*(xRI3}_w%)Xsa#O9IIWu8grfoBPOvRi|K#Z|_}? zB}+|ehT23OV}IQbNEQ8vRzXOsRC;jt@R{;NH8NbEkvqh}VMf#(88caTZaG?5*W=R) z&^v#959qNBuCoDL=#yeT@)3N^elK{)Im}McN!;#49HHF>)3zB^a%Kr^>>i-}a&4Bx zxy*~LyE$kvPN_jitkq1-OO9{5?QZ{GGo_CECsW)s!kqie{gf1ezPHTfyaRYuMO_Q&d_o+(8rOk~|MvY{Mz4|7^Vq4=a<4LqGmmmK$7cBJg;X83(5i zK-@K_72w293#>7^Gn@-_5_XIxKf<|=_$#+bFr(Qzvh-22xs7PVmS5|cL8sY>J9P^= z-n*qXQ`-@mA!T21xa?Br0Z12Ah9q-$m!0hitNM7ryj!R2pYiYAe5$p*Uk<(#F35)m zm&K6%2K_L1$UM2cg5ir_X*v;3+?sMNk`3`$DrT5gQGWaW}Zj?(gtH$ zDa%;6V)lySCVVV}(ZN@C-8lVZh45GQ{pkU2G(&wsQ-8%n*2$BTy(b2qn^h=U%t1k9 zZ*=W~#V=RWqw%7X6=NLE3sRqSlKP-hZ%WH9v*2~3qIwAN!f zHa5P|I8Q5gGB37-&_^PKw;8siIn&Xn2AP;-&nLxqAlDcq3dQj3Kv zk9Vuz&jR5o=noo2kH zI1JZcku!6ka4n${yD7l1Fq$&+Xks4=ukta1jV-sr!TVew-)<0a(ITLs^xBe6`y=u&O^X=BZgYN*DjhPTBs0oiZ{r|6d9t11tM~=Z-S4GqN!LZ+iOw&K-?@1(nC% zSOA4Oyy?&?EIev5(WZMYd6!L=+ygL=UG=8nX%mC>2|9l zpGaB32$i*g1x#{vt&Ogcq5cL?_+V*SO$~sG>Pm`=$_gSW$s&b@wdZ#Pk&MYtW+vsu z)#Ilg&IuT!&Ckd{gce`W)s4eHvJBQY0jGa_V03(9WB^#-P=EI`I=2%6k8gTpY5^5* z1~j&|3HVRn6S>CW&Y_;B(dPH~c|_tj5`@-2K0Y>m+r+`QhIanT%U zfc`Jj_vGBz$U5$k-I1xWg^@7~<6EaQk$-SKV;{uO-R@VmOg1%+c6LTKjm^)&*q0i* zeAe)_w8*uMO@J%y420h@ndvzQGvM=f()(_hm5tf0?ddn3v8jcbeGOm)7`48v0QG>Sq5Apgve3 z;8Qa*a9|HYS5C~9KL8q;T7KOtAIfhOg1QD^X(}l#fKh&X3C=*?89u|@l^(kDk8CO~ zfDY>1TLX~#&&Stm8m{?(^!2qh_iy^I&(Kt%Bb4L=)YEV2mtIMDcsF=oRswL}*vJgr zp7AM|{kHl;Pwv>AoH&-yk_6;h+;kXGz|j( zquCT+qy67>|DXCFKirpIouA+7H$8Yv;g zzli1E4JIrpuKdLA#$!D;X#a$ikmKJo{z(%<*bbg-0iyR-D2R=m-)VANGef(N)x-t| zN5JUp>}c*k>ikJVBjb>Frl2-O6my5S1Yq<`>+7BV+5q^jJpfEzWWl|$$x%ps)L&_5 zdg0K0)DPeeL8ce*2Y~cZ-vV6#ruV;uwx|G&LwG|_`l(+*Yk*S=ehB12TX-Omg>QO8 zz>$Sd;0=K3DnI!0$jf};z2VKs}B-QFS^d@C(D6sUKJO+AT{tu>u{hRu8 z8{y#3c?Hmse)XFT$Q9mMRMibVxAcamWBS`VxBhTz^P7Za{2e#a5V-LWMs}(ParP3| z;}AHNBcS$;2QCljHvy=VF-40i+vkUk7akMU`OSyTzwPkNd+Ws40ouB_(9srxX{D_CJBwNRa10?bQ#Q9wn_}d;Wt)0XF?fm}P4X~~J+waHs z%byQE2V&qdzH?+$ucBi=DilK>z;)Q4+{b+!V2Vleuf=Fsen$gBZb*^PG$Ns?_ zZ)2o~efqkLB~k6RaRqFxzD4->#Vil)UyX7-$Tc_xc12(m?vjZ6!1dsPGgIQO8O}pk_wmGb}T+O^tTRY1sfd7 zv_Fd|pnxs-95^V~LIR>lY{%wbHrL>>vv-E zY3$&6$?#kqw=Cq7UaTTyY-M#`oJi)psN7M(nse`{rboLA*_9IL74}gW6vGwMT`jY9 zN^HvZ+VNvqYho}eqq?(z@(rks{{QT)g0Oat&CBKT1O_% zR~?##a%0*gIxS7QbcT$vdM>&Yoddo9*-Zh`fD4k~q_TXZ&pW<6?V!%kC1 z#he|q)voOFNs`iRzCR$;Nl-=i`8M}N7<2|+;fc3Jc4}X)Zok#@*NG@e{g=wpHydrp z5{ISR2GKv~gYjNhXIDmrt4ehcJdasAbY|#a9&7kr+Pgbk}!LAKa^x2 zEAbmL^)2bV6S!mqmt-+Gnq%LPS}|JgLO&V`kR*xchpW?V<`oQ{lkzniS8+Wqknrp2 zVX8qJnym+uwa3IbyBuMgI4g(3#axlDkAy0KYjh>;TW}LO4A|79dy41KQP^p<9j9YA z8#&(;80+A>Yn;wHrYEAKiYq;0Y{rlpTg756=w{bF^EHS9@*w!>a449fiU7%i@q&y* zZ$R^7fsS>O7QLw-<+DGSlsr+ag8?4YzxXTadk_9C`k5PQ*;Mig8N(d!or8I~`4xL* zC~kDe8OLR>%2(a+L}yLzdyV^tmQ(snvHNcqSWJjy&94qM)e^J^ivmv5S?_uAW{<%3 z>h~YLs}g5b5GC}!Qa`TSYDeKXFjaXXAK0)0qn0t_%;_U34cG8X6zx6`~bPCXj{5xMAAu+rViQNREyKo z!Xk`b01mM&y6daQbZ1jJd+Lz*;-^y|B-vz(5aDI(B6Fptre-NRaUOEtY3jt0BP`0h zrHs%nM-;Xuca`B)0y37k4R6&B8$rCDtrwMe!g_{Y5mNvOqexyJ8Eo#+@SX~Ko=Sg~ zC?)~~xV3!BWMivfL;%&Ea{u}9XKWkOOW2U!zUe<>?HMZh##CMOf_YU9+$YT(FFXW` zAX&sPtMNK|u%HBD$dbL8k11(iqHl(2y5{Of(Ff*6 z=`T-8f;f5%F{IA~z{conS!4Oe7>KwgGLC<*!VJ^5WCHmZu{}v&9e$`@MvwqOGmYD z?SjmwC2)n<6)pJVPq}Jp!_!3-H>Pr%TSIQZtL7c3DwNM$%t`hHSK6O~b7X|b)0&-p zJbn8Tk7@k1*FyI5w{PE|PXgN)A**xa1u=u6&pt`Vy2ETx!iL+n>wGMp&}9@vUb>p& z1Y;{iO}@T!6(hbYG}Og8hu9XkRwq#|@T}vU#gA8m-Xt_wKd`y?t_bT)x_`~)QV{17 z%#f2invJmjr~0v33^pE=t4!kkm?oOh&(Y{C}%by(=Jzinm!V32%1Pm8M5 zL)Ylqbus~b)l=h7OC-^<|Ht=mrqZ5sIHeNT?N*}u^0(Vr8@w#!O{+ZH`~^8l{%Q}1 z^0n$zM8QxR4~DwPLhb`wT|w9W&+UP96ZdXNqc+UBQrVT9nq1OeC1nC|kGlaTZsJGR zyBg-aicBVM1<{B={{myXIFcs&2wiUo(qaSu3Fi-tc@=CqDmRpBAEs&;o-rOFM#T2M zC=SG)inGOn$!kRWk+WgI*Y*W{)5A;G0B~ncb%y8}IVs!P`u(!k;Xpkclf%#wPeh*? z2fBvh$#zsb$EA8?hg29LyCDj-kBD!jKUt~%snu0H+=lR*+8q$P?~To^B}W*|(~lRd z<^()?=je(N)|Fo1?Benjw65^AHwQ?T%TA7{W!Gkoz2~yaj>qt%V=5|fm8;Gnhx;ms z8_e}Rb|+~@5R~h;tUULNqM?eA_unaZiBzg!&!*aRZ82f)DdL!6z4R>>KHjk6O{S;5 zL*&RY4XsI5&%uYx{*0_%djHMrw`3(31dyry!m&8?c^|#}wkZ4ySE5~WMD9~nJ~oc~ zyeqpv8t@|9&_0+(D+T@>i9ExY8FtErElf(kAQ}yy)ir)f872FWf>R$oq2oQ#xQArn zl8kGw%^gu%Na35y2;!t%tpxmaWL3tuPx5M4xv{!D4Jr0NWR@Z)gs`mgc&bM3%X%cTCY2#$^v*a>9|)`Y zqu8a?g=(HoWuAzVwSvn8?m(qzNZk*yEgeUKAs4{8_=pa=Z{a3IysF#0#}++GvgRb9 zyMhYU!T0;p*Z4o^5e zOU@3;K?7Hrmw;m>kKxd_N*|WAQ{t|*-dXEFYrP{dhp|Sa%wJSSN60kN5j(4T|Ju$I zX7U<|`4If_kis&(H}LRFz=Ib#HQiUDXn}Tp(!3wDx65EA5=2-FlRs)1?rrxph|fGN zjZHGf&5m>&Ilru&)Xm~;7RMu8g}NF@uMMeD-ENQAt(*1OJYDZ$Ov>x@Nw zy48n}Ynk09O$QOFbOvDnV%9^|c$)r)}1xSqW^B z{UhuOL3gRRu%tp+p|Y3g%CbCS!DHkLr)Bi$4ekwAHDG~f_5ownm1UKsb8Px;;2X$% zLNFH4ACz`x;Pz?n`9uwVu4F}*1ia1Y84t@+NPQrSY}crnF9>-cLYy2-;}e2 z#*w)J;w9Af_E)r>e}-P_5SIAvAN189SLD)}=ba|D4*%9!!r54NPh+iD+9yaVZzA~Q z=zRn<4D|F@N?lh`aLa4oE-1mOLWpdv3ULA%a!?&RBDd4s+xrL4Mf!x3O>^d_> zL$1UZT5$hBW%0@R$)r-S&`}6ehxgeoF<;Kvh|p{9cKtUnvkG!ZFWZ4OMQ=$wrjW)< zTLGw)#-njJns2 zLegp$2sRz~X}>qJ?h_H3Z{f$1lX{6<3C_1C^=+Gc^6u@4m^6;*E1WX;)Qel4nt3y!_Ai3UBR-pTptv;%C+Bbd+Id>Cdwu9 zAIv(>B1E#RS&T5mm6-Hc>0CdcQ11Ycfdz{AVaniQkB5fk+~Z1hOe(r1#B7(d)1MK_Y&5d@s{t99P(DnN z07<06-A*4|YTR)PTcblTv^LBAqo3mrQkEUdfIT%7c~dGQd{~+drU4!{6KvOR4kp7K z3PTTqiZXLw2$mSLh>|xs14o~H`o?_5UFs>(pk9oQ_DSmZ%rG%=B< zFr{ngS~PPr6*iRJ<=ti9nS(J@PXaw;6+Qm8yQL7VaItFc5F=k*#|P_tlISK` z+V77^bS0f94ofO3Cn>>8or%R*q0rc=8bJ8V8d z@iXFDzf{`(s7ba#(ARg=dbqRbqKXt7fe4}|6A4hYgIec0f>J?G4rLEXyo0Gp)yDo4BD#F9> zY;E=rTkI_QF2*5b%@u!{OB4>EFkYFG$?iyPxQ^P%%xC!-{9*qJ|0ap@jMJq7IUDr3 zOgp^qqnb~t2VqKu5Fc?CNq4h#BhHHb%?#fy=u2DvpOTSb$EfS z+2tZNQEh0jW$P%E|6Se_tHwrot-oF|xR;!{6*OMY1m^|BL#rxo_Z{IUwh)l_V~ycX z_33hWF^L*^R7EXy8BODG30U5Ek2D#-!K?}Fhbu@uAH%S_61sAGN$&F-c-b0^F{8f1 zLQGGJ)gv!!&L4Amnu->MH5e0P?6zNqoS)l9&=cGOi**?`!li+gb)XuL|KcUEJ3FWH z&`b_tA{DkutOx9V<{~-F@lr!gNES1$eyoChBVPnV4F0CMXLda-v}(f&w05emoFk5c z^TSXWZSL}I>1H3gS*Rm6_N}p3BFd-!+p~Ko>jc2VO(D4o*IQ#;r4?Pq0bQr>0F1$K zDKS5MD!Hc|;*6A7$@Ebk-lXaDbP%}7GD3OR#t;XhTe7_|9Xe39@bHs8Jiq@JNnjn= zdS%>K??Qs3i+6ka@`BvyZjyxF`#F+mrQX;bNZryqZ-rF3RzSz*$RR=`dP%I6D*~1; z8+_*mjl>V1(lZH9A;o!;QS2mHU@x1agi_N5f?$sAlq2-1y7R6pe^zcneMnMakRq*# zBrcYAn*1%aJDvC&DVk*}nHyRt^p#Ad!}~jNw4I$8&XUpcRio16_F21b*o56T@EJD zi1zP?ilpgPm(e--7`=a;5u50eUgEg#8X9bNMm|L~3!Y|!AML;e0EB#Y6*p_|DRYmF zGPi)*sl3q5_+5s2N&^~bMgsvkG4n%1ROE<{vM`nt(c$YTZUq|Z0m_*!1e0X?D9-(e zw`U@rU7U4C(L)MXlhe2AQJmITLvB$4SA)=OvK@keMyf-+l+uSfX2|Kd z^txj12nW9$6KJcQg{{Ed=Ls*gG3!SSUxZ?SxL_kGPD1S2nY?MS;Y)?3KEM}-)VD-m zp#rt6*4&b!9M)8Tr9I85@&iv1otrSi)&Rl_rI8&ej%-wuxk@$LrMOkOz41R)S^pb; zjgp&e*d0@XUD&&m8K%|;aVmDrTX)iD#>U9GK`rEy6VcGpt)17{_zoB>nv?495fZ&j ztEb#Mg%MNh)JmY3AZ6&VJjGh&9G!Wi3{GN)fGGhQu)1fUfE-Yp{sYeh}w6tHh#Z;#L>39xYWLI)_L3=mg}e#wsgCtBraO){MrpUO^Wo*K79J%&>% zf?=SUtCI0CHT`2h8K;)4yXkN#W1NVi=I z0>>WrSG8YPu0e^GhXr4UKw~dq<-ck7;GDJEFiCAtpkaL^U?JCPe8S(t)$PDw$SL}i zp`-1jWTbQ@9+3aCLpqV8k-(g-P4qhEz`s~~)AI8Gawx&tP4{-b+V3wjjn8b97_LcP z0?j&FKE}rh!4}5CmC9cUjKioSAzSo7C;t~?=MW`W(4^6_)n(hZZQHi(>auOywr$(C zZF_n%Sp19Gz1+T&C-X#PeD~7*p%_pMAG`hsrQaO@p;Ax$vZL8W!T_RU$FyV{P(ZKP z|2A9SXML+V>=QS>go$+!?m8%!1V{ZVn$(nNvql&a-`FEu*=5ys|FY{8Z3EiE4jmz$ zsnzV`n=y$zlv`zM@W(a_l8{XN@e4Bble2R>i4ac=h4l<0bE5EW!3nW^b#1_m{^==~oDF@Y;Eduv(AWolodSWKPzGnlt3TEt2q zWTkQhZ!JU>&2>Xr0DQHW1CjNRU3X1-$S7+=29@1Y9b=7Yy1(S~MwpO@4!>X7%GAi5 zv4noz9GRI|Eiw&U%eHl9chRJvZ()EkUN<=1K`4s`e)nBoLk+2`{3AFFri2dLRi)eG zRBXhz+pAKbUN47w31U_W>G^mV523b(MRtAANN7qm7b&b4NO?S}ebMkivb?vl;iJz4 z9l?}!`r`{-6Fd68qqVF(znnL4D9RZ3l6Z_2FQPd{_rP%XAF)#9l~sp zyR9Be{NRqHe9QUEyUT-DVHV}K_?Z~685TA*VdqK~^dTL4^|e{<4so3AkHo! z1vZfiefEt?9m`s$vRI)?u)mJxps2IeTfw509WQ*+NewFugG{R(yK$W^up-RvHD=t| zTjN)qu5K|J^pAkqTrQWTnP+aR&VZ>r1-rp25UUj}ulp77dUCvC6yh{Gr(MenC*J^t z#r4v^P{?hotVV!)HWgu>m*{0YG?^=+`f6Own~<|+gfEAwUqqlFoteC-DCgR&Z*7-A zUFhXA>9Bg#xyt5d*Q}V|V(k`+Wg@dx7!|R4WJTxCBj>dj`U9lns3b@2;*w1$qLG!d zs(wy#BGf7{#~b}1Cx_TS7PH@ca#IR_3GH`;`{7`UzW8G{yk=mdr-kcir;l~Y2@+Y< zIU>jgPH)lD9l7mFG)gURCdXyX(a3&UBA4lrL)Wn1GqjjLhWdm>WZmrj;=|DX4+W;( z!6I4ZR^SqLh$7}dQkopIlbRUM^yyROs$OB3?UR$!nC)|?6?Xxl8C&QOfXhJ45a_u~ zj747%rCAgEjsSUNoOyf>H+V!x_h&Yg^h`axswGn&RxS@v>LhF+WgE=GPH@y%7&aMN z^GaVmo}Q*?IX;o$I3-o6>b2k@nn{YF=spek+9`P52zW%Qy=qaIESwro8%MQ??>Q-# z7E*09bIGLb&~*zL1%39!V#d+7y`qER7RWBEnQ4Cm#k{%~+J^wWCgmwnpw13J2{Vpm zm>GAq1kIT@qUZTKH)<^eMiy%}#=vt0QRl|3sy$5Ynqq()=R znK(zSSPu>#iR(k1#x=zl2JayFpNoCB)#J}FKk0OX-25dlZT9(;gLech=Tvtt4H`T$ zUQzJXE8M_kdgA93XEF4{5H^1>NhPz4-N*H@5Nrh{*aWe|5P4ICVU?+b#R(Xk`r`O~ z;`gmfAhllJv5R{&CQLF~&0yNuIz{nw0?6|$cr7*O#Gb9U=^8<6@Ujup=BHgqy4n}P z#Qhoi?d;({t=T!yg>z2Yd3PPD2Sm%c8ak?vttKP~m-Ax0hzs?UI-i!X+EZ3v59s}A z4i5~^`5>EmR0U{`@;2WssC_h^OR%;qVs&MszU&3NnC(JRTd{P$4N{}h`-%l z4%VwM)Pd(vsY^`M1fNlE%6*#fH{zaZ6KAxRuTEYjrdl}}y{LLpa{p3Pw4m>osboPA zmJhVTGvO}XwRk~`lj$Vg-pH4jQk0`}nqZnLys?7SdcNleIbXQ+fXitb-nMgobBl~C zOUAvNs~><`t3?Z*5I5e7yx%5@U|LyfT~$MSPqnq(Tq9IjbFKX9(PWyI~JrG(q_wr1~HXYe7 zk{^E&;+@Qysvnj&v#HM#Y-Tv=Q>Nt?^nGYcaM-eg+J+wc(U^mUf1b1sXFivvR+|Ls zG)=n>#F9?R`q`zsP0Npp&Qa#TLAsy>7bBQD3V@FUfQ8T#RDAw{p~nENZOe_c>nh z)QZM%1=%`gr)c1U7YyKW72!>>2eO{<2)GH4{pzZovp@d z%F%ko2Ci_MkVU95iNehfLtTm`DK@7iD`@F^y(<=mN4YkrwYJR{FRRcVg%p3vT>Yo^ zQ%qWydl+ACcFRnkQGWm;*#vht#~Mv;g_k*U@V_NIpP2?a@OJ9I)1DXnX6}Go;vf{7 zM7=|QLy|Ij^(-DfA`vNGVpLhQg~wxG$bALS(uqIQoza>mx&3{ zacL&=ZE?x`Q<*boEC_lZ^5iQq-1MsVpkqIi+?QM@hM&(k43$~b4-Ia7t7r=bN`S$H zdhy?5P$QS|FRN^NbV9J^I85#i@R~kPT1C3+x3r_rsshOBo*l@~;aa?daZeDmdo4gt zU%uHLy&Dt0loh!s4b((8L+=m{)7+M5z!}&q|*(>m^|piOwOdLs;fDC?uOFcO+ulu&5c5 zx}{(~cWk!w@E7F%+ndJ&@I(aBvZA z`zyBAle4Y6p27U2_7Ab4zm73%5G?Ee=%K;Y57Z&iR9i=k-0*baPhkD_NR60oUe2=I zLdg~24*8-IWQ4OD9U5+OYbb(c%yCV6M}t*nMCpaOwbExT0iS5=975XQMET!>6y%moY zh!tz?TLt|i)E;=AlYwn|22oz0_m}kNr0`&(JJE-|6PQlAfn9A;D8s;}7?rz{NsF?W zzQZP=)Hxm@NHjds0C6+kYIX`~7=yV&u*2cIm2`iJ3;M~3G^Y=iR1;3*P1LWtrR$zK z*WgA=A1(0IHMaxWWMZ@c0zJz9I~WaHeXp;r_)1+d9{yaPr#lwRdW?#?}+5*#~JF4WsjE@GM$MM+m~*! z>^pLfHbaAUR%}Po%e{3eVq#1)Vazu0#B%o_HN?!$KyXtH?L&GjXWvv<{OS+!OC4sy zMqR2@Fn8Sn1>*zwY)ZK7L`8PLLSfawemH$dZULwZVbpR_YfX{YSp&)u>_KpNs;GOg zFdC~o5Kh^SQ}}ZL)(8UG;5EW*1ac&ZLwpp`jj-7q2qq^;pJA!h9hC zs8?}7ATm{xL?Tq`6wlqGw6C|jIj|ZgvK*+tO;Tw7i%Nxb19(kL?}jTXbTkm6FXTSY z%0X5v+Vm@?iplZYG&p!dC6=xtwAdG+nb=XhC@=57%(OL$hX+eDZo9(Hdv~E2Db#5~ zdK}feP>%b=nPT$t%{_P>j-+C_TN5&n#pg2bGo<(9p^@GA**~rhU|$XFzmBSn2yJX+ zAUkBVp zkvvKdO@mq~x^H5qB@YvqJ5JkZ?ZRc#v4s+hu?dVf}G{z2Zh5CBXJc~M{qr} z+w+TJ6SYI834yyaO22wd4fDMI^U)OL;1AXe%YZ7U$BE6+CZ4BXSJ6nMI&y`U*2<%I2yy0q$kd!5WG1f}IK zTznI}_m97|P`xqyvMjC~=m#xy!Lw>k35prl3GS@u=-4`X2nPY}qf|*VbvBt0vSCil zqTq=I)4?EV!BQR7syg9fc7Zj!-FIoZ7<@a#soT*Eo7!zaSA z96szB;mv)@>4!0@DOWLt*qjFm?G68RhR(iK;SRJ1KA{KbLE@3ebt*nSym8JsL75zp zicH8?7@m+^SXRR76P8Axy86t7L1)|ziByp zii|wlz?@or!YC!`qy`0usPp=r8tZWYPn2!#ZY>vMhuE5)A+ua?$q3C;9J)f2ngR8W zkW^g5eZtzn8-Hq#x{&%gqp|5Y- z2~rHV$FFzh+>gQiFuI!`*RKvGwhPgETD-dHGMB1qmo#8%vMW<0f@YxCPull^efRej z@r6atXXKE7$MKZ9iSmZN`^u@&Z8i9#w`XWJ<~ZDye~sWr)(lQsuB2Wwg;A`sQnK&- zco&5anGR8}CzWtn7FJk?@VFXc@;e9kYVs+5X$(-a=y;y-kB|~d2AJ2K7uGE5jp9We zWXqzQfnYcZqRa>5v|ykH47`lU3D<7uu4sEqd;Ebq*PkUOjhJ4Zmk>RnZ^uvDR1IL2=kOhDf5@(^2~nP=PFg-z%r5m$)d2$IS@7hmKAhRmp{S$w+SzdG11 zVIc{_O*BN?7G%T^?5N5@+9YrYf7F+8i#fP%Y-|nt5nhBa(Ww)V?jQ?P&k-e@zLWES zQk^b_$%edwyhHhP=40tulRWQf6aSf)gO^(FII26kN&@EDiaE<>uwU81r5QV*Q1?%_ zXa|jnQ{mQ&`c#UpTvcaQq^&M_R2GcW%x1}aD5GA@^|L`k;EQMpMpV=-f=&yOaQ{35 zD(G$g*?ibW%Y#%#grlTSgJyL+hI;;i(8*~)vcN@PVj znKY}1DrreeWKb8(LvZD=BYBiZ(_3d)4Aa@rVmqk^MYAI%-Rp7MD#9LE3ZcNe!ADK= zwEl`_L@g4M2qdgIRs{1c3Ztd3mVPR7s|E|T<9Np)3Gb`9^ft2JqNK?5SO{hs zdG@~i5`CcF{E}lAjh=y}ubQ4obs>?NMyPZKa?gXWq1NDoTc!cv`yh<0M+C15aV_TI zcS0&H<7y&2uXy7}A@obzwcKez9wCMne+_F5>SlZV@5pvt zf8DQ^LXp5{DO+jV)+caiq;hI@1+Xs=7Aw`#nzUUWx;6>pIw$T?nv){#FI}Qs)#P>q zA=J0tR6GyLWk23f`Qhj8oM{GXPy1q{#D zfZUP3)*QkT;#OM*nt_09sl`X%*_9S?EM4BoY=MLe?T1mt_Nes*JtnC)l(I}&<{9tK z9c?s&E4CHIFosOz7SE7mzwBSYJ)+!K` z&eyjA$_7MG&Kg&K>}^v4_vm?gJpJ?y;d*ZuF%{*2O-vW1+Tli1=F|z`T+(Jo2*5-_ zXy4~{=Rh3q0h;TfF!19+CIRcS^3ky;ld>6VC|u4Jofzu`tfDQ0v(v@0gmMJZA4*8M znp`AxLxZ*vlxk|?)AS$1DaeL)PkSibdY%Kw%nbuuP`R3wf+s$juo99zmilC?-sOM$ zh;ku>GzG;1eyX;};J4sJxS3wL$bNWshE^t^kF@L}$SA^(QDTlail%t~FwW%mxiNNq ztLQ`+@9+4JEZ2^EwHHiy+f})hqzVH_wP4f#G2olMMg$u>^9dZs^n4yV+C zF^%GP%mi7lFJ*>jPfEPqm4%I!iKGs&Uz`8y~<9TlMEcSu!_sGm_*9*SX0`h9vmGF`KC?h?(+ur`>*zte_; za7XB!-9($lbJ5rgv2Bn+D-ySi_UMw@m-8+~iNv;xDtnbWp*^6|Qm$`SJ%pGLm}B>4 zFBBW$n++|Sc}>vJDdfj`&YzgC7RbnyOy@GZ+dtarbyV4uK&j2|0|1#bbq_79l=N1? zlzx6hT4-|88l=`zo}g=>ZE9U#%q|8Be-ma;{9uC#}s06K6)9A$ORX2ioHVAR}aI~4z>H3 zKDVj;vL^44`unz-xJZUqOcOpZ6dTy-GeeY>8?%H|5;)ug{n_LO%G)K;0`{nIw@*o+ zB_Pm>JI{;hvZQZ5pf8ty$o;WKcF!9BYG*cSoqTpIoGZxcWQlQ%rKpYalduTo-Cuid z#^4Cy+Hrv77(aLJIfTch^!cZ_O>aIhlUR+5Ww)Ici4YC(~k>>uV^iJ2@l>b z{?arA&o!P!IO@9Pri+UTTlv`i3Q0IJ`rEij@g1X;ERF)K2pRNM&%#d_>G_;|sB+Tj=bmGx|b^RuJ*B1%5iF`J$1H zV-oCjVnm$3CxN`^l3$vgB)d=dt0Ze1<#57Cn^%ch3CyW(GZc zk=fDD43b0Xd`^}#8*Fu0$9&`v^onbGMz)&{72a~n&$Jy#kZ5o-TNJS?A{orqT9Ez( zW%?;{4`HHA@J35OH4@4sqHEN0=NqTB<=0M=gh7g2q%Ip2t|?z49Srqwh@7oXcHpqj z?ap*hVT`cJ&l-Z3_JR2a9BFm;1{Y|EUkDc;TF+-r^`B(oNeS_pH1^ja8Zz6RVq9>e z?AX9Ar7j_=Injpj0GzE;L4Dw1A+h zL!0kid87MVG-xRjCg0*ql_uGm=(9%39*wx%Fe8aa%hdaOXJrl4Xe{fYh??{(J{vAE zXKVa)b?mJX_UVxA}ZjdNo01uWhYVve5!LUj#Gm`rP^ zzz=GHd(U!nr_=OYdj!@^w?^wZklJ{hcpo2X9%r$d+&%;@Hd?k%bnal7bm@EvSGyE_2d+Z4Xzq$>g?jDO#)>&@l zWvQ*q{cZB*{Zg^C2Z}alwX<$)kY?5({ZgihWhDd`|1#+X@W|J!3=4j`C+6iBZliE~ z3~rz&z`6>m#8aE=@p>dPBicohXp!}BhfOL>5mv_-9hjGQeJzQm{gWvqr(L@q)~>G! zkRax|!ij#xerdY-vwShe+MZ+)2biC&|K^iNWE^OszvvW2RQ2z7gpZznuk5zJ9z>(C zGZFc4;BecPU_qRSdTeT(OVO@P4onyxr5cn8bWetJz8UK*9KrIZftS^Xv@Hhv0Lp|u zqtU7{C%^jJ>UO|%LuE`rWMsq=V6#UIFc5C+Wl1+l4!YAnmdG%3i$@comjXNRF<@)V zgkbwD+;8_UM-81BG7?`SrjldtR@HD4QV`*EBu=VJgsz4CK`GwPM;b{wGZc_WPrZar zRb=r~8#%viSjHg`@=3KqRL%IEmw}9YtN}hp1~%S-B51Njq>_U{4;~j8Cw_I11Z>I1 zAHANtXx<=itWOyd)~CRd;3uhlpL(h#pm(N z75+685NpW2RcL!CbsbQK5Rr^>@Yk7FMGRG;ZP8=TvfvUlCbMw1UyabZ8Yx zH({fz)FjO$aI`!(u|=oo9?3BXeK2PP-t7fx$2_9eTZ{k>6Vg&40TV}dKnp0`a2pxq zWE}Gpf=F~GpV6B1c59tN4+|D-w%TW*B+7I{2f?HBZ?#zxBq6d#b3|04WaW9ff=AjF zQo*&FH~Tcg{7DgfuvI9N0-f}cDV3bEE^(5D=9EctMYK%??w(gK{}@}YTv)khNFElf z|Gj3LCva51soJ=aJ&_>70>J%BAEI>)Qe#83j~r;zXPEoc7xGsxDOHVU-$vq?swL_&58BvHVLr#gq=8h$Sgc<=KZicn zM{l3W=05EiTbj~!s%*}p8{IuTNGw{U%avZP^_7k(=txBNZ^tmG+l)MZo6rot)@YGA zUabL{?`ff={gYpXojS{(ftn?|!;52oZg^R-KcM7tX+ViC^e76*B$O+cL5nNUG#~s4 zPS4os3lstGVr1^SlHmslQa~onnp*cu(Xmnip?SYy2X(;h>zr`*bh&H=iS(*#n!`4H z{h#m}y2nGOS&f42VLJ^YYz{E6=~dEgnX-~)>uM0HNrnZuee@huWS}~Hd<93SV9!s& zP%D;<6fY?1zL0XHK`G8@6RM~$w(VsD5kligYA)~Qh0Srwq@Hs_7Rh4hanPUp5Mn^T zr-VjfU>Gx2(;tdk)(SY(9T0HPh_;?PllLNu`GlHTaiu0(jZT63Q}}PNvl<{L0NrqS zQ{y8rsV;5Uq{R5;k0_kR`mCwuEy_do;0=_?Wpm@bu%&NP*Er=d>j<$JE@P zc+lpjYdNh(CJTIYC_+4dBGb5VR=gS25%*r^F8jfGTiH=|Z?@Z#F& z(IVTXd=UOg8x2}`ZF3R1C@qAmeVBhWVjT9n2=hmUEN=1xl&Y7MX9|IfXV%@(-nx;z z>qffHz17DWk}S1H0tw59!|~Q4F?#25e%%j)czfiDZCw=nzp_=+lAy3?+;r(zAe#oX8R z&N=h}B?yI*Qu~=|abrurg4Y%m44g#NyK4>Gig^~2%Sh%gweieMRG1IeIedx|Cei~} zM;H>FoIF?utF;{alqWw+gKnY76>`1#d)A28g;(y+Ibw@wP*}ZeWjT@q7Dscm=C}sM zNkjjb{$l@|@-0Vr*tA14=0w{h7vTCxz9is)VDyJD(9=`+hKga2*Ue1&kWzY6*alD(iz>Apg0oU1A@EDq{o{O3y!{^t7VsSPM zM0gcgp5DQLkh)VB^)x$QOR6v~o8s6pi08`f)ZolJP*fM!r#>)6j>2{cu#kZl=Vt^^ zqMd&oQg?vmnL~1ZtJDM>M@Cmq_X!#G>V6pv<4SEI#W0BhFwd!{Gt#ZN57}|E;!LN{*QzgOrI^A95A>m5M3P`d zy;Yc6Le)(k33Tnt^+a(>^k(M$M0+^(w6pK0(v!P3IV5@0h;%1SuVW2@0!MXG0sLi1 zM|?Jh3D8YmVZQfcfjY@;i*-In$tgpLu8i- z$z6p_*p_j-A(M=ZQjSU0e}3Lm1-uCNf;{R0QFfh>k*H+y89N9FPVM4a4dWh}s*GAr6CMD%-D~3^4HD5(8?8C9E>R(mps(7&P zBscrK(}PcML|<(;_oy;UI71X1Z5$A*;loKDo;zr;RHfB|-9=Z(cF`8S{U+s^755y| z^>7Q)g!8-TJlz=KHdsU4*rXS+_JjkG8E<$ZIaZl(5ak5$HF233{szJB9{?mUM69&ACbufQ>Q!;adc&7g9f2{cne% ze6Pe;s$n#>E?Lm3hEj=%>}P3yu7QQ=NfFM*K%!)_wOraUYfyVO*`G&Co(XP9N()35 zrlcf09$2W=k$4$qjucIAk{+&p9clr&i7r7vc z<2pcxlq73~LxL1~rjMY|r^J|)vtQ}o2k4~P+DV9b!-{3AB(Ek<(sEcbZzDmhu)M`8bw;=}PD zC_W6#Y|Q^_Kw)HJp#Sd`6aN2v;xjR_F#Nv_D9Yf>6V4F)5q|5AlufEV4(rEvs@BH|#R*Bvtf2B7lK&6Ay79Nq)`iCz7a7H0qO z;~+sV0EAQTL-iM+6`hAM2(`x-1%TH%eWc10Q~`zf`?mvg@)#f;)DfQ&6bzfZ3*aA# zS-hAYkSz$xzbnp8vkV>V&fVG@TNWQdpMsheb)P;;g#`d`2pT|JfOZTL%%X2$%#SD- zv?eNKm>lR62>+%u2utu3k{la>A6PmJYCyXw2!4?t&aVcpZG8<`)*9hQxaC)P4nP$S z9A6*uw@Is9*Ak?Eau}Hs#h{+T9s-03fO7~0kW9*xT5fC+fSleYT-?C%Pg4$}w0|11 zZ&F>C3zWWuDRHf+&dnnVE2?KBl(?3}$Y$Q)oUuuenjrfPhdM9Rt`Hu(&(7PizV*02p9i9HyU^ zroJ8ombNTn%D@@Se!g`O?A-jnWOo=`fp3~TEeSe^J2o#m?uW~PRuBOK0H*LU;151< z0E1pfp+VdaWZ~^}FU!X9KtFhVgR#Qm>8`3%1CM5XToe6 z0t_dSw)y!akU8SroA0r_lLGL3EjU{8kt39F_v3X0Dm_X*O?s600w6gy90^FESh6s2 zyq`SKg(xPuHY$VP-~a?X4dC4Q03hc;KeY}8U@hn#x>P-iIFS9EnmxRqk&izJw_jjy z00=;+7icpe_9<0Z%YhH53jnqqh7S`!^6Y*dt?mjs=eAkb*EoOxf%x#(dbB*OA)HQl z`@I^5hH4(imf#YqU6ynjD$m`PAgB8h$;Onut>oqD(CAS}C{ef*u$Jy0x*r{+vwL9P zxmG@EDuv%rJ}SGa;!nOs2&+v)=HCdbS+bb5_MzQ?*{L{zA<5J)7TyskGy zk|P6scv%>}OY*F3v={b{z7Ff&y;>w{s#Qdu8&71E$|6a30Hd?Rq)(A_@UdO;Oo{m+Ta6(2U_%KS7 zyCf5CZJU3~+I#jf^DK(wyIz!U05L98*gjVpdkMML@N+er6;ORGFrW6z$yvpI>fR_< z(V+JJZDaG+EDBhi%X%{e_HrCK4hvBj?Eda7xvV#oGoGm3h>@|YiS(punA9!!%j;Hl z6(v?~ZGG9211nJf3(1as2ZoFf;E(Q6#7)9I_i4Zux$*=74T@OOJH`P4#UGmYHoByWU1}1mAexu^P$T$VOE3c;6A@mPWThW0YHZiZcwK+FjKka86uGy1>g}*}=G`?{Md3!!E)D zg(`gQG+0Gx?pqkawQ2M%a2_vGT>Lb;mYTxsJI)wgN7lwH8da`L0u(#XhVB*)A7+VB}}Au3p+ zaL+;}TO={sKDEFYdoE;VVzQ*x3U|5_ZI?Wkcln8Mk91BVh5(-TexcWW*RrCh@n_sa zY|ZnMaaC`&I02{WEqeOA|bF93V zl9QJM1+Agwi#nZM8INHq%Yn5A`?bKa!)<7o#M`{gA33)-RYgs6qfKQmDPHFkF)8z_ zspnJE*Y4si8ftQ3rqLS*mp9?V;Qc4bb^KrryznsxT+Z28%9k%P+*-1QN1->vCdIEe z`kMUSo%624lKldoBtpTO(SfW}Pqs88nvYvjO>TkXuxh` z1nVC57NAqIb}+MH5fM$6dci9;6&W|;g2JucdH6$dIvnKQRq*K}$?3p^sTF(UpHXxW zPT7`c#{D|UmWQCy$#-uyuf+J4&5rB&7{!zOM#HlCXd8cLcQ;K5Gw2#4`P^zpf%UJG z`g6;d_4JBPhH32WclA?KDHnw<0XG%(xb(>rtdW2Haah)b+)pF1Nuf$Rw#I7cuSbJ{ z3MeTA+w(>XR@>6wjWY-@8k@`c7f{n?@!!9LQ|X6Q^@*HtitE9!JfTKQ&Q7v2PxK>Z zgfJQno?Qdd6hD9|yzTXDZfaMx!)c)2?E{T{7@2^m>PCo^2KIWtNY9o0=mh!*aOeN$b?T z)KV+4Dan-DAK9vBt}U9kvkRbS;~H2=%Fh02vyZ%G%AYwqmv>e?@Apmzoge+d>kqI7 zHyd(o&0fJ(Y=KIOq(Pf6VM6*tSaiTj6H!-GZat8Enk)wgWijdxGhLfbVxF!ayqb<{ z7{1ZH^aW?SB&%w}T#zZZ`|6vem|Fd8QRA3J7Am#+Y;# zTuEfm9Jx7<#fbEyjX7&0@tn`1a{u80oC;k=IXCWlGRnJfApz?5yUQu%V>&5@IE)0Yks2YxOF#bO(y?2!=gnp53No> z_t858kaYv{pw=JqiQXyd2c|h*g8VG$23HINO>u{;pM@J@np! z;y|4Jm94_u?m=L5k@$3f1t@8c%|OoXzu(TlIy2^~aNpwmgc*?6aX-B#vEI#@ENRm^ z2*_AS<8m>#H^?fr;G2ItMbzCj2+`_09@WsvN1Zm*FcLoZt*wq3kjoMAZ>XoVFZjs+1{`pu|?2QJHk7@6~fBbbeXR@e&z=lo5(=huAb`DC5ZzI@6=ls;h>N)8DG5Qll1n=OkQ>EG@^j3MqJfIP zxPl}hilX73Hqp-`i(?qDD5%Y1O%`rii3GtHL7N(D zBR2#{gxQJU1pFf`O`i>rt2~4srAFv~50ozh)&f39qS43de~7rhhp6pmj-2TCJhqns zvPq+RwTT!*O$@Bn*=)CGVH(hby0aR^)`S|!tm-KWeP=0AYV80HVv22796 zMd8fi}{HE02pcwzht~yj(gD&*x=Sj{|PspN%R+9ZisT)3Fv+ z-Cl^vdEo%);NCjS8wCrZV0HiF)q)s{2i*=YI~Y}{^BJ;8s^>1*=JlsM=N_~Tc#%cV zeS)J4;N(G{fscn;?VvCYeD)>SOU*|IGU1cKk}u@1A%MNW6WPM?wjNtCezfSr-OFPH zt;0gp(dD>{#Dd1LTH>b!{9qe+P#zoV31nOW6TshTtWJMkZOuIyYHGqeCp zE}4D9quwLNSSRx?Nh3kjiwvwlt%%>8GzQ?Ib3UlR^ncpml3#j+|*V zvty1dEJwq9&CF-%2gigj&KUddfd>APL(R5`cPOXT;ieG3@7hExs`@|wo>pjykX3nH zJvM7HZ-+R2t$P=fwtE&gHgXccktgQ>E9It;9UZ)5Q^fGEuIvdgt_L}FoEqCl~g&;puauGq%NeC0U-ie?%u zGN@u?mBt&@dZfN1d|N!tqr+<+=>uijM8@P5&T?mHXZDY}MK^XY+^{j`PNg$XVJO9o znqT!(2n!;2AIkuE=M9(7yNDFy-G-t-#ze7?%uq(5R73nZByuw345_aykm1@YN4hhu zS$lOJNCq5v%#JQEFVT=iF^`MR(|0upWX%{zBFOhRQy5u$?`s}dJG_L5M}3SqvBZTP z!c}ec(-aQG))1A3fW{bf#_h%wgMd0?SyBfyV4$)uAm1x{M;GL`n5#qpWkNrcyo2DG zV?R>hg2L{Bu5+dAI?Kt*RGf@i5-hH1cQhqj^HTzn3)VyVuEJEAlu2 z5COCgXHSH1(oGx%V=K|xGN)UdTO54`jm;T^9uPHwq3W>73N&3YK(5LzA~#o=8M{)= zu;Iv@+DjkHImo_T=EkhiQTC@%)9#7vH=#NH>+g$hTsHap`?LB}#*JQaj*X#Aj2uE1 zn^Eu&qhHsm<(qS(9swpbj=(G`qZ2|nEDiNc{m7gZ(-u(BQ}ULz+O#5X{Mbfoxy++k zy_#_IQJTrko*r(Svuv$qb;M0_sST9`+m?F!P+x%M#ZA&%sE9cD@kS8DL|0N>co4dN z1}VThokr)TOv6Lo`-~Y6wpmrBU8 zP_ocl(m=8zHlRfm@Rqey;4&~1;&#`?y7p=ws$c}%Ovj7_v_9sEb?Lz@>g1V6Ei&PT z?O$11GHPWxM8wJ<{dfk{BCAi;!V9QiHNQ7#*;Lc_9@acov6klyvt)%91hz~WEeEq< zsArDT^1+Qn{XEjuSf3+S2pzEp^u$P-|8jl$Yj*tL%+RedjrN5JW*Bgsvp@U0!Um+39EOFb!3r9DpV*zsL%#mE<` zGnr2Nxy}=9Fo*B^{j9XrIPJ1|GRQim{+ug4IilKB1~u|MH}&!TR_*w`!bojxxF)fc zZnsyz)3CRgnyz(IG!y%7eztku^Kn(be<2U7NZTjfo@GDXlG@Em4Gn2sF&_p6&QwUv~EVOZtc4 zw=KJNqH$KuEAt;AaI9E6MUQ{Y@k52SmUL38J)v?^L}Ow(*U96*dVA}rxSlUxG`PFF z2X}V~?he5lcc*dJ1W&Nw1a}GU?j$%3jT0aQhtN3O&Ua?+y!Gz9HNW}ezV+!Vca@M|a$$f+S%qQa)Q;q`{N!FJ50`p$~*Wa1JkZ+s2b}T|4d+(#({@w|J7(YLu zKlx@;=+X`&b6IxUXKh(Et&aSpO1?D<^&5H{8}iw7y2xc-{cTrQmh;E5iSvP3FX;Fp zrFT#{X=Ps3$z?rNNXS5$OQrm#UO7@b!CE#_Aa9JQ&8gS;+DoqZr?D$|9^a-1$_cRY z>Uny#ph4S|dZ%ZSna2BSBu(5l9+P7dVoDv zWOaC~)oTc2&$B$5&WIJ5r)L4@;^(hlnQ$V%lOK(FEpCzXiKCl99&c|bPCP?EbrQuu zmaEu6Mx-$$>%|OZd(?)>xgQf3#1!+l7t6qEiFfRKYhgCECPeK)Kg~7l+VVow&UNn# zdV_*5e)EGK&o){wh9wraeR*KE%~wbHDCH${hfKh+~sSL0XuEfjv5nk^$F0FOC9%M;XiL ztUZl`1H3UBXFD7|-~!eP4mStwKN-qv_lac0XKEP?&y;Gp?uwDejS=5`vaVe{58vZG@nK)8bAg}7bwTJwEkUJZ zsM~0YqO7yQXCTdf%-#Al7nVX_gThDrhN6D?C%F~venEnUF4ozjCBdI=@P*u9u`tfX zQ?}4=nI~0+f)UuJOPbRBdhH4rzaY9~sLrxQF7ib#6IfkS=iU-zyQhWFol=D7XIije z@yVFGL}WH27(>319B71$V=(T?a4M!Dq?#vnQnz8pEEWQL^;}@D2Be6{3Av6aE9a2- z*j?m0B0uiUuCan#lnbSmf-{C;Qo;x|zTk&xu|7xJ zdsEs6xu2UdCauFqPY$r5B0~id=3}wQJ0^JdY1ke0161wzyhFc&yZf*U0GIdsUHx)q zQ74~Mq7fh8s6Pp|K&*w9d%BxN)XZnBwZy!c5{hfn#2=%)8#gtx6iF7eGrZ2j)g z(534Ep=hoxt-|H~qzT_!1>34w{nU*Pnpm$$;^ZG*l#l{p#}Ab$>( zt#qER>@-U=|J8DCTY0ddHtOZHue)2DoE?-Cc34Y5eO`CqL$c0GQ8Q`&=w5JAr0h>>v09RJv0dN zLjte^HwHKV0P3AiZm1!h(LHBFW-Fj-cF^HQuzfYD%aUA|=_j9W7Y6%ork|`b-4eS= zYo4lpYZy*I9KN-NMOW>36-p%d9CGQ83TmB-!yXSA8rU6WY{=>C^g_wlpLj)8pIb6B zC%20Ax&!`bFYUy3pHSBmrsS0`OiwL#f21*6di^Qgt$PTTIM9=Ob5WHv%iirApLw>o z?`Rf~Vu1IkJcU_L`p6X*e8Fzk8f#F|h!qJ!+Spx+4gQCGB!mDGpF`gSF)88w7u{?D z-hZ{5&ByZ}(~{J@eEfX>YBxLDcq)m$4X68u!J?LzCiDGU80j#!A;x!H&Rggd`jCEN zixym!#XF<+QgCI;?BBEp5 zDobt-Ep8$kC24SUcS%`$$oC~l;TGmvw(n!5Z(DAgnz0EF7v*I`-5u%qL7{)*`5VuA zT5wJ!fBjGc$NbJXa1rybI*7&8Z7IUA4f&b7?KZa+-^%*Xg}9qtLAO@tK>d(RWIz-@ z;_tI~yhU2TM|iGd#79VFVhA;QjGI}hRE+ru3$kA-PMi3bfg}8foiSNT)8s zq0icM55m6-oGT!BCO}9f8;w2IgA!S3#Fls1d;~X#NHfmoV&kt^%N&l9IIUU~Q~Y8_ zjQiavYo!dr1t*_l@H*w*Yb*cKc*jn1nq8$`n_0rwZc8}9%>BJWhtd;bTVyLDyUhJ* zk`skcx#mZMrX$_By4-}o7cZXR($(@--B`17_pP3&&q<9%-Tc9tM-hb-! zV;4Tw*l%NDct{%3;y_r;t^ajK$lG?W zgK!!zhf@INgs#lK!6SY~+t7Mx^Zww}0L@sgIXrO;JMZ3xuO`sMn>TqWpU)R zp7Dsqvvm%2Rmr_(JbPhWhzo~`G}cU6i&}tR6{%5V*{c@83`NfC`(dWhpgEGOKc{UP zTTj&S)b`s=SKib0Ch6fbR2e}SJrw+JpnY{igwzfgw| z4KFDfxN61*>;rvFa((#O5PoDtfDt@+j+A54w?WD&dG=p$*oS1?ooU9^yQb|k!-0V2 zsYHkXpa-J_jizTq$SwD3CM{*%mAox=7oe31Fl_;Rbi?}{{IRX^HGr-+sXOx#n-!&M z)2}YX(*K7i1N{owSZThm&Y7_7W*XTD!@O%J1E77Km;)~+7Oxt^J2SBJcpOMRwuS{B zdjGf?Ocg)eMpYa8*~dL0ujElWKu96>E(XswSN$AGa(BuqD1_We(jM#3xqGW%^}dCw zI#$Q0f&9BJu;h&K_l^|Bt`+9V;o;65xdSOEBQSe27*5SW%wP~ulS3b_5^=V=(^*hE zR_r4NJH~4x28`9Y4Q6pmDjRYa)Wc+~>no@~8DG=*J~SX~v{{WC$MQ%LAS4s}rV{Qk z^}U@c2IbGd{HNz`tdO_AHi`nWZil3Qd@6lz5aB0J(%?C|Rg3m%q}aBe*ocwXDfbdp zy?PWrQ$M&%rV8=DZ+beemVA9UuYbLS>|BGtiH{qB_p7n`o*`F9lJ%iATaw__ z;$S++&KT97vDW9i%PH{K3a49r!An=jY5t8#;!oeXx>C-xg2km3bF(eXGji~&w|DSx z?GOm-u(%R#xEl|PiI?e375YcSj?qGE&4T4y5AnMP3m}e}d|x=m`!`w&)zaag=HD>D z3M&qMjdZ-!YC$rfnm(8VjE~1g$ux2yqcS)mL^oMs<4-0iA$@wJ2_enD|0{qJe{xZa zNw=a{Gme9DPnI@kmJ*dfph#S??z+;UP9kfj_*%1qM@Agq5kEpEaYoV&l>v}@haLyC zr!Vi7Q6J(pr<&#%kb^BiOC0)hO81QjI_QB*W`OMa7?5RX0&! zBSEPdtLnWxM4xrhx>n2+@&NnKJG9teks*n-+5S?6ik7lcsl%f%wZYZGXvcsb?Q1*@ zR_!t|Lt8d z&d9b#9-L1`H=6Rsn;t{@7IbNnQKSgqkV#cOu#KU0X18S;q%8IT1vcTwUy@o=E?tJ# zn2044#Hvr^Yl>kX#3|v5eW;S9u4#jhy2%Jv{TA;Tgw0Ci)qwAD4ek>Eh}|(xPg`S=w*GaW)7o-+%~C64j>Kf+qjhKYNwe`tpr58B5` zAt3nx&y&Cu*O{a`MdmVu&4@9`qog=IvGKcxr8Q5k_}0$^xqHxw zNIURI3RA6gIO-G~zuI~6*N!`VwUgZ^s8sut8d(S`uXaD?<;{z&Rx6y_82a@Fa>c** zwWedGa5b%l^(v2;94U}u&8xxS>(D;}^J0xx=2eyxj#@L!eBYWl9~*tuM2`)nANb7? zP0rk8s?47Hc0|a$W5dZ(1YI7CiJ`;A!HY;pVZBXA0lT3)D6xK1iABK zj}5GixOvJ5qFNh0ut^zqEcy)G$>B#nG!iebofDS*b`8N>@Nf61eGZ7g$b-Hj&XV_+ z<00@mpyr#5ju_9iw8hUPn9yOncJJC6_NH_-O${3v9Mr=mB@i$Ne>7ofs<9IFj#l&L zWYw-6Z^DI>4y|0U?*b2dlh*Qwhm>9x6;Y{t>^4pf8d3JU3fVZ5a}tw&%+nN+ew_L4 zedAik3-%vhMxt6-WqMe!(S2SF`Yi&S=y{=~!gm13I_z!xM}Dyx3j2(%T$0Er=4={y*L*ZCwrhL(GBr?ZM%HT5ah(Q*>+VuzZYlFzJzEqkRyE8DE3Zs57 zilt^yE8s?p$Bwe9;X(eW^xZ_FWnqh^QKNckdpy?^FLyUG9;+^@9)go5)L_*_)hdO| z7o@3j&rYJ!wh+Bon_(UO6J$+~Gm|r&W6v)}>*`CV=A2>$*X}=-g^N;+FZ1t9i0|qa zNWdGxe7Pg`?9>LqB^zC43i#R&7rh2B(P;wcktQV#0OFsHQTekfVe_^}3kR3QJABh1 zv^bebk{D?M?de%0SKZerd{*=!R&5!k@gB&bV){USgC;uoMR4?+P}kJ3C#n6aqeGI| zB;4?$*-s@(>Rk^;2|DU4ax82&w^UL7Fu(ArnYZWAzwRF%lWur<${m>9C9x}bEbMwv zDv}?9R=AH0oa1xtjBMk}rfu)X7BRf3culQfADKw$%O#W#rLLu73a$%pEIaS;R8)yP zmk_ZR7{Jf27AO~yY&mlM>S6p~RE{^3MtZ5pF>Rrb+r+qT6c@F2@k=aj!vP3QEr z>*S))$Pl=3|Awp~Is8kN_*;g3uH$snLm4UU<6q$Eg~cz$w%E`daB4s;NMOY<^Bb%Ce5`K18)&vs9ZKvk-Qhpl{Yq0}4E5?b( zYcw>nWK~o@7w`FH&Dd7MC+m`lvZzrBh*3P>-A=@Uh=i|`L^%*v~BD4rQSUB;lAMZb$l;hyQk=FlM89+>UWEd@@HE;AzFG8 z%LODwL|lp5H_SNN;TGVBDf7Ok9m&x9o6Idvbf3MKhkcFE&a3Ytd}8f#I;hwmQZP#t z;$Y{HNu<6?*`O7%Zw2pw0cB*Z5H>~$!AYs_QD5VZRGMwcg@evQ`Ka}_ zeR_B3%;MMlhNCHJ0cAT{im?;Mx(gzYw9ha#-eQC&0UXILVLKSZIu1O)5xX%kTiW$& zki3OZeTF|Hdzjj5F#w%MLCq?K#+43{#Pa=FJyus_QNcR2@2jat|jrf)_Y@FRe zh9^iNp5LzL7;^PLEMb!k8%3q^N@vOw4`mNE@W3Kbnfa}{g{&hnlJuq(3m=7`Zj|3L z|H=Q3l;fcii#jPh9x7q2$w4I+WSl(KUK)!l_D+63EVV7*R|R>)!7?U$T6_#~ zB%b@h+gQ>`pQC+1BUQWiH!4S#m3}qxpSpGI!&zxz>}?+8ogD#!`|4#aNKUKNs3YCG zp;&<%?di$O;XJ$`B=oP-)52lnKOhz)WU^mKYAjc=^i$zFu@Y<+^c}=%ZuT-L&lC*3 z3hBZce;J{06Pm`01LhE52e=R!ksjUNoTbZ%y%LbeVy< z&kSO8nt|!b^kj6HfeA+%ZQ!_ngtEFHmEBnA!(MURs0Vz3JL5Q256FT8a(FU|4*U2- zao6<35D%>x+@fK{KmRS}$oD8h0$jEXg`obd^g5c+nm^QH&+6J)kzgWdBO=XTzb?iG zfy;D-h?3Y~##Q~wi{e2N(;GF-O5e^PApVBiplgBdT=fnCx&j1Zn?N?3Zff_;0SV2E-^FJuX5m<^3 zvv6ZH$~#99)0)ly?*CiN92?D)dCBTK&B|=CP-!WWLuv1o0Kd`z7{92vVtkktDG49L zsn&IE8KU27{kvho-Lszl9tDKR6~kXh*0Y%onDIF+>otW?KvUA%#lt!$@>@5LVS5>o z`^+YpdbAc^fOb+E+&Q!+>;QR zxIloNr0z7AxjhO-=_$VsZ<>$fJ9|$Tw-V`J^BgGpPRMyb|136_9p=N5_xLKU1W`7Y zv{8hLqlK!xl;zE(Wj#E-{xOYWd`&xEQ z>obYMc6ut^I_m!@yN8B29H;B)*QPAyR9SZ_xZz;dUYb(_t2A6PMQYo zHI96n4TbsgPMT=#t$te-rA%n^_M9;bRBxE&S$=ajQIyaKdnc2x@N3SJcibyh)QC-J z{s+wn@NM>Yc7e78^0nyq<~ORe&64P=ecCp~xo`H;_N8xD@6W_=Owt84rPn)c0g==9( zkThR`3g)rml)v`3>Vt2Bpf}C=NPtzR1yEhc<1%Y2nrNiDP15rlb1$)$EE172rAv%t zhY!0DTU9hNUjaH5dtx`od}!2$+5`_Qww=gyjs&9)a}`Y{6M%JICL;+z2o@37yIs`1 zrO9sw&O~SS@&z^2{>+ECqGn5K6XG1&WuHXOG`xS0Se1@w4K3EY5-smsR4lk!TrYdp zxvUGNIV5ILwB$K0)Kqw4)`+({nmlD)txk~KfPcJRKXSg_-i99bzLpqmkv85+a>{Dd zg5dJAZx<6Rpruf1Y=1qFflZq0>Ku09kiBnWXlIwmK1vz5G5w%7&=YEXt`o`O^D)m#zHXMh*{&qDEYbWs_9egCJS848;p{xfkx@GuP7w4Po)Fvu-0;OzGX;e^Ql0bQKeviewCu4!w zH?ag}Yxce|yTOSMY`c1ikP$+WbE#k@nhRG2xJR5{XUqI%?)JV@2yRx*U9`jT#5ZGT zir(gI+Y&l)HurnMNmbwQ>OFPy^8Dh9f1l{Gh`KTEo?sDm`)X0FK#o;uyrGiHW;4J?dv>v_?tS1XQ-&9K7 z1=sgj%D+bt`D{_SGw>~?k{I2Xt$|k=wDamt;rLze;8mL(fwjn?Mrl8?GB_X1jSGsN zoiKMTC$!SJ289dF;U){IFY+s~F+DC>Bggo)b9YxX~6k8Mjcp!iM? zb?)B(F_Viv`BeKQlv^MNT310ow#qvqS+2(%&I%`=Y>ciUbo0CHawU1)<4jh#iUmaSg%fNPv-$9E=g^7 zL7!AyUxoqDCn-s(#?j%<3Vy0PpR?XgY5JNnE4$0|hCa2u7Ve|sx+yDsYMSqg|NZkO zL8m-nY@h0SV|_bXb4t4@iMHZ82OI;v`o0YEhlSb{tX*qX_(V2crvgP4b3Ihq6sQE! zzoDSet0T$42!DUGO07;NGojeWaUqdPVCq3oLFHkLG@LAyT@}Rr`+>IE^<#fWDY{4|~quz_jOIldz3kxPwK|1_x+f#Vo2rP^^Y5vp~ zn7!j}N1Az(-fn>&6?6Eq`HMHH-udo`w=A@$Or#C`)PZ#BPS*h$Bu*&IgPpy0=ZO7ec+=m-pfOp4Wzx$puf0sSTa|@-j4@q9yTxI5*v^(^`*mE#DTN*0 zLa6)Gu@+DLmIP9T-t)0w08GN1r#LB6^P)=on`M>uUB4er=Y27HuQy#)FUQ5UW_?s> z7E>q5{Ap4Arjf{th$G9P0knnsX6KGV%=>HUK75zb@bhI z@nEkwY3x7Q?`{~03x@lxRN|R+@#TqL0-aGgIkIzJv(MWqp==Gw=5IF-{i(ALb1#pF z9iUp3Uq_Xf)5%uQPe;cJ?tUf1?70p-N+QH;kW%eQeQq7r=81kk`R&D#z-sKVoB!E- z^4oS!14tsclIrv^lxfHP;J+C25#ohzB&K$=bVL;sL*|We`1`tfT6-}uqyC#D2RBz)fVT}bldK327q>7s4=)$D5EnPM z04o$2>y7mrU z)X?9*#fObr-^SAm8ZI3knPTKl1Vay(NKH@IQ7W@bU})@1+vl z+=4v+>QagHOf@&K5O&P@3xSv`s_p^0q%AT$%-TWg25=6jA&05X3Xgady(WCpw^ei^ z*vMdXWR}29cl9OK_Kz|>gYdcHM~A9C8dNX!@Y($x!QGd z-V7y1pjZtDKzicmC=uJw{(@Q*a*}M0=6Gc9CnP*8jz6 z;-V9Nt7k==)3K(o_r%P^E<%Kakcq8&?vHxITJJyvi+`e7i?dcufw9L}c z-$*>ffk|V)5s#)7(^rM&@GIISb9jZtueupXHI9%ziQ%j_5r2I>a<%ZgZmaz~)Y)LA zEtqKc%hX`&tvPwjCyXz@cQotX-Mfz;$Q|EU4427W#?o~pp*xwgXHc#99-ngG-8WT_ zjK~!WH{RQNHhf)E6#m_s+ws#XhsKW6K%DNy ztm=k(#FEKr3_N8h>zPg52j1>xZXk1a)gJ)Pw?A~p*S3ku5z&B99j zgD{!|KVdb06p?=b&Y9I=@#@Z1=>Do>7NhnTql9*U(iX_;(8yLOYm6j^Oa z4VLzop7?fb4&5RYZIhJLYS4Z4#xFBwm9XfEqb(X|f{*^r%?fC4n+UPm3X_R1l$)iM z4Xsl)6te;bHjjCD!5-mb>rt z*)Z_wQ>tiFq?k};wCM9?DW3J$++~tbJ$2y`6{V$7KjupiiZF?ro+EW)nZm_f;7651 zj{pdXxWI$nV`KahZQ=Wx1ewj8^QGXY^h1DQLDtk#q=7}iVS-*hcb+KyBY8zEI1Jmm zoLbbk-p?G!=|6MmgUO3^5>bP1T}sPJ@V+u%E6RWpWFB~-JzPTjmVmo5PU+_3*QYI{ zdY}c1r*`V+kGZ-(OK?Ss|B!_X2dd~=m(bD?kW`K<+WZ;*v&Qc6a=|*Um6|kpd8>X` zsZ*q=XOl%uOfXPka)3ExeKZwfMTFrtFMv_J^%8utaW&-F)fwFWp6#`DdUervWWc)d z>B+ht|F)~BoouaV8uNT-=vHLEKDOZbsz5DyDs~{b`uGLt71I0k$Gh$RtoE+6yStql z-(Y$0>e?#w)fI$K1dJ^PLa0`mm{tEvWy1G=G=hfOHnymoO0L#6e$>WX)Z9Y6{HCa! zIt~Fg|InzM2Gqvf)V$Q((6`!dZr*?2@<63%|Mg_+_SgDXL;bbNQX7kL%e@nnmFJch zlI53?6&4VZg^njl3v&y}a?1+}3d_hzQ2+NV(2!JZT7TDYb8XTVQ{&(1zDEg*%KwDm#)`%g3VVR^mSQi}plQdKj5h3x|XK z*Vn|i?K!{&%R&KfxU|b zGzsqoJE9;ujx9k*F#*b_QEQY#4q3%OZI`wkldN)}vPpu?8F}ZBRYUUK1GFZ;(0dT+<&)Z%{ssStA@;YLGuITeBS^F|3BDx_sUdF|3Dl ztjP~yaIGqDh_w)pe$QDtsIC=EkZjg-i8LZ-QTOaxlW1v)xrFhpIyH!2h>QPb%w9J@ zI@I0}xO7%EqJYf&xMWsY%Om!t0KIA8M3Y_OMOvstptN=Hf{R?sxRNl_6<%SfwUV7z z3~_7;vwFlv5{7YU_bG!oKVrerU{Pk3M5r2~>5{r5EL2ap!si`|iq{h9nY0Ew^uE19 zpqNmr13q(UxoU>D8`fZHxl(SrZosEy#?cGitzWH0+!1Ha*xmRPuZ4L?)ZKvniu|${ z>2`@W6mAIV;)_wxW)>;dPO6d6Bs$d)9{-93pFj}mk3~PSV6Grc&c#v3a}4uA>&%^$ zHZ9jX(#;BX{Xn}rLJ0%oVn_#|JEhu1JKl7+kZKWF*~9HEb86khdGC4<9cgwUXjD)^ zQIV$=X!FalS;sMRG1vT9xz%ftqq>L7x+t&wU^gMCHDdr6o~vPTm`GXG|&m#t3iO@)@WL~V%`RJ>CI$<6=RG(_iWSwwN6`$CN|G> zuWk4~^(|Yw`BsZ-b~)HLwFNHaS5LS)HMKo1(NeEqK>dH(0Pq^9of&`b5idDFbM#)C zwRTIc81dn@gNn*ih1Mr}5>o-bRq%v$!S|?8>)w{Pfq}THmk{U4GSUfGjd#{Vf-Cm$ z9$%6IcEqwkrwCkm;CO7L#6H4uoI@f;$^s?{N0Z2QA&;e9&ru&t7{J@K=&2NP2pwT+ zCbBj?+gGA52@Uce={Dc$I3YHdsRVM^ENp$xeKr&N3RzzM`CI+g!*n`-*~Dec6~)6% z729{1W;ocLboWe6A7cel5Nbk~(1&Li0f=}d^K zE$nf6%w_xRire-5nf_^48vEUt&;kat=zSh&4F<~K8xCa@ zAB8p^v3d8iY85Vs^ZNt+vYMXFhcEL7z5HM}cL=&;1TP3Tr7;(Qo8Z*>OK@}r7PIKp z*d^=+#eZUgVq)WK+Vix=m}tdm`$44AsQ1`kxQ$sTc#b)?iP#XC4}Z_~&GlUb z&V@Kf*o%BE7J^*_PJ0{c0H0TOd*+PWy-mIGRek3aF2I*ic&z4y4Ka5;ZuoI#<{hs) z+{ur*ro%h9unx*kZhMKk*kTwO@CEt@(}MRkc9(1#$o2bK3^AN65WNM9BU_gT z0zmLN0JM|HMCQl+Q;*r&1`1%mItZZ)fHi!(hGL9FZ8UsGR&EhG8FIt9t2xIgZzU9A zkCZIU7w!>e|NLEw&$qK`)vNF@TRg96s~soyqkx9FpeR~r$Er$UY|c{ij9H{{Ay!Tg zoJjF18S~?V!5&j~<7!|bLQe1-()#y#%O_T|<}(rq6pJS+eh5~6`Ax~?dz$q-7~Rpn z&>g3*g^#=4^c~hMx!&?yK|g!;vCG1qJzXbzU#Tt!VGWUGbn2p%h+qC#bhDtBa-|Jw zHkmh>%M0!*XPjjIOt034)V5p-0GK{-j+Cz>(?VV6O;KJlWuX%am~*V zw3u(Dr&6Vy}$lHN-oDUrxLH&da5I zNoGVhY?@EziWf}f?Ly$b-X7F;r#GEH31L#hGHlp*uX|_C*(q45`I4Oe@!D<*%4p*3 zqdZT1`SN_#f|tCI*b6dY-zqx^48?oIfyM&YTwaCz)Gfk3AeJj{9zr#WHaE=?`{6G1 zC1mm7op&=D%>&5ZBvYojnpL`3*d(=y>N%iWEmXt=gST*>+%?jN`O$-_%lS?4p=Po0 zI_%oi4kic*tOGfR*58MTB1F%2q~^pSIIf6^;g@<&E6LzpO)DWWbOn>5h1R426rt>S z3#*eLa`l07cb?MwJ_^oZ(eH!8LRjD2i8xA{pPWy8aq0&7+c5>V3D;vp-Klm-4$YK# zjrV%6wt4;FlXpa@6rf2R<-ky0 z$K1n(ZU46gXv2r}|KRec&nV%9u<`wT8m3EJv7(ZC5TypK>fz-R4i@<_H6^crv>3Is z>e1cSNZ?*a#F+{0m7nfx+o7no$n|HC4bkv5?1sM>!>|?1q431LG_|lKs_cGo8b{2R z+_T)R-0LU$hU_uMuL6f+edvceoiCAoU<3=1KKR80^aBI!&PN^~K*Ua@4@LE`&9qwR zm-seMU(WpA#w8}itL!>f%2(ab`g! zjIN=s(%t>NV;KOekAjhDA+H|jN3KyVUzCpw&SVpxW3FwBzWD-jr>{ zH3@poVsH7;x`5pNVz)B4b~M55XJKljJSOR-gDOOxmK4Wcwvc;|OxV7pg!`841Js5S z{uYx3Hjy)09y42L!;dK~@+~DobkPSSDRb0BLq5;hacMfFL~=gcAUgC!F1~L5-G!{f ze|O+T8P}z+=}4P*Gfh(QMX)Z$iIFEJUFc1Xg9hc*mzq0jAWugK^;{PGkLSVJaTTjG zLCd*u={>ZdxPLAu#*d`Avd3FkX-aZ;z(%e0#D zQtYrT$cz6Y;#m9Pk#i3nddW4z%WO>A%Wu8KsG^KWBTPr(iv7a>hWL#$d@eCY?I{(c z_J0lHz{dYw7)nQyM8h1{I}+0>M^n67#&6I7IREH_i~&zW7*+s5O$4xPb~Y%)GWK(j6Id2#0t;O9=7OcuPqLp?n8DH`>dcQX(3S3yo+8 z*CdA3odEi!*bXDOL-@CSAUYe6z4a!@ypvXzG$hKrqY;Z3yMWIh;C}NfesB%KZal*gLAirUo>90 z98V1X1q8NcpRJz%-@u-)BP0;=IONc9=o7SAeD-*`D(}GcjnR>IHeQMowg>so|B%Re z>~YwV3>$~J6#s7#%$6~X^@xIKVdIToEx+I{q2>bp#F$o#)OZ1S`U>5(pkM|wI5t`~ zz1am&=fmy7xTCN|L%%t86)4cEiuD>uzdjZyMGlSa`Z+CZe^+&`Rf#NkCxP%h`0lns<7;Oe{2-prE=oh@PXK2ZwV|zhd1n`uAxSWtgM)?1OFf3wwqBSwx z=2(t=)z)-|kMD{`=(a>N>||rxBmx7Fu+0rG*q^cu3|}~&h)oP@SmQYV|Hj+hLv^*` zt=E-l{RkLz0BRWkb2{3ei;A#c#t=Rp@Nea>->+ + +**Description:** + + This module is a submodule of :mod:`stringtools` and creates an frame to transmit and receive messages via an serial interface. + +**Submodules:** + +* :class:`stringtools.csp.csp` +* :func:`stringtools.csp.build_frame` +""" + +import stringtools + +import logging +import sys + +logger_name = 'STRINGTOOLS' +logger = logging.getLogger(logger_name) + +DATA_SEPERATOR = b'\n' + + +class csp(object): + """This class extracts messages from an "csp-stream". + + **Example:** + + .. literalinclude:: ../examples/csp.csp.py + + Will result to the following output: + + .. literalinclude:: ../examples/csp.csp.log + """ + LOG_PREFIX = 'CSP:' + + def __init__(self, seperator=DATA_SEPERATOR): + self.__buffer__ = b'' + self.__seperator__ = seperator + + def process(self, data): + """ + This processes a byte out of a "stp-stream". + + :param bytes data: A byte stream + :returns: A list of the extracted message(s) + :rtype: list + """ + if sys.version_info < (3, 0): + if type(data) is unicode: + raise TypeError + # + rv = (self.__buffer__ + data).split(self.__seperator__) + self.__buffer__ = rv.pop() + if len(self.__buffer__) != 0: + logger.debug('%s Leaving data in buffer (to be processed next time): %s', self.LOG_PREFIX, stringtools.hexlify(self.__buffer__)) + for msg in rv: + logger.info('%s message identified - %s', self.LOG_PREFIX, stringtools.hexlify(msg)) + return rv + + +def build_frame(msg, seperator=DATA_SEPERATOR): + """This Method builds an "csp-frame" to be transfered via a stream. + + :param str data: A String (Bytes) to be framed + :returns: The "csp-framed" message to be sent + :rtype: str + + **Example:** + + .. literalinclude:: ../examples/csp.build_frame.py + + Will result to the following output: + + .. literalinclude:: ../examples/csp.build_frame.log + """ + if seperator in msg: + raise ValueError + else: + return msg + seperator diff --git a/stp.py b/stp.py new file mode 100644 index 0000000..af5eed8 --- /dev/null +++ b/stp.py @@ -0,0 +1,175 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +""" +stp (Serial transfer protocol) +============================== + +**Author:** + +* Dirk Alders + +**Description:** + + This module is a submodule of :mod:`stringtools` and creates an serial frame to transmit and receive messages via an serial interface. + +**Submodules:** + +* :class:`stringtools.stp.stp` +* :func:`stringtools.stp.build_frame` +""" + +import stringtools + +import logging +import sys + +logger_name = 'STRINGTOOLS' +logger = logging.getLogger(logger_name) + +DATA_SYNC = b'\x3a' +"""The data sync byte""" +DATA_CLEAR_BUFFER = b'\x3c' +"""The clear buffer byte ('\\\\x3a\\\\x3c' -> start of message)""" +DATA_VALID_MSG = b'\x3e' +"""The valid message byte ('\\\\x3a\\\\x3e' -> end of message)""" +DATA_STORE_SYNC_VALUE = b'\x3d' +"""The store sync value byte ('\\\\x3a\\\\x3d' -> '\\\\x3a' inside a message)""" + +STP_STATE_IDLE = 0x00 +"""Idle state definition (default)""" +STP_STATE_ESCAPE_1 = 0x01 +"""Escape 1 state definition ('\\\\x3a\\\\x3c' found)""" +STP_STATE_ESCAPE_2 = 0x02 +"""Escape 2 state definition ('\\\\x3a' found inside a message)""" +STP_STATE_STORE_DATA = 0x03 +"""Store data state definition (start of message found; data will be stored)""" + + +class stp(object): + """This class extracts messages from an "stp-stream". + + **Example:** + + .. literalinclude:: ../examples/stp.stp.py + + Will result to the following output: + + .. literalinclude:: ../examples/stp.stp.log + """ + LOG_PREFIX = 'STP:' + + def __init__(self): + self.state = STP_STATE_IDLE + self.__buffer__ = b'' + self.__clear_buffer__() + + def __clear_buffer__(self): + if len(self.__buffer__) > 0: + logger.warning('%s Chunking "%s" from buffer', self.LOG_PREFIX, stringtools.hexlify(self.__buffer__)) + self.__buffer__ = b'' + + def process(self, data): + """ + This processes a byte out of a "stp-stream". + + :param bytes data: A byte stream + :returns: The extracted message or None, if no message is identified yet + :rtype: str + """ + if type(data) is list: + raise TypeError + if sys.version_info <= (3, 0): + if type(data) is unicode: + raise TypeError + # + rv = [] + # + while len(data) > 0: + if sys.version_info >= (3, 0): + b = bytes([data[0]]) + else: + b = data[0] + data = data[1:] + # + if self.state == STP_STATE_IDLE: + if b == DATA_SYNC: + self.state = STP_STATE_ESCAPE_1 + logger.debug('%s data sync (%02x) received => changing state STP_STATE_IDLE -> STP_STATE_ESCAPE_1', self.LOG_PREFIX, ord(b)) + else: + logger.warning('%s no data sync (%02x) received => ignoring byte', self.LOG_PREFIX, ord(b)) + elif self.state == STP_STATE_ESCAPE_1: + if b == DATA_CLEAR_BUFFER: + logger.debug('%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_STORE_DATA', self.LOG_PREFIX, ord(DATA_SYNC), ord(b)) + self.state = STP_STATE_STORE_DATA + self.__clear_buffer__() + elif b != DATA_SYNC: + self.state = STP_STATE_IDLE + logger.warning('%s no start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_1 -> STP_STATE_IDLE', self.LOG_PREFIX, ord(DATA_SYNC), ord(b)) + else: + logger.warning('%s 2nd data sync (%02x) received => keep state', self.LOG_PREFIX, ord(b)) + elif self.state == STP_STATE_STORE_DATA: + if b == DATA_SYNC: + self.state = STP_STATE_ESCAPE_2 + logger.debug('%s data sync (%02x) received => changing state STP_STATE_STORE_DATA -> STP_STATE_ESCAPE_2', self.LOG_PREFIX, ord(b)) + else: + self.__buffer__ += b + elif self.state == STP_STATE_ESCAPE_2: + if b == DATA_CLEAR_BUFFER: + logger.warning('%s start pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA', self.LOG_PREFIX, ord(DATA_SYNC), ord(b)) + self.state = STP_STATE_STORE_DATA + self.__clear_buffer__() + elif b == DATA_VALID_MSG: + self.state = STP_STATE_IDLE + logger.debug('%s end pattern (%02x %02x) received => storing message and changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE', self.LOG_PREFIX, ord(DATA_SYNC), ord(b)) + rv.append(self.__buffer__) + self.__buffer__ = b'' + elif b == DATA_STORE_SYNC_VALUE: + self.state = STP_STATE_STORE_DATA + logger.debug('%s store sync pattern (%02x %02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_STORE_DATA', self.LOG_PREFIX, ord(DATA_SYNC), ord(b)) + self.__buffer__ += DATA_SYNC + elif b == DATA_SYNC: + self.state = STP_STATE_ESCAPE_1 + logger.warning('%s second data sync (%02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_ESCAPE_1', self.LOG_PREFIX, ord(b)) + self.__clear_buffer__() + else: + self.state = STP_STATE_IDLE + logger.warning('%s data (%02x) received => changing state STP_STATE_ESCAPE_2 -> STP_STATE_IDLE', self.LOG_PREFIX, ord(b)) + self.__clear_buffer__() + else: + logger.error('%s unknown state (%s) => adding value (%02x) back to data again and changing state -> STP_STATE_IDLE', self.LOG_PREFIX, repr(self.state), ord(b)) + self.state = STP_STATE_IDLE + self.__clear_buffer__() + data = b + data + for msg in rv: + logger.info('%s message identified - %s', self.LOG_PREFIX, stringtools.hexlify(msg)) + return rv + + +def build_frame(data): + """This Method builds an "stp-frame" to be transfered via a stream. + + :param str data: A String (Bytes) to be framed + :returns: The "stp-framed" message to be sent + :rtype: str + + **Example:** + + .. literalinclude:: ../examples/stp.build_frame.py + + Will result to the following output: + + .. literalinclude:: ../examples/stp.build_frame.log + """ + rv = DATA_SYNC + DATA_CLEAR_BUFFER + + for byte in data: + if sys.version_info >= (3, 0): + byte = bytes([byte]) + if byte == DATA_SYNC: + rv += DATA_SYNC + DATA_STORE_SYNC_VALUE + else: + rv += byte + + rv += DATA_SYNC + DATA_VALID_MSG + return rv

$OD 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 literal 0 HcmV?d00001 diff --git a/_docs_/_sources/index.rst.txt b/_docs_/_sources/index.rst.txt new file mode 100644 index 0000000..0cc61cc --- /dev/null +++ b/_docs_/_sources/index.rst.txt @@ -0,0 +1,27 @@ +.. stringtools documentation master file, created by + sphinx-quickstart on Fri May 17 07:22:59 2019. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to stringtools's documentation! +======================================= + +.. automodule:: stringtools + :members: +.. automodule:: stringtools.csp + :members: +.. automodule:: stringtools.stp + :members: + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/_docs_/_static/ajax-loader.gif b/_docs_/_static/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..61faf8cab23993bd3e1560bff0668bd628642330 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nno%(3)e{?)x>&1u}A`t?OF7Z|1gRivOgXi&7IyQd1Pl zGfOfQ60;I3a`F>X^fL3(@);C=vM_KlFfb_o=k{|A33hf2a5d61U}gjg=>Rd%XaNQW zW@Cw{|b%Y*pl8F?4B9 zlo4Fz*0kZGJabY|>}Okf0}CCg{u4`zEPY^pV?j2@h+|igy0+Kz6p;@SpM4s6)XEMg z#3Y4GX>Hjlml5ftdH$4x0JGdn8~MX(U~_^d!Hi)=HU{V%g+mi8#UGbE-*ao8f#h+S z2a0-5+vc7MU$e-NhmBjLIC1v|)9+Im8x1yacJ7{^tLX(ZhYi^rpmXm0`@ku9b53aN zEXH@Y3JaztblgpxbJt{AtE1ad1Ca>{v$rwwvK(>{m~Gf_=-Ro7Fk{#;i~+{{>QtvI yb2P8Zac~?~=sRA>$6{!(^3;ZP0TPFR(G_-UDU(8Jl0?(IXu$~#4A!880|o%~Al1tN literal 0 HcmV?d00001 diff --git a/_docs_/_static/alabaster.css b/_docs_/_static/alabaster.css new file mode 100644 index 0000000..2c14d17 --- /dev/null +++ b/_docs_/_static/alabaster.css @@ -0,0 +1,607 @@ + + + + + + + + + + + + + + + + + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; + font-size: 17px; + background-color: white; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: auto; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #ffffff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: auto; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: ; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: 'Garamond', 'Georgia', serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #FCC; + border: 1px solid #FAA; +} + +div.admonition tt.xref, div.admonition a tt { + border-bottom: 1px solid #fafafa; +} + +dd div.admonition { + margin-left: -60px; + padding-left: 60px; +} + +div.admonition p.admonition-title { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: white; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #eee; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +dl dl pre { + margin-left: -90px; + padding-left: 90px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid white; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: white; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: white; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} \ No newline at end of file diff --git a/_docs_/_static/basic.css b/_docs_/_static/basic.css new file mode 100644 index 0000000..607b5f5 --- /dev/null +++ b/_docs_/_static/basic.css @@ -0,0 +1,648 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 170px; +} + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_docs_/_static/comment-bright.png b/_docs_/_static/comment-bright.png new file mode 100644 index 0000000000000000000000000000000000000000..15e27edb12ac25701ac0ac21b97b52bb4e45415e GIT binary patch literal 756 zcmVgfIX78 z$8Pzv({A~p%??+>KickCb#0FM1rYN=mBmQ&Nwp<#JXUhU;{|)}%&s>suq6lXw*~s{ zvHx}3C%<;wE5CH!BR{p5@ml9ws}y)=QN-kL2?#`S5d*6j zk`h<}j1>tD$b?4D^N9w}-k)bxXxFg>+#kme^xx#qg6FI-%iv2U{0h(Y)cs%5a|m%Pn_K3X_bDJ>EH#(Fb73Z zfUt2Q3B>N+ot3qb*DqbTZpFIn4a!#_R-}{?-~Hs=xSS6p&$sZ-k1zDdtqU`Y@`#qL z&zv-~)Q#JCU(dI)Hf;$CEnK=6CK50}q7~wdbI->?E07bJ0R;!GSQTs5Am`#;*WHjvHRvY?&$Lm-vq1a_BzocI^ULXV!lbMd%|^B#fY;XX)n<&R^L z=84u1e_3ziq;Hz-*k5~zwY3*oDKt0;bM@M@@89;@m*4RFgvvM_4;5LB!@OB@^WbVT zjl{t;a8_>od-~P4 m{5|DvB&z#xT;*OnJqG}gk~_7HcNkCr0000W zanA~u9RIXo;n7c96&U)YLgs-FGlx~*_c{Jgvesu1E5(8YEf&5wF=YFPcRe@1=MJmi zag(L*xc2r0(slpcN!vC5CUju;vHJkHc*&70_n2OZsK%O~A=!+YIw z7zLLl7~Z+~RgWOQ=MI6$#0pvpu$Q43 zP@36QAmu6!_9NPM?o<1_!+stoVRRZbW9#SPe!n;#A_6m8f}|xN1;H{`0RoXQ2LM47 zt(g;iZ6|pCb@h2xk&(}S3=EVBUO0e90m2Lp5CB<(SPIaB;n4))3JB87Or#XPOPcum z?<^(g+m9}VNn4Y&B`g8h{t_$+RB1%HKRY6fjtd-<7&EsU;vs0GM(Lmbhi%Gwcfs0FTF}T zL{_M6Go&E0Eg8FuB*(Yn+Z*RVTBE@10eIOb3El^MhO`GabDll(V0&FlJi2k^;q8af zkENdk2}x2)_KVp`5OAwXZM;dG0?M-S)xE1IKDi6BY@5%Or?#aZ9$gcX)dPZ&wA1a< z$rFXHPn|TBf`e?>Are8sKtKrKcjF$i^lp!zkL?C|y^vlHr1HXeVJd;1I~g&Ob-q)& z(fn7s-KI}G{wnKzg_U5G(V%bX6uk zIa+<@>rdmZYd!9Y=C0cuchrbIjuRB_Wq{-RXlic?flu1*_ux}x%(HDH&nT`k^xCeC ziHi1!ChH*sQ6|UqJpTTzX$aw8e(UfcS^f;6yBWd+(1-70zU(rtxtqR%j z-lsH|CKQJXqD{+F7V0OTv8@{~(wp(`oIP^ZykMWgR>&|RsklFMCnOo&Bd{le} zV5F6424Qzl;o2G%oVvmHgRDP9!=rK8fy^!yV8y*4p=??uIRrrr0?>O!(z*g5AvL2!4z0{sq%vhG*Po}`a<6%kTK5TNhtC8}rXNu&h^QH4A&Sk~Autm*s~45(H7+0bi^MraaRVzr05hQ3iK?j` zR#U@^i0WhkIHTg29u~|ypU?sXCQEQgXfObPW;+0YAF;|5XyaMAEM0sQ@4-xCZe=0e z7r$ofiAxn@O5#RodD8rh5D@nKQ;?lcf@tg4o+Wp44aMl~c47azN_(im0N)7OqdPBC zGw;353_o$DqGRDhuhU$Eaj!@m000000NkvXXu0mjfjZ7Z_ literal 0 HcmV?d00001 diff --git a/_docs_/_static/custom.css b/_docs_/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/_docs_/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/_docs_/_static/doctools.js b/_docs_/_static/doctools.js new file mode 100644 index 0000000..0c15c00 --- /dev/null +++ b/_docs_/_static/doctools.js @@ -0,0 +1,311 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('