Fast multitemplate matching with support for different sizes using numexpr / cupy / fftw / scipy / multiprocessing
Project description
Fast multitemplate matching with support for different sizes using numexpr / cupy / fftw / scipy / multiprocessing
pip install tmplmatching
Advantages:
- Uses a tuned match_template algorithm from scipy (numexpr instead of numpy / different fftconvolve algorithms)
- very fast fftconvolve function using pyfftw (alternatively cupy and scipy.signal.fftconvolve)
- Multiprocessing using RawArray to speed it up / save memory
- Template matching with multiple sizes
- Results as a pandas DataFrame for further filtering
- Adjustable accepted R, G, B difference
- Finding the best matches among multiple matches
Tested against Windows 10 / Python 3.10 / Anaconda - should work on MacOS / Linux
Selecting
Locating
import cv2
from tmplmatching import TemplateMatching
if __name__ == "__main__": # important - since it uses multiprocessing, this line is mandatory!
############################################################
# Step 1:
# Initialize TemplateMatching
self = TemplateMatching(screenshot_buffer=10, use_cupy=False)
############################################################
# Step 2:
# Create a class list in ALPHABETICAL order, put one class per line and save the file:
# Here is an example:
"""
# social_media_icons.txt
facebookicon
tiktokicon
whatsappicon
youtubeicon
"""
# and save it as a TXT file
############################################################
# Step 3:
# Start annotation tool (https://github.com/drainingsun/ybat - included in this package) which captures a screenshot, and shows the path to the screenshot (has to be done only once)
self.start_annotation_tool()
############################################################
# Step 4:
# open the text file and the screenshot (or any other image) in the annotation tool, and select the items you want to find
############################################################
# Step 5:
# Click on "Save COCO" when you are done
# Copy the path of the downloaded zip file and the path of the image
# "C:\Users\hansc\Downloads\bboxes_coco.zip"
############################################################
# Step 6:
# Once the annotation is done, extract and resize items based on annotations (has to be done only once)
self.extract_images_from_annotations(
folder=r"c:\socialmediaicons_different_sizes", # The folder to save extracted templates
zipfile=r"C:\Users\hansc\Downloads\bboxes_coco.zip", # Path to saved annotations
screenshot=r"C:\Users\hansc\AppData\Local\Temp\tmp1ak8brdw.png", # The picture that you used in self.start_annotation_tool()
min_percentage=10, # Defines variations for each template
max_percentage=200,
interpolation=cv2.INTER_LANCZOS4 # recommended for the best results
)
############################################################
# Step 7:
# Load template images with specified size ranges
self.load_needle_images(
folder=r"c:\socialmediaicons_different_sizes",
min_percentage=25,
max_percentage=35,
)
############################################################
# Step 8:
df = self.take_screenshot_and_find_needles(
minimum_match=0.60, # Minimum threshold for template matching - the lower you go, the longer the calculations takes
monitor=1, # 0 for all monitors
percent=30, # Resize screenshots before matching (results are recalculated to the original size)
processes=5, # Number of CPUs used for multiprocessing
interpolation=cv2.INTER_LANCZOS4, # Interpolation method for resizing the screenshot - Use cv2.INTER_LANCZOS4 for the best results (but a little slower than cv2.INTER_AREA)
max_diff_r=80, # Maximal accepted RGB difference filter to reduce false positives
max_diff_g=80,
max_diff_b=80,
max_color_difference_factor=2,
)
ima = self.draw_results(df) # Pass the DataFrame to draw the results
cv2.imwrite(r"c:\socialmediaiconsmatching.png", ima)
# --------------------------------------
# If you don't want to take a screenshot and want to pass an existing picture, use:
df2 = self.find_needles(
haystack=r"C:\Users\hansc\AppData\Local\Temp\tmp1ak8brdw.png", # accepts almost all image formats (base64, file path, urls, PIL, numpy, bytes ...)
percent=30,
minimum_match=0.7,
processes=4,
max_diff_r=30,
max_diff_g=30,
max_diff_b=30,
max_color_difference_factor=2,
interpolation=cv2.INTER_LANCZOS4,
)
ima2 = self.draw_results(
df2, haystack=r"C:\Users\hansc\AppData\Local\Temp\tmp1ak8brdw.png"
) # Pass the DataFrame to draw the last results
cv2.imwrite("c:\\socialmediaiconsmatching2.png", ima2)
aa_intersecting aa_r0 aa_g0 aa_b0
0 0.963882 1323 316 1403 393 3 1323 316 80 76 237 155 69 c:\socialmediaicons_different_sizes\facebookicon___0___000021___030.png facebookicon 0 21 30 ((518, 285, 530, 296), (319, 102, 331, 114), (295, 152, 307, 164), (318, 101, 331, 114), (517, 280, 530, 293), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (517, 279, 531, 293), (517, 280, 531, 294), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (516, 279, 531, 293), (516, 280, 531, 294), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (516, 279, 532, 294), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (516, 278, 532, 294), (516, 279, 532, 295), (316, 99, 333, 116), (316, 100, 333, 117), (515, 278, 532, 295), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (315, 99, 334, 117), (315, 100, 334, 118), (314, 98, 334, 117), (314, 99, 334, 118), (314, 100, 334, 119), (314, 98, 334, 118), (314, 99, 334, 119), (265, 153, 283, 170), (265, 152, 283, 170), (265, 153, 283, 171), (291, 153, 309, 171), (494, 258, 512, 276), (494, 259, 512, 277), (264, 152, 283, 171), (290, 152, 309, 171), (264, 153, 283, 172), (289, 153, 308, 172), (290, 153, 309, 172), (493, 257, 512, 276), (493, 258, 512, 277), (263, 152, 283, 172), (289, 152, 309, 172), (290, 152, 310, 172), (289, 153, 309, 173), (459, 95, 480, 116), (486, 95, 507, 116), (486, 96, 507, 117), (263, 151, 284, 172), (289, 151, 310, 172), (289, 152, 310, 173), (458, 94, 480, 115), (458, 95, 480, 116), (485, 95, 507, 116), (486, 95, 508, 116), (485, 96, 507, 117), (486, 96, 508, 117), (457, 94, 479, 116), (458, 94, 480, 116), (486, 94, 508, 116), (458, 95, 480, 117), (485, 95, 507, 117), (486, 95, 508, 117), (487, 95, 509, 117), (485, 96, 507, 118), (486, 96, 508, 118), (456, 94, 479, 117), (457, 94, 480, 117), (485, 94, 508, 117), (486, 94, 509, 117), (457, 95, 480, 118), (484, 95, 507, 118), (485, 95, 508, 118), (486, 95, 509, 118), (456, 93, 480, 117), (484, 93, 508, 117), (485, 93, 509, 117), (455, 94, 479, 118), (456, 94, 480, 118), (484, 94, 508, 118), (485, 94, 509, 118), (484, 95, 508, 119), (485, 95, 509, 119), (427, 123, 451, 147), (455, 93, 480, 117), (484, 93, 509, 117), (455, 94, 480, 118), (483, 94, 508, 118), (484, 94, 509, 118), (485, 94, 510, 118), ...) 237 161 78
1 0.763606 1053 330 1110 386 2 1053 330 56 56 237 155 69 c:\socialmediaicons_different_sizes\facebookicon___0___000013___022.png facebookicon 0 13 22 ((518, 285, 530, 296), (295, 152, 307, 164), (517, 280, 530, 293), (517, 279, 531, 293), (517, 280, 531, 294), (516, 279, 531, 293), (516, 280, 531, 294), (516, 279, 532, 294), (516, 278, 532, 294), (516, 279, 532, 295), (515, 278, 532, 295), (399, 98, 418, 116), (400, 98, 419, 116), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (398, 98, 418, 117), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (398, 98, 418, 118), (399, 98, 419, 118), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), (396, 94, 422, 119), (395, 95, 421, 120), (396, 95, 422, 120), (395, 92, 422, 118), (395, 93, 422, 119), (395, 94, 422, 120), (395, 95, 422, 121), (395, 92, 423, 119), (395, 93, 423, 120), (265, 153, 283, 170), (265, 152, 283, 170), (265, 153, 283, 171), (291, 153, 309, 171), (494, 258, 512, 276), (494, 259, 512, 277), (264, 152, 283, 171), (290, 152, 309, 171), (264, 153, 283, 172), (289, 153, 308, 172), (290, 153, 309, 172), (493, 257, 512, 276), (493, 258, 512, 277), (263, 152, 283, 172), (289, 152, 309, 172), (290, 152, 310, 172), (289, 153, 309, 173), (459, 95, 480, 116), ...) 218 149 98
2 0.666532 1720 930 1773 980 2 1056 333 53 50 237 154 66 c:\socialmediaicons_different_sizes\facebookicon___0___000011___020.png facebookicon 0 11 20 ((319, 102, 331, 114), (295, 152, 307, 164), (318, 101, 331, 114), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (316, 99, 333, 116), (316, 100, 333, 117), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (399, 98, 418, 116), (400, 98, 419, 116), (315, 99, 334, 117), (315, 100, 334, 118), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (314, 98, 334, 117), (398, 98, 418, 117), (314, 99, 334, 118), (314, 100, 334, 119), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (314, 98, 334, 118), (398, 98, 418, 118), (399, 98, 419, 118), (314, 99, 334, 119), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), (396, 94, 422, 119), (395, 95, 421, 120), (396, 95, 422, 120), (395, 92, 422, 118), (395, 93, 422, 119), (395, 94, 422, 120), (395, 95, 422, 121), (395, 92, 423, 119), (395, 93, 423, 120), (265, 153, 283, 170), ...) 160 116 96
3 0.897434 1616 313 1696 393 2 1616 313 80 80 68 60 73 c:\socialmediaicons_different_sizes\tiktokicon___0___000022___031.png tiktokicon 0 22 31 ((518, 285, 530, 296), (319, 102, 331, 114), (295, 152, 307, 164), (318, 101, 331, 114), (517, 280, 530, 293), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (517, 279, 531, 293), (517, 280, 531, 294), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (516, 279, 531, 293), (516, 280, 531, 294), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (516, 279, 532, 294), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (516, 278, 532, 294), (516, 279, 532, 295), (316, 99, 333, 116), (316, 100, 333, 117), (515, 278, 532, 295), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (399, 98, 418, 116), (400, 98, 419, 116), (315, 99, 334, 117), (315, 100, 334, 118), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (314, 98, 334, 117), (398, 98, 418, 117), (314, 99, 334, 118), (314, 100, 334, 119), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (314, 98, 334, 118), (398, 98, 418, 118), (399, 98, 419, 118), (314, 99, 334, 119), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), ...) 79 71 82
4 0.765243 966 509 1030 573 2 966 509 63 63 67 59 68 c:\socialmediaicons_different_sizes\tiktokicon___0___000016___025.png tiktokicon 0 16 25 ((518, 285, 530, 296), (319, 102, 331, 114), (318, 101, 331, 114), (517, 280, 530, 293), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (517, 279, 531, 293), (517, 280, 531, 294), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (516, 279, 531, 293), (516, 280, 531, 294), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (516, 279, 532, 294), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (516, 278, 532, 294), (516, 279, 532, 295), (316, 99, 333, 116), (316, 100, 333, 117), (515, 278, 532, 295), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (399, 98, 418, 116), (400, 98, 419, 116), (315, 99, 334, 117), (315, 100, 334, 118), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (314, 98, 334, 117), (398, 98, 418, 117), (314, 99, 334, 118), (314, 100, 334, 119), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (314, 98, 334, 118), (398, 98, 418, 118), (399, 98, 419, 118), (314, 99, 334, 119), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), (396, 94, 422, 119), ...) 83 83 83
5 0.922466 1516 409 1596 490 3 1516 409 80 80 112 220 85 c:\socialmediaicons_different_sizes\whatsappicon___0___000022___031.png whatsappicon 0 22 31 ((518, 285, 530, 296), (319, 102, 331, 114), (295, 152, 307, 164), (318, 101, 331, 114), (517, 280, 530, 293), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (517, 279, 531, 293), (517, 280, 531, 294), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (516, 279, 531, 293), (516, 280, 531, 294), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (516, 279, 532, 294), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (516, 278, 532, 294), (516, 279, 532, 295), (316, 99, 333, 116), (316, 100, 333, 117), (515, 278, 532, 295), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (399, 98, 418, 116), (400, 98, 419, 116), (315, 99, 334, 117), (315, 100, 334, 118), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (314, 98, 334, 117), (398, 98, 418, 117), (314, 99, 334, 118), (314, 100, 334, 119), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (314, 98, 334, 118), (398, 98, 418, 118), (399, 98, 419, 118), (314, 99, 334, 119), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), ...) 123 221 99
6 0.715838 873 416 943 486 2 873 416 70 70 111 219 84 c:\socialmediaicons_different_sizes\whatsappicon___0___000018___027.png whatsappicon 0 18 27 ((518, 285, 530, 296), (319, 102, 331, 114), (295, 152, 307, 164), (318, 101, 331, 114), (517, 280, 530, 293), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (517, 279, 531, 293), (517, 280, 531, 294), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (516, 279, 531, 293), (516, 280, 531, 294), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (516, 279, 532, 294), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (516, 278, 532, 294), (516, 279, 532, 295), (316, 99, 333, 116), (316, 100, 333, 117), (515, 278, 532, 295), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (399, 98, 418, 116), (400, 98, 419, 116), (315, 99, 334, 117), (315, 100, 334, 118), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (314, 98, 334, 117), (398, 98, 418, 117), (314, 99, 334, 118), (314, 100, 334, 119), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (314, 98, 334, 118), (398, 98, 418, 118), (399, 98, 419, 118), (314, 99, 334, 119), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), ...) 96 169 103
7 0.951082 1420 409 1503 490 3 1420 409 83 80 81 81 249 c:\socialmediaicons_different_sizes\youtubeicon___0___000022___031.png youtubeicon 0 22 31 ((518, 285, 530, 296), (319, 102, 331, 114), (295, 152, 307, 164), (318, 101, 331, 114), (517, 280, 530, 293), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (517, 279, 531, 293), (517, 280, 531, 294), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (516, 279, 531, 293), (516, 280, 531, 294), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (516, 279, 532, 294), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (516, 278, 532, 294), (516, 279, 532, 295), (316, 99, 333, 116), (316, 100, 333, 117), (515, 278, 532, 295), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (399, 98, 418, 116), (400, 98, 419, 116), (315, 99, 334, 117), (315, 100, 334, 118), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (314, 98, 334, 117), (398, 98, 418, 117), (314, 99, 334, 118), (314, 100, 334, 119), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (314, 98, 334, 118), (398, 98, 418, 118), (399, 98, 419, 118), (314, 99, 334, 119), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), ...) 88 89 249
8 0.918379 963 333 1030 400 3 963 333 66 66 79 80 249 c:\socialmediaicons_different_sizes\youtubeicon___0___000016___025.png youtubeicon 0 16 25 ((518, 285, 530, 296), (319, 102, 331, 114), (295, 152, 307, 164), (318, 101, 331, 114), (517, 280, 530, 293), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (517, 279, 531, 293), (517, 280, 531, 294), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (516, 279, 531, 293), (516, 280, 531, 294), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (516, 279, 532, 294), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (516, 278, 532, 294), (516, 279, 532, 295), (316, 99, 333, 116), (316, 100, 333, 117), (515, 278, 532, 295), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (399, 98, 418, 116), (400, 98, 419, 116), (315, 99, 334, 117), (315, 100, 334, 118), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (314, 98, 334, 117), (398, 98, 418, 117), (314, 99, 334, 118), (314, 100, 334, 119), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (314, 98, 334, 118), (398, 98, 418, 118), (399, 98, 419, 118), (314, 99, 334, 119), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), ...) 100 100 223
9 0.852620 1573 856 1643 923 2 960 333 70 66 79 79 249 c:\socialmediaicons_different_sizes\youtubeicon___0___000017___026.png youtubeicon 0 17 26 ((518, 285, 530, 296), (319, 102, 331, 114), (295, 152, 307, 164), (318, 101, 331, 114), (517, 280, 530, 293), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (517, 279, 531, 293), (517, 280, 531, 294), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (516, 279, 531, 293), (516, 280, 531, 294), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (516, 279, 532, 294), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (516, 278, 532, 294), (516, 279, 532, 295), (316, 99, 333, 116), (316, 100, 333, 117), (515, 278, 532, 295), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (399, 98, 418, 116), (400, 98, 419, 116), (315, 99, 334, 117), (315, 100, 334, 118), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (314, 98, 334, 117), (398, 98, 418, 117), (314, 99, 334, 118), (314, 100, 334, 119), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (314, 98, 334, 118), (398, 98, 418, 118), (399, 98, 419, 118), (314, 99, 334, 119), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), ...) 133 131 223
10 0.777062 1576 860 1639 923 2 1576 860 63 63 76 76 250 c:\socialmediaicons_different_sizes\youtubeicon___0___000015___024.png youtubeicon 0 15 24 ((518, 285, 530, 296), (319, 102, 331, 114), (295, 152, 307, 164), (318, 101, 331, 114), (517, 280, 530, 293), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (517, 279, 531, 293), (517, 280, 531, 294), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (516, 279, 531, 293), (516, 280, 531, 294), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (516, 279, 532, 294), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (516, 278, 532, 294), (516, 279, 532, 295), (316, 99, 333, 116), (316, 100, 333, 117), (515, 278, 532, 295), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (399, 98, 418, 116), (400, 98, 419, 116), (315, 99, 334, 117), (315, 100, 334, 118), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (314, 98, 334, 117), (398, 98, 418, 117), (314, 99, 334, 118), (314, 100, 334, 119), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (314, 98, 334, 118), (398, 98, 418, 118), (399, 98, 419, 118), (314, 99, 334, 119), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), ...) 120 119 220
11 0.697920 1380 840 1423 883 2 1380 840 43 43 72 72 251 c:\socialmediaicons_different_sizes\youtubeicon___0___000008___017.png youtubeicon 0 8 17 ((518, 285, 530, 296), (319, 102, 331, 114), (295, 152, 307, 164), (318, 101, 331, 114), (517, 280, 530, 293), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (517, 279, 531, 293), (517, 280, 531, 294), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (516, 279, 531, 293), (516, 280, 531, 294), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (516, 279, 532, 294), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (516, 278, 532, 294), (516, 279, 532, 295), (316, 99, 333, 116), (316, 100, 333, 117), (515, 278, 532, 295), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (399, 98, 418, 116), (400, 98, 419, 116), (315, 99, 334, 117), (315, 100, 334, 118), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (314, 98, 334, 117), (398, 98, 418, 117), (314, 99, 334, 118), (314, 100, 334, 119), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (314, 98, 334, 118), (398, 98, 418, 118), (399, 98, 419, 118), (314, 99, 334, 119), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), ...) 135 126 245
12 0.675960 1573 856 1646 926 2 960 330 73 70 81 81 249 c:\socialmediaicons_different_sizes\youtubeicon___0___000018___027.png youtubeicon 0 18 27 ((518, 285, 530, 296), (319, 102, 331, 114), (295, 152, 307, 164), (318, 101, 331, 114), (517, 280, 530, 293), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (517, 279, 531, 293), (517, 280, 531, 294), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (516, 279, 531, 293), (516, 280, 531, 294), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (516, 279, 532, 294), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (516, 278, 532, 294), (516, 279, 532, 295), (316, 99, 333, 116), (316, 100, 333, 117), (515, 278, 532, 295), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (399, 98, 418, 116), (400, 98, 419, 116), (315, 99, 334, 117), (315, 100, 334, 118), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (314, 98, 334, 117), (398, 98, 418, 117), (314, 99, 334, 118), (314, 100, 334, 119), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (314, 98, 334, 118), (398, 98, 418, 118), (399, 98, 419, 118), (314, 99, 334, 119), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), ...) 135 134 223
13 0.674136 1576 860 1636 919 2 969 336 60 60 79 80 250 c:\socialmediaicons_different_sizes\youtubeicon___0___000014___023.png youtubeicon 0 14 23 ((518, 285, 530, 296), (319, 102, 331, 114), (295, 152, 307, 164), (318, 101, 331, 114), (517, 280, 530, 293), (318, 100, 332, 114), (317, 101, 331, 115), (318, 101, 332, 115), (517, 279, 531, 293), (517, 280, 531, 294), (317, 100, 332, 114), (316, 101, 331, 115), (317, 101, 332, 115), (516, 279, 531, 293), (516, 280, 531, 294), (316, 100, 332, 115), (317, 100, 333, 115), (316, 101, 332, 116), (516, 279, 532, 294), (317, 99, 333, 115), (316, 100, 332, 116), (317, 100, 333, 116), (316, 101, 332, 117), (516, 278, 532, 294), (516, 279, 532, 295), (316, 99, 333, 116), (316, 100, 333, 117), (515, 278, 532, 295), (315, 99, 333, 116), (316, 99, 334, 116), (315, 100, 333, 117), (399, 98, 418, 116), (400, 98, 419, 116), (315, 99, 334, 117), (315, 100, 334, 118), (399, 96, 419, 115), (398, 97, 418, 116), (399, 97, 419, 116), (314, 98, 334, 117), (398, 98, 418, 117), (314, 99, 334, 118), (314, 100, 334, 119), (398, 96, 418, 116), (399, 96, 419, 116), (398, 97, 418, 117), (399, 97, 419, 117), (314, 98, 334, 118), (398, 98, 418, 118), (399, 98, 419, 118), (314, 99, 334, 119), (398, 95, 419, 116), (399, 95, 420, 116), (397, 96, 418, 117), (398, 96, 419, 117), (399, 96, 420, 117), (398, 97, 419, 118), (399, 97, 420, 118), (397, 95, 419, 116), (398, 95, 420, 116), (397, 96, 419, 117), (398, 96, 420, 117), (397, 97, 419, 118), (398, 97, 420, 118), (397, 94, 420, 116), (398, 94, 421, 116), (396, 95, 419, 117), (397, 95, 420, 117), (398, 95, 421, 117), (396, 96, 419, 118), (397, 96, 420, 118), (398, 96, 421, 118), (397, 97, 420, 119), (397, 93, 421, 116), (396, 94, 420, 117), (397, 94, 421, 117), (396, 95, 420, 118), (397, 95, 421, 118), (398, 95, 422, 118), (396, 96, 420, 119), (397, 96, 421, 119), (396, 93, 420, 117), (397, 93, 421, 117), (396, 94, 420, 118), (397, 94, 421, 118), (396, 95, 420, 119), (397, 95, 421, 119), (396, 96, 420, 120), (397, 96, 421, 120), (396, 93, 421, 117), (395, 94, 420, 118), (396, 94, 421, 118), (397, 94, 422, 118), (395, 95, 420, 119), (396, 95, 421, 119), (397, 95, 422, 119), (396, 96, 421, 120), (396, 92, 422, 117), (395, 93, 421, 118), (396, 93, 422, 118), (395, 94, 421, 119), ...) 126 125 221
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
tmplmatching-0.12.tar.gz
(143.3 kB
view details)
Built Distribution
tmplmatching-0.12-py3-none-any.whl
(137.0 kB
view details)
File details
Details for the file tmplmatching-0.12.tar.gz
.
File metadata
- Download URL: tmplmatching-0.12.tar.gz
- Upload date:
- Size: 143.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca3081ede44361688302ff1d0589d04058d84bb94066f2089bb940d1e4154d70 |
|
MD5 | dc062094606c83ece8316d586791de66 |
|
BLAKE2b-256 | 024f55795f97269c64bb1bb8c04eebfec74f513c534fee066a48e26b558ba9a0 |
Provenance
File details
Details for the file tmplmatching-0.12-py3-none-any.whl
.
File metadata
- Download URL: tmplmatching-0.12-py3-none-any.whl
- Upload date:
- Size: 137.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 44f776956443489a5f115c8e10967b9088e6c13c970d987ecb55d1d8bd4c16d1 |
|
MD5 | bdbe56eb140f2ca4b5b7dd37dc14f85c |
|
BLAKE2b-256 | 8d7d7178edd1d1f0d5cc15525083996b571b61753590939ee2183c3f4bf4d59d |