From 44edc954381e2f3d522a3ed1bf3faf155d797361 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Fri, 28 Aug 2015 05:52:29 -0300 Subject: [PATCH 01/59] Minor Minor --- css-html-prettify.py | 1 + 1 file changed, 1 insertion(+) diff --git a/css-html-prettify.py b/css-html-prettify.py index 377084b..4d9652d 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -496,6 +496,7 @@ def make_root_check_and_encoding_debug(): log.debug("PYTHONIOENCODING Encoding: {0}.".format( os.environ.get("PYTHONIOENCODING", None))) os.environ["PYTHONIOENCODING"] = "utf-8" + sys.dont_write_bytecode = True if not sys.platform.startswith("win"): # root check if not os.geteuid(): log.critical("Runing as root is not Recommended,NOT Run as root!.") From bdcae2eef024ba5033a673ba201a4add0da0b229 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Fri, 28 Aug 2015 07:22:55 -0300 Subject: [PATCH 02/59] Deprecate Python2 Support, Static Type --- css-html-prettify.py | 214 +++++++++++++++++++++++++------------------ 1 file changed, 124 insertions(+), 90 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 4d9652d..1f533ac 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -9,6 +9,7 @@ """ +import functools import itertools import logging as log import os @@ -22,7 +23,6 @@ from getpass import getuser from multiprocessing import Pool, cpu_count from platform import platform, python_version -from random import randint from tempfile import gettempdir from time import sleep @@ -134,11 +134,48 @@ ''' +############################################################################### + + +def typecheck(f): + """Decorator for Python3 annotations to type-check inputs and outputs.""" + def __check_annotations(tipe): + _type, is_ok = None, isinstance(tipe, (type, tuple, type(None))) + if is_ok: # Annotations can be Type or Tuple or None + _type = tipe if isinstance(tipe, tuple) else tuple((tipe, )) + if None in _type: # if None on tuple replace with type(None) + _type = tuple([_ if _ is not None else type(_) for _ in _type]) + return _type, is_ok + + @functools.wraps(f) # wrap a function or method to Type Check it. + def decorated(*args, **kwargs): + msg = "Type check error: {0} must be {1} but is {2} on function {3}()." + notations, f_name = tuple(f.__annotations__.keys()), f.__code__.co_name + for i, name in enumerate(f.__code__.co_varnames): + if name not in notations: + continue # this arg name has no annotation then skip it. + _type, is_ok = __check_annotations(f.__annotations__.get(name)) + if is_ok: # Force to tuple + if i < len(args) and not isinstance(args[i], _type): + log.critical(msg.format(repr(args[i])[:50], _type, + type(args[i]), f_name)) + elif name in kwargs and not isinstance(kwargs[name], _type): + log.critical(msg.format(repr(kwargs[name])[:50], _type, + type(kwargs[name]), f_name)) + out = f(*args, **kwargs) + _type, is_ok = __check_annotations(f.__annotations__.get("return")) + if is_ok and not isinstance(out, _type) and "return" in notations: + log.critical(msg.format(repr(out)[:50], _type, type(out), f_name)) + return out # The output result of function or method. + return decorated # The decorated function or method. + + ############################################################################### # CSS prettify -def _compile_props(props_text, grouped=False): +@typecheck +def _compile_props(props_text: str, grouped: bool=False) -> tuple: """Take a list of props and prepare them.""" props = [] for line_of_props in props_text.strip().lower().splitlines(): @@ -154,7 +191,7 @@ def _compile_props(props_text, grouped=False): groups.append(g_id) else: g_id += 1 - return final_props, groups + return (final_props, groups) def _prioritify(line_buffer, pgs): @@ -175,8 +212,8 @@ def _props_grouper(props, pgs): if not props: return props props = sorted([ - _ if _.strip().endswith(";") - and not _.strip().endswith("*/") and not _.strip().endswith("/*") + _ if _.strip().endswith(";") and + not _.strip().endswith("*/") and not _.strip().endswith("/*") else _.rstrip() + ";\n" for _ in props]) props_pg = zip(map(lambda prop: _prioritify(prop, pgs), props), props) props_pg = sorted(props_pg, key=lambda item: item[0][1]) @@ -194,7 +231,8 @@ def _props_grouper(props, pgs): return props -def sort_properties(css_unsorted_string): +@typecheck +def sort_properties(css_unsorted_string: str) -> str: """CSS Property Sorter Function. This function will read buffer argument, split it to a list by lines, @@ -223,25 +261,29 @@ def sort_properties(css_unsorted_string): return sorted_buffer -def remove_empty_rules(css): +@typecheck +def remove_empty_rules(css: str) -> str: """Remove empty rules.""" log.debug("Removing all unnecessary empty rules.") return re.sub(r"[^\}\{]+\{\}", "", css) -def condense_zero_units(css): +@typecheck +def condense_zero_units(css: str) -> str: """Replace `0(px, em, %, etc)` with `0`.""" log.debug("Condensing all zeroes on values.") return re.sub(r"([\s:])(0)(px|em|rem|%|in|cm|mm|pc|pt|ex)", r"\1\2", css) -def condense_semicolons(css): +@typecheck +def condense_semicolons(css: str) -> str: """Condense multiple adjacent semicolon characters into one.""" log.debug("Condensing all unnecessary multiple adjacent semicolons.") return re.sub(r";;+", ";", css) -def wrap_css_lines(css, line_length=80): +@typecheck +def wrap_css_lines(css: str, line_length: int=80) -> str: """Wrap the lines of the given CSS to an approximate length.""" log.debug("Wrapping lines to ~{} max line lenght.".format(line_length)) lines, line_start = [], 0 @@ -255,13 +297,15 @@ def wrap_css_lines(css, line_length=80): return "\n".join(lines) -def add_encoding(css): +@typecheck +def add_encoding(css: str) -> str: """Add @charset 'UTF-8'; if missing.""" log.debug("Adding encoding declaration if needed.") return "@charset utf-8;\n\n\n" + css if "@charset" not in css else css -def normalize_whitespace(css): +@typecheck +def normalize_whitespace(css: str) -> str: """Normalize css string white spaces.""" log.debug("Starting to Normalize white spaces on CSS if needed.") css_no_trailing_whitespace = "" @@ -278,7 +322,8 @@ def normalize_whitespace(css): return css.replace("\t", " ").rstrip() + "\n" -def justify_right(css): +@typecheck +def justify_right(css: str) -> str: """Justify to the Right all CSS properties on the argument css string.""" log.debug("Starting Justify to the Right all CSS / SCSS Property values.") max_indent, right_justified_css = 1, "" @@ -309,7 +354,8 @@ def justify_right(css): return right_justified_css if max_indent > 1 else css -def split_long_selectors(css): +@typecheck +def split_long_selectors(css: str) -> str: """Split too large CSS Selectors chained with commas if > 80 chars.""" log.debug("Splitting too long chained selectors on CSS / SCSS.") result = "" @@ -324,13 +370,15 @@ def split_long_selectors(css): return result -def simple_replace(css): +@typecheck +def simple_replace(css: str) -> str: """dumb simple replacements on CSS.""" return css.replace("}\n#", "}\n\n#").replace( "}\n.", "}\n\n.").replace("}\n*", "}\n\n*") -def css_prettify(css, justify=False): +@typecheck +def css_prettify(css: str, justify: bool=False) -> str: """Prettify CSS main function.""" log.info("Prettify CSS / SCSS...") css = sort_properties(css) @@ -364,7 +412,8 @@ def prettify(self, encoding=None, formatter="minimal", indent_width=4): BeautifulSoup.prettify = prettify -def html_prettify(html): +@typecheck +def html_prettify(html: str) -> str: """Prettify HTML main function.""" log.info("Prettify HTML...") html = BeautifulSoup(html).prettify() @@ -381,24 +430,24 @@ def walkdir_to_filelist(where, target, omit): log.debug("""Recursively Scanning {}, searching for {}, and ignoring {}. """.format(where, target, omit)) return tuple([os.path.join(root, f) for root, d, files in os.walk(where) - for f in files if not f.startswith('.') # ignore hidden - and not f.endswith(omit) # not process processed file - and f.endswith(target)]) # only process target files + for f in files if not f.startswith('.') and # ignore hidden + not f.endswith(omit) and # not process processed file + f.endswith(target)]) # only process target files def process_multiple_files(file_path): """Process multiple CSS, HTML files with multiprocessing.""" - log.debug("Process {} is Compressing {}.".format(os.getpid(), file_path)) + log.debug("Process {} is Compressing {0}.".format(os.getpid(), file_path)) if args.watch: previous = int(os.stat(file_path).st_mtime) - log.info("Process {} is Watching {}.".format(os.getpid(), file_path)) + log.info("Process {} is Watching {0}.".format(os.getpid(), file_path)) while True: actual = int(os.stat(file_path).st_mtime) if previous == actual: sleep(60) else: previous = actual - log.debug("Modification detected on {}.".format(file_path)) + log.debug("Modification detected on {0}.".format(file_path)) if file_path.endswith((".css", ".scss")): process_single_css_file(file_path) else: @@ -410,7 +459,8 @@ def process_multiple_files(file_path): process_single_html_file(file_path) -def prefixer_extensioner(file_path): +@typecheck +def prefixer_extensioner(file_path: str) -> str: """Take a file path and safely prepend a prefix and change extension. This is needed because filepath.replace('.foo', '.bar') sometimes may @@ -425,49 +475,37 @@ def prefixer_extensioner(file_path): return file_path -def process_single_css_file(css_file_path): +@typecheck +def process_single_css_file(css_file_path: str) -> str: """Process a single CSS file.""" - log.info("Processing CSS / SCSS file: {}".format(css_file_path)) + log.info("Processing CSS / SCSS file: {0}".format(css_file_path)) global args - try: # Python3 - with open(css_file_path, encoding="utf-8-sig") as css_file: - original_css = css_file.read() - except: # Python2 - with open(css_file_path) as css_file: - original_css = css_file.read() - log.debug("INPUT: Reading CSS file {}.".format(css_file_path)) + with open(css_file_path, encoding="utf-8-sig") as css_file: + original_css = css_file.read() + log.debug("INPUT: Reading CSS file {0}.".format(css_file_path)) pretty_css = css_prettify(original_css, justify=args.justify) if args.timestamp: - taim = "/* {} */ ".format(datetime.now().isoformat()[:-7].lower()) + taim = "/* {0} */ ".format(datetime.now().isoformat()[:-7].lower()) pretty_css = taim + pretty_css min_css_file_path = prefixer_extensioner(css_file_path) - try: - with open(min_css_file_path, "w", encoding="utf-8") as output_file: - output_file.write(pretty_css) - except: - with open(min_css_file_path, "w") as output_file: - output_file.write(pretty_css) - log.debug("OUTPUT: Writing CSS Minified {}.".format(min_css_file_path)) + with open(min_css_file_path, "w", encoding="utf-8") as output_file: + output_file.write(pretty_css) + log.debug("OUTPUT: Writing CSS Minified {0}.".format(min_css_file_path)) + return pretty_css -def process_single_html_file(html_file_path): +@typecheck +def process_single_html_file(html_file_path: str) -> str: """Process a single HTML file.""" - log.info("Processing HTML file: {}".format(html_file_path)) - try: # Python3 - with open(html_file_path, encoding="utf-8-sig") as html_file: - pretty_html = html_prettify(html_file.read()) - except: # Python2 - with open(html_file_path) as html_file: - pretty_html = html_prettify(html_file.read()) - log.debug("INPUT: Reading HTML file {}.".format(html_file_path)) + log.info("Processing HTML file: {0}".format(html_file_path)) + with open(html_file_path, encoding="utf-8-sig") as html_file: + pretty_html = html_prettify(html_file.read()) + log.debug("INPUT: Reading HTML file {0}.".format(html_file_path)) html_file_path = prefixer_extensioner(html_file_path) - try: # Python3 - with open(html_file_path, "w", encoding="utf-8") as output_file: - output_file.write(pretty_html) - except: # Python2 - with open(html_file_path, "w") as output_file: - output_file.write(pretty_html) - log.debug("OUTPUT: Writing HTML Minified {}.".format(html_file_path)) + with open(html_file_path, "w", encoding="utf-8") as output_file: + output_file.write(pretty_html) + log.debug("OUTPUT: Writing HTML Minified {0}.".format(html_file_path)) + return pretty_html def check_for_updates(): @@ -508,7 +546,8 @@ def make_root_check_and_encoding_debug(): return True -def set_process_name_and_cpu_priority(name): +@typecheck +def set_process_name_and_cpu_priority(name: str) -> bool: """Set process name and cpu priority. >>> set_process_name_and_cpu_priority("test_test") @@ -546,7 +585,7 @@ def set_single_instance(name, single_instance=True, port=8888): except socket.error as e: log.warning(e) else: - log.info("Socket Lock for Single Instance: {}.".format(__lock)) + log.info("Socket Lock for Single Instance: {0}.".format(__lock)) else: # if multiple instance want to touch same file bad things can happen log.warning("Multiple instance on same file can cause Race Condition.") return __lock @@ -603,22 +642,31 @@ def new(*args): return log -def make_post_execution_message(app=__doc__.splitlines()[0].strip()): +@typecheck +def make_post_execution_message(app: str=__doc__.splitlines()[0]) -> str: """Simple Post-Execution Message with information about RAM and Time. >>> make_post_execution_message() >= 0 True """ - ram_use = int(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss * - resource.getpagesize() / 1024 / 1024 if resource else 0) - log.info("Total Maximum RAM Memory used: ~{0} MegaBytes.".format(ram_use)) - log.info("Total Working Time: {0}.".format(datetime.now() - start_time)) - if randint(0, 100) < 25: # ~25% chance to see the message,dont get on logs - print("Thanks for using this App,share your experience!{0}".format(""" - Twitter: https://twitter.com/home?status=I%20Like%20{n}!:%20{u} - Facebook: https://www.facebook.com/share.php?u={u}&t=I%20Like%20{n} - G+: https://plus.google.com/share?url={u}""".format(u=__url__, n=app))) - return ram_use + ram_use, ram_all = 0, 0 + if sys.platform.startswith("linux"): + ram_use = int(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss * + resource.getpagesize() / 1024 / 1024 if resource else 0) + ram_all = int( + os.sysconf('SC_PAGE_SIZE') * + os.sysconf('SC_PHYS_PAGES') / 1024 / 1024 + if hasattr(os, "sysconf") else 0) + msg = "Total Maximum RAM Memory used: ~{0} of {1} MegaBytes.".format( + ram_use, ram_all) + log.info(msg) + if start_time and datetime: + log.info("Total Working Time: {0}".format(datetime.now() - start_time)) + print("Thanks for using this App,share your experience!{0}".format(""" + Twitter: https://twitter.com/home?status=I%20Like%20{n}!:%20{u} + Facebook: https://www.facebook.com/share.php?u={u}&t=I%20Like%20{n} + G+: https://plus.google.com/share?url={u}""".format(u=__url__, n=app))) + return msg def make_arguments_parser(): @@ -655,20 +703,6 @@ def make_arguments_parser(): args = parser.parse_args() -def only_on_py3(boolean_argument=True): - """Deprecate features if not using Python >= 3, to motivate migration.""" - if isinstance(boolean_argument, (tuple, list)): # argument is iterable. - boolean_argument = all(boolean_argument) - else: # argument is boolean, or evaluate as boolean, even if is not. - boolean_argument = bool(boolean_argument) - if sys.version_info.major >= 3: - return boolean_argument # good to go - else: # Migrate to python 3, is free and easy, get a virtualenv at least. - log.critical("Feature only available on Python 3, feature ignored !.") - log.debug("Please Migrate to Python 3 for better User Experience...") - return False - - def main(): """Main Loop.""" make_arguments_parser() @@ -676,12 +710,12 @@ def main(): make_root_check_and_encoding_debug() set_process_name_and_cpu_priority("css-html-prettify") set_single_instance("css-html-prettify") - if only_on_py3(args.checkupdates): + if args.checkupdates: check_for_updates() - if only_on_py3(args.quiet): + if args.quiet: log.disable(log.CRITICAL) log.info(__doc__ + __version__) - if only_on_py3((args.before, getoutput)): + if args.before and getoutput: log.info(getoutput(str(args.before))) # Work based on if argument is file or folder, folder is slower. if os.path.isfile(args.fullpath @@ -706,11 +740,11 @@ def main(): else: log.critical("File or folder not found,or cant be read,or I/O Error.") sys.exit(1) - if only_on_py3((args.after, getoutput)): + if args.after and getoutput: log.info(getoutput(str(args.after))) log.info('-' * 80) - log.info('Files Processed: {}.'.format(list_of_files)) - log.info('Number of Files Processed: {}'.format( + log.info('Files Processed: {0}.'.format(list_of_files)) + log.info('Number of Files Processed: {0}'.format( len(list_of_files) if isinstance(list_of_files, tuple) else 1)) make_post_execution_message() From fd63c01d362d0e29f758956968a043a2ab6d45c8 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Wed, 2 Sep 2015 08:39:01 -0300 Subject: [PATCH 03/59] Fix #3 --- css-html-prettify.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 1f533ac..7bbad44 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -194,16 +194,19 @@ def _compile_props(props_text: str, grouped: bool=False) -> tuple: return (final_props, groups) -def _prioritify(line_buffer, pgs): +@typecheck +def _prioritify(line_of_css: str, css_props_text_as_list: tuple) -> tuple: """Return args priority, priority is integer and smaller means higher.""" - props, groups = pgs - priority, group = 9999, 0 - for css_property in props: - if line_buffer.find(css_property + ':') != -1: - priority = props.index(css_property) - group = groups[priority] + sorted_css_properties, groups_by_alphabetic_order = css_props_text_as_list + priority_integer, group_integer = 9999, 0 + for css_property in sorted_css_properties: + if css_property.lower() == line_of_css.split(":")[0].lower().strip(): + priority_integer = sorted_css_properties.index(css_property) + group_integer = groups_by_alphabetic_order[priority_integer] + log.debug("Line of CSS: '{0}', Priority for Sorting: #{1}.".format( + line_of_css[:80].strip(), priority_integer)) break - return priority, group + return (priority_integer, group_integer) def _props_grouper(props, pgs): @@ -211,10 +214,10 @@ def _props_grouper(props, pgs): log.debug("Grouping all CSS / SCSS Properties.") if not props: return props - props = sorted([ - _ if _.strip().endswith(";") and - not _.strip().endswith("*/") and not _.strip().endswith("/*") - else _.rstrip() + ";\n" for _ in props]) + #props = sorted([ + #_ if _.strip().endswith(";") and + #not _.strip().endswith("*/") and not _.strip().endswith("/*") + #else _.rstrip() + ";\n" for _ in props]) props_pg = zip(map(lambda prop: _prioritify(prop, pgs), props), props) props_pg = sorted(props_pg, key=lambda item: item[0][1]) props_by_groups = map( From 62f4229b058e4b74b400ab78377c5ad5bb591c54 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Wed, 2 Sep 2015 14:49:02 -0300 Subject: [PATCH 04/59] Oops missing file on repo --- css-html-prettify.py | 14 +-- setup.py | 269 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 276 insertions(+), 7 deletions(-) create mode 100644 setup.py diff --git a/css-html-prettify.py b/css-html-prettify.py index 7bbad44..409f4de 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -39,13 +39,13 @@ request = getoutput = resource = None -__version__ = "1.0.0" -__license__ = "GPLv3+ LGPLv3+" -__author__ = "Juan Carlos" -__email__ = "juancarlospaco@gmail.com" -__url__ = "https://github.com/juancarlospaco/css-html-prettify" -__source__ = ("https://raw.githubusercontent.com/juancarlospaco/" - "css-html-prettify/master/css-html-prettify.py") +__version__ = '1.0.0' +__license__ = 'GPLv3+ LGPLv3+' +__author__ = 'Juan Carlos' +__email__ = 'juancarlospaco@gmail.com' +__url__ = 'https://github.com/juancarlospaco/css-html-prettify' +__source__ = ('https://raw.githubusercontent.com/juancarlospaco/' + 'css-html-prettify/master/css-html-prettify.py') start_time = datetime.now() diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..a037111 --- /dev/null +++ b/setup.py @@ -0,0 +1,269 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# +# To generate DEB package from Python Package: +# sudo pip3 install stdeb +# python3 setup.py --verbose --command-packages=stdeb.command bdist_deb +# +# +# To generate RPM package from Python Package: +# sudo apt-get install rpm +# python3 setup.py bdist_rpm --verbose --fix-python --binary-only +# +# +# To generate EXE MS Windows from Python Package (from MS Windows only): +# python3 setup.py bdist_wininst --verbose +# +# +# To generate PKGBUILD ArchLinux from Python Package (from PyPI only): +# sudo pip3 install git+https://github.com/bluepeppers/pip2arch.git +# pip2arch.py PackageNameHere +# +# +# To Upload to PyPI by executing: +# python3 setup.py register +# python3 setup.py bdist_egg sdist --formats=bztar,gztar,zip upload --sign + + +"""Setup.py for Python, as Generic as possible.""" + + +import logging as log +import os +import re +import sys +from copy import copy +from tempfile import gettempdir + +from setuptools import setup + + +############################################################################## +# EDIT HERE + + +MODULE_PATH = os.path.join(os.path.dirname(__file__), "css-html-prettify.py") +DESCRIPTION = ("StandAlone Async single-file cross-platform Unicode-ready " + "Python3 Prettifier Beautifier for the Web.") +REQUIREMENTS_FILE = os.path.join(os.path.dirname(__file__), "requirements.txt") + + +############################################################################## +# Dont touch below + + +try: + with open(str(MODULE_PATH), "r", encoding="utf-8-sig") as source_code_file: + SOURCE = source_code_file.read() +except: + with open(str(MODULE_PATH), "r") as source_code_file: + SOURCE = source_code_file.read() + + +def make_logger(name=str(os.getpid())): + """Build and return a Logging Logger.""" + if not sys.platform.startswith("win") and sys.stderr.isatty(): + def add_color_emit_ansi(fn): + """Add methods we need to the class.""" + def new(*args): + """Method overload.""" + if len(args) == 2: + new_args = (args[0], copy(args[1])) + else: + new_args = (args[0], copy(args[1]), args[2:]) + if hasattr(args[0], 'baseFilename'): + return fn(*args) + levelno = new_args[1].levelno + if levelno >= 50: + color = '\x1b[31;5;7m\n ' # blinking red with black + elif levelno >= 40: + color = '\x1b[31m' # red + elif levelno >= 30: + color = '\x1b[33m' # yellow + elif levelno >= 20: + color = '\x1b[32m' # green + elif levelno >= 10: + color = '\x1b[35m' # pink + else: + color = '\x1b[0m' # normal + try: + new_args[1].msg = color + str(new_args[1].msg) + ' \x1b[0m' + except Exception as reason: + print(reason) # Do not use log here. + return fn(*new_args) + return new + # all non-Windows platforms support ANSI Colors so we use them + log.StreamHandler.emit = add_color_emit_ansi(log.StreamHandler.emit) + else: + log.debug("Colored Logs not supported on {0}.".format(sys.platform)) + log_file = os.path.join(gettempdir(), str(name).lower().strip() + ".log") + log.basicConfig(level=-1, filemode="w", filename=log_file, + format="%(levelname)s:%(asctime)s %(message)s %(lineno)s") + log.getLogger().addHandler(log.StreamHandler(sys.stderr)) + adrs = "/dev/log" if sys.platform.startswith("lin") else "/var/run/syslog" + try: + handler = log.handlers.SysLogHandler(address=adrs) + except Exception: + log.warning("Unix SysLog Server not found,ignored Logging to SysLog.") + else: + log.addHandler(handler) + log.debug("Logger created with Log file at: {0}.".format(log_file)) + return log + + +# Should be all UTF-8 for best results +def make_root_check_and_encoding_debug(): + """Debug and Log Encodings and Check for root/administrator,return Boolean. + + >>> make_root_check_and_encoding_debug() + True + """ + log.info(__doc__) + log.debug("STDIN Encoding: {0}.".format(sys.stdin.encoding)) + log.debug("STDERR Encoding: {0}.".format(sys.stderr.encoding)) + log.debug("STDOUT Encoding:{}".format(getattr(sys.stdout, "encoding", ""))) + log.debug("Default Encoding: {0}.".format(sys.getdefaultencoding())) + log.debug("FileSystem Encoding: {0}.".format(sys.getfilesystemencoding())) + log.debug("PYTHONIOENCODING Encoding: {0}.".format( + os.environ.get("PYTHONIOENCODING", None))) + os.environ["PYTHONIOENCODING"] = "utf-8" + if not sys.platform.startswith("win"): # root check + if not os.geteuid(): + log.critical("Runing as root is not Recommended,NOT Run as root!.") + return False + return True + + +def set_process_name_and_cpu_priority(name): + """Set process name and cpu priority. + + >>> set_process_name_and_cpu_priority("test_test") + True + """ + try: + os.nice(19) # smooth cpu priority + return True + except Exception: + return False # this may fail on windows and its normal, so be silent. + + +def find_this(search, source=SOURCE): + """Take a string and a filename path string and return the found value.""" + log.debug("Searching for {what}.".format(what=search)) + if not search or not source: + log.warning("Not found on source: {what}.".format(what=search)) + return "" + return str(re.compile(r".*__{what}__ = '(.*?)'".format( + what=search), re.S).match(source).group(1)).strip().replace("'", "") + + +def parse_requirements(path=REQUIREMENTS_FILE): + """Rudimentary parser for the requirements.txt file. + + We just want to separate regular packages from links to pass them to the + 'install_requires' and 'dependency_links' params of the 'setup()'. + """ + log.debug("Parsing Requirements from file {what}.".format(what=path)) + pkgs, links = ["pip"], [] + if not os.path.isfile(path): + return pkgs, links + try: + requirements = map(str.strip, path.splitlines()) + except Exception as reason: + log.warning(reason) + return pkgs, links + for req in requirements: + if not req: + continue + if 'http://' in req.lower() or 'https://' in req.lower(): + links.append(req) + name, version = re.findall("\#egg=([^\-]+)-(.+$)", req)[0] + pkgs.append('{package}=={ver}'.format(package=name, ver=version)) + else: + pkgs.append(req) + log.debug("Requirements found: {what}.".format(what=(pkgs, links))) + return pkgs, links + + +make_logger() +make_root_check_and_encoding_debug() +set_process_name_and_cpu_priority("setup_py") +install_requires_list, dependency_links_list = parse_requirements() +log.info("Starting build of setuptools.setup().") + + +############################################################################## +# EDIT HERE + + +setup( + + name="css-html-prettify", + version=find_this("version"), + + description=DESCRIPTION, + long_description=DESCRIPTION, + + url=find_this("url"), + license=find_this("license"), + + author=find_this("author"), + author_email=find_this("email"), + maintainer=find_this("author"), + maintainer_email=find_this("email"), + + include_package_data=True, + zip_safe=True, + + extras_require={"pip": ["pip"]}, + tests_require=['pip'], + requires=['pip', 'beautifulsoup4'], + + install_requires=install_requires_list, + dependency_links=dependency_links_list, + + scripts=["css-html-prettify.py"], + + keywords=['CSS', 'HTML', 'Prettify', 'CSS3', 'HTML5', 'Web', 'Beautify'], + + classifiers=[ + + 'Development Status :: 5 - Production/Stable', + + 'Environment :: Console', + + 'Intended Audience :: Developers', + 'Intended Audience :: End Users/Desktop', + 'Intended Audience :: System Administrators', + 'Intended Audience :: Information Technology', + 'Intended Audience :: Other Audience', + + 'Natural Language :: English', + + 'License :: OSI Approved :: GNU General Public License (GPL)', + 'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)', + 'License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)', + 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', + + 'Operating System :: OS Independent', + 'Operating System :: POSIX :: Linux', + 'Operating System :: Microsoft :: Windows', + 'Operating System :: MacOS :: MacOS X', + + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy', + + 'Topic :: Software Development', + + ], +) + + +log.info("Finished build of setuptools.setup().") From d353f90878f06f5a63f1d1dd65178511f3723516 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Wed, 2 Sep 2015 14:50:42 -0300 Subject: [PATCH 05/59] Oops missing file on repo --- css-html-prettify-1.0.0-1.noarch.rpm | Bin 0 -> 13436 bytes python3-css-html-prettify_1.0.0-1_all.deb | Bin 0 -> 11512 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 css-html-prettify-1.0.0-1.noarch.rpm create mode 100644 python3-css-html-prettify_1.0.0-1_all.deb diff --git a/css-html-prettify-1.0.0-1.noarch.rpm b/css-html-prettify-1.0.0-1.noarch.rpm new file mode 100644 index 0000000000000000000000000000000000000000..da994c69ae66109dc8e8894210c4e72551747d05 GIT binary patch literal 13436 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 literal 0 HcmV?d00001 diff --git a/python3-css-html-prettify_1.0.0-1_all.deb b/python3-css-html-prettify_1.0.0-1_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..3107a5acfbb0a58a20fc75532607890d070e3618 GIT binary patch literal 11512 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�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 j|G6iofe?)b0 Date: Wed, 2 Sep 2015 14:52:21 -0300 Subject: [PATCH 06/59] Oops missing file on repo --- PKGBUILD | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 PKGBUILD diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 0000000..4693eb5 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,23 @@ +#Automatically generated by pip2arch on 2015-09-02 + +pkgname=python-css-html-prettify +pkgver=1.0.0 +pkgrel=1 +pkgdesc="StandAlone Async single-file cross-platform Unicode-ready Python3 Prettifier Beautifier for the Web." +url="https://github.com/juancarlospaco/css-html-prettify" +depends=('python' 'pip') +makedepends=('python3' ) +license=('CUSTOM') +arch=('any') +source=('https://pypi.python.org/packages/source/c/css-html-prettify/css-html-prettify-1.0.0.zip') +md5sums=('7035dc4f84e0528d13cc46781afc5dc3') + +build() { + cd $srcdir/css-html-prettify-1.0.0 + python setup.py build +} + +package() { + cd $srcdir/css-html-prettify-1.0.0 + python setup.py install --root="$pkgdir" --optimize=1 +} From 9b92d9d70f52043c2a92a9c99cbeb60cdb581969 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Thu, 22 Oct 2015 05:54:47 -0300 Subject: [PATCH 07/59] CSS4 Support, PreFixes Support --- css-html-prettify.py | 54 ++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 409f4de..e79840b 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -56,24 +56,27 @@ animation-name animation-play-state animation-timing-function appearance azimuth -backface-visibility background background-attachment background-clip -background-color background-image background-origin background-position -background-repeat background-size baseline-shift bikeshedding bookmark-label -bookmark-level bookmark-state bookmark-target border border-bottom -border-bottom-color border-bottom-left-radius border-bottom-right-radius -border-bottom-style border-bottom-width border-collapse border-color -border-image border-image-outset border-image-repeat border-image-slice -border-image-source border-image-width border-left border-left-color -border-left-style border-left-width border-radius border-right -border-right-color border-right-style border-right-width border-spacing -border-style border-top border-top-color border-top-left-radius -border-top-right-radius border-top-style border-top-width border-width bottom -box-decoration-break box-shadow box-sizing - -caption-side clear clip color column-count column-fill column-gap column-rule +backface-visibility background background-blend-mode background-attachment +background-clip background-color background-image background-origin +background-position background-position-block background-position-inline +background-position-x background-position-y background-repeat background-size +baseline-shift bikeshedding bookmark-label bookmark-level bookmark-state +bookmark-target border border-bottom border-bottom-color +border-bottom-left-radius border-bottom-parts border-bottom-right-radius +border-bottom-style border-bottom-width border-clip border-clip-top +border-clip-right border-clip-bottom border-clip-left border-collapse +border-color border-corner-shape border-image border-image-outset +border-image-repeat border-image-slice border-image-source border-image-width +border-left border-left-color border-left-style border-left-parts +border-left-width border-limit border-parts border-radius border-right +border-right-color border-right-style border-right-width border-right-parts +border-spacing border-style border-top border-top-color border-top-left-radius +border-top-parts border-top-right-radius border-top-style border-top-width +border-width bottom box-decoration-break box-shadow box-sizing caption-side +clear clip color column-count column-fill column-gap column-rule column-rule-color column-rule-style column-rule-width column-span column-width -columns content counter-increment counter-reset cue cue-after cue-before -cursor +columns content counter-increment counter-reset corners corner-shape +cue cue-after cue-before cursor direction display drop-initial-after-adjust drop-initial-after-align drop-initial-before-adjust drop-initial-before-align drop-initial-size @@ -81,11 +84,14 @@ elevation empty-cells -fit fit-position float font font-family font-size font-size-adjust -font-stretch font-style font-variant font-weight +flex flex-basis flex-direction flex-flow flex-grow flex-shrink flex-wrap fit +fit-position float font font-family font-size font-size-adjust font-stretch +font-style font-variant font-weight grid-columns grid-rows +justify-content + hanging-punctuation height hyphenate-character hyphenate-resource hyphens icon image-orientation image-resolution inline-box-align @@ -131,7 +137,7 @@ z-index -''' +''' # Do Not compact this string, new lines are used to Group up stuff. ############################################################################### @@ -177,13 +183,13 @@ def decorated(*args, **kwargs): @typecheck def _compile_props(props_text: str, grouped: bool=False) -> tuple: """Take a list of props and prepare them.""" - props = [] - for line_of_props in props_text.strip().lower().splitlines(): - props += line_of_props.split(" ") + props, prefixes = [], "-webkit-,-khtml-,-epub-,-moz-,-ms-,-o-,".split(",") + for propline in props_text.strip().lower().splitlines(): + props += [pre + pro for pro in propline.split(" ") for pre in prefixes] props = filter(lambda line: not line.startswith('#'), props) if not grouped: props = list(filter(None, props)) - return props, [0]*len(props) + return props, [0] * len(props) final_props, groups, g_id = [], [], 0 for prop in props: if prop.strip(): From 175c684af1bd6600d0c0e7779513a742e36bc6b0 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Thu, 22 Oct 2015 05:55:34 -0300 Subject: [PATCH 08/59] CSS4 Support, from https://drafts.csswg.org/css-backgrounds-4 --- css-html-prettify.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index e79840b..4d83ddd 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -39,7 +39,7 @@ request = getoutput = resource = None -__version__ = '1.0.0' +__version__ = '1.2.0' __license__ = 'GPLv3+ LGPLv3+' __author__ = 'Juan Carlos' __email__ = 'juancarlospaco@gmail.com' From af817c693bce36823d2974263fc47fcd664e6a96 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Thu, 22 Oct 2015 06:20:48 -0300 Subject: [PATCH 09/59] Option to Add 1 New Line for each New Line (Experimental) --- css-html-prettify.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 4d83ddd..4530ff6 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -387,7 +387,7 @@ def simple_replace(css: str) -> str: @typecheck -def css_prettify(css: str, justify: bool=False) -> str: +def css_prettify(css: str, justify: bool=False, extraline: bool=False) -> str: """Prettify CSS main function.""" log.info("Prettify CSS / SCSS...") css = sort_properties(css) @@ -399,6 +399,8 @@ def css_prettify(css: str, justify: bool=False) -> str: css = justify_right(css) if justify else css css = add_encoding(css) css = simple_replace(css) + if extraline: + css = "\n\n".join(css.replace("\t", " ").splitlines()) + "\n" log.info("Finished Prettify CSS / SCSS !.") return css @@ -422,11 +424,12 @@ def prettify(self, encoding=None, formatter="minimal", indent_width=4): @typecheck -def html_prettify(html: str) -> str: +def html_prettify(html: str, extraline: bool=False) -> str: """Prettify HTML main function.""" log.info("Prettify HTML...") html = BeautifulSoup(html).prettify() - html = html.replace("\t", " ").strip() + "\n" + if extraline: + html = "\n\n".join(html.replace("\t", " ").splitlines()) + "\n" log.info("Finished prettify HTML !.") return html @@ -492,7 +495,7 @@ def process_single_css_file(css_file_path: str) -> str: with open(css_file_path, encoding="utf-8-sig") as css_file: original_css = css_file.read() log.debug("INPUT: Reading CSS file {0}.".format(css_file_path)) - pretty_css = css_prettify(original_css, justify=args.justify) + pretty_css = css_prettify(original_css, args.justify, args.extraline) if args.timestamp: taim = "/* {0} */ ".format(datetime.now().isoformat()[:-7].lower()) pretty_css = taim + pretty_css @@ -508,7 +511,7 @@ def process_single_html_file(html_file_path: str) -> str: """Process a single HTML file.""" log.info("Processing HTML file: {0}".format(html_file_path)) with open(html_file_path, encoding="utf-8-sig") as html_file: - pretty_html = html_prettify(html_file.read()) + pretty_html = html_prettify(html_file.read(), args.extraline) log.debug("INPUT: Reading HTML file {0}.".format(html_file_path)) html_file_path = prefixer_extensioner(html_file_path) with open(html_file_path, "w", encoding="utf-8") as output_file: @@ -708,6 +711,8 @@ def make_arguments_parser(): help="Group Alphabetically CSS Poperties by name.") parser.add_argument('--justify', action='store_true', help="Right Justify CSS Properties (Experimental).") + parser.add_argument('--extraline', action='store_true', + help="Add 1 New Line for each New Line (Experimental)") global args args = parser.parse_args() From e2ad543b506680cdc9d471bd083a7093c4c4ae42 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Thu, 22 Oct 2015 06:38:39 -0300 Subject: [PATCH 10/59] Option to Add 1 New Line for each New Line (Experimental) --- css-html-prettify.py | 66 +++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 43 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 4530ff6..8d0cc5a 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -4,8 +4,7 @@ """CSS-HTML-Prettify. -StandAlone Async single-file cross-platform no-dependencies -Unicode-ready Python3-ready Prettifier Beautifier for the Web. +StandAlone Async single-file cross-platform Prettifier Beautifier for the Web. """ @@ -16,6 +15,7 @@ import re import socket import sys + from argparse import ArgumentParser from copy import copy from ctypes import byref, cdll, create_string_buffer @@ -39,7 +39,7 @@ request = getoutput = resource = None -__version__ = '1.2.0' +__version__ = '1.2.2' __license__ = 'GPLv3+ LGPLv3+' __author__ = 'Juan Carlos' __email__ = 'juancarlospaco@gmail.com' @@ -522,10 +522,9 @@ def process_single_html_file(html_file_path: str) -> str: def check_for_updates(): """Method to check for updates from Git repo versus this version.""" - this_version = str(open(__file__).read()) last_version = str(request.urlopen(__source__).read().decode("utf8")) - if this_version != last_version: - log.warning("Theres new Version available!,Update from " + __source__) + if str(open(__file__).read()) != last_version: + log.warning("Theres new Version available!, Update from " + __source__) else: log.info("No new updates!,You have the lastest version of this app.") @@ -545,8 +544,7 @@ def make_root_check_and_encoding_debug(): log.debug("FileSystem Encoding: {0}.".format(sys.getfilesystemencoding())) log.debug("PYTHONIOENCODING Encoding: {0}.".format( os.environ.get("PYTHONIOENCODING", None))) - os.environ["PYTHONIOENCODING"] = "utf-8" - sys.dont_write_bytecode = True + os.environ["PYTHONIOENCODING"], sys.dont_write_bytecode = "utf-8", True if not sys.platform.startswith("win"): # root check if not os.geteuid(): log.critical("Runing as root is not Recommended,NOT Run as root!.") @@ -579,11 +577,7 @@ def set_process_name_and_cpu_priority(name: str) -> bool: def set_single_instance(name, single_instance=True, port=8888): - """Set process name and cpu priority, return socket.socket object or None. - - >>> isinstance(set_single_instance("test"), socket.socket) - True - """ + """Set process name and cpu priority,return socket.socket object or None""" __lock = None if single_instance: try: # Single instance app ~crossplatform, uses udp socket. @@ -598,8 +592,6 @@ def set_single_instance(name, single_instance=True, port=8888): log.warning(e) else: log.info("Socket Lock for Single Instance: {0}.".format(__lock)) - else: # if multiple instance want to touch same file bad things can happen - log.warning("Multiple instance on same file can cause Race Condition.") return __lock @@ -654,30 +646,22 @@ def new(*args): return log -@typecheck -def make_post_execution_message(app: str=__doc__.splitlines()[0]) -> str: - """Simple Post-Execution Message with information about RAM and Time. - - >>> make_post_execution_message() >= 0 - True - """ +def make_post_execution_message(app=__doc__.splitlines()[0].strip()): + """Simple Post-Execution Message with information about RAM and Time.""" ram_use, ram_all = 0, 0 if sys.platform.startswith("linux"): - ram_use = int(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss * - resource.getpagesize() / 1024 / 1024 if resource else 0) - ram_all = int( - os.sysconf('SC_PAGE_SIZE') * - os.sysconf('SC_PHYS_PAGES') / 1024 / 1024 - if hasattr(os, "sysconf") else 0) - msg = "Total Maximum RAM Memory used: ~{0} of {1} MegaBytes.".format( - ram_use, ram_all) + use = int(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss * + resource.getpagesize() / 1024 / 1024 if resource else 0) + al = int(os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') + / 1024 / 1024 if hasattr(os, "sysconf") else 0) + msg = "Total Maximum RAM Memory used: ~{0} of {1}MegaBytes".format(use, al) log.info(msg) if start_time and datetime: log.info("Total Working Time: {0}".format(datetime.now() - start_time)) - print("Thanks for using this App,share your experience!{0}".format(""" - Twitter: https://twitter.com/home?status=I%20Like%20{n}!:%20{u} - Facebook: https://www.facebook.com/share.php?u={u}&t=I%20Like%20{n} - G+: https://plus.google.com/share?url={u}""".format(u=__url__, n=app))) + print("Thanks for using this App,share your experience! {0}".format(""" + Twitter: https://twitter.com/home?status=I%20Like%20{n}!:%20{u} + Facebook: https://www.facebook.com/share.php?u={u}&t=I%20Like%20{n} + G+: https://plus.google.com/share?url={u}""".format(u=__url__, n=app))) return msg @@ -724,16 +708,13 @@ def main(): make_root_check_and_encoding_debug() set_process_name_and_cpu_priority("css-html-prettify") set_single_instance("css-html-prettify") - if args.checkupdates: - check_for_updates() - if args.quiet: - log.disable(log.CRITICAL) + check_for_updates() if args.checkupdates else log.debug("No Check Updates") + log.disable(log.CRITICAL) if args.quiet else log.debug("Max Logging ON") log.info(__doc__ + __version__) if args.before and getoutput: log.info(getoutput(str(args.before))) - # Work based on if argument is file or folder, folder is slower. - if os.path.isfile(args.fullpath - ) and args.fullpath.endswith((".css", ".scss")): + if os.path.isfile(args.fullpath) and args.fullpath.endswith( + (".css", ".scss")): # Work based on if argument is file or folder. log.info("Target is a CSS / SCSS File.") list_of_files = str(args.fullpath) process_single_css_file(args.fullpath) @@ -756,8 +737,7 @@ def main(): sys.exit(1) if args.after and getoutput: log.info(getoutput(str(args.after))) - log.info('-' * 80) - log.info('Files Processed: {0}.'.format(list_of_files)) + log.info('\n {0} \n Files Processed: {1}.'.format('-' * 80, list_of_files)) log.info('Number of Files Processed: {0}'.format( len(list_of_files) if isinstance(list_of_files, tuple) else 1)) make_post_execution_message() From d2ae643e542c2e087bc485b9859d3ea5c85ae92d Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Thu, 22 Oct 2015 06:40:55 -0300 Subject: [PATCH 11/59] Delete old --- css-html-prettify-1.0.0-1.noarch.rpm | Bin 13436 -> 0 bytes python3-css-html-prettify_1.0.0-1_all.deb | Bin 11512 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 css-html-prettify-1.0.0-1.noarch.rpm delete mode 100644 python3-css-html-prettify_1.0.0-1_all.deb diff --git a/css-html-prettify-1.0.0-1.noarch.rpm b/css-html-prettify-1.0.0-1.noarch.rpm deleted file mode 100644 index da994c69ae66109dc8e8894210c4e72551747d05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13436 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 diff --git a/python3-css-html-prettify_1.0.0-1_all.deb b/python3-css-html-prettify_1.0.0-1_all.deb deleted file mode 100644 index 3107a5acfbb0a58a20fc75532607890d070e3618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11512 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�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 j|G6iofe?)b0 Date: Thu, 22 Oct 2015 06:41:35 -0300 Subject: [PATCH 12/59] Add new packages --- css-html-prettify-1.2.2-1.noarch.rpm | Bin 0 -> 13641 bytes python3-css-html-prettify_1.2.2-1_all.deb | Bin 0 -> 11686 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 css-html-prettify-1.2.2-1.noarch.rpm create mode 100644 python3-css-html-prettify_1.2.2-1_all.deb diff --git a/css-html-prettify-1.2.2-1.noarch.rpm b/css-html-prettify-1.2.2-1.noarch.rpm new file mode 100644 index 0000000000000000000000000000000000000000..c4fd8d227d40508b07103be5ad4e9d8e6b7c4d5c GIT binary patch literal 13641 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 literal 0 HcmV?d00001 diff --git a/python3-css-html-prettify_1.2.2-1_all.deb b/python3-css-html-prettify_1.2.2-1_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..944e506101061ac22bcf224e46d7b63b6de2c4be GIT binary patch literal 11686 zcmajFV{j&3@Fo1jwli@uv2EM7ZQITyPbRi)+qP{@Y@7T0Z@usC$34~6xB6E1*K@o3 zTw-1$XA?_)SW`1&D!QR!`!Is|D$eG^4`~O|f#l`u5>Is3+fd2s~*j1{I10Eat=nLC7dJXP; z(Zm+-3!Nx9Y?-b`R3H>AO{|~!=yVm|+D<|waxVT2eSR_Vq)113)Td7MC5}N1gUk0Q zV&V8sB)(aWgYszR8F_9T2{89#Cq_(`{D+BYHD$l2nd=fX z4wFgn4E=}UoME-)s3W$Lc2iY#MavA45nUxLU;NsOY$<<{W*2w#G*NKI%S; zjjgirbtZ)qo`_45ea45FLDrIi&RQzNTug7tD$#iYCvuW|5}GcGJUoltqlKH5+t(;b zluK}AAHIT{K7q9)QfH8)7{e-q-H5ic@i#(mO=$R4*K<#XI>G~izHorRam^4i_6srT zz(Yx%l>P`nEsGpMDjOn?cO06uX-AtGe;L_nxaJCiqv!gMn<{;t2Jn`OHF(0&DeOD; zU4YUgjMcsOy_e=YvCFskN34A%pp-!W=O!cqiGAOm+q7>Vfb9KeR$ZO093%Sq>krjQ zpA(Dmj$O7{lqfLZ0{r5Zu|$>*Y95T=4fLHkp|WT6@G;~NrUhTp^;Y|@VPC8FFY#*4 z%x_s|*`MJq5c4pV@yHXq4*``0>*e0g2LoO7!|4YDY2%xpmwww{#-**D)&o1~J^e*p5P@hdA z;^9EzG!NtY5#_2Ua<4B2%U7;XgFMQvo&_-7igt8=z zQDHCb$p_U8Vp3Z*mo@*6ib%*;jTstX3GwWSeqa`C88X^zgrv6BoVn9PgVUj^)H4 zZtob(DA6UYjIlWqjj+d(?ioms-$WT5y5Nj#w5e`PKJb1WAB?Fv?zB-4TP3ad_7~d9 z#DaXzWlsSoo*i}&eHGO~BMbUEAHpQU@p|k(f~se3dq$90P{u!}`1Pr?HsoLw_#;V@GtnVcD|V{uk2o({9*PM=g2& z+n=@@qjt%mD5|Qfau|_blY~B+Jkx}Ds0Vr~Tecvj#_-t#Sp$DL^nE(u)BZ@&CWU14 z*uyW9eEWD35KobJvWo| z;LFovv$i0-4QDiaD95q!Id8Mm;gu5KFdBijp>CQjsw^hiWIs!@2YW7q0DiyDd4t@^ z?;o8=vI3t|6ps#aDTxV6ZBMPEMTHD=Tbn>P$_`f$TE7}O`*vR0Wdmb3Xj`fS@i)5l z8Ft(^_cUP7yBS>#PW!gb<`WUNBFh%9`)WQE*$7r%s@rkQ@sxuZ>c_Do1uJ;&;U?H; zPWH$(+KAXtOwc6u#1+g!EdGI*^x5=Q3&mpNFr^n)`IPN=C1NEn zA8u5B-mc{8CpPCV#7J&vp}qpsbFwN+?7EO=^3olO(qp6}a=KeE-I87~ca=&sDg#4O ze`gqIj23l*smPuSRnQOp%HS4`UsrJdQVU8qacLfSWL1Z}Rb3DxX*Nu;E8zOit}&U{ z!|H-8yB}+7EDPpP1*XhRhfS$$rk!kMi`ZB2Gq@H8bstOk9HPIZ=!T>|Vu;x1{19e$ z;8K(^Sa!x0ak{5$RFXgcY#nUG<0d413NuTl0p3Xdf(IW4OqEx6nNmvkT0&LSo<+5` z*L(J_LEw%Z=tTtVIcoIBV~PfQ`l1N5?-r*nu7<(Qp`HK0j<9TAhs5u2LW|N(W!C=s z-h^y2fgid2z&L#GsS|o#kX>z+^`+Vy^~W2A`HUAfuFxx!EDpu=D6L`|xn9TT^pw|g zPWmW8V~UO&XO~apoON>25@}!>(-vkdvEynC11LV+Uqc=AsHfb3Ql%QCsHi%|(F~oD9&%fXX!>ydZR=E2^{aYieh$2S zI@jkWoimT_`Pp~*y5b|Lw3$@Q1G?IjC}F=TQ)~0wz;h2?Q&UfScvARkqos?F1^ABI+h=B5P6Eks5fJ(= z%y9To;|Y|VX;Bac4#!q7JChNd%CeqB{(krtL6UGSc198K0{g@}Hkjzk;&ZOnT*>Db z6{Ii2L*Bx|DIr_MH9I(6?A@i_Hx-luf#81)!H``kvpw@Ahsru53M9G-MCxFCDMC7` zt?(*F7avzQ+|R4n4_%SCMQ)L}nRVNK&(-TGW^cgrrZK#?i-{l$SrwE-%87HA=Yh_BYO9mC1qDZ#Bnyp)nvmAlyq9T?^`ttPwHhWy_QJr zbnd__|KC)|!O z_BtNQ2FrWj_vp&Zq)`4~u>$zDCO&RmEX)Yq@KMVV@nLANAk{UH^r7~83WPc=Hld~o z+?%dUPyS}G-49!E7qqV2@fD=>b6 zdI|5K9qG$kIlKh5O`8vGQ_IPbwbbb?vUouOfZcEM|%kTDP;H~wADus8;F|uaf61gb`&1w>7l4(H_Y@G zK48mcoo<0q7>9~aL+z7BOrKcALMK%o#GV^U>WY$ai!K?L5G}Ib)A18U&b+B%2@4ZN z{}?1n)PdOi*BbpuREnw;V|AiXrrt5_7#0%i-p9%|gQkgTJsgf8Z_a#a^OXf|EZk63 z&(K@?sP=2ub~|7m2?^@5KNV zAy;)sNa%TrDr7$FrYUo9aW&q@%CqD)`@^Fl{A4gu+-K;bEO<`fE|*>lx2$9ra>nTX z`{!+cc%Q2fEndf!KWWRQ!qL3GS*A3_jwK4>{(^wkRG*mn9D#gVSQZxS6zt zzNHL$pp9u>%5iRWIctJ5up2-UwXB#uCM0BYcmJm=9B0fNUroz1GF40s*X&wTske?g z!4?9VTxh^;+SeYyItWP+^;dvk=IYc-Mfw1CT6$2`@M-_V>l)n@OVy6sKK}Z+zXiO74=GaXgcK&@o5ipEzmn+`zC~L0 z)o1Bn2->m8-fNB9i>4fA?-*U*4210AQ$b@9s{fP@*U#$;z!C~*ZWkSM8IIar#n$3@ zx-m95z=Wpbor)bJndi4sajxZyb3|J|QHGMsICy0fhKi&}!+<7FCc89${ix(Y=w&kS z2#aOYnJ6I49Wb_LfywVGCt-3Bo3sB_^h8opf~}LYy->tDq`E$?I>K?JOxcHSIas40 z|BiCX?N+OrDB&RU;0h#B`nk_1fjw9;VBLDi7Q}q=`g0X4H~;0$YC+Cg;T?^G(4h5$ zeR`w)R4rD6Z4B9fi+Y8O80P(h0mFOR%z}tuA*d$IPvprSFyUPz=+n@)&dB|Ydz17^ zVsbS`@)CE+*~&F@3^BmV)OCVNauVMHFHXrF8ofH^R`o*#(RJw-l9kMaLXSsumJ+8z zmiUZQ{7u*}+(tPmBUpw58{w2mYm&PM_Mt-SC$l})V$IqS{w4(9^Ox0mBdI4_%kcb9 zb0Mm6I4FK2T~kXQ0ieCKh5Pq9KPJ5yF%a{|=Zk$?qjc@J7j0q01Wq8`K0bw}N-rTp z9F-tm^#e4yafFg?8yiMO1e>6E6rwQ zRQUXWpsowDE&=gMNKPkWPK&2UrGtK?G52^e%B+0Rf4PYYrZcDwswc=xv(z$IS3jU? zysr8wB{fxJLNT;L?I(wabaDc}ma8Q<8je-)-|UXQ-F;(5$|sp;WGzSN8Dh87D?S#k z@gGsHrDmK>Cdya;hUz}Wv(?Iyu6zZ}$VUc-c7Jak8TqzZa+0)_dIUy ztxjX+Imb(O*-K^&s63Y3@W^1qaFi9qngtikora^VzJN^-CH1cSLcW7#F5&AAFW{>w z2;!~RJXzwZ!Dmha?Xy%us@B>?z1PJ#(@*cyiB;;WAL0}fv4rzuph4`&1&?hPB{!|p zXCqnr&Fo%87=0MgFK9TTt5+xch9ybu5aU5)pRO$)0gN zJpxDRNRzrFibs%zOYZvd6_uAwVPoZ;T7UR-%OIkS_cpdl@`$^2jXtLQmFwpjF`b|v z6OCmSMxeqkN-E^*2{BpV7II2d4s54=&oDQ9RCIywJV&#WW~r)z4Hj+NeJ zg13Qk=(%wxWsu$=z>}!(spI;KZNMcXwhz|I>NsA#thDx|;}{AzL7KB+a3DQLJl6J{ z{g)ImO`BaSXj1?~gEjkB?x)SGg@Q$%HS_`0AfGNlQyOd^{dIt#L-8Pmk70Qj{U~2O z-AF&W(&;X-ji}46)b4{3HkTNBF={k%MGbEf$i5~v;dlwoM67CwnzRZi9$pzL@;hrDkIYW5Q*~#__Y8bWQCN0DYr|9mr#*kQsLVK0i;)%V1a9kl7<)`+ms?+)gw)fkIz>d{VBBb#3^sFsS>&P61t{1uff+B`Lp zKN?X!F-YBI7Eze2V@4nPOx7XZRT6^k7F`gjaF8_0R;5h_YKrYORwq2Cvf1Uk;+{6= z+z^r2faiV7oKLN^MSZwM9lrynW#6FrdRX@!>ZX%lg!*oy_@r&%qtIGU76aK%Ds;OZ z7^Zg1TPF44vfuCDTx9)LVpX5SrdAYelZSrME?|B~t!ay8Hf(}jk>6Xe#GnBucF(tq zRH2`iZu1G;A8j0gg;)?BhW>`m4JU9;hE+cHV3j&beOv!*;S{d|hBlBH<`1qH1p289 zDWj$PO@FnZ6up)6)Y53!9^b^Vd_it2{tLh~BLK*gGjv9UvqNtB2i~^&;iK5El*T&v z51+X;SwOWWUr4<%16q@&Ko+Nu;v-WS2SJ40{0=6G2$<$NbX9>Oi(>A03am?dAT36F z^em9*nxolFIy9EV;MQ_M$aE^hxR-hA?c4^{XKFV^>sT`p=AL{ zfV5=ojj6Ggkks^2gTvVRDoYvaZfQx*;f+qcZ?98zL#}Uj$NUAgf#5GMzX}Wr?EEvI ztmXSR2c`z-j@vNamMpy*C4Qy$aVCC_d%~q)8K?cWx5kr6L>szyZCBjI2IlVdO=q9Y z!DTL8NY(8bhB7$j|IZun)bMG2Rs})HkuqNSdxLwe^ii6ejZyS1^MZYC(>AW^HDId32xRW_3>g#nZ>=S!_`GD6 zFAq;H{uDFg&LRhMYG7_F1p$m-eqwKb9=5Xx`q)3QQ^!uOYEpdU+Pf^XgI8Ma!$Zq= zNlgpEf_kC;z)-yscx>^TighVj8pT4>%R`GKH=1R6xYXHFQ-Q-r1V=JU=qcZDbSz=H z+2wP-&jXYJn~-J&E}>%+j64oUQQr1}O_W9iPvcffaQ5DU-Oz>5eHc_SLs$qe2ZRx< z%y3Nz#arlQY%|6`?$U>Z1j1Y}d=eH1@7z7KBLY8}CT`!^-Jx8uG(fK;>2T!V;N&_L zFgqf}n9WsF8+6GDdfadKQC(D%>|5#8!F?>SY|RgG7kWIrYT2i9`uOV7I{3bDvYPBV za}uhv1wsLrxngZ5Ll(Z3Pk&z&80$JmF`fd_6;CDJkx-LC3s?o-gAQot=^Y$cViCK9 z@hLX&x7g!-JrG^_fLbZ)%{q#vP>vU0D8|(DAysN6Tis>R1-nj8c7H0CsaWXWL_o?N z1{Iq8oykr~8)&A`IoR1ru;u(8?&1hn$$a)0_3 zkR$%I9h2x;F$xmR>=cMBhi;R4DU2CvfyxrqpPsGIN@k?~Y5okMbfxdyBm?Py*?R0j zB$;uut!^u(bmsfZCZSxC1#t^YKr8NMrf``dt;OWSz!a$+G*aI;uk%z)oBEw%1%ICQ z3C%iS8}*q1;T@E3c-PQ!;kTG9uvH*bCX%>6rj77n4XgXfyM8mUOLmGHG3PdW0~ygi z?5oDUQZw8!gI=e3=;6l=wAXC)1OtGjYYUrOQu{}f^$h4#1n>Slop({NLRC%=KZAZ3S@tE9_QaCqg z1^8+pxv^G{VrB6ulahtEF>_-NHw2vC$v+$goAv!@_6I=XdD0}JPnPvmtnPrScSwM=Urbc2{o!T0NP#lokS3r!?gBk?kimqBrN^5~*qsu2C>|yN zOS>FY*7mjIbY$>lY{+ZmJtGKAqB!|B$?^O!wm=2L1e)y8!mADPYIj3e50Y5DCe80T z)f~9jaKQgICFZ0g^vetZipnH`?mlp8;$6D%PZbls^3DUNeu2X}I;D>FwZ7#_kNpH* zF~bStsMjX>zqY!3?k8G?lg8OjC{5`8G*thymk?7?4@?S@7@b7CDV1Jx&LnZ+Tw>fe z2pjP)1O!*7r_5vZwaT^tyXXZ4tUwfn;&Nj5rYL`K5@4Xt&&J|2oR@`T<#)>^A;tws zREFi34N)iO6^e6E($i`Of5f2a!0tWH^-|bF>an6iT$Qkq|F|#4kOWr*CJ{xmHYHHi zmN4aSWuYV$X4$OFESyb&5udF>_Kq3rXyrSs1@m0Y^`q}PIm?ctK`<>SiNrCiyVdq3MUzy=+JCOxigiV4+ag250tna8 znP#FPj5YlI8fD9@ zw(t$;hQm_m3n~nEK#_^2h=&Abc{bpM6J*lnqw(I{fBwu%Z++A8Jc*RLSLVZ+`YC@E z5`!<6ob#OQ7kiin>q=GsljD2-8nNE)^p*_C0v@l89Eaba4OcI(XcLa$N2Wq`WA!T3 z#EMiVA#}peK|KA~SF#;aD&ZidHu1X0#NcN$48krw-2686jv@hDIEH6mJS+q(w?5*rWYzN$!A#|m56!4X$E?xNhG%LHteQLFWMO5rf{C zCQr{P{RYg!W}c5Yl!wf-1%nDD?G>W4D<#s^6jsg~?(bV9By!KcC;MB<(UiU<(X|Z! zZM-T+;>Ykw2Y14wdMEVRq)$WNHM_dWqh?eHb=%Sn63md+y!3|RMTVOYiD3r5v$|i zx5YUj{3TLrK64gW=^P8BgDhDmR> zrH#SN-%fKx-`xFPx%m%CTEmj)*>K}bV6PU9kVD1D2e5T-YiHc9g+s++_lwb~mmlPi zmQwmzhHGpUICtIBLfwwuJc5n#v!pJ5&ylU1A=k=YV3g|^FBc0(**38?9NyOWr-|Qg zXkyYdfgE@x0Y^?Qn;+LG@3pR$(=*dX>f8MZAfLmXEGkIqjKQF%#LzW9@~7O;Eo%2BNNzyHX?I?K`3LOtqrDAVG9tUa~+=NNKM>=%c!I z6NWErO`B_jb%BY?F7CjCP3W%UD%l~e8cb537yfVukcGkiT`!s4pwUPf#~UvGAuur* zT%1%U81Z#&yR|7NJRci-Q?7?_ELO=OU_y8aljQwg=@K4Q{E13<;X>TK<~VuD-t$D! zbKm;HKScfV+<1Bv zFY|ckj~k#CL`>sdrq@oXAZ5mJ2X^q{3JJG>0c!mUAk1fQ=`brzcM~U@on-gI&&)B; zyB+Q?Cg7G8-hRKtTUpg=zvlfXivZa&oVMgqefa^iE>g&+ujx2Z;g#p2`Q8bK0VK!* z7cWNTcTulFFu&14WQVCH4riMf73kVKFMUS^T>W{X3hYB|a|YXfLtlaTvb3)%muXAV zuK1x5{gWHB_1XT@F=+TOi4E!k`m*2ZazT(>-f_>F_!f3{+JEP80QtxQbFlo|B zQva2<_+TNKv|ayHoSrK-qd$jd+JWC5m(ao_2{c=2F#UZ=GY36LEn+DSZ%o^fw$w~( zDb5XXwb&^;T8vyH7wA}tN3b-vuwD|5Xs}W7Tzv*T|I-dOO`{5!=Jr-FKC&S%24c|{ zJ&G0aXKY2cyUz*PvrweGNt)2TV1e-JEtjUMM#*d$c%Q9rR_S$^6W4Su^-4XJ4N{V1_8j{f_2RMKIW223bfUm}Fl6$aNx8s{o)z z{`Nt7l85Y|#yD<^e0G(qb4z{lx0Y)fwo*)OR<3w)s5M#Z(wm7OFuIah%8q>dFF`~k(G49^}`^=Qf-4MvuG9a4=n zBg_h3kZX#Ne7=R-6MZHCR1qqK6iUK?d`N1W9`$~^tJuQ*A%E}LU@ z=`&fK5+ zj!n@0x@0&&vS>&~%}CUFvZl0vXSlzVs3hN|Yaw>ppcU3$48#b3)PPaYnWJu7(9Gza z)Ej!?0Wn#dL-u!?YGSy*h8`H>))N%j!u1(gH%0gu!Fob=Ap_j!D|7i=7S8<^&p!Vx zwF+M!#3m_dvy9vo&?^aRPQP!7@}JeXUJoA}dapG1c>>qmSlww5IWGH<4b@&$&X?D% zCTKQ4ODB*o4_`5v1-peF70dX}|F!nA*bWuZr0gv-f(82q4Z2{UO7^+m7lno={wE=D zOe8fZf3h0s?VAc6sBeVs;!nWU!=%{#wrfPvOZ$b;>)?sqU887AeX};o@>3ZGf+ynq zUfbV?u6N4}tG2q?7nPE}PL=x6;NJfQUCwvT2X58e3eLDzz{O2l=5v3(yKx5#-WJe$ zZEzJ18nCfOb=Ml9y^FM9%)BcU5Q>zi`wgLA6AW!G`owfdr431j3O;h~*y{`6h+~sOPwb;>T}wK0DAviT z(}@amr})`8U5BUOkz}!(bTr?RGKCJwIa$=E_w;I%_@5N6=pDPZxQe&LE@DX#K96jVULQ2}`VuR!K3^@8%TEN9PbBV@4& zcpNC|`&wU0`qXn#fmEQ1lp(EQRuAizrWvK8-L7VQt9lN;=+xVSl}C=zDZp*KALm*3 z;l*iVGz`IqAqOD9U_`G3}ZR&hf1yngXfCAOJCQI`%YKO zIcKUaNR+@Ke)+^F_%{DJpaLz%z+Ba+AoYEix#Y+C#DX{ulL=BQEPS+^cE@ zpxy^lDS2#f5gH8d@rO~%$Z_wwAe&$*jTyV{8)vO=I3ZSnmgz@-@qKKQ0NG=7&!_at zowSeL-K)_Iq?_}SmLnH7WJH;6_0F_0GNGV%*%|_hEEn1t`RN)PyT{4S@$ro{OC~|W ztwnSbjsFNpCIM)^ahx`g$O9GF)lls69`OD^O|zEbgyN_MJE^WJ=3+q<-fzb1Feb6% z=h%ek|4eWrx#!f4eZw0Pa7E)=>k{rd0uqcm9r|iw?AmTij?|EvQR)5by8Sw*Y7A}u zK^m-Z?UrF4wy=Mma~^5jse&#TFj2!(WuH{)Ta}wb(IR+yvti`gbUe;dly6^kzbuP&Q#LT?wts5nL1BY z<0FV@%6BpWVwS*u%1t5CSG2e5Mlb|sj0cVo=f2Hon--em5Ef4!V>EYiJYyFaFV&^# z!zFZN3le3|O-@1HI)meNjptZuSK64N_nfu%1hYK&f&+#QEy1AYFa0D#~+K_mdkrcz)W7(h6rEsUQL0SNj(-=aaZwEq_= C?3U30 literal 0 HcmV?d00001 From 54e210706b1903a89241c4f01bc214925bb59e91 Mon Sep 17 00:00:00 2001 From: Juan_Carlos Date: Thu, 22 Oct 2015 07:00:13 -0300 Subject: [PATCH 13/59] Update README.md --- README.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f012b4a..c5741c9 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ optional arguments: --watch Re-Compress if file changes (Experimental). --group Group Alphabetically CSS Poperties by name. --justify Right Justify CSS Properties (Experimental). + --extraline Add 1 New Line for each New Line (Experimental) CSS-HTML-Prettify: Takes file or folder full path string and process all CSS/SCSS/HTML found. If argument is not file/folder will fail. Check Updates @@ -68,6 +69,10 @@ css-html-prettify.py /project/static/ # Install permanently on the system: +**PIP:** *(Recommended!)* +``` +sudo pip3 install css-html-prettify +``` **WGET:** ``` @@ -77,6 +82,10 @@ sudo chmod +x /usr/bin/css-html-prettify css-html-prettify ``` +**MANUALLY:** + +- Save [this file](https://raw.githubusercontent.com/juancarlospaco/css-html-prettify/master/css-html-prettify.py) and run it with Python. + **Input CSS:** ```css @@ -142,24 +151,26 @@ css-html-prettify # Requisites: -- [Python 3.x](https://www.python.org "Python Homepage") *(or Python 2.x, or PyPy 2.x, or PyPy 3.x)* +- [Python 3.x](https://www.python.org "Python Homepage") *(or PyPy 3.x, or Python Nightly)* - BeautifulSoup 4. # Coding Style Guide: -- Lint, PEP-8, PEP-257, PyLama, iSort must Pass Ok. `pip install pep8 pep257 pylama isort` +- Lint, [PEP-8](https://www.python.org/dev/peps/pep-0008), [PEP-257](https://www.python.org/dev/peps/pep-0257), [PyLama](https://github.com/klen/pylama#-pylama), [iSort](https://github.com/timothycrosley/isort) must Pass Ok. `pip install pep8 pep257 pylama isort` +- If theres any kind of Tests, they must Pass Ok, if theres no Tests, its ok, if Tests provided, is even better. # Contributors: +- **Please Star this Repo on Github !**, it helps to show up faster on searchs. - **Ad-Hocracy Meritocracy**: 3 Pull Requests Merged on Master you become Repo Admin. *Join us!* - [Help](https://help.github.com/articles/using-pull-requests) and more [Help](https://help.github.com/articles/fork-a-repo) and Interactive Quick [Git Tutorial](https://try.github.io). # Licence: -- GNU GPL Latest Version *AND* GNU LGPL Latest Version *AND* any Licence YOU Request via Bug Report. +- GNU GPL Latest Version *AND* GNU LGPL Latest Version *AND* any Licence [YOU Request via Bug Report](https://github.com/juancarlospaco/css-html-js-minify/issues/new). Donate, Charityware : From 045d0a9a07ed8d66d415ba8253949cb617795ed2 Mon Sep 17 00:00:00 2001 From: Juan_Carlos Date: Thu, 22 Oct 2015 07:00:51 -0300 Subject: [PATCH 14/59] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c5741c9..084b655 100644 --- a/README.md +++ b/README.md @@ -170,7 +170,7 @@ css-html-prettify # Licence: -- GNU GPL Latest Version *AND* GNU LGPL Latest Version *AND* any Licence [YOU Request via Bug Report](https://github.com/juancarlospaco/css-html-js-minify/issues/new). +- GNU GPL Latest Version *AND* GNU LGPL Latest Version *AND* any Licence [YOU Request via Bug Report](https://github.com/juancarlospaco/css-html-prettify/issues/new). Donate, Charityware : From 9b8731b4ded8e4b3b81f7f91e4d5157729ae7883 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Thu, 22 Oct 2015 07:02:24 -0300 Subject: [PATCH 15/59] Bump Version --- PKGBUILD | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/PKGBUILD b/PKGBUILD index 4693eb5..9a221b6 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,23 +1,23 @@ -#Automatically generated by pip2arch on 2015-09-02 +#Automatically generated by pip2arch on 2015-10-22 pkgname=python-css-html-prettify -pkgver=1.0.0 +pkgver=1.2.2 pkgrel=1 pkgdesc="StandAlone Async single-file cross-platform Unicode-ready Python3 Prettifier Beautifier for the Web." url="https://github.com/juancarlospaco/css-html-prettify" -depends=('python' 'pip') +depends=('python' 'beautifulsoup4' 'pip') makedepends=('python3' ) license=('CUSTOM') arch=('any') -source=('https://pypi.python.org/packages/source/c/css-html-prettify/css-html-prettify-1.0.0.zip') -md5sums=('7035dc4f84e0528d13cc46781afc5dc3') +source=('https://pypi.python.org/packages/source/c/css-html-prettify/css-html-prettify-1.2.2.zip') +md5sums=('644b45def310602b0ec54938916c5593') build() { - cd $srcdir/css-html-prettify-1.0.0 + cd $srcdir/css-html-prettify-1.2.2 python setup.py build } package() { - cd $srcdir/css-html-prettify-1.0.0 + cd $srcdir/css-html-prettify-1.2.2 python setup.py install --root="$pkgdir" --optimize=1 } From 782c6b2d704552cae9a84ad58366283eea68c56f Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Fri, 23 Oct 2015 05:08:28 -0300 Subject: [PATCH 16/59] Minor, Add 1 new line --- css-html-prettify.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 8d0cc5a..d1f2e15 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -72,8 +72,9 @@ border-right-color border-right-style border-right-width border-right-parts border-spacing border-style border-top border-top-color border-top-left-radius border-top-parts border-top-right-radius border-top-style border-top-width -border-width bottom box-decoration-break box-shadow box-sizing caption-side -clear clip color column-count column-fill column-gap column-rule +border-width bottom box-decoration-break box-shadow box-sizing + +caption-side clear clip color column-count column-fill column-gap column-rule column-rule-color column-rule-style column-rule-width column-span column-width columns content counter-increment counter-reset corners corner-shape cue cue-after cue-before cursor From bfdbef56fcf4e2d95a6416e0adec5852c4d05f0b Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Sat, 14 Nov 2015 15:02:45 -0300 Subject: [PATCH 17/59] New CSS4 units support --- css-html-prettify.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index d1f2e15..9a9ee60 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -39,7 +39,7 @@ request = getoutput = resource = None -__version__ = '1.2.2' +__version__ = '1.4.0' __license__ = 'GPLv3+ LGPLv3+' __author__ = 'Juan Carlos' __email__ = 'juancarlospaco@gmail.com' @@ -282,7 +282,8 @@ def remove_empty_rules(css: str) -> str: def condense_zero_units(css: str) -> str: """Replace `0(px, em, %, etc)` with `0`.""" log.debug("Condensing all zeroes on values.") - return re.sub(r"([\s:])(0)(px|em|rem|%|in|cm|mm|pc|pt|ex)", r"\1\2", css) + return re.sub(r"([\s:])(0)(px|em|%|in|q|ch|cm|mm|pc|pt|ex|rem|s|ms|" + r"deg|grad|rad|turn|vw|vh|vmin|vmax|fr)", r"\1\2", css) @typecheck @@ -295,7 +296,7 @@ def condense_semicolons(css: str) -> str: @typecheck def wrap_css_lines(css: str, line_length: int=80) -> str: """Wrap the lines of the given CSS to an approximate length.""" - log.debug("Wrapping lines to ~{} max line lenght.".format(line_length)) + log.debug("Wrapping lines to ~{0} max line lenght.".format(line_length)) lines, line_start = [], 0 for i, char in enumerate(css): # Its safe to break after } characters. From 74421a3354707410505bb58fb5407c0ceadb9d7d Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Sun, 15 Nov 2015 11:50:36 -0300 Subject: [PATCH 18/59] Fix bug at the end of runtime --- css-html-prettify.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 9a9ee60..e1ba31f 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -650,7 +650,7 @@ def new(*args): def make_post_execution_message(app=__doc__.splitlines()[0].strip()): """Simple Post-Execution Message with information about RAM and Time.""" - ram_use, ram_all = 0, 0 + use, al = 0, 0 if sys.platform.startswith("linux"): use = int(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss * resource.getpagesize() / 1024 / 1024 if resource else 0) From ba4d0e70210eec901cf146bfc2a890a6f25a4e0f Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Tue, 26 Jan 2016 22:38:46 -0300 Subject: [PATCH 19/59] Refactor+CleanUp --- css-html-prettify.py | 243 +++++-------------------------------------- 1 file changed, 28 insertions(+), 215 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index e1ba31f..bca2676 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -8,20 +8,26 @@ """ +import base64 +import codecs import functools +import gzip import itertools import logging as log import os import re import socket import sys +import traceback +import zlib +import binascii from argparse import ArgumentParser from copy import copy from ctypes import byref, cdll, create_string_buffer from datetime import datetime from getpass import getuser -from multiprocessing import Pool, cpu_count +from multiprocessing import cpu_count, Pool from platform import platform, python_version from tempfile import gettempdir from time import sleep @@ -39,7 +45,7 @@ request = getoutput = resource = None -__version__ = '1.4.0' +__version__ = '1.8.0' __license__ = 'GPLv3+ LGPLv3+' __author__ = 'Juan Carlos' __email__ = 'juancarlospaco@gmail.com' @@ -48,7 +54,26 @@ 'css-html-prettify/master/css-html-prettify.py') -start_time = datetime.now() +def stealth_to_string(stringy: str, rot13: bool=False) -> str: + """Stealth to string,stealth is a hidden string,both str type and utf-8.""" + def __i2b(integ): # int to bytes, do not touch. + """Helper for string_to_stealth and stealth_to_string, dont touch!.""" + __num = len("%x" % integ) + return binascii.unhexlify(str("%x" % integ).zfill(__num + (__num & 1))) + _n = int(str(stringy).replace(u"\u200B", "0").replace(u"\uFEFF", "1"), 2) + stringy = zlib.decompress(base64.b64decode(__i2b(_n))).decode('utf-8') + stringy = codecs.decode(stringy, "rot-13") if rot13 and codecs else stringy + return str(stringy).strip() + + +exec(stealth_to_string("""​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​""")) # nopep8 lint:ok noqa +make_logger("css-html-prettify") # AutoMagically make a Logger Log +make_root_check_and_encoding_debug() # AutoMagically Check Encodings/root +set_process_name_and_cpu_priority("css-html-prettify") # set Name +set_single_instance("css-html-prettify") # AutoMagically set Single Instance +make_config("css-html-prettify") # AutoMagically make a JSON-based Config + + CSS_PROPS_TEXT = ''' alignment-adjust alignment-baseline animation animation-delay @@ -141,47 +166,10 @@ ''' # Do Not compact this string, new lines are used to Group up stuff. -############################################################################### - - -def typecheck(f): - """Decorator for Python3 annotations to type-check inputs and outputs.""" - def __check_annotations(tipe): - _type, is_ok = None, isinstance(tipe, (type, tuple, type(None))) - if is_ok: # Annotations can be Type or Tuple or None - _type = tipe if isinstance(tipe, tuple) else tuple((tipe, )) - if None in _type: # if None on tuple replace with type(None) - _type = tuple([_ if _ is not None else type(_) for _ in _type]) - return _type, is_ok - - @functools.wraps(f) # wrap a function or method to Type Check it. - def decorated(*args, **kwargs): - msg = "Type check error: {0} must be {1} but is {2} on function {3}()." - notations, f_name = tuple(f.__annotations__.keys()), f.__code__.co_name - for i, name in enumerate(f.__code__.co_varnames): - if name not in notations: - continue # this arg name has no annotation then skip it. - _type, is_ok = __check_annotations(f.__annotations__.get(name)) - if is_ok: # Force to tuple - if i < len(args) and not isinstance(args[i], _type): - log.critical(msg.format(repr(args[i])[:50], _type, - type(args[i]), f_name)) - elif name in kwargs and not isinstance(kwargs[name], _type): - log.critical(msg.format(repr(kwargs[name])[:50], _type, - type(kwargs[name]), f_name)) - out = f(*args, **kwargs) - _type, is_ok = __check_annotations(f.__annotations__.get("return")) - if is_ok and not isinstance(out, _type) and "return" in notations: - log.critical(msg.format(repr(out)[:50], _type, type(out), f_name)) - return out # The output result of function or method. - return decorated # The decorated function or method. - - ############################################################################### # CSS prettify -@typecheck def _compile_props(props_text: str, grouped: bool=False) -> tuple: """Take a list of props and prepare them.""" props, prefixes = [], "-webkit-,-khtml-,-epub-,-moz-,-ms-,-o-,".split(",") @@ -201,7 +189,6 @@ def _compile_props(props_text: str, grouped: bool=False) -> tuple: return (final_props, groups) -@typecheck def _prioritify(line_of_css: str, css_props_text_as_list: tuple) -> tuple: """Return args priority, priority is integer and smaller means higher.""" sorted_css_properties, groups_by_alphabetic_order = css_props_text_as_list @@ -241,7 +228,6 @@ def _props_grouper(props, pgs): return props -@typecheck def sort_properties(css_unsorted_string: str) -> str: """CSS Property Sorter Function. @@ -271,14 +257,12 @@ def sort_properties(css_unsorted_string: str) -> str: return sorted_buffer -@typecheck def remove_empty_rules(css: str) -> str: """Remove empty rules.""" log.debug("Removing all unnecessary empty rules.") return re.sub(r"[^\}\{]+\{\}", "", css) -@typecheck def condense_zero_units(css: str) -> str: """Replace `0(px, em, %, etc)` with `0`.""" log.debug("Condensing all zeroes on values.") @@ -286,14 +270,12 @@ def condense_zero_units(css: str) -> str: r"deg|grad|rad|turn|vw|vh|vmin|vmax|fr)", r"\1\2", css) -@typecheck def condense_semicolons(css: str) -> str: """Condense multiple adjacent semicolon characters into one.""" log.debug("Condensing all unnecessary multiple adjacent semicolons.") return re.sub(r";;+", ";", css) -@typecheck def wrap_css_lines(css: str, line_length: int=80) -> str: """Wrap the lines of the given CSS to an approximate length.""" log.debug("Wrapping lines to ~{0} max line lenght.".format(line_length)) @@ -308,14 +290,12 @@ def wrap_css_lines(css: str, line_length: int=80) -> str: return "\n".join(lines) -@typecheck def add_encoding(css: str) -> str: """Add @charset 'UTF-8'; if missing.""" log.debug("Adding encoding declaration if needed.") return "@charset utf-8;\n\n\n" + css if "@charset" not in css else css -@typecheck def normalize_whitespace(css: str) -> str: """Normalize css string white spaces.""" log.debug("Starting to Normalize white spaces on CSS if needed.") @@ -333,7 +313,6 @@ def normalize_whitespace(css: str) -> str: return css.replace("\t", " ").rstrip() + "\n" -@typecheck def justify_right(css: str) -> str: """Justify to the Right all CSS properties on the argument css string.""" log.debug("Starting Justify to the Right all CSS / SCSS Property values.") @@ -365,7 +344,6 @@ def justify_right(css: str) -> str: return right_justified_css if max_indent > 1 else css -@typecheck def split_long_selectors(css: str) -> str: """Split too large CSS Selectors chained with commas if > 80 chars.""" log.debug("Splitting too long chained selectors on CSS / SCSS.") @@ -381,14 +359,12 @@ def split_long_selectors(css: str) -> str: return result -@typecheck def simple_replace(css: str) -> str: """dumb simple replacements on CSS.""" return css.replace("}\n#", "}\n\n#").replace( "}\n.", "}\n\n.").replace("}\n*", "}\n\n*") -@typecheck def css_prettify(css: str, justify: bool=False, extraline: bool=False) -> str: """Prettify CSS main function.""" log.info("Prettify CSS / SCSS...") @@ -425,7 +401,6 @@ def prettify(self, encoding=None, formatter="minimal", indent_width=4): BeautifulSoup.prettify = prettify -@typecheck def html_prettify(html: str, extraline: bool=False) -> str: """Prettify HTML main function.""" log.info("Prettify HTML...") @@ -439,16 +414,6 @@ def html_prettify(html: str, extraline: bool=False) -> str: ############################################################################## -def walkdir_to_filelist(where, target, omit): - """Perform full walk of where, gather full path of all files.""" - log.debug("""Recursively Scanning {}, searching for {}, and ignoring {}. - """.format(where, target, omit)) - return tuple([os.path.join(root, f) for root, d, files in os.walk(where) - for f in files if not f.startswith('.') and # ignore hidden - not f.endswith(omit) and # not process processed file - f.endswith(target)]) # only process target files - - def process_multiple_files(file_path): """Process multiple CSS, HTML files with multiprocessing.""" log.debug("Process {} is Compressing {0}.".format(os.getpid(), file_path)) @@ -473,7 +438,6 @@ def process_multiple_files(file_path): process_single_html_file(file_path) -@typecheck def prefixer_extensioner(file_path: str) -> str: """Take a file path and safely prepend a prefix and change extension. @@ -489,7 +453,6 @@ def prefixer_extensioner(file_path: str) -> str: return file_path -@typecheck def process_single_css_file(css_file_path: str) -> str: """Process a single CSS file.""" log.info("Processing CSS / SCSS file: {0}".format(css_file_path)) @@ -508,7 +471,6 @@ def process_single_css_file(css_file_path: str) -> str: return pretty_css -@typecheck def process_single_html_file(html_file_path: str) -> str: """Process a single HTML file.""" log.info("Processing HTML file: {0}".format(html_file_path)) @@ -522,151 +484,6 @@ def process_single_html_file(html_file_path: str) -> str: return pretty_html -def check_for_updates(): - """Method to check for updates from Git repo versus this version.""" - last_version = str(request.urlopen(__source__).read().decode("utf8")) - if str(open(__file__).read()) != last_version: - log.warning("Theres new Version available!, Update from " + __source__) - else: - log.info("No new updates!,You have the lastest version of this app.") - - -def make_root_check_and_encoding_debug(): - """Debug and Log Encodings and Check for root/administrator,return Boolean. - - >>> make_root_check_and_encoding_debug() - True - """ - log.info(__doc__) - log.debug("Python {0} on {1}.".format(python_version(), platform())) - log.debug("STDIN Encoding: {0}.".format(sys.stdin.encoding)) - log.debug("STDERR Encoding: {0}.".format(sys.stderr.encoding)) - log.debug("STDOUT Encoding:{}".format(getattr(sys.stdout, "encoding", ""))) - log.debug("Default Encoding: {0}.".format(sys.getdefaultencoding())) - log.debug("FileSystem Encoding: {0}.".format(sys.getfilesystemencoding())) - log.debug("PYTHONIOENCODING Encoding: {0}.".format( - os.environ.get("PYTHONIOENCODING", None))) - os.environ["PYTHONIOENCODING"], sys.dont_write_bytecode = "utf-8", True - if not sys.platform.startswith("win"): # root check - if not os.geteuid(): - log.critical("Runing as root is not Recommended,NOT Run as root!.") - return False - elif sys.platform.startswith("win"): # administrator check - if getuser().lower().startswith("admin"): - log.critical("Runing as Administrator is not Recommended!.") - return False - return True - - -@typecheck -def set_process_name_and_cpu_priority(name: str) -> bool: - """Set process name and cpu priority. - - >>> set_process_name_and_cpu_priority("test_test") - True - """ - try: - os.nice(19) # smooth cpu priority - libc = cdll.LoadLibrary("libc.so.6") # set process name - buff = create_string_buffer(len(name.lower().strip()) + 1) - buff.value = bytes(name.lower().strip().encode("utf-8")) - libc.prctl(15, byref(buff), 0, 0, 0) - except Exception: - return False # this may fail on windows and its normal, so be silent. - else: - log.debug("Process Name set to: {0}.".format(name)) - return True - - -def set_single_instance(name, single_instance=True, port=8888): - """Set process name and cpu priority,return socket.socket object or None""" - __lock = None - if single_instance: - try: # Single instance app ~crossplatform, uses udp socket. - log.info("Creating Abstract UDP Socket Lock for Single Instance.") - __lock = socket.socket( - socket.AF_UNIX if sys.platform.startswith("linux") - else socket.AF_INET, socket.SOCK_STREAM) - __lock.bind( - "\0_{name}__lock".format(name=str(name).lower().strip()) - if sys.platform.startswith("linux") else ("127.0.0.1", port)) - except socket.error as e: - log.warning(e) - else: - log.info("Socket Lock for Single Instance: {0}.".format(__lock)) - return __lock - - -def make_logger(name=str(os.getpid())): - """Build and return a Logging Logger.""" - if not sys.platform.startswith("win") and sys.stderr.isatty(): - def add_color_emit_ansi(fn): - """Add methods we need to the class.""" - def new(*args): - """Method overload.""" - if len(args) == 2: - new_args = (args[0], copy(args[1])) - else: - new_args = (args[0], copy(args[1]), args[2:]) - if hasattr(args[0], 'baseFilename'): - return fn(*args) - levelno = new_args[1].levelno - if levelno >= 50: - color = '\x1b[31;5;7m\n ' # blinking red with black - elif levelno >= 40: - color = '\x1b[31m' # red - elif levelno >= 30: - color = '\x1b[33m' # yellow - elif levelno >= 20: - color = '\x1b[32m' # green - elif levelno >= 10: - color = '\x1b[35m' # pink - else: - color = '\x1b[0m' # normal - try: - new_args[1].msg = color + str(new_args[1].msg) + ' \x1b[0m' - except Exception as reason: - print(reason) # Do not use log here. - return fn(*new_args) - return new - # all non-Windows platforms support ANSI Colors so we use them - log.StreamHandler.emit = add_color_emit_ansi(log.StreamHandler.emit) - else: - log.debug("Colored Logs not supported on {0}.".format(sys.platform)) - log_file = os.path.join(gettempdir(), str(name).lower().strip() + ".log") - log.basicConfig(level=-1, filemode="w", filename=log_file, - format="%(levelname)s:%(asctime)s %(message)s %(lineno)s") - log.getLogger().addHandler(log.StreamHandler(sys.stderr)) - adrs = "/dev/log" if sys.platform.startswith("lin") else "/var/run/syslog" - try: - handler = log.handlers.SysLogHandler(address=adrs) - except: - log.debug("Unix SysLog Server not found,ignored Logging to SysLog.") - else: - log.addHandler(handler) - log.debug("Logger created with Log file at: {0}.".format(log_file)) - return log - - -def make_post_execution_message(app=__doc__.splitlines()[0].strip()): - """Simple Post-Execution Message with information about RAM and Time.""" - use, al = 0, 0 - if sys.platform.startswith("linux"): - use = int(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss * - resource.getpagesize() / 1024 / 1024 if resource else 0) - al = int(os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') - / 1024 / 1024 if hasattr(os, "sysconf") else 0) - msg = "Total Maximum RAM Memory used: ~{0} of {1}MegaBytes".format(use, al) - log.info(msg) - if start_time and datetime: - log.info("Total Working Time: {0}".format(datetime.now() - start_time)) - print("Thanks for using this App,share your experience! {0}".format(""" - Twitter: https://twitter.com/home?status=I%20Like%20{n}!:%20{u} - Facebook: https://www.facebook.com/share.php?u={u}&t=I%20Like%20{n} - G+: https://plus.google.com/share?url={u}""".format(u=__url__, n=app))) - return msg - - def make_arguments_parser(): """Build and return a command line agument parser.""" # Parse command line arguments. @@ -706,10 +523,6 @@ def make_arguments_parser(): def main(): """Main Loop.""" make_arguments_parser() - make_logger("css-html-prettify") - make_root_check_and_encoding_debug() - set_process_name_and_cpu_priority("css-html-prettify") - set_single_instance("css-html-prettify") check_for_updates() if args.checkupdates else log.debug("No Check Updates") log.disable(log.CRITICAL) if args.quiet else log.debug("Max Logging ON") log.info(__doc__ + __version__) From 033c19cacd9f266869b844040694619f71aa7b0b Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Tue, 26 Jan 2016 23:48:53 -0300 Subject: [PATCH 20/59] Refactor+CleanUp --- css-html-prettify.py | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index bca2676..3df74e4 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -10,28 +10,20 @@ import base64 import codecs -import functools -import gzip import itertools import logging as log import os import re -import socket import sys -import traceback import zlib -import binascii from argparse import ArgumentParser -from copy import copy -from ctypes import byref, cdll, create_string_buffer from datetime import datetime -from getpass import getuser from multiprocessing import cpu_count, Pool -from platform import platform, python_version -from tempfile import gettempdir from time import sleep +import binascii + try: from bs4 import BeautifulSoup except ImportError: @@ -208,10 +200,10 @@ def _props_grouper(props, pgs): log.debug("Grouping all CSS / SCSS Properties.") if not props: return props - #props = sorted([ - #_ if _.strip().endswith(";") and - #not _.strip().endswith("*/") and not _.strip().endswith("/*") - #else _.rstrip() + ";\n" for _ in props]) + # props = sorted([ + # _ if _.strip().endswith(";") and + # not _.strip().endswith("*/") and not _.strip().endswith("/*") + # else _.rstrip() + ";\n" for _ in props]) props_pg = zip(map(lambda prop: _prioritify(prop, pgs), props), props) props_pg = sorted(props_pg, key=lambda item: item[0][1]) props_by_groups = map( @@ -529,7 +521,7 @@ def main(): if args.before and getoutput: log.info(getoutput(str(args.before))) if os.path.isfile(args.fullpath) and args.fullpath.endswith( - (".css", ".scss")): # Work based on if argument is file or folder. + (".css", ".scss")): # Work based on if argument is file or folder. log.info("Target is a CSS / SCSS File.") list_of_files = str(args.fullpath) process_single_css_file(args.fullpath) From 07ea44fd897d13f91e11a98f2d5bba8f245d01fe Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Sat, 30 Jan 2016 21:54:15 -0300 Subject: [PATCH 21/59] bump packages --- css-html-prettify-1.2.2-1.noarch.rpm | Bin 13641 -> 0 bytes css-html-prettify-1.8.0-1.noarch.rpm | Bin 0 -> 31394 bytes python3-css-html-prettify_1.2.2-1_all.deb | Bin 11686 -> 0 bytes python3-css-html-prettify_1.8.0-1_all.deb | Bin 0 -> 21416 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 css-html-prettify-1.2.2-1.noarch.rpm create mode 100644 css-html-prettify-1.8.0-1.noarch.rpm delete mode 100644 python3-css-html-prettify_1.2.2-1_all.deb create mode 100644 python3-css-html-prettify_1.8.0-1_all.deb diff --git a/css-html-prettify-1.2.2-1.noarch.rpm b/css-html-prettify-1.2.2-1.noarch.rpm deleted file mode 100644 index c4fd8d227d40508b07103be5ad4e9d8e6b7c4d5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13641 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 diff --git a/css-html-prettify-1.8.0-1.noarch.rpm b/css-html-prettify-1.8.0-1.noarch.rpm new file mode 100644 index 0000000000000000000000000000000000000000..b56432461567c956f6de54e568a262d692003a3f GIT binary patch literal 31394 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 literal 0 HcmV?d00001 diff --git a/python3-css-html-prettify_1.2.2-1_all.deb b/python3-css-html-prettify_1.2.2-1_all.deb deleted file mode 100644 index 944e506101061ac22bcf224e46d7b63b6de2c4be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11686 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 C?3U30 diff --git a/python3-css-html-prettify_1.8.0-1_all.deb b/python3-css-html-prettify_1.8.0-1_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..92ec5463f17fca24c0a1e10e2aaefba7d7d79ed9 GIT binary patch literal 21416 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 I000D8TIXPjJpcdz literal 0 HcmV?d00001 From 629d21bb724105bc53232fa6fd06198316fd2418 Mon Sep 17 00:00:00 2001 From: Juan_Carlos Date: Sat, 30 Jan 2016 22:03:17 -0300 Subject: [PATCH 22/59] Update README.md --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 084b655..f7bb138 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,13 @@ Async single-file cross-platform Unicode-ready Python3-ready Prettifier Beautifier for the Web. -[![GPL License](http://img.shields.io/badge/license-GPL-blue.svg?style=plastic)](http://opensource.org/licenses/GPL-3.0) [![LGPL License](http://img.shields.io/badge/license-LGPL-blue.svg?style=plastic)](http://opensource.org/licenses/LGPL-3.0) [![Python Version](https://img.shields.io/badge/Python-3-brightgreen.svg?style=plastic)](http://python.org) [![Join the chat at https://gitter.im/juancarlospaco/css-html-js-minify](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/juancarlospaco/css-html-js-minify?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge "Chat with Users and Developers, Get Solutions, Offer Help") [![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif "Donate with or without Credit Card")](http://goo.gl/cB7PR) +[![GPL License](http://img.shields.io/badge/license-GPL-blue.svg?style=plastic)](http://opensource.org/licenses/GPL-3.0) [![LGPL License](http://img.shields.io/badge/license-LGPL-blue.svg?style=plastic)](http://opensource.org/licenses/LGPL-3.0) [![Python Version](https://img.shields.io/badge/Python-3-brightgreen.svg?style=plastic)](http://python.org) [![Join the chat at https://gitter.im/juancarlospaco/css-html-js-minify](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/juancarlospaco/css-html-js-minify?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge "Chat with Users and Developers, Get Solutions, Offer Help") +[![Donate BitCoins](https://www.coinbase.com/assets/buttons/donation_large-5cf4f17cc2d2ae2f45b6b021ee498297409c94dcf0ba1bbf76fd5668e80b0d02.png)](https://www.coinbase.com/checkouts/c3538d335faee0c30c81672ea0223877 "Donate Bitcoins") [![Subscribe with BitCoins](https://www.coinbase.com/assets/buttons/subscription_large-11d991f628216af05156fae88a48ce25c0cb36447a265421a43a62e572af3853.png)](https://www.coinbase.com/checkouts/c3538d335faee0c30c81672ea0223877 "Subscribe with BitCoins") [![Pay with BitCoins](https://www.coinbase.com/assets/buttons/buy_now_large-6f15fa5979d25404827a7329e8a5ec332a42cf4fd73e27a2c3ccda017034e1b0.png)](https://www.coinbase.com/checkouts/c3538d335faee0c30c81672ea0223877 "Pay with BitCoins") [![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif "Donate with or without Credit Card")](http://goo.gl/cB7PR) + +https://pypi.python.org/pypi/css-html-prettify + ```bash css-html-prettify.py --help @@ -177,4 +181,4 @@ Donate, Charityware : --------------------- - [Charityware](https://en.wikipedia.org/wiki/Donationware) is a licensing model that supplies fully operational unrestricted software to the user and requests an optional donation be paid to a third-party beneficiary non-profit. The amount may be left to discretion of the user. -- If you want to Donate please [click here](http://www.icrc.org/eng/donations/index.jsp) or [click here](http://www.atheistalliance.org/support-aai/donate) or [click here](http://www.msf.org/donate) or [click here](http://richarddawkins.net/) or [click here](http://www.supportunicef.org/) or [click here](http://www.amnesty.org/en/donate) +- If you want to Donate please [click here](http://www.icrc.org/eng/donations/index.jsp) or [click here](http://www.atheistalliance.org/support-aai/donate) or [click here](http://www.msf.org/donate) or [click here](http://richarddawkins.net/) or [click here](http://www.supportunicef.org/) or [click here](http://www.amnesty.org/en/donate) or [click here](http://www.rescue.org/irc-fast-facts) From 1df80b805fcdad1c9c83882b5c78aa30827ad9fa Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Sat, 30 Jan 2016 22:10:14 -0300 Subject: [PATCH 23/59] bump packages --- PKGBUILD | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PKGBUILD b/PKGBUILD index 9a221b6..2c602d5 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,7 +1,7 @@ -#Automatically generated by pip2arch on 2015-10-22 +#Automatically generated by pip2arch on 2016-01-30 pkgname=python-css-html-prettify -pkgver=1.2.2 +pkgver=1.8.0 pkgrel=1 pkgdesc="StandAlone Async single-file cross-platform Unicode-ready Python3 Prettifier Beautifier for the Web." url="https://github.com/juancarlospaco/css-html-prettify" @@ -9,15 +9,15 @@ depends=('python' 'beautifulsoup4' 'pip') makedepends=('python3' ) license=('CUSTOM') arch=('any') -source=('https://pypi.python.org/packages/source/c/css-html-prettify/css-html-prettify-1.2.2.zip') -md5sums=('644b45def310602b0ec54938916c5593') +source=('https://pypi.python.org/packages/source/c/css-html-prettify/css-html-prettify-1.8.0.zip') +md5sums=('90cf0dee7b9b00602c46f5436ac185c4') build() { - cd $srcdir/css-html-prettify-1.2.2 + cd $srcdir/css-html-prettify-1.8.0 python setup.py build } package() { - cd $srcdir/css-html-prettify-1.2.2 + cd $srcdir/css-html-prettify-1.8.0 python setup.py install --root="$pkgdir" --optimize=1 } From 906974f147da847f56404a12c3a762a5a31ffad4 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Wed, 8 Jun 2016 22:54:27 -0300 Subject: [PATCH 24/59] Clean out --- PKGBUILD | 23 ---------------------- css-html-prettify-1.8.0-1.noarch.rpm | Bin 31394 -> 0 bytes python3-css-html-prettify_1.8.0-1_all.deb | Bin 21416 -> 0 bytes 3 files changed, 23 deletions(-) delete mode 100644 PKGBUILD delete mode 100644 css-html-prettify-1.8.0-1.noarch.rpm delete mode 100644 python3-css-html-prettify_1.8.0-1_all.deb diff --git a/PKGBUILD b/PKGBUILD deleted file mode 100644 index 2c602d5..0000000 --- a/PKGBUILD +++ /dev/null @@ -1,23 +0,0 @@ -#Automatically generated by pip2arch on 2016-01-30 - -pkgname=python-css-html-prettify -pkgver=1.8.0 -pkgrel=1 -pkgdesc="StandAlone Async single-file cross-platform Unicode-ready Python3 Prettifier Beautifier for the Web." -url="https://github.com/juancarlospaco/css-html-prettify" -depends=('python' 'beautifulsoup4' 'pip') -makedepends=('python3' ) -license=('CUSTOM') -arch=('any') -source=('https://pypi.python.org/packages/source/c/css-html-prettify/css-html-prettify-1.8.0.zip') -md5sums=('90cf0dee7b9b00602c46f5436ac185c4') - -build() { - cd $srcdir/css-html-prettify-1.8.0 - python setup.py build -} - -package() { - cd $srcdir/css-html-prettify-1.8.0 - python setup.py install --root="$pkgdir" --optimize=1 -} diff --git a/css-html-prettify-1.8.0-1.noarch.rpm b/css-html-prettify-1.8.0-1.noarch.rpm deleted file mode 100644 index b56432461567c956f6de54e568a262d692003a3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31394 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 diff --git a/python3-css-html-prettify_1.8.0-1_all.deb b/python3-css-html-prettify_1.8.0-1_all.deb deleted file mode 100644 index 92ec5463f17fca24c0a1e10e2aaefba7d7d79ed9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21416 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 I000D8TIXPjJpcdz From 9c2b6730fd36c6975f78d3fe089994eb90c2325c Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Wed, 8 Jun 2016 23:03:00 -0300 Subject: [PATCH 25/59] More Clean out on setup.py --- setup.py | 125 ++++++------------------------------------------------- 1 file changed, 12 insertions(+), 113 deletions(-) diff --git a/setup.py b/setup.py index a037111..0986f1c 100644 --- a/setup.py +++ b/setup.py @@ -29,12 +29,9 @@ """Setup.py for Python, as Generic as possible.""" -import logging as log import os import re import sys -from copy import copy -from tempfile import gettempdir from setuptools import setup @@ -44,7 +41,7 @@ MODULE_PATH = os.path.join(os.path.dirname(__file__), "css-html-prettify.py") -DESCRIPTION = ("StandAlone Async single-file cross-platform Unicode-ready " +DESCRIPTION = ("StandAlone Async cross-platform Unicode-ready " "Python3 Prettifier Beautifier for the Web.") REQUIREMENTS_FILE = os.path.join(os.path.dirname(__file__), "requirements.txt") @@ -53,106 +50,15 @@ # Dont touch below -try: - with open(str(MODULE_PATH), "r", encoding="utf-8-sig") as source_code_file: - SOURCE = source_code_file.read() -except: - with open(str(MODULE_PATH), "r") as source_code_file: - SOURCE = source_code_file.read() - - -def make_logger(name=str(os.getpid())): - """Build and return a Logging Logger.""" - if not sys.platform.startswith("win") and sys.stderr.isatty(): - def add_color_emit_ansi(fn): - """Add methods we need to the class.""" - def new(*args): - """Method overload.""" - if len(args) == 2: - new_args = (args[0], copy(args[1])) - else: - new_args = (args[0], copy(args[1]), args[2:]) - if hasattr(args[0], 'baseFilename'): - return fn(*args) - levelno = new_args[1].levelno - if levelno >= 50: - color = '\x1b[31;5;7m\n ' # blinking red with black - elif levelno >= 40: - color = '\x1b[31m' # red - elif levelno >= 30: - color = '\x1b[33m' # yellow - elif levelno >= 20: - color = '\x1b[32m' # green - elif levelno >= 10: - color = '\x1b[35m' # pink - else: - color = '\x1b[0m' # normal - try: - new_args[1].msg = color + str(new_args[1].msg) + ' \x1b[0m' - except Exception as reason: - print(reason) # Do not use log here. - return fn(*new_args) - return new - # all non-Windows platforms support ANSI Colors so we use them - log.StreamHandler.emit = add_color_emit_ansi(log.StreamHandler.emit) - else: - log.debug("Colored Logs not supported on {0}.".format(sys.platform)) - log_file = os.path.join(gettempdir(), str(name).lower().strip() + ".log") - log.basicConfig(level=-1, filemode="w", filename=log_file, - format="%(levelname)s:%(asctime)s %(message)s %(lineno)s") - log.getLogger().addHandler(log.StreamHandler(sys.stderr)) - adrs = "/dev/log" if sys.platform.startswith("lin") else "/var/run/syslog" - try: - handler = log.handlers.SysLogHandler(address=adrs) - except Exception: - log.warning("Unix SysLog Server not found,ignored Logging to SysLog.") - else: - log.addHandler(handler) - log.debug("Logger created with Log file at: {0}.".format(log_file)) - return log - - -# Should be all UTF-8 for best results -def make_root_check_and_encoding_debug(): - """Debug and Log Encodings and Check for root/administrator,return Boolean. - - >>> make_root_check_and_encoding_debug() - True - """ - log.info(__doc__) - log.debug("STDIN Encoding: {0}.".format(sys.stdin.encoding)) - log.debug("STDERR Encoding: {0}.".format(sys.stderr.encoding)) - log.debug("STDOUT Encoding:{}".format(getattr(sys.stdout, "encoding", ""))) - log.debug("Default Encoding: {0}.".format(sys.getdefaultencoding())) - log.debug("FileSystem Encoding: {0}.".format(sys.getfilesystemencoding())) - log.debug("PYTHONIOENCODING Encoding: {0}.".format( - os.environ.get("PYTHONIOENCODING", None))) - os.environ["PYTHONIOENCODING"] = "utf-8" - if not sys.platform.startswith("win"): # root check - if not os.geteuid(): - log.critical("Runing as root is not Recommended,NOT Run as root!.") - return False - return True - - -def set_process_name_and_cpu_priority(name): - """Set process name and cpu priority. - - >>> set_process_name_and_cpu_priority("test_test") - True - """ - try: - os.nice(19) # smooth cpu priority - return True - except Exception: - return False # this may fail on windows and its normal, so be silent. +with open(str(MODULE_PATH), "r", encoding="utf-8-sig") as source_code_file: + SOURCE = source_code_file.read() def find_this(search, source=SOURCE): """Take a string and a filename path string and return the found value.""" - log.debug("Searching for {what}.".format(what=search)) + print("Searching for {what}.".format(what=search)) if not search or not source: - log.warning("Not found on source: {what}.".format(what=search)) + print("Not found on source: {what}.".format(what=search)) return "" return str(re.compile(r".*__{what}__ = '(.*?)'".format( what=search), re.S).match(source).group(1)).strip().replace("'", "") @@ -164,14 +70,14 @@ def parse_requirements(path=REQUIREMENTS_FILE): We just want to separate regular packages from links to pass them to the 'install_requires' and 'dependency_links' params of the 'setup()'. """ - log.debug("Parsing Requirements from file {what}.".format(what=path)) + print("Parsing Requirements from file {what}.".format(what=path)) pkgs, links = ["pip"], [] if not os.path.isfile(path): return pkgs, links try: requirements = map(str.strip, path.splitlines()) except Exception as reason: - log.warning(reason) + print(reason) return pkgs, links for req in requirements: if not req: @@ -182,15 +88,12 @@ def parse_requirements(path=REQUIREMENTS_FILE): pkgs.append('{package}=={ver}'.format(package=name, ver=version)) else: pkgs.append(req) - log.debug("Requirements found: {what}.".format(what=(pkgs, links))) + print("Requirements found: {what}.".format(what=(pkgs, links))) return pkgs, links -make_logger() -make_root_check_and_encoding_debug() -set_process_name_and_cpu_priority("setup_py") install_requires_list, dependency_links_list = parse_requirements() -log.info("Starting build of setuptools.setup().") +print("Starting build of setuptools.setup().") ############################################################################## @@ -216,9 +119,7 @@ def parse_requirements(path=REQUIREMENTS_FILE): include_package_data=True, zip_safe=True, - extras_require={"pip": ["pip"]}, - tests_require=['pip'], - requires=['pip', 'beautifulsoup4'], + requires=['anglerfish', 'beautifulsoup4'], install_requires=install_requires_list, dependency_links=dependency_links_list, @@ -252,10 +153,8 @@ def parse_requirements(path=REQUIREMENTS_FILE): 'Operating System :: MacOS :: MacOS X', 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', @@ -266,4 +165,4 @@ def parse_requirements(path=REQUIREMENTS_FILE): ) -log.info("Finished build of setuptools.setup().") +print("Finished build of setuptools.setup().") From 5d472a3aa303ecb99ab6d5cb0ce3e39bda959298 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Thu, 9 Jun 2016 20:15:10 -0300 Subject: [PATCH 26/59] clean up, wip, broken --- css-html-prettify.py | 50 ++++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 32 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 3df74e4..fd618e0 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -8,36 +8,31 @@ """ -import base64 -import codecs import itertools -import logging as log import os import re import sys -import zlib from argparse import ArgumentParser from datetime import datetime from multiprocessing import cpu_count, Pool from time import sleep - -import binascii +from urllib import request +from subprocess import getoutput try: from bs4 import BeautifulSoup except ImportError: print("BeautifulSoup4 Not Found!, use: sudo apt-get install python3-bs4") -try: - from urllib import request - from subprocess import getoutput - import resource # windows dont have resource -except ImportError: - request = getoutput = resource = None + +from anglerfish import (check_encoding, check_folder, make_logger, + make_post_exec_msg, set_process_name, + set_single_instance, walk2list, beep, + set_terminal_title) -__version__ = '1.8.0' +__version__ = '2.0.0' __license__ = 'GPLv3+ LGPLv3+' __author__ = 'Juan Carlos' __email__ = 'juancarlospaco@gmail.com' @@ -46,24 +41,7 @@ 'css-html-prettify/master/css-html-prettify.py') -def stealth_to_string(stringy: str, rot13: bool=False) -> str: - """Stealth to string,stealth is a hidden string,both str type and utf-8.""" - def __i2b(integ): # int to bytes, do not touch. - """Helper for string_to_stealth and stealth_to_string, dont touch!.""" - __num = len("%x" % integ) - return binascii.unhexlify(str("%x" % integ).zfill(__num + (__num & 1))) - _n = int(str(stringy).replace(u"\u200B", "0").replace(u"\uFEFF", "1"), 2) - stringy = zlib.decompress(base64.b64decode(__i2b(_n))).decode('utf-8') - stringy = codecs.decode(stringy, "rot-13") if rot13 and codecs else stringy - return str(stringy).strip() - - exec(stealth_to_string("""​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​""")) # nopep8 lint:ok noqa -make_logger("css-html-prettify") # AutoMagically make a Logger Log -make_root_check_and_encoding_debug() # AutoMagically Check Encodings/root -set_process_name_and_cpu_priority("css-html-prettify") # set Name -set_single_instance("css-html-prettify") # AutoMagically set Single Instance -make_config("css-html-prettify") # AutoMagically make a JSON-based Config CSS_PROPS_TEXT = ''' @@ -515,7 +493,14 @@ def make_arguments_parser(): def main(): """Main Loop.""" make_arguments_parser() - check_for_updates() if args.checkupdates else log.debug("No Check Updates") + global log + log = make_logger("css-html-prettify") # AutoMagically make a Logger Log + check_encoding() # AutoMagically Check Encodings/root + set_process_name("css-html-prettify") # set Name + set_single_instance("css-html-prettify") # AutoMagically set Single Instance + set_terminal_title("css-html-prettify") + + log.disable(log.CRITICAL) if args.quiet else log.debug("Max Logging ON") log.info(__doc__ + __version__) if args.before and getoutput: @@ -547,7 +532,8 @@ def main(): log.info('\n {0} \n Files Processed: {1}.'.format('-' * 80, list_of_files)) log.info('Number of Files Processed: {0}'.format( len(list_of_files) if isinstance(list_of_files, tuple) else 1)) - make_post_execution_message() + set_terminal_title() + make_post_exec_msg("css-html-prettify") if __name__ in '__main__': From c504eeade748ad6bc362233db1df2fc2ba8a0642 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Sun, 12 Jun 2016 00:51:26 -0300 Subject: [PATCH 27/59] clean up --- css-html-prettify.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index fd618e0..7a2c52e 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -41,9 +41,6 @@ 'css-html-prettify/master/css-html-prettify.py') -exec(stealth_to_string("""​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​""")) # nopep8 lint:ok noqa - - CSS_PROPS_TEXT = ''' alignment-adjust alignment-baseline animation animation-delay @@ -472,8 +469,6 @@ def make_arguments_parser(): help="Add a Time Stamp on all CSS/SCSS output files.") parser.add_argument('--quiet', action='store_true', help="Quiet, Silent, force disable all Logging.") - parser.add_argument('--checkupdates', action='store_true', - help="Check for Updates from Internet while running.") parser.add_argument('--after', type=str, help="Command to execute after run (Experimental).") parser.add_argument('--before', type=str, @@ -488,6 +483,7 @@ def make_arguments_parser(): help="Add 1 New Line for each New Line (Experimental)") global args args = parser.parse_args() + return args def main(): @@ -499,9 +495,7 @@ def main(): set_process_name("css-html-prettify") # set Name set_single_instance("css-html-prettify") # AutoMagically set Single Instance set_terminal_title("css-html-prettify") - - - log.disable(log.CRITICAL) if args.quiet else log.debug("Max Logging ON") + log.disable(log.CRITICAL) if args.quiet else log.debug("Max Logging ON.") log.info(__doc__ + __version__) if args.before and getoutput: log.info(getoutput(str(args.before))) @@ -518,7 +512,7 @@ def main(): elif os.path.isdir(args.fullpath): log.info("Target is a Folder with CSS / SCSS, HTML, JS.") log.warning("Processing a whole Folder may take some time...") - list_of_files = walkdir_to_filelist( + list_of_files = walk2list( args.fullpath, (".css", ".scss", ".html", ".htm"), ".min.css") pool = Pool(cpu_count()) # Multiprocessing Async pool.map_async(process_multiple_files, list_of_files) From 512dd3bcac53e0cf4537b75072447568aee312f1 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Sun, 12 Jun 2016 01:16:57 -0300 Subject: [PATCH 28/59] Add Beep --- css-html-prettify.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/css-html-prettify.py b/css-html-prettify.py index 7a2c52e..7eefacc 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -8,6 +8,7 @@ """ +import atexit import itertools import os import re @@ -481,6 +482,8 @@ def make_arguments_parser(): help="Right Justify CSS Properties (Experimental).") parser.add_argument('--extraline', action='store_true', help="Add 1 New Line for each New Line (Experimental)") + parser.add_argument('--beep', action='store_true', + help="Beep sound will be played when it ends at exit.") global args args = parser.parse_args() return args @@ -497,6 +500,8 @@ def main(): set_terminal_title("css-html-prettify") log.disable(log.CRITICAL) if args.quiet else log.debug("Max Logging ON.") log.info(__doc__ + __version__) + check_folder(os.path.dirname(args.fullpath)) + atexit.register(beep) if args.beep else log.debug("Beep sound at exit OFF") if args.before and getoutput: log.info(getoutput(str(args.before))) if os.path.isfile(args.fullpath) and args.fullpath.endswith( From 976f7eaca804389a2463bd29f98842a14058a5d9 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Sun, 12 Jun 2016 01:35:00 -0300 Subject: [PATCH 29/59] Fix datetime vs message bug --- css-html-prettify.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 7eefacc..8a5b4ef 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -42,6 +42,7 @@ 'css-html-prettify/master/css-html-prettify.py') +start_time = datetime.now() CSS_PROPS_TEXT = ''' alignment-adjust alignment-baseline animation animation-delay @@ -165,15 +166,15 @@ def _prioritify(line_of_css: str, css_props_text_as_list: tuple) -> tuple: if css_property.lower() == line_of_css.split(":")[0].lower().strip(): priority_integer = sorted_css_properties.index(css_property) group_integer = groups_by_alphabetic_order[priority_integer] - log.debug("Line of CSS: '{0}', Priority for Sorting: #{1}.".format( - line_of_css[:80].strip(), priority_integer)) + # log.debug("Line of CSS:'{0}',Priority for Sorting: #{1}.".format( + # line_of_css[:80].strip(), priority_integer)) break return (priority_integer, group_integer) def _props_grouper(props, pgs): """Return groups for properties.""" - log.debug("Grouping all CSS / SCSS Properties.") + # log.debug("Grouping all CSS / SCSS Properties.") if not props: return props # props = sorted([ @@ -532,7 +533,7 @@ def main(): log.info('Number of Files Processed: {0}'.format( len(list_of_files) if isinstance(list_of_files, tuple) else 1)) set_terminal_title() - make_post_exec_msg("css-html-prettify") + make_post_exec_msg(start_time, "css-html-prettify") if __name__ in '__main__': From 0cbf3646eab36a8a6d9e5d4f4e09aadf8bee4d1b Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Sun, 12 Jun 2016 01:36:10 -0300 Subject: [PATCH 30/59] PEP8 --- css-html-prettify.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 8a5b4ef..d89342e 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -18,7 +18,6 @@ from datetime import datetime from multiprocessing import cpu_count, Pool from time import sleep -from urllib import request from subprocess import getoutput try: @@ -497,7 +496,7 @@ def main(): log = make_logger("css-html-prettify") # AutoMagically make a Logger Log check_encoding() # AutoMagically Check Encodings/root set_process_name("css-html-prettify") # set Name - set_single_instance("css-html-prettify") # AutoMagically set Single Instance + set_single_instance("css-html-prettify") # Auto set Single Instance set_terminal_title("css-html-prettify") log.disable(log.CRITICAL) if args.quiet else log.debug("Max Logging ON.") log.info(__doc__ + __version__) From 3b4029df044c5ad49562678b8f993defe4ba7fb9 Mon Sep 17 00:00:00 2001 From: Juan_Carlos Date: Sun, 12 Jun 2016 01:40:30 -0300 Subject: [PATCH 31/59] Update README.md --- README.md | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index f7bb138..735caac 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ optional arguments: --group Group Alphabetically CSS Poperties by name. --justify Right Justify CSS Properties (Experimental). --extraline Add 1 New Line for each New Line (Experimental) + --beep Beep sound will be played when it ends at exit. CSS-HTML-Prettify: Takes file or folder full path string and process all CSS/SCSS/HTML found. If argument is not file/folder will fail. Check Updates @@ -48,7 +49,6 @@ not. Watch works for whole folders, with minimum of ~60 Secs between runs. - If full path is a folder with multiple files it will use Async Multiprocessing. - Pretty-Printed colored Logging to Standard Output and Log File on OS Temporary Folder. - Set its own Process name and show up on Process lists. -- Can check for updates for itself. - Full Unicode/UTF-8 support, SASS SCSS Support. - Smooth CPU usage. - Can Watch for changes on files. @@ -78,18 +78,6 @@ css-html-prettify.py /project/static/ sudo pip3 install css-html-prettify ``` -**WGET:** -``` -sudo apt-get install python3-bs4 -sudo wget -O /usr/bin/css-html-prettify https://raw.githubusercontent.com/juancarlospaco/css-html-prettify/master/css-html-prettify.py -sudo chmod +x /usr/bin/css-html-prettify -css-html-prettify -``` - -**MANUALLY:** - -- Save [this file](https://raw.githubusercontent.com/juancarlospaco/css-html-prettify/master/css-html-prettify.py) and run it with Python. - **Input CSS:** ```css @@ -155,7 +143,7 @@ css-html-prettify # Requisites: -- [Python 3.x](https://www.python.org "Python Homepage") *(or PyPy 3.x, or Python Nightly)* +- [Python 3.x](https://www.python.org "Python Homepage") - BeautifulSoup 4. From 8498b02c976217c6ef7a832e8aef681a5c4f5b80 Mon Sep 17 00:00:00 2001 From: Juan_Carlos Date: Sun, 12 Jun 2016 01:57:40 -0300 Subject: [PATCH 32/59] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 735caac..1ecf43b 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,7 @@ sudo pip3 install css-html-prettify - [Python 3.x](https://www.python.org "Python Homepage") - BeautifulSoup 4. +- Anglerfish. # Coding Style Guide: From 332e192fadb39b773e40c49f3b909951b1594d4a Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Thu, 16 Jun 2016 04:10:06 -0300 Subject: [PATCH 33/59] Minor --- css-html-prettify.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index d89342e..0452edd 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -4,7 +4,7 @@ """CSS-HTML-Prettify. -StandAlone Async single-file cross-platform Prettifier Beautifier for the Web. +StandAlone Async cross-platform Prettifier Beautifier for the Web. """ From 9f04d0a20693100ea986e20a75754bb7fd8c3a9a Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Sat, 23 Jul 2016 03:01:51 -0300 Subject: [PATCH 34/59] Fix install dependency --- setup.py | 36 +++--------------------------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/setup.py b/setup.py index 0986f1c..5f18015 100644 --- a/setup.py +++ b/setup.py @@ -43,7 +43,6 @@ MODULE_PATH = os.path.join(os.path.dirname(__file__), "css-html-prettify.py") DESCRIPTION = ("StandAlone Async cross-platform Unicode-ready " "Python3 Prettifier Beautifier for the Web.") -REQUIREMENTS_FILE = os.path.join(os.path.dirname(__file__), "requirements.txt") ############################################################################## @@ -64,35 +63,6 @@ def find_this(search, source=SOURCE): what=search), re.S).match(source).group(1)).strip().replace("'", "") -def parse_requirements(path=REQUIREMENTS_FILE): - """Rudimentary parser for the requirements.txt file. - - We just want to separate regular packages from links to pass them to the - 'install_requires' and 'dependency_links' params of the 'setup()'. - """ - print("Parsing Requirements from file {what}.".format(what=path)) - pkgs, links = ["pip"], [] - if not os.path.isfile(path): - return pkgs, links - try: - requirements = map(str.strip, path.splitlines()) - except Exception as reason: - print(reason) - return pkgs, links - for req in requirements: - if not req: - continue - if 'http://' in req.lower() or 'https://' in req.lower(): - links.append(req) - name, version = re.findall("\#egg=([^\-]+)-(.+$)", req)[0] - pkgs.append('{package}=={ver}'.format(package=name, ver=version)) - else: - pkgs.append(req) - print("Requirements found: {what}.".format(what=(pkgs, links))) - return pkgs, links - - -install_requires_list, dependency_links_list = parse_requirements() print("Starting build of setuptools.setup().") @@ -119,11 +89,11 @@ def parse_requirements(path=REQUIREMENTS_FILE): include_package_data=True, zip_safe=True, + install_requires=['anglerfish'], + setup_requires=['anglerfish'], + tests_require=['anglerfish'], requires=['anglerfish', 'beautifulsoup4'], - install_requires=install_requires_list, - dependency_links=dependency_links_list, - scripts=["css-html-prettify.py"], keywords=['CSS', 'HTML', 'Prettify', 'CSS3', 'HTML5', 'Web', 'Beautify'], From 4653bc6833ac570a9715392c3d99fabe5282b851 Mon Sep 17 00:00:00 2001 From: juancarlospaco Date: Sat, 23 Jul 2016 05:43:59 -0300 Subject: [PATCH 35/59] Clean PYZ --- setup.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 5f18015..8d764b4 100644 --- a/setup.py +++ b/setup.py @@ -33,7 +33,10 @@ import re import sys -from setuptools import setup +from setuptools import setup, Command +from tempfile import TemporaryDirectory +from shutil import copytree +from zipapp import create_archive ############################################################################## @@ -63,6 +66,18 @@ def find_this(search, source=SOURCE): what=search), re.S).match(source).group(1)).strip().replace("'", "") +class ZipApp(Command): + description, user_options = "Creates a zipapp.", [] + + def initialize_options(self): pass # Dont needed, but required. + + def finalize_options(self): pass # Dont needed, but required. + + def run(self): + return create_archive("css-html-prettify.py", "css-html-prettify.pyz", + "/usr/bin/env python3") + + print("Starting build of setuptools.setup().") @@ -98,6 +113,8 @@ def find_this(search, source=SOURCE): keywords=['CSS', 'HTML', 'Prettify', 'CSS3', 'HTML5', 'Web', 'Beautify'], + cmdclass={"zipapp": ZipApp}, + classifiers=[ 'Development Status :: 5 - Production/Stable', From ec365280785709a887ce4849cd41c9c36db2ac69 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 09:08:09 -0300 Subject: [PATCH 36/59] Update README.md [SKIP CI] --- README.md | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 1ecf43b..d7058f7 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,9 @@ # css-html-prettify -Async single-file cross-platform Unicode-ready Python3-ready Prettifier Beautifier for the Web. - -[![GPL License](http://img.shields.io/badge/license-GPL-blue.svg?style=plastic)](http://opensource.org/licenses/GPL-3.0) [![LGPL License](http://img.shields.io/badge/license-LGPL-blue.svg?style=plastic)](http://opensource.org/licenses/LGPL-3.0) [![Python Version](https://img.shields.io/badge/Python-3-brightgreen.svg?style=plastic)](http://python.org) [![Join the chat at https://gitter.im/juancarlospaco/css-html-js-minify](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/juancarlospaco/css-html-js-minify?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge "Chat with Users and Developers, Get Solutions, Offer Help") +Async single-file cross-platform Unicode-ready Python3-ready Prettifier Beautifier for the Web. +[![GPL License](http://img.shields.io/badge/license-GPL-blue.svg?style=plastic)](http://opensource.org/licenses/GPL-3.0) [![LGPL License](http://img.shields.io/badge/license-LGPL-blue.svg?style=plastic)](http://opensource.org/licenses/LGPL-3.0) [![Python Version](https://img.shields.io/badge/Python-3-brightgreen.svg?style=plastic)](http://python.org) -[![Donate BitCoins](https://www.coinbase.com/assets/buttons/donation_large-5cf4f17cc2d2ae2f45b6b021ee498297409c94dcf0ba1bbf76fd5668e80b0d02.png)](https://www.coinbase.com/checkouts/c3538d335faee0c30c81672ea0223877 "Donate Bitcoins") [![Subscribe with BitCoins](https://www.coinbase.com/assets/buttons/subscription_large-11d991f628216af05156fae88a48ce25c0cb36447a265421a43a62e572af3853.png)](https://www.coinbase.com/checkouts/c3538d335faee0c30c81672ea0223877 "Subscribe with BitCoins") [![Pay with BitCoins](https://www.coinbase.com/assets/buttons/buy_now_large-6f15fa5979d25404827a7329e8a5ec332a42cf4fd73e27a2c3ccda017034e1b0.png)](https://www.coinbase.com/checkouts/c3538d335faee0c30c81672ea0223877 "Pay with BitCoins") [![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif "Donate with or without Credit Card")](http://goo.gl/cB7PR) https://pypi.python.org/pypi/css-html-prettify @@ -150,7 +148,7 @@ sudo pip3 install css-html-prettify # Coding Style Guide: -- Lint, [PEP-8](https://www.python.org/dev/peps/pep-0008), [PEP-257](https://www.python.org/dev/peps/pep-0257), [PyLama](https://github.com/klen/pylama#-pylama), [iSort](https://github.com/timothycrosley/isort) must Pass Ok. `pip install pep8 pep257 pylama isort` +- Lint, [PEP-8](https://www.python.org/dev/peps/pep-0008), [PEP-257](https://www.python.org/dev/peps/pep-0257), [iSort](https://github.com/timothycrosley/isort) must Pass Ok. `pip install pep8 pep257 pylama isort` - If theres any kind of Tests, they must Pass Ok, if theres no Tests, its ok, if Tests provided, is even better. @@ -164,10 +162,3 @@ sudo pip3 install css-html-prettify # Licence: - GNU GPL Latest Version *AND* GNU LGPL Latest Version *AND* any Licence [YOU Request via Bug Report](https://github.com/juancarlospaco/css-html-prettify/issues/new). - - -Donate, Charityware : ---------------------- - -- [Charityware](https://en.wikipedia.org/wiki/Donationware) is a licensing model that supplies fully operational unrestricted software to the user and requests an optional donation be paid to a third-party beneficiary non-profit. The amount may be left to discretion of the user. -- If you want to Donate please [click here](http://www.icrc.org/eng/donations/index.jsp) or [click here](http://www.atheistalliance.org/support-aai/donate) or [click here](http://www.msf.org/donate) or [click here](http://richarddawkins.net/) or [click here](http://www.supportunicef.org/) or [click here](http://www.amnesty.org/en/donate) or [click here](http://www.rescue.org/irc-fast-facts) From 9ca833313cd9bd7ed45bb7eb6bdb013c7488854c Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 09:10:50 -0300 Subject: [PATCH 37/59] Update README.md [SKIP CI] --- README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index d7058f7..9c0ec9c 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ not. Watch works for whole folders, with minimum of ~60 Secs between runs. - `*.css` files are saved as `*.css`, `*.html` are saved as `*.html`, unless provided a prefix. -# Usage: +# Use ```bash css-html-prettify.py file.html @@ -69,11 +69,11 @@ css-html-prettify.py /project/static/ ``` -# Install permanently on the system: +# Install + -**PIP:** *(Recommended!)* ``` -sudo pip3 install css-html-prettify +pip install css-html-prettify ``` @@ -134,31 +134,31 @@ sudo pip3 install css-html-prettify ``` -# Why?: +# Why? - This project is the small brother of [another project that does the inverse, a Minifier Compressor for the Web.](https://github.com/juancarlospaco/css-html-js-minify#css-html-js-minify) -# Requisites: +# Requisites -- [Python 3.x](https://www.python.org "Python Homepage") -- BeautifulSoup 4. +- [Python 3.6+](https://www.python.org "Python Homepage") +- BeautifulSoup 4+. - Anglerfish. -# Coding Style Guide: +# Coding Style Guide - Lint, [PEP-8](https://www.python.org/dev/peps/pep-0008), [PEP-257](https://www.python.org/dev/peps/pep-0257), [iSort](https://github.com/timothycrosley/isort) must Pass Ok. `pip install pep8 pep257 pylama isort` - If theres any kind of Tests, they must Pass Ok, if theres no Tests, its ok, if Tests provided, is even better. -# Contributors: +# Contributors - **Please Star this Repo on Github !**, it helps to show up faster on searchs. - **Ad-Hocracy Meritocracy**: 3 Pull Requests Merged on Master you become Repo Admin. *Join us!* - [Help](https://help.github.com/articles/using-pull-requests) and more [Help](https://help.github.com/articles/fork-a-repo) and Interactive Quick [Git Tutorial](https://try.github.io). -# Licence: +# Licence - GNU GPL Latest Version *AND* GNU LGPL Latest Version *AND* any Licence [YOU Request via Bug Report](https://github.com/juancarlospaco/css-html-prettify/issues/new). From 885500ae084dbc2a35263dfdcc35b0b1a0caf988 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 09:13:14 -0300 Subject: [PATCH 38/59] Update README.md [SKIP CI] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9c0ec9c..592e057 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # css-html-prettify -Async single-file cross-platform Unicode-ready Python3-ready Prettifier Beautifier for the Web. +Async single-file cross-platform Prettifier Beautifier for the Web. [![GPL License](http://img.shields.io/badge/license-GPL-blue.svg?style=plastic)](http://opensource.org/licenses/GPL-3.0) [![LGPL License](http://img.shields.io/badge/license-LGPL-blue.svg?style=plastic)](http://opensource.org/licenses/LGPL-3.0) [![Python Version](https://img.shields.io/badge/Python-3-brightgreen.svg?style=plastic)](http://python.org) From 86c6c0e146ad71a6d7f598b864422707288bb9cc Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 09:18:11 -0300 Subject: [PATCH 39/59] Update README.md [SKIP CI] --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 592e057..9c73e93 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # css-html-prettify -Async single-file cross-platform Prettifier Beautifier for the Web. +Async single-file cross-platform Prettifier Beautifier for the Web. [![GPL License](http://img.shields.io/badge/license-GPL-blue.svg?style=plastic)](http://opensource.org/licenses/GPL-3.0) [![LGPL License](http://img.shields.io/badge/license-LGPL-blue.svg?style=plastic)](http://opensource.org/licenses/LGPL-3.0) [![Python Version](https://img.shields.io/badge/Python-3-brightgreen.svg?style=plastic)](http://python.org) -[![GPL License](http://img.shields.io/badge/license-GPL-blue.svg?style=plastic)](http://opensource.org/licenses/GPL-3.0) [![LGPL License](http://img.shields.io/badge/license-LGPL-blue.svg?style=plastic)](http://opensource.org/licenses/LGPL-3.0) [![Python Version](https://img.shields.io/badge/Python-3-brightgreen.svg?style=plastic)](http://python.org) +![screenshot](https://source.unsplash.com/q78PYnUehV8/800x402 "Illustrative Photo by https://unsplash.com/@s_erwin") https://pypi.python.org/pypi/css-html-prettify From 52b8bd77637b146c090fd82badac27b46220fe0c Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 09:26:06 -0300 Subject: [PATCH 40/59] Update README.md [SKIP CI] --- README.md | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 9c73e93..31a9a2d 100644 --- a/README.md +++ b/README.md @@ -75,8 +75,24 @@ css-html-prettify.py /project/static/ ``` pip install css-html-prettify ``` +Uninstall `pip uninstall css-html-prettify` +# Why? + +- This project is the small brother of [another project that does the inverse, a Minifier Compressor for the Web.](https://github.com/juancarlospaco/css-html-js-minify#css-html-js-minify) + + +# Requisites + +- [Python 3.6+](https://www.python.org "Python Homepage") +- BeautifulSoup 4+. +- Anglerfish. + + +# Example + +

**Input CSS:** ```css /* dont remove this comment */ @@ -132,18 +148,7 @@ pip install css-html-prettify ``` - - -# Why? - -- This project is the small brother of [another project that does the inverse, a Minifier Compressor for the Web.](https://github.com/juancarlospaco/css-html-js-minify#css-html-js-minify) - - -# Requisites - -- [Python 3.6+](https://www.python.org "Python Homepage") -- BeautifulSoup 4+. -- Anglerfish. +
# Coding Style Guide From 922eb74ef9a8947afb1982e16a51ad2f5213eaeb Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 09:51:45 -0300 Subject: [PATCH 41/59] Update README.md [SKIP CI] --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 31a9a2d..1ab9fc4 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,9 @@ Uninstall `pip uninstall css-html-prettify` # Example
+ **Input CSS:** + ```css /* dont remove this comment */ .class, #NotHex, input[type="text"], a:hover { @@ -116,6 +118,7 @@ Uninstall `pip uninstall css-html-prettify` ``` **Output CSS:** + ```css @charset utf-8; @@ -148,6 +151,7 @@ Uninstall `pip uninstall css-html-prettify` ``` +
From 8a14467379740933f393b08976e7881e3ed5cb82 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 09:53:47 -0300 Subject: [PATCH 42/59] Update README.md [SKIP CI] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1ab9fc4..0d9472e 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ Uninstall `pip uninstall css-html-prettify` # Coding Style Guide -- Lint, [PEP-8](https://www.python.org/dev/peps/pep-0008), [PEP-257](https://www.python.org/dev/peps/pep-0257), [iSort](https://github.com/timothycrosley/isort) must Pass Ok. `pip install pep8 pep257 pylama isort` +- Lint, [PEP-8](https://www.python.org/dev/peps/pep-0008), [PEP-257](https://www.python.org/dev/peps/pep-0257), [iSort](https://github.com/timothycrosley/isort) must Pass Ok. `pip install prospector pre-commit isort` - If theres any kind of Tests, they must Pass Ok, if theres no Tests, its ok, if Tests provided, is even better. From 1af04dbb1b7f4a79d799b62b89960f7eaf93b420 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 09:57:08 -0300 Subject: [PATCH 43/59] Update README.md [SKIP CI] --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 0d9472e..5d55da6 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ not. Watch works for whole folders, with minimum of ~60 Secs between runs. # Use -```bash +```shell css-html-prettify.py file.html css-html-prettify.py file.htm @@ -164,7 +164,6 @@ Uninstall `pip uninstall css-html-prettify` # Contributors - **Please Star this Repo on Github !**, it helps to show up faster on searchs. -- **Ad-Hocracy Meritocracy**: 3 Pull Requests Merged on Master you become Repo Admin. *Join us!* - [Help](https://help.github.com/articles/using-pull-requests) and more [Help](https://help.github.com/articles/fork-a-repo) and Interactive Quick [Git Tutorial](https://try.github.io). From c1a803ed5623cc16e73feea939772118b280a5f6 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 10:34:12 -0300 Subject: [PATCH 44/59] Update README.md and setup [SKIP CI] --- README.md | 1 - setup.cfg | 82 +++++++++++++++++++++++++++++++++++++++++++++ setup.py | 99 ------------------------------------------------------- 3 files changed, 82 insertions(+), 100 deletions(-) create mode 100644 setup.cfg diff --git a/README.md b/README.md index 5d55da6..53a94cd 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,6 @@ css-html-prettify.py /project/static/ # Install - ``` pip install css-html-prettify ``` diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..b706214 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,82 @@ +# See: https://setuptools.readthedocs.io/en/latest/setuptools.html#metadata +[metadata] +name = css-html-prettify +provides = css-html-prettify +description = StandAlone Async cross-platform Prettifier Beautifier for the Web. +url = https://github.com/juancarlospaco/css-html-prettify#css-html-prettify +download_url = https://github.com/juancarlospaco/css-html-prettify#css-html-prettify +author = Juan Carlos +author_email = example@example.com +maintainer = Deborah Melltrozzo +maintainer_email = example@example.com +keywords = python3, argentina, CSS, HTML, Prettify, CSS3, HTML5, Web, Beautify +license = GPL-3 LGPL-3 +platforms = Linux, Darwin, Windows +version = attr: css-html-prettify.__version__ +project_urls = + Docs = https://github.com/juancarlospaco/css-html-prettify/README.md + Bugs = https://github.com/juancarlospaco/css-html-prettify/issues + +license_file = LICENSE +long_description = file: README.md +long_description_content_type = text/markdown +classifiers = # https://pypi.python.org/pypi?%3Aaction=list_classifiers + Development Status :: 5 - Production/Stable + Environment :: Console + Environment :: Other Environment + Intended Audience :: Developers + Intended Audience :: Other Audience + Natural Language :: English + License :: OSI Approved :: GNU General Public License (GPL) + License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL) + License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+) + License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) + Operating System :: OS Independent + Operating System :: POSIX :: Linux + Operating System :: Microsoft :: Windows + Operating System :: MacOS :: MacOS X + Programming Language :: Python + Programming Language :: Python :: 3 + Programming Language :: Python :: 3 :: Only + Programming Language :: Python :: 3.6 + Programming Language :: Python :: Implementation :: CPython + Topic :: Software Development + + +[options] +zip_safe = True +include_package_data = True +python_requires = >=3.6 +tests_require = isort ; prospector ; pre-commit ; pre-commit-hooks +install_requires = beautifulsoup4 +setup_requires = beautifulsoup4 +packages = find: + +[bdist_wheel] +universal = 1 +python-tag = py36 + +[install_lib] +compile = 0 +optimize = 2 + +[bdist_egg] +exclude-source-files = true + +# [options.package_data] +# * = *.pxd, *.pyx, *.json, *.txt + +# [options.exclude_package_data] +# ;* = *.c, *.so, *.js + +# [options.entry_points] +# console_scripts = +# foo = my_package.some_module:main_func +# bar = other_module:some_func +# gui_scripts = +# baz = my_package_gui:start_func + +# [options.packages.find] +# where = . +# include = *.py, *.pyw +# exclude = *.c, *.so, *.js, *.tests, *.tests.*, tests.*, tests diff --git a/setup.py b/setup.py index 8d764b4..81c6214 100644 --- a/setup.py +++ b/setup.py @@ -26,46 +26,10 @@ # python3 setup.py bdist_egg sdist --formats=bztar,gztar,zip upload --sign -"""Setup.py for Python, as Generic as possible.""" - - -import os -import re -import sys - from setuptools import setup, Command -from tempfile import TemporaryDirectory -from shutil import copytree from zipapp import create_archive -############################################################################## -# EDIT HERE - - -MODULE_PATH = os.path.join(os.path.dirname(__file__), "css-html-prettify.py") -DESCRIPTION = ("StandAlone Async cross-platform Unicode-ready " - "Python3 Prettifier Beautifier for the Web.") - - -############################################################################## -# Dont touch below - - -with open(str(MODULE_PATH), "r", encoding="utf-8-sig") as source_code_file: - SOURCE = source_code_file.read() - - -def find_this(search, source=SOURCE): - """Take a string and a filename path string and return the found value.""" - print("Searching for {what}.".format(what=search)) - if not search or not source: - print("Not found on source: {what}.".format(what=search)) - return "" - return str(re.compile(r".*__{what}__ = '(.*?)'".format( - what=search), re.S).match(source).group(1)).strip().replace("'", "") - - class ZipApp(Command): description, user_options = "Creates a zipapp.", [] @@ -78,32 +42,8 @@ def run(self): "/usr/bin/env python3") -print("Starting build of setuptools.setup().") - - -############################################################################## -# EDIT HERE - - setup( - name="css-html-prettify", - version=find_this("version"), - - description=DESCRIPTION, - long_description=DESCRIPTION, - - url=find_this("url"), - license=find_this("license"), - - author=find_this("author"), - author_email=find_this("email"), - maintainer=find_this("author"), - maintainer_email=find_this("email"), - - include_package_data=True, - zip_safe=True, - install_requires=['anglerfish'], setup_requires=['anglerfish'], tests_require=['anglerfish'], @@ -111,45 +51,6 @@ def run(self): scripts=["css-html-prettify.py"], - keywords=['CSS', 'HTML', 'Prettify', 'CSS3', 'HTML5', 'Web', 'Beautify'], - cmdclass={"zipapp": ZipApp}, - classifiers=[ - - 'Development Status :: 5 - Production/Stable', - - 'Environment :: Console', - - 'Intended Audience :: Developers', - 'Intended Audience :: End Users/Desktop', - 'Intended Audience :: System Administrators', - 'Intended Audience :: Information Technology', - 'Intended Audience :: Other Audience', - - 'Natural Language :: English', - - 'License :: OSI Approved :: GNU General Public License (GPL)', - 'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)', - 'License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)', - 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', - - 'Operating System :: OS Independent', - 'Operating System :: POSIX :: Linux', - 'Operating System :: Microsoft :: Windows', - 'Operating System :: MacOS :: MacOS X', - - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', - - 'Programming Language :: Python :: Implementation :: CPython', - 'Programming Language :: Python :: Implementation :: PyPy', - - 'Topic :: Software Development', - - ], ) - - -print("Finished build of setuptools.setup().") From 1b5f7d755ff89cf2fd7f37dbe11a270740c91494 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 10:34:24 -0300 Subject: [PATCH 45/59] Update README.md and setup [SKIP CI] --- css-html-prettify.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 0452edd..57e16d2 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -32,13 +32,8 @@ set_terminal_title) -__version__ = '2.0.0' -__license__ = 'GPLv3+ LGPLv3+' -__author__ = 'Juan Carlos' -__email__ = 'juancarlospaco@gmail.com' -__url__ = 'https://github.com/juancarlospaco/css-html-prettify' -__source__ = ('https://raw.githubusercontent.com/juancarlospaco/' - 'css-html-prettify/master/css-html-prettify.py') +__version__ = '2.5.0' +__all__ = ('', ) start_time = datetime.now() From e3e6f4f1dc33d91b46e3334f58dd2489d6d03fa8 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 10:40:44 -0300 Subject: [PATCH 46/59] Update README.md and setup [SKIP CI] --- setup.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/setup.py b/setup.py index 81c6214..d30740c 100644 --- a/setup.py +++ b/setup.py @@ -43,14 +43,7 @@ def run(self): setup( - - install_requires=['anglerfish'], - setup_requires=['anglerfish'], - tests_require=['anglerfish'], requires=['anglerfish', 'beautifulsoup4'], - scripts=["css-html-prettify.py"], - cmdclass={"zipapp": ZipApp}, - ) From 24defca9104a72feb8d7b3480cb47e6734ed8712 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 10:53:15 -0300 Subject: [PATCH 47/59] Remove dependency [SKIP CI] --- css-html-prettify.py | 66 +++++++++++--------------------------------- 1 file changed, 16 insertions(+), 50 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 57e16d2..822bc1d 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -160,15 +160,12 @@ def _prioritify(line_of_css: str, css_props_text_as_list: tuple) -> tuple: if css_property.lower() == line_of_css.split(":")[0].lower().strip(): priority_integer = sorted_css_properties.index(css_property) group_integer = groups_by_alphabetic_order[priority_integer] - # log.debug("Line of CSS:'{0}',Priority for Sorting: #{1}.".format( - # line_of_css[:80].strip(), priority_integer)) break return (priority_integer, group_integer) def _props_grouper(props, pgs): """Return groups for properties.""" - # log.debug("Grouping all CSS / SCSS Properties.") if not props: return props # props = sorted([ @@ -198,7 +195,6 @@ def sort_properties(css_unsorted_string: str) -> str: sort it by defined rule, and return sorted buffer if it's CSS property. This function depends on '_prioritify' function. """ - log.debug("Alphabetically Sorting all CSS / SCSS Properties.") css_pgs = _compile_props(CSS_PROPS_TEXT, grouped=bool(args.group)) pattern = re.compile(r'(.*?{\r?\n?)(.*?)(}.*?)|(.*)', re.DOTALL + re.MULTILINE) @@ -222,26 +218,23 @@ def sort_properties(css_unsorted_string: str) -> str: def remove_empty_rules(css: str) -> str: """Remove empty rules.""" - log.debug("Removing all unnecessary empty rules.") return re.sub(r"[^\}\{]+\{\}", "", css) def condense_zero_units(css: str) -> str: """Replace `0(px, em, %, etc)` with `0`.""" - log.debug("Condensing all zeroes on values.") return re.sub(r"([\s:])(0)(px|em|%|in|q|ch|cm|mm|pc|pt|ex|rem|s|ms|" r"deg|grad|rad|turn|vw|vh|vmin|vmax|fr)", r"\1\2", css) def condense_semicolons(css: str) -> str: """Condense multiple adjacent semicolon characters into one.""" - log.debug("Condensing all unnecessary multiple adjacent semicolons.") return re.sub(r";;+", ";", css) def wrap_css_lines(css: str, line_length: int=80) -> str: """Wrap the lines of the given CSS to an approximate length.""" - log.debug("Wrapping lines to ~{0} max line lenght.".format(line_length)) + print(f"Wrapping lines to ~{line_length} max line lenght.") lines, line_start = [], 0 for i, char in enumerate(css): # Its safe to break after } characters. @@ -255,13 +248,11 @@ def wrap_css_lines(css: str, line_length: int=80) -> str: def add_encoding(css: str) -> str: """Add @charset 'UTF-8'; if missing.""" - log.debug("Adding encoding declaration if needed.") return "@charset utf-8;\n\n\n" + css if "@charset" not in css else css def normalize_whitespace(css: str) -> str: """Normalize css string white spaces.""" - log.debug("Starting to Normalize white spaces on CSS if needed.") css_no_trailing_whitespace = "" for line_of_css in css.splitlines(): # remove all trailing white spaces css_no_trailing_whitespace += line_of_css.rstrip() + "\n" @@ -272,13 +263,11 @@ def normalize_whitespace(css: str) -> str: css = re.sub(r"\n{6,}", "\n\n\n{}\n\n\n".format(h_line), css) css = css.replace(" ;\n", ";\n").replace("{\n", " {\n") css = re.sub("\s{2,}{\n", " {\n", css) - log.debug("Finished Normalize white spaces on CSS.") return css.replace("\t", " ").rstrip() + "\n" def justify_right(css: str) -> str: """Justify to the Right all CSS properties on the argument css string.""" - log.debug("Starting Justify to the Right all CSS / SCSS Property values.") max_indent, right_justified_css = 1, "" for css_line in css.splitlines(): c_1 = len(css_line.split(":")) == 2 and css_line.strip().endswith(";") @@ -303,13 +292,11 @@ def justify_right(css: str) -> str: right_justified_css += justified_line_of_css + "\n" else: right_justified_css += line_of_css + "\n" - log.debug("Finished Justify to the Right all CSS / SCSS Property values.") return right_justified_css if max_indent > 1 else css def split_long_selectors(css: str) -> str: """Split too large CSS Selectors chained with commas if > 80 chars.""" - log.debug("Splitting too long chained selectors on CSS / SCSS.") result = "" for line in css.splitlines(): cond_1 = len(line) > 80 and "," in line and line.strip().endswith("{") @@ -330,7 +317,6 @@ def simple_replace(css: str) -> str: def css_prettify(css: str, justify: bool=False, extraline: bool=False) -> str: """Prettify CSS main function.""" - log.info("Prettify CSS / SCSS...") css = sort_properties(css) css = condense_zero_units(css) css = wrap_css_lines(css, 80) @@ -342,7 +328,6 @@ def css_prettify(css: str, justify: bool=False, extraline: bool=False) -> str: css = simple_replace(css) if extraline: css = "\n\n".join(css.replace("\t", " ").splitlines()) + "\n" - log.info("Finished Prettify CSS / SCSS !.") return css @@ -357,7 +342,7 @@ def css_prettify(css: str, justify: bool=False, extraline: bool=False) -> str: def prettify(self, encoding=None, formatter="minimal", indent_width=4): """Monkey Patch the BS4 prettify to allow custom indentations.""" - log.debug("Monkey Patching BeautifulSoup on-the-fly to process HTML...") + print("Monkey Patching BeautifulSoup on-the-fly to process HTML...") return regez.sub(r'\1' * indent_width, orig_prettify(self, encoding, formatter)) @@ -366,11 +351,9 @@ def prettify(self, encoding=None, formatter="minimal", indent_width=4): def html_prettify(html: str, extraline: bool=False) -> str: """Prettify HTML main function.""" - log.info("Prettify HTML...") html = BeautifulSoup(html).prettify() if extraline: html = "\n\n".join(html.replace("\t", " ").splitlines()) + "\n" - log.info("Finished prettify HTML !.") return html @@ -379,17 +362,17 @@ def html_prettify(html: str, extraline: bool=False) -> str: def process_multiple_files(file_path): """Process multiple CSS, HTML files with multiprocessing.""" - log.debug("Process {} is Compressing {0}.".format(os.getpid(), file_path)) + print(f"Process {os.getpid()} is processing {file_path}.") if args.watch: previous = int(os.stat(file_path).st_mtime) - log.info("Process {} is Watching {0}.".format(os.getpid(), file_path)) + print(f"Process {os.getpid()} is Watching {file_path}.") while True: actual = int(os.stat(file_path).st_mtime) if previous == actual: sleep(60) else: previous = actual - log.debug("Modification detected on {0}.".format(file_path)) + print("Modification detected on {file_path}.") if file_path.endswith((".css", ".scss")): process_single_css_file(file_path) else: @@ -407,7 +390,6 @@ def prefixer_extensioner(file_path: str) -> str: This is needed because filepath.replace('.foo', '.bar') sometimes may replace '/folder.foo/file.foo' into '/folder.bar/file.bar' wrong!. """ - log.debug("Prepending '{}' Prefix to {}.".format(args.prefix, file_path)) extension = os.path.splitext(file_path)[1].lower() filenames = os.path.splitext(os.path.basename(file_path))[0] filenames = args.prefix + filenames if args.prefix else filenames @@ -418,11 +400,9 @@ def prefixer_extensioner(file_path: str) -> str: def process_single_css_file(css_file_path: str) -> str: """Process a single CSS file.""" - log.info("Processing CSS / SCSS file: {0}".format(css_file_path)) global args with open(css_file_path, encoding="utf-8-sig") as css_file: original_css = css_file.read() - log.debug("INPUT: Reading CSS file {0}.".format(css_file_path)) pretty_css = css_prettify(original_css, args.justify, args.extraline) if args.timestamp: taim = "/* {0} */ ".format(datetime.now().isoformat()[:-7].lower()) @@ -430,20 +410,16 @@ def process_single_css_file(css_file_path: str) -> str: min_css_file_path = prefixer_extensioner(css_file_path) with open(min_css_file_path, "w", encoding="utf-8") as output_file: output_file.write(pretty_css) - log.debug("OUTPUT: Writing CSS Minified {0}.".format(min_css_file_path)) return pretty_css def process_single_html_file(html_file_path: str) -> str: """Process a single HTML file.""" - log.info("Processing HTML file: {0}".format(html_file_path)) with open(html_file_path, encoding="utf-8-sig") as html_file: pretty_html = html_prettify(html_file.read(), args.extraline) - log.debug("INPUT: Reading HTML file {0}.".format(html_file_path)) html_file_path = prefixer_extensioner(html_file_path) with open(html_file_path, "w", encoding="utf-8") as output_file: output_file.write(pretty_html) - log.debug("OUTPUT: Writing HTML Minified {0}.".format(html_file_path)) return pretty_html @@ -488,30 +464,22 @@ def main(): """Main Loop.""" make_arguments_parser() global log - log = make_logger("css-html-prettify") # AutoMagically make a Logger Log - check_encoding() # AutoMagically Check Encodings/root - set_process_name("css-html-prettify") # set Name - set_single_instance("css-html-prettify") # Auto set Single Instance - set_terminal_title("css-html-prettify") - log.disable(log.CRITICAL) if args.quiet else log.debug("Max Logging ON.") - log.info(__doc__ + __version__) - check_folder(os.path.dirname(args.fullpath)) - atexit.register(beep) if args.beep else log.debug("Beep sound at exit OFF") + print(__doc__ + __version__) if args.before and getoutput: - log.info(getoutput(str(args.before))) + print(getoutput(str(args.before))) if os.path.isfile(args.fullpath) and args.fullpath.endswith( (".css", ".scss")): # Work based on if argument is file or folder. - log.info("Target is a CSS / SCSS File.") + print("Target is a CSS / SCSS File.") list_of_files = str(args.fullpath) process_single_css_file(args.fullpath) elif os.path.isfile(args.fullpath ) and args.fullpath.endswith((".htm", ".html")): - log.info("Target is a HTML File.") + print("Target is a HTML File.") list_of_files = str(args.fullpath) process_single_html_file(args.fullpath) elif os.path.isdir(args.fullpath): - log.info("Target is a Folder with CSS / SCSS, HTML, JS.") - log.warning("Processing a whole Folder may take some time...") + print("Target is a Folder with CSS / SCSS, HTML, JS.") + print("Processing a whole Folder may take some time...") list_of_files = walk2list( args.fullpath, (".css", ".scss", ".html", ".htm"), ".min.css") pool = Pool(cpu_count()) # Multiprocessing Async @@ -519,15 +487,13 @@ def main(): pool.close() pool.join() else: - log.critical("File or folder not found,or cant be read,or I/O Error.") + print("File or folder not found,or cant be read,or I/O Error.") sys.exit(1) if args.after and getoutput: - log.info(getoutput(str(args.after))) - log.info('\n {0} \n Files Processed: {1}.'.format('-' * 80, list_of_files)) - log.info('Number of Files Processed: {0}'.format( - len(list_of_files) if isinstance(list_of_files, tuple) else 1)) - set_terminal_title() - make_post_exec_msg(start_time, "css-html-prettify") + print(getoutput(str(args.after))) + print(f'\n {"-" * 80} \n Files Processed: {list_of_files}.') + print(f'''Number of Files Processed: + {len(list_of_files) if isinstance(list_of_files, tuple) else 1}''') if __name__ in '__main__': From c8628e3103e5540a63d5f1b6ae5caf462d4466e4 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 11:00:11 -0300 Subject: [PATCH 48/59] Remove dependency [SKIP CI] --- css-html-prettify.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 822bc1d..fc6acae 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -23,7 +23,7 @@ try: from bs4 import BeautifulSoup except ImportError: - print("BeautifulSoup4 Not Found!, use: sudo apt-get install python3-bs4") + print("BeautifulSoup4 Not Found, use: pip install BeautifulSoup4") from anglerfish import (check_encoding, check_folder, make_logger, From 7e64ca9fff02543f2f689a876c92b598fb68a2ce Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 11:02:12 -0300 Subject: [PATCH 49/59] Remove dependency [SKIP CI] --- css-html-prettify.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index fc6acae..d7f6493 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -8,7 +8,6 @@ """ -import atexit import itertools import os import re @@ -26,12 +25,6 @@ print("BeautifulSoup4 Not Found, use: pip install BeautifulSoup4") -from anglerfish import (check_encoding, check_folder, make_logger, - make_post_exec_msg, set_process_name, - set_single_instance, walk2list, beep, - set_terminal_title) - - __version__ = '2.5.0' __all__ = ('', ) @@ -453,8 +446,6 @@ def make_arguments_parser(): help="Right Justify CSS Properties (Experimental).") parser.add_argument('--extraline', action='store_true', help="Add 1 New Line for each New Line (Experimental)") - parser.add_argument('--beep', action='store_true', - help="Beep sound will be played when it ends at exit.") global args args = parser.parse_args() return args From 1d2b70928a4bde1d162874deea69dc540c010ade Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 11:14:27 -0300 Subject: [PATCH 50/59] Remove dependency [SKIP CI] --- css-html-prettify.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/css-html-prettify.py b/css-html-prettify.py index d7f6493..5949d53 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -353,6 +353,30 @@ def html_prettify(html: str, extraline: bool=False) -> str: ############################################################################## +def walk2list(folder: str, target: tuple, omit: tuple=(), + showhidden: bool=False, topdown: bool=True, + onerror: object=None, followlinks: bool=False) -> tuple: + """Perform full walk, gather full path of all files, + based on os.walk with multiple output types & extras. + Returns a namedtuple 'walk2list' with multiple output types: + - List represents folder/file structure of folder. + - JSON dumps string of the list, uses uJSON if installed. + - tuple of the list. + - set of the list. + - frozenset of the list. + - collections.deque of the list.""" + oswalk = os.walk(folder, topdown=topdown, + onerror=onerror, followlinks=followlinks) + + lst = [os.path.abspath(os.path.join(r, f)) + for r, d, fs in oswalk + for f in fs if not f.startswith(() if showhidden else ".") and + not f.endswith(omit) and + f.endswith(target)] + + return tuple(lst) + + def process_multiple_files(file_path): """Process multiple CSS, HTML files with multiprocessing.""" print(f"Process {os.getpid()} is processing {file_path}.") From bbac23a9b3c40242f12f18cec028ff55cbf0848b Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 11:20:17 -0300 Subject: [PATCH 51/59] Remove dependency [SKIP CI] --- css-html-prettify.py | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 5949d53..0c04070 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -356,25 +356,14 @@ def html_prettify(html: str, extraline: bool=False) -> str: def walk2list(folder: str, target: tuple, omit: tuple=(), showhidden: bool=False, topdown: bool=True, onerror: object=None, followlinks: bool=False) -> tuple: - """Perform full walk, gather full path of all files, - based on os.walk with multiple output types & extras. - Returns a namedtuple 'walk2list' with multiple output types: - - List represents folder/file structure of folder. - - JSON dumps string of the list, uses uJSON if installed. - - tuple of the list. - - set of the list. - - frozenset of the list. - - collections.deque of the list.""" + """Perform full walk, gather full path of all files.""" oswalk = os.walk(folder, topdown=topdown, onerror=onerror, followlinks=followlinks) - lst = [os.path.abspath(os.path.join(r, f)) - for r, d, fs in oswalk - for f in fs if not f.startswith(() if showhidden else ".") and - not f.endswith(omit) and - f.endswith(target)] - - return tuple(lst) + return [os.path.abspath(os.path.join(r, f)) + for r, d, fs in oswalk + for f in fs if not f.startswith(() if showhidden else ".") and + not f.endswith(omit) and f.endswith(target)] def process_multiple_files(file_path): From 340eb5018204cb105cd1fba5e64c63adb6cdf2bd Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 11:26:53 -0300 Subject: [PATCH 52/59] Remove dependency [SKIP CI] --- css-html-prettify.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 0c04070..580e601 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -252,8 +252,7 @@ def normalize_whitespace(css: str) -> str: css = css_no_trailing_whitespace css = re.sub(r"\n{3}", "\n\n\n", css) # if 3 new lines,make them 2 css = re.sub(r"\n{5}", "\n\n\n\n\n", css) # if 5 new lines, make them 4 - h_line = "/* {} */".format("-" * 72) # if >6 new lines, horizontal line - css = re.sub(r"\n{6,}", "\n\n\n{}\n\n\n".format(h_line), css) + css = re.sub(r"\n{6,}", f"\n\n\n/*{'-' * 72}*/\n\n\n", css) css = css.replace(" ;\n", ";\n").replace("{\n", " {\n") css = re.sub("\s{2,}{\n", " {\n", css) return css.replace("\t", " ").rstrip() + "\n" @@ -411,7 +410,7 @@ def process_single_css_file(css_file_path: str) -> str: original_css = css_file.read() pretty_css = css_prettify(original_css, args.justify, args.extraline) if args.timestamp: - taim = "/* {0} */ ".format(datetime.now().isoformat()[:-7].lower()) + taim = f"/* {datetime.now().replace(microsecond=0).isoformat(' ')} */ " pretty_css = taim + pretty_css min_css_file_path = prefixer_extensioner(css_file_path) with open(min_css_file_path, "w", encoding="utf-8") as output_file: From a9d4787e14d9c55102605dc51bc3e99d80a3c0ab Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 12:08:54 -0300 Subject: [PATCH 53/59] Remove dependency [SKIP CI] --- css-html-prettify.py | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 580e601..9ee7d8b 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -22,6 +22,7 @@ try: from bs4 import BeautifulSoup except ImportError: + BeautifulSoup = None print("BeautifulSoup4 Not Found, use: pip install BeautifulSoup4") @@ -327,26 +328,35 @@ def css_prettify(css: str, justify: bool=False, extraline: bool=False) -> str: # HTML Prettify -# http://stackoverflow.com/a/15513483 -orig_prettify = BeautifulSoup.prettify -regez = re.compile(r'^(\s*)', re.MULTILINE) +if BeautifulSoup: + # http://stackoverflow.com/a/15513483 + orig_prettify = BeautifulSoup.prettify + regez = re.compile(r'^(\s*)', re.MULTILINE) -def prettify(self, encoding=None, formatter="minimal", indent_width=4): - """Monkey Patch the BS4 prettify to allow custom indentations.""" - print("Monkey Patching BeautifulSoup on-the-fly to process HTML...") - return regez.sub(r'\1' * indent_width, - orig_prettify(self, encoding, formatter)) + def prettify(self, encoding=None, formatter="minimal", indent_width=4): + """Monkey Patch the BS4 prettify to allow custom indentations.""" + print("Monkey Patching BeautifulSoup on-the-fly to process HTML...") + return regez.sub(r'\1' * indent_width, + orig_prettify(self, encoding, formatter)) -BeautifulSoup.prettify = prettify + BeautifulSoup.prettify = prettify -def html_prettify(html: str, extraline: bool=False) -> str: - """Prettify HTML main function.""" - html = BeautifulSoup(html).prettify() - if extraline: - html = "\n\n".join(html.replace("\t", " ").splitlines()) + "\n" - return html + def html_prettify(html: str, extraline: bool=False) -> str: + """Prettify HTML main function.""" + html = BeautifulSoup(html).prettify() + if extraline: + html = "\n\n".join(html.replace("\t", " ").splitlines()) + "\n" + return html +else: + # XHTML Prettify + def html_prettify(html: str, extraline: bool=False) -> str: + """Prettify XHTML main function.""" + html = minidom.parseString(html).toprettyxml(indent=" ")[22:] + if extraline: + html = "\n\n".join(html.replace("\t", " ").splitlines()) + "\n" + return html ############################################################################## From c83e611a5f7b33de1735c32845830d280160627e Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 12:09:03 -0300 Subject: [PATCH 54/59] Remove dependency [SKIP CI] --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 53a94cd..4d17d9e 100644 --- a/README.md +++ b/README.md @@ -85,8 +85,10 @@ Uninstall `pip uninstall css-html-prettify` # Requisites - [Python 3.6+](https://www.python.org "Python Homepage") -- BeautifulSoup 4+. -- Anglerfish. + +**Optional:** + +- BeautifulSoup 4+ (for HTML5 Prettify, without BeautifulSoup it works but only strict XHTML can be processed) # Example From f54640655539a1209765af40732cffd90b8eb61a Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 12:22:42 -0300 Subject: [PATCH 55/59] Remove dependency [SKIP CI] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d17d9e..62cf02d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # css-html-prettify -Async single-file cross-platform Prettifier Beautifier for the Web. [![GPL License](http://img.shields.io/badge/license-GPL-blue.svg?style=plastic)](http://opensource.org/licenses/GPL-3.0) [![LGPL License](http://img.shields.io/badge/license-LGPL-blue.svg?style=plastic)](http://opensource.org/licenses/LGPL-3.0) [![Python Version](https://img.shields.io/badge/Python-3-brightgreen.svg?style=plastic)](http://python.org) +Async single-file cross-platform no-dependencies Prettifier Beautifier for the Web. [![GPL License](http://img.shields.io/badge/license-GPL-blue.svg?style=plastic)](http://opensource.org/licenses/GPL-3.0) [![LGPL License](http://img.shields.io/badge/license-LGPL-blue.svg?style=plastic)](http://opensource.org/licenses/LGPL-3.0) [![Python Version](https://img.shields.io/badge/Python-3-brightgreen.svg?style=plastic)](http://python.org) ![screenshot](https://source.unsplash.com/q78PYnUehV8/800x402 "Illustrative Photo by https://unsplash.com/@s_erwin") From 5f7f552205ce3a97ed0688bfab567c5507cf91eb Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 12:24:49 -0300 Subject: [PATCH 56/59] Remove dependency [SKIP CI] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 62cf02d..b122819 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ Uninstall `pip uninstall css-html-prettify` **Optional:** -- BeautifulSoup 4+ (for HTML5 Prettify, without BeautifulSoup it works but only strict XHTML can be processed) +- BeautifulSoup 4+ (Recommeded, for HTML5 Prettify, without BeautifulSoup it works, but only strict XHTML can be processed) # Example From 6c378f3fdcbd0eb4800c5036716356099d2ee0ff Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 12:25:42 -0300 Subject: [PATCH 57/59] Remove dependency [SKIP CI] --- css-html-prettify.py | 1 - 1 file changed, 1 deletion(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index 9ee7d8b..fc24d8f 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -27,7 +27,6 @@ __version__ = '2.5.0' -__all__ = ('', ) start_time = datetime.now() From a5dc8aaa0bff53bf58a4eeb70ec6d9659ce29df4 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 12:33:00 -0300 Subject: [PATCH 58/59] Remove dependency [SKIP CI] --- css-html-prettify.py | 2 +- setup.cfg | 13 ++++++------- setup.py | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/css-html-prettify.py b/css-html-prettify.py index fc24d8f..3d5810f 100644 --- a/css-html-prettify.py +++ b/css-html-prettify.py @@ -26,7 +26,7 @@ print("BeautifulSoup4 Not Found, use: pip install BeautifulSoup4") -__version__ = '2.5.0' +__version__ = '2.5.5' start_time = datetime.now() diff --git a/setup.cfg b/setup.cfg index b706214..5d116e2 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,26 +1,25 @@ # See: https://setuptools.readthedocs.io/en/latest/setuptools.html#metadata [metadata] name = css-html-prettify -provides = css-html-prettify description = StandAlone Async cross-platform Prettifier Beautifier for the Web. url = https://github.com/juancarlospaco/css-html-prettify#css-html-prettify download_url = https://github.com/juancarlospaco/css-html-prettify#css-html-prettify author = Juan Carlos -author_email = example@example.com -maintainer = Deborah Melltrozzo -maintainer_email = example@example.com +author_email = juancarlospaco@gmail.com +maintainer = Juan Carlos +maintainer_email = juancarlospaco@gmail.com keywords = python3, argentina, CSS, HTML, Prettify, CSS3, HTML5, Web, Beautify license = GPL-3 LGPL-3 platforms = Linux, Darwin, Windows -version = attr: css-html-prettify.__version__ +version = 2.5.5 project_urls = Docs = https://github.com/juancarlospaco/css-html-prettify/README.md Bugs = https://github.com/juancarlospaco/css-html-prettify/issues -license_file = LICENSE +# license_file = LICENSE long_description = file: README.md long_description_content_type = text/markdown -classifiers = # https://pypi.python.org/pypi?%3Aaction=list_classifiers +classifiers = Development Status :: 5 - Production/Stable Environment :: Console Environment :: Other Environment diff --git a/setup.py b/setup.py index d30740c..34546f6 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ # # To Upload to PyPI by executing: # python3 setup.py register -# python3 setup.py bdist_egg sdist --formats=bztar,gztar,zip upload --sign +# python3 setup.py bdist_egg sdist --formats=zip upload --sign from setuptools import setup, Command From 2a09622353ffe307821fe9a338094e0799914193 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Apr 2018 12:40:57 -0300 Subject: [PATCH 59/59] Remove dependency [SKIP CI] --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index b122819..655c25f 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,6 @@ optional arguments: --group Group Alphabetically CSS Poperties by name. --justify Right Justify CSS Properties (Experimental). --extraline Add 1 New Line for each New Line (Experimental) - --beep Beep sound will be played when it ends at exit. CSS-HTML-Prettify: Takes file or folder full path string and process all CSS/SCSS/HTML found. If argument is not file/folder will fail. Check Updates