From 428acc88e4cda20d80c993b0f2b16d20d4c80818 Mon Sep 17 00:00:00 2001 From: ziaflow Date: Fri, 13 Feb 2026 19:13:12 -0700 Subject: [PATCH 01/11] start --- README.md | 2 +- dockerfile | 35 ++++++++++-------- eagle-eye.py | 6 +-- entry.sh | 2 +- ...566307226785674_4574148412336351830_n.webp | Bin 0 -> 55349 bytes 5 files changed, 24 insertions(+), 21 deletions(-) create mode 100644 known/425285802_7566307226785674_4574148412336351830_n.webp diff --git a/README.md b/README.md index fce391a..d09dc59 100644 --- a/README.md +++ b/README.md @@ -144,7 +144,7 @@ Change the value in `config.json` to the path of the `geckodriver` e.g }, "WEBDRIVER": { "ENGINE": "firefox", - "PATH": "/usr/local/bin/geckodriver" + "PATH": "C:\Program Files\Mozilla Firefox" }, "FILTER": [ .... diff --git a/dockerfile b/dockerfile index 3f3713f..0fb4339 100644 --- a/dockerfile +++ b/dockerfile @@ -1,27 +1,30 @@ -FROM ubuntu:16.04 +FROM ubuntu:20.04 -RUN apt-get clean && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get clean && apt-get update && apt-get install -y locales RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 -ENV TERM dumb ENV PYTHONIOENCODING=utf-8 -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y git curl software-properties-common unzip -RUN apt-get update && add-apt-repository -y ppa:deadsnakes/ppa && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y python3.6 python3.6-dev -RUN curl https://bootstrap.pypa.io/get-pip.py | python3.6 -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libgtk-3-dev libboost-all-dev build-essential cmake libffi-dev -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y firefox -RUN git clone https://github.com/ThoughtfulDev/EagleEye -WORKDIR EagleEye -RUN pip3.6 install -r requirements.txt -RUN pip3.6 install --upgrade beautifulsoup4 html5lib spry -ADD https://github.com/mozilla/geckodriver/releases/download/v0.27.0/geckodriver-v0.27.0-linux64.tar.gz /EagleEye/geckodriver.tar.gz +RUN apt-get update && apt-get upgrade -y +RUN apt-get update && apt-get install -y git curl software-properties-common unzip wget +RUN apt-get update && apt-get install -y python3-pip python3-dev +RUN apt-get update && apt-get install -y libgtk-3-dev libboost-all-dev build-essential cmake libffi-dev +RUN apt-get update && apt-get install -y firefox + +WORKDIR /EagleEye +COPY . /EagleEye + +RUN pip3 install -r requirements.txt +RUN pip3 install --upgrade beautifulsoup4 html5lib spry + +# Update Geckodriver to a newer version +RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux64.tar.gz -O geckodriver.tar.gz RUN tar -xvf geckodriver.tar.gz RUN mv geckodriver /usr/bin/geckodriver RUN chmod +x /usr/bin/geckodriver -RUN rm -r /EagleEye/known/ -ENTRYPOINT bash /entry.sh +RUN chmod +x /EagleEye/entry.sh +ENTRYPOINT ["bash", "/EagleEye/entry.sh"] diff --git a/eagle-eye.py b/eagle-eye.py index d553b38..f162e1d 100755 --- a/eagle-eye.py +++ b/eagle-eye.py @@ -155,9 +155,9 @@ def main(skipFB=False, FBUrls=[], jsonRep=None, dockerMode=False, dockerName=Non console.section('Links') print(rev_links) console.section('Predictions') - try: - predictions = [x.lower() for x in predictions] - except: + if predictions: + predictions = [x.lower() for x in predictions if x] + else: predictions = [] print(predictions) presentResult(predictions) diff --git a/entry.sh b/entry.sh index 2116fe1..93c3283 100755 --- a/entry.sh +++ b/entry.sh @@ -1,6 +1,6 @@ #!/bin/bash cd /EagleEye -python3.6 eagle-eye.py --docker --name "Emeraude" +python3 eagle-eye.py --docker --name "Kristina" #now copy the result yes | cp -rf /EagleEye/*.pdf /result/ diff --git a/known/425285802_7566307226785674_4574148412336351830_n.webp b/known/425285802_7566307226785674_4574148412336351830_n.webp new file mode 100644 index 0000000000000000000000000000000000000000..5da2d531837a452e86154ef33095f6dc9f144aa8 GIT binary patch literal 55349 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 H{{a8lE1kxZ literal 0 HcmV?d00001 From caa063f27bcea4c41f12aba6bd8ef685c3a209d5 Mon Sep 17 00:00:00 2001 From: ziaflow Date: Fri, 13 Feb 2026 19:23:15 -0700 Subject: [PATCH 02/11] docker --- dockerfile | 58 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/dockerfile b/dockerfile index 0fb4339..3919974 100644 --- a/dockerfile +++ b/dockerfile @@ -1,30 +1,44 @@ -FROM ubuntu:20.04 +# Use 22.04 for Python 3.10 support +FROM ubuntu:22.04 ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get clean && apt-get update && apt-get install -y locales -RUN locale-gen en_US.UTF-8 -ENV LANG en_US.UTF-8 -ENV LANGUAGE en_US:en -ENV LC_ALL en_US.UTF-8 -ENV PYTHONIOENCODING=utf-8 - -RUN apt-get update && apt-get upgrade -y -RUN apt-get update && apt-get install -y git curl software-properties-common unzip wget -RUN apt-get update && apt-get install -y python3-pip python3-dev -RUN apt-get update && apt-get install -y libgtk-3-dev libboost-all-dev build-essential cmake libffi-dev -RUN apt-get update && apt-get install -y firefox + +# Setup Locales +RUN apt-get update && apt-get install -y locales && apt-get clean && \ + locale-gen en_US.UTF-8 +ENV LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 + +# Install System Dependencies +RUN apt-get update && apt-get upgrade -y && \ + apt-get install -y git curl software-properties-common unzip wget \ + python3-pip python3-dev libgtk-3-dev libboost-all-dev build-essential \ + cmake libffi-dev firefox dos2unix && \ + apt-get clean WORKDIR /EagleEye -COPY . /EagleEye +# Clone the repo inside the build process or COPY your local version +# If you want to use your local modified files, use: COPY . /EagleEye +RUN git clone https://github.com/ThoughtfulDev/EagleEye . + +# --- CRITICAL FIXES --- +# 1. Fix line endings immediately +RUN find . -type f -name "*.sh" -exec dos2unix {} + + +# 2. Manage Python Dependencies +RUN pip3 install --upgrade pip +# Force older urllib3 to avoid the 'RequestsDependencyWarning' crash +RUN pip3 install "urllib3<2.0.0" RUN pip3 install -r requirements.txt -RUN pip3 install --upgrade beautifulsoup4 html5lib spry -# Update Geckodriver to a newer version -RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux64.tar.gz -O geckodriver.tar.gz -RUN tar -xvf geckodriver.tar.gz -RUN mv geckodriver /usr/bin/geckodriver -RUN chmod +x /usr/bin/geckodriver +# 3. Update Geckodriver (using a more recent version for modern Firefox) +RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux64.tar.gz -O geckodriver.tar.gz && \ + tar -xvf geckodriver.tar.gz && \ + mv geckodriver /usr/bin/geckodriver && \ + chmod +x /usr/bin/geckodriver && \ + rm geckodriver.tar.gz + +# Ensure the entrypoint script is executable and cleaned +RUN chmod +x entry.sh && dos2unix entry.sh -RUN chmod +x /EagleEye/entry.sh -ENTRYPOINT ["bash", "/EagleEye/entry.sh"] +ENTRYPOINT ["/bin/bash", "./entry.sh"] \ No newline at end of file From 157cd6413c0558efef839bf5805bfc545a152df4 Mon Sep 17 00:00:00 2001 From: ziaflow Date: Thu, 19 Feb 2026 17:09:09 -0700 Subject: [PATCH 03/11] docker --- dockerfile | 67 +++++++++++++++++++++++++++++++----------------------- entry.sh | 3 +++ 2 files changed, 42 insertions(+), 28 deletions(-) diff --git a/dockerfile b/dockerfile index 3919974..86a3a37 100644 --- a/dockerfile +++ b/dockerfile @@ -1,44 +1,55 @@ -# Use 22.04 for Python 3.10 support FROM ubuntu:22.04 +# Avoid prompts from apt ENV DEBIAN_FRONTEND=noninteractive -# Setup Locales -RUN apt-get update && apt-get install -y locales && apt-get clean && \ - locale-gen en_US.UTF-8 -ENV LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 - -# Install System Dependencies -RUN apt-get update && apt-get upgrade -y && \ - apt-get install -y git curl software-properties-common unzip wget \ - python3-pip python3-dev libgtk-3-dev libboost-all-dev build-essential \ - cmake libffi-dev firefox dos2unix && \ +# 1. Install System Dependencies (Linux versions of Firefox and tools) +RUN apt-get update && apt-get install -y \ + locales \ + git \ + curl \ + software-properties-common \ + unzip \ + wget \ + python3-pip \ + python3-dev \ + libgtk-3-dev \ + libboost-all-dev \ + build-essential \ + cmake \ + libffi-dev \ + firefox \ + dos2unix && \ apt-get clean +# Set up locales +RUN locale-gen en_US.UTF-8 +ENV LANG en_US.UTF-8 +ENV LC_ALL en_US.UTF-8 + +# 2. Set working directory WORKDIR /EagleEye -# Clone the repo inside the build process or COPY your local version -# If you want to use your local modified files, use: COPY . /EagleEye -RUN git clone https://github.com/ThoughtfulDev/EagleEye . +# 3. Copy project files from C:\Users\jerem\EagleEye into the container +COPY . /EagleEye -# --- CRITICAL FIXES --- -# 1. Fix line endings immediately -RUN find . -type f -name "*.sh" -exec dos2unix {} + +# 4. Fix Windows line endings and permissions +RUN dos2unix /EagleEye/entry.sh && chmod +x /EagleEye/entry.sh -# 2. Manage Python Dependencies +# 5. Install Python Dependencies RUN pip3 install --upgrade pip -# Force older urllib3 to avoid the 'RequestsDependencyWarning' crash RUN pip3 install "urllib3<2.0.0" +RUN pip3 install lxml_html_clean RUN pip3 install -r requirements.txt -# 3. Update Geckodriver (using a more recent version for modern Firefox) -RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux64.tar.gz -O geckodriver.tar.gz && \ - tar -xvf geckodriver.tar.gz && \ - mv geckodriver /usr/bin/geckodriver && \ - chmod +x /usr/bin/geckodriver && \ - rm geckodriver.tar.gz +# 6. Install Geckodriver (Needed for Firefox automation) +RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux64.tar.gz && \ + tar -xvzf geckodriver-v0.33.0-linux64.tar.gz && \ + mv geckodriver /usr/local/bin/ && \ + rm geckodriver-v0.33.0-linux64.tar.gz -# Ensure the entrypoint script is executable and cleaned -RUN chmod +x entry.sh && dos2unix entry.sh +# 7. Create the missing result directory +RUN mkdir -p /result -ENTRYPOINT ["/bin/bash", "./entry.sh"] \ No newline at end of file +# Set entry point +ENTRYPOINT ["/bin/bash", "/EagleEye/entry.sh"] \ No newline at end of file diff --git a/entry.sh b/entry.sh index 93c3283..3360f28 100755 --- a/entry.sh +++ b/entry.sh @@ -1,4 +1,7 @@ #!/bin/bash +# Downgrade fake-useragent to a version compatible with Python 3.8 +pip3 install "fake-useragent<1.4.0" + cd /EagleEye python3 eagle-eye.py --docker --name "Kristina" From db69639d0574ae6b86b9b1d2a8bbced100da6a92 Mon Sep 17 00:00:00 2001 From: ziaflow Date: Thu, 19 Feb 2026 17:12:44 -0700 Subject: [PATCH 04/11] updated docker --- entry.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/entry.sh b/entry.sh index 3360f28..ddc687d 100755 --- a/entry.sh +++ b/entry.sh @@ -3,7 +3,8 @@ pip3 install "fake-useragent<1.4.0" cd /EagleEye -python3 eagle-eye.py --docker --name "Kristina" +TARGET_NAME=${NAME:-"Kristina"} +python3 eagle-eye.py --docker --name "$TARGET_NAME" #now copy the result yes | cp -rf /EagleEye/*.pdf /result/ From 6f94b71311f9fee166c6a8f30704d1880366815e Mon Sep 17 00:00:00 2001 From: ziaflow Date: Thu, 19 Feb 2026 17:50:33 -0700 Subject: [PATCH 05/11] Recreated docker --- config.json | 2 +- entry.sh | 7 +- "result/\357\200\215" | 619 ++++++++++++++++++++++++++++++++++++++++++ utils/config.py | 19 +- 4 files changed, 637 insertions(+), 10 deletions(-) create mode 100644 "result/\357\200\215" diff --git a/config.json b/config.json index db730d6..69edf5c 100644 --- a/config.json +++ b/config.json @@ -5,7 +5,7 @@ }, "WEBDRIVER": { "ENGINE": "firefox", - "PATH": "/usr/bin/geckodriver" + "PATH": "/usr/local/bin/geckodriver" }, "FILTER": [ "instagram.com", diff --git a/entry.sh b/entry.sh index ddc687d..f027788 100755 --- a/entry.sh +++ b/entry.sh @@ -1,6 +1,11 @@ #!/bin/bash # Downgrade fake-useragent to a version compatible with Python 3.8 -pip3 install "fake-useragent<1.4.0" +pip3 install "fake-useragent<1.4.0" selenium + +# Fix Geckodriver path: Create symlink if missing in /usr/bin but found in /usr/local/bin +if [ ! -f "/usr/bin/geckodriver" ] && [ -f "/usr/local/bin/geckodriver" ]; then + ln -s /usr/local/bin/geckodriver /usr/bin/geckodriver +fi cd /EagleEye TARGET_NAME=${NAME:-"Kristina"} diff --git "a/result/\357\200\215" "b/result/\357\200\215" new file mode 100644 index 0000000..64ef0d4 --- /dev/null +++ "b/result/\357\200\215" @@ -0,0 +1,619 @@ +%PDF-1.3 +%âãÏÓ +1 0 obj +< /Creator (cairo 1.14.6 (http://cairographics.org)) + /Keywords <> /Producer (WeasyPrint 0.42.2 \(http://weasyprint.org/\)) + /Title (Toubia)>> +endobj +2 0 obj +<> /Pages + 4 0 R /Type /Catalog>> +endobj +3 0 obj +<> + /Count 4 /First 44 0 R /Last 45 0 R /Title (Result for Toubia)>> +endobj +4 0 obj +<> +endobj +5 0 obj +<> + /Border [0 0 0] /Rect [92.25 607.585802842 454.03125 593.945177842] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 593.942248155 453.345703125 580.301623155] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 580.298693467 459.275390625 566.658068467] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect [92.25 566.65513878 456.5625 553.01451378] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 553.011584092 459 539.370959092] /Subtype + /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 539.368029405 437.361328125 525.727404405] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect [92.25 525.724474717 309.22265625 512.083849717] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 512.08092003 497.537109375 498.44029503] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 498.437365342 500.396484375 484.796740342] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 484.793810655 500.595703125 471.153185655] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect [92.25 471.150255967 451.2421875 457.509630967] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 457.50670128 336.7734375 443.86607628] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 443.863146592 336.97265625 430.222521592] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 430.219591905 322.201171875 416.578966905] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect [92.25 416.576037217 316.96875 402.935412217] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 402.93248253 448.3828125 389.29185753] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 389.288927842 350.302734375 375.648302842] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 375.645373155 360.662109375 362.004748155] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 362.001818467 384.099609375 348.361193467] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect [92.25 348.35826378 327.849609375 334.71763878] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 334.714709092 333.873046875 321.074084092] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 321.071154405 305.525390625 307.430529405] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect [92.25 307.427599717 322.62890625 293.786974717] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 293.78404503 339.486328125 280.14342003] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 280.140490342 378.029296875 266.499865342] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 266.496935655 344.982421875 252.856310655] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect [92.25 252.853380967 418.39453125 239.212755967] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 239.20982628 508.62890625 225.56920128] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 225.566271592 398.53125 211.925646592] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 211.922716905 408.8203125 198.282091905] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 198.279162217 488.765625 184.638537217] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 184.63560753 466.88671875 170.99498253] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 170.992052842 392.578125 157.351427842] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 157.348498155 389.900390625 143.707873155] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 143.704943467 389.548828125 130.064318467] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect [92.25 130.06138878 390.890625 116.42076378] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 116.417834092 385.6171875 102.777209092] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 102.774279405 390.0234375 89.133654405] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 89.130724717 392.431640625 75.490099717] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect [92.25 75.48717003 392.765625 61.84654503] + /Subtype /Link /Type /Annot>>] + /BleedBox [0 0 595 841] /Contents 30 0 R /Group + <> /MediaBox + [0 0 595 841] /Parent 4 0 R /Resources 31 0 R /TrimBox [0 0 595 841] + /Type /Page>> +endobj +6 0 obj +<> + /Border [0 0 0] /Rect [92.25 785.636834092 392.07421875 771.996209092] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 771.993279405 390.322265625 758.352654405] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 758.349724717 400.037109375 744.709099717] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect [92.25 744.70617003 413.578125 731.06554503] + /Subtype /Link /Type /Annot>> + <> + /Border [0 0 0] /Rect + [92.25 731.062615342 406.072265625 717.421990342] /Subtype /Link /Type + /Annot>> + <> + /Border [0 0 0] /Rect [92.25 565.80875792 306.05859375 552.16813292] + /Subtype /Link /Type /Annot>>] + /BleedBox [0 0 595 841] /Contents 7 0 R /Group + <> /MediaBox + [0 0 595 841] /Parent 4 0 R /Resources 8 0 R /TrimBox [0 0 595 841] + /Type /Page>> +endobj +7 0 obj +<> +stream +xœÕWÛnÛ8}çWðQ. Š÷Ë>.°(¶ÀMklŠ¢P}‹ KI$¥Aúõ;$E[¶¬ÖÞ—66L‘CrxΜFy@¸x[vݪ©ñ¢ÅÅ=׸]Ô¸()Þ´ˆbŠ•SØJ†›^£tƒÒ„+l¬$Fai91ÆàÜpG„ ?à1ì¿ÍfÚxÒ +> Ç9O;•„r3’(Áp…5öãÖ‚ëJÀ¬1ˇWà…!¤†Ãƨ£êŒ£[t|²_sŒm7°À3¢ë÷¤ñØËúUŒ£ˆôÏ“ÛÏ9ÁXkãŒÄãÎïÂ8è-£Þlšò©¿Ëô~ìTÅAîã½?Éô—’×ÀSS7QÕšZÂaEâšÆ«¦†(Æ*,W±OÛª3Žî’Sl»EÑõ{ÒxìePÕž>còqûù#'_–׿qÐÛNê(Ÿú»Lï—ÁÞùªÇU=f~6Ó_J^û?à”8á?PΜî'ááâ…`࢑œY‹ç*Ö9ËaÏ×(»íºûö¢xzz"÷Û^_AJ â$ïô¼­Û®„’¯Bõ¤Ð"{UÁpkÃ?¹píú‚Qno‰sƒþΧS) +endstream +endobj +8 0 obj +<>>> /Font + <> /Pattern <>>> +endobj +9 0 obj +<> +endobj +10 0 obj +<> +endobj +11 0 obj +<>>> /TilingType 1 /XStep 1588 /YStep 2246>> +stream + /x28 Do + + +endstream +endobj +12 0 obj +11 +endobj +13 0 obj +<> +stream +xœ+ä +T(ä2P0221S0·4Ö3³´TÐ5442Ò35R(JUWÈã*ä2T0B ”2VHÎåÒO4PH/VЯ06RpÉç +Ba  +endstream +endobj +14 0 obj +77 +endobj +15 0 obj +<>>> /XObject <>>> +endobj +16 0 obj +<> /Length + 17 0 R /Resources 18 0 R /Subtype /Form /Type /XObject>> +stream +xœ+ä +ä’× +endstream +endobj +17 0 obj +12 +endobj +18 0 obj +<<>> +endobj +19 0 obj +<> +endobj +20 0 obj +<> +stream +xœ]SAnÛ0¼ó<&‡@2W"k@0P$’uû‰\¹bI åƒîN=ØQ;ÃÙѲz>¾çi³ÕϼÄovœæ”ùºÜrd;ðyšÍÎÙ4ÅíóIÿã¥_MUȧûuãËqÓu¶úU^^·|·ßÓ2ð£±ÖV?râ<Ígûðçù„­Óm]ßùÂófks8ØÄc‘{í×·þ¶RòÓ1•÷Óv*´¿ï+[§Ï;XŠKâëÚGÎý|fÓÕõÁvãx0<§ÿÞ5{P†1þí³éü·RZ×e1]h—¥à¸LÀT0õŠËb:7*.K© ¨ û=4÷‚[àVjjœp\–è{Ñ÷Ðô¢ép*¸N#:~‡ýhb?è>ü{ñß·‚=Îõr.Á‰7—„KðOâŸ<° BV$Y<“f?$~g‘ž… I2lÐK#½´8·UÏÈÁk8J_È9HΞƒzF>¤ùÀ³WÏÐ'Ñ÷àzᶨoõÁgŸœ~ô¤ß€ƒôè éTs€æ õ^êz,‹ ÛçTÉØÉýøšçx˹Œ²^"a™Þiæ¯{¶.«°ô÷øZãÔ +endstream +endobj +21 0 obj +452 +endobj +22 0 obj +<> +stream +xœí{y|Õ½ï93£}™Ñ¾k$K²<²dY’íXã=‰“ØIÇNPâìÎî…7±!˜‡%Kil…¶Á¡, ´\}”hB€n­m.]À@iK[ˆåwf$9&”Þ÷ù¼ßH3s–™Ñœßù-ßßïü @\ËÖ/é{G~T@ì Ø‚eÛ¶¸2¨»@Å_€o®ì[µ^ýﻨ|»jÝõ+¥]s¡'|€òzW,YþÒ…º¿PýÔVÙ‹ÈVñ[ÔDQÝÛ»~Ëö·Z· zª¿¼nã²%¦ä£L±£úÊõK¶÷᫱aTG×Wßµ+úüÿøÎT?~;Àø—•1ª “þi1F~g_{ç5áPukÜ:@tÕ"ð%¨Ào|# ®+A-8q$Æ/pÛdd2x*t1 "6å½”¥b„ý”Äh ÃŽKkO¤žád$ÇrXšæ6rrx†[ÌÝÅsËA’£QW5‰-ÇKuƒÁãö²˜f=ÏbÏyϸGDz(Ï]ž=DŸgÀó‰÷°ÙM×.Ê.ºti,v)›/SŸ_»”ì¨)Õ¦3-†ƒ0Q “µ0¡©ð3±D %½Ñä„&ƒûJO  >“&.´ÄcFCá"⺜ݔÒÚmËZ*ºWn³Y;j‹iìvÚ¢]h‡ëÕ„»²Ô¿Š»åN‹ÃäsÖc„XñÂ/W_ë6[bš±ŸxJ•r9V_‰D¨ƒøO£F¥À89ÖîŽÛÍ®SGÆÆ™°R&Ãò4Vˆ="’+èäl"©Mˆ€I…‚RIî““V«é^ÜH’àìøg’QIìvN¦JJUÔ \Ú'`6ÅØ°&Άã,È rf4޳ˆ&aŸ2BÃ$⚸ÆmpçGU&±Gê¶tüÇŠÇŸz +Úr¿—i(®Ò²D¶ùv\‹îñÜk=c¿ªK;œ2 bqàÎ5Óð¿2ÐÖs­~¶‚­Jp ô€’QI&½§|ý”ªD–:PJÕ”õ¦SF›‡±]øšÉf¶¹­¹§™ÐŸÔ¨½ošÞè8×D}¾‰Ÿ]4½Ôç£Y~™Q~^ ›…NhÐóІ`¾yR &aFqÔ(´ñ\ A— +ãÅ_«®›Å5¿¦ûZ¯Ôî0w;Æ~EW™œf§YË9a»ZZqhÆ5÷¯+ñ»<ž 3§÷úeA =µ"Õ‹¯h>wÝÖ盦—Ør¿ôF2 lhÀÄyÌCXœ)R…Õ•±šöY—ÿY{|ÅôC骩u‘±s¶*ƒ…®Fór[°/ÔÙœÒÿoχžzp:Üþ$Œ‡Ã!Š=èAã#Ä> +()eW*ºƒbcðd(Tz2»Õc¼{”øjè(?©P¨N*Ÿ­Fd³£YêM:M²èƒª 3ÊÆÙlFkJfP![-Pš'³„ÁãEÒå©™ÿ&**‰MɸŽlÈφboK_;Öy7­o•7I+|õ=½n—»§šÝ,M=q_Õõ~ÓT²É°wùœE4í\ØP¿þλ¨qÏéZkœè •ÖÌŸšb2ù´êr7³²éúo; ¹× ΩŠÔôŒÑB|øôøGð'ø»@L Éù(Ü…cøyIXf8O*µ€“#QbJŒ‰…µ`Y6;N§‘ÆÈfFÑ@¡0ÈüX4“Êð'³S©Ùíét;æw|^ª½/_þ ÕÖÆx¹-Ïuá+EAºµóãÂ1\a8…¹°(†c4`ÁFÔ; T#™ÕËUIììøo8%*ІA¬MÑ;!‰ 6ŒJåÑÝ¢²ðî?’Aâ+ÇfÞŒýå+$ßâõÄø—ãÿ‹ð_ƒ(ĹýÕŠVÅBÅõ +B$’+$½Èª0züÎ0›‘Ç• C†m“7(› mìbù\å<Ãb¶WÞ«Þ,¾A~½âõvúz×V÷vS®’’Ä\vZ©Pܦ»h×ä²ËíÙíñ+ärÿ6\†Ó·ÚØ1ûn%¥¢d*‹ªT¶]AP*…Ë-Ã%zA?•Ê4hp16¶1†Å8™2©W*ä2œ²Ó¿üFT¹]Æ2¸DºSz1Ÿ)ͳŸ) xÝ…ø0»›ËŽì¦ÆF.ì–Ž‰Ð‘’Žî–ŽNhâ6eA"Õ.ÆxÏ rù1AüÝ5ä™Ñ¨5éâ0¯òZ á‹BKŒ±î¤ÖGvæþžûֻۜ’Ô‚<ëž)¹fs—{ ÏsIT.“žUÀëðCDmíþÜ?WlOb? ½ Ÿ|˜­Õ7C½‰°’«scç±—Æoýrƒ5lÐÚeR)Çës „Ñ! úX€p\€yÀáЧ¨‹Ê‚‚®#V+8¡¤Þ„'¤çüd€°¾‘¥þŠôß%^&ÙÑXfl‘)¾É­h¶òÒ†ObY,cLåÈn9¬º©NxÚæ0†¬;[“ñÖÖxzZÁFaK\ ­Rƒô”úòÛL™B¦ÀDÁô¼ÙÉ93Ñ{OEúé üsà!åêÅÚtpª¨MÌ)ˆ‹Û•kDÅ=Ê­š>í6Zm: +áƒ$år9àF×IÜ·PJ–²¥m¥xÈt‹ìÙ0õùX,›W;hªã,¯Îù1eó)¯Hò ÈÝf ŸPÝøµv_÷ýªªô”êô#«×Š–EÆ6ûJ;çwßTsŸÎ`jϬÞ+þöÛ;¦NYÛsnzËüÆêÔÁîú%ÔT5Ì]g¦ÂeUlí…ªñÏ@,æ<˜‚ê‚^áÂ!ŽË(†0Åœò^ôQ:ã)ƒx×$“˲¼ÉEF Ù¬ã†öseðhD0¹hνúëhÙ+4PA‹§'É o6Wñ¼¹ªŽU¤ª%8»³Ôæ°´9ÆþQœÎ +'œªÕÌdÚð…ñ¶*ÆèÕÎh{)UäQFajé­RÁOíÞÙs„±Þtäƒà2Ò‘ÎJËX&;E-²ªŒ*¯y¥XõMÖ‚µßæI:ç‘#ˆG —‹É Õn Ãv/]ƒÅ{Œž-Â6bý˜Šör$F’æƒ2ÊëuFŸO¯}KÉÓÓˆè©TÉ ÌÛ‚‹ƒ"ç.üÙꯣ‚MóøEà–/ß—¼¾È~/igímöÅvÂn×`:m?uLƒ#iAŒ *öãÇ0?ó°—“«“^ýÃ:þ¬ÓyeSÔ˜NfDj,Ãe =²“z{Hödm^…åÅM:²á±š=^ô2üQ˜_Á³@Z€áøÕ³âÖ0( C /‰¨3~¥%ÏöUü üW¤°}¹Ò¹œtYŒŒm¡˜Þª¬¡;“ïÙb3Ò¢ÖV‚ÑÑmuGµV낹îu>ÿlMÙ +5|8·¨SIȨ¿ìŽS*=Ö’{tÆw¤1öªÃãX{+ºÖ0ç:¹é:‚ Úè‹eˆ,íã¿Ç?Fò\ ZÁ½œš–5!ihú Úı³ã¿ææÉÔI…2~Dy£‘•oô÷û1?Ou¿ßq¥jïÃSÈ.fWo *që`*•1‚ã‰gfÒ3Ù™™™xÓ-´ŠUaªggPŸ_Ë+D\dûÒ<‘^4¯ÕòbæÝšpÑ2yMPtÉJoòŠó¢Ÿ¤õжµ4 +ƒ&´ þ1Û™•U‰ëî]½ñ.—Ë2Ǻ¨B«ŸÖPÖFé2©[W˜Ò±#Oˆmv²Î“;6o «šßвΧÕ¦5OqÛ†ô¯“Uk®±.SMwû’´F?ËÍTµ”–u¸í“ß׿ü®wvÊ(/X¢^O–›;«‰E|ÍŒÿžXb`7·\¬W¨“N½ù²¢pÉ©àÅ¥?e¸h¤b§ÀEhC4 ¾‰¹KŸ© +îªx°â± +"S±¸¢¿b_Å'ãb¶’¨‹­ÈT´¡n±yPœUõ«°ÿRÁ„'ùÀÀ¥Q>$ ûïÐ ;,|yú†}¢@‚ˆ$øÀ“QT]¿†¬ˆÕ¹ÿ"Åæš@¤cæ®=6«¶Ò §‘= ÉN‡-¨°[´-¥p%‰Î1§Ö¨ÞaI›löô– &ج›»vÇd`õëFº@Ä·]þ³'ªQH`#N¿D ˆ•ÈŽN˸†`¬ +Ùÿ©².ÙjÙÃö)RÇ)çEF {PGxbUœÚt:XÉ xÓýL†Í´ez2xb—êÙÚ¼9â=h$¬*\Ñ¿<_G]_ºO#HîÕFk ÷mRZqÿìŽ#UÕMÓ릜¹¦i0j·Ø'á~ÒÆcÎÜ}R¯Í1«¢fEÀvù™õ­í«q®Áª¦·66½°uíÈÔ†vÆ燚´: Qk"¿øS®QŠá:¬ÎZc±¸k«Rß[ݱ§:ÕØœ‹¿C:2¶rä"b³ØÀì$v2b8;þ§W¨’€Â¾¿×ŽéuI%õ¼ª+Aø0ا{C¹Óæ8°Oÿ°Q¶Û>a³…Cl8^îEó5J¡ï†!ÇËl8Î#8¦èïÙ$“T0U¼û¡q¿k’±g‹›^TReg´›]cKí›nºŠ¾&änq:ËdÍÄ›„Ü»¬´¬ID_ÞíN’3liÁ”2UyØŽ‹ˆ–Hd…Þ$ðÇø§ã¯åˆ?ìȇœÏ¥}lÚ•`W í)ÝE=q怕’H"qc32&+î@褜,gËÛÊqÉI©ÔèÔV°yTˆ©0x' N~à«Þ…?ÑJ¾WIbV(4ñÔ]î8WÓlÅ.>žëre"yšvçö"DS¸…ÓàÀ;óñ?(LÁ>‚0®B߯Dj݆…°*ŒÃbb ]lÇJ±lv ¶»“`˜B@YfÜ!Y2C¶‘8É›=ùí¬*x'+á˜à/ + 9œôqçµ +¯RDcÉ؃¹ëæ/ Òåª)øwñO¿8F|NhTkçÂÛx²jü}".: ,HfNpQN]ªCJ›6p8'ãTœºN;ÝÀy»µK±x¯¶Ç{£º_»Õ¬³ù‘œ” ôó}töò(¨ßÒ›Lbê0IÒÂû$á?,¶¸ôŒŽb(Œ¢”Ö!wà”ɯˆ3D)¡²(Bá BhG§¢e¿â#QÀgâ#8EuS´9Z^ÕÄ[3ÓÎôl|"Ã5ÃGà +í‚_2ßΞýÕ½;Zoª/IðµÞ§¸iÍsZg¼½®€*_@5ç~ùFkí8øõÃ?JÕ+ç[þ”ûûyžVåh®kˆV G³½‚˨”Ê;$b½D"no÷‹q±R"ƒªC".Qq8Ä$$¸r/ d.ä6ËH’C(†%¡˜Sè“b„àx·?çãWüLò¬žNkxN/ ‹F÷14 ×ÄÝHÔ¼226€ýp×+¹­c—äÒðLJðù—ïÁîÛįÎôŽ¿KdEÃÀ„Þå¬þôƒ%ü:€‰×jaNI&¥üK”¡)ø>:ÓüTìC ß%#D™ž0º¸.íH„±éŽæX·£3¶FÕ£Ûèèq-óôÄvÀ¢>ÉUŸ¦Ït­kséÑ­šÛ=-ÜßµœpÿPúS½WrÜ6™ ¢‡q‹yï>íQ-¦uîUÊ”Z!öîåEÀ¬§¢¯‚ˆì¥.á™ ¯FeFѹÀ¦4bôpaƒz‚ñxó^|¢Â;¡p xÔQ uyƒT„¶D6÷îGïä>?r¨'4<ÿü'· œÜÿÙÝ›6í;~±µ>T/leÏ‚ïíznÿögï>vÓ÷jZ]{ìí GVTñØ]Ìæù©þx¢1÷jn?[RÒ›,o«ö»–dN%©-)-»qyåš@ ¼ùàý;ú-JµGêʆ|Õ3bëX¶jZE¼¯$¶"ÌÎ4S¢’@ð¦e#Ÿ ÒíBÂDsc‹8…ü0¿&fÅPeRÎ ‡À  äPú½rØ.…ýR(•Úm¬=cÇì¼×VVlŠÇGDF[˜|£±ÌUqV†'Z2Ž8¯h Ž-rö›i÷?“ë¾ã›‹‹i‡u›ƒ÷Gå‘ö\G{YÝ馱ǘ¤J¡EVl@¸Õ„Þ9 +ÖpÓEPjS¥¬t y½l“oyÀwÒ§º”ê¤$ŠL¨˜V«æ0£ÂØû¡Þ´Ç€zëÀüþƒl,k‹á16+ðE>ˆX½{º#CºµøþÉbЛŸó¯Mxa¶Ñ×M˜.Ï·õÔ—ôµ´ÍcLö[W×mqH ™ÚXeM*ùð¢×þŽ&î¼gþ(o£gFlœ?ıt¶sÇÖxÄÕòW7UU®/‹¤ž¾Úö²ø´ºÀ¼’‚Mº×cmœ=dó¹«l ÷TY‹¡K6ß µ6¨Ü‡eó^XlÎ$À)ÃqŸŸBçžvR$$ÑD +:6|%Â6yp’#à/L0Zç2³›G¶ÝôÓL}]¦ûéÍ{~ä8vûÇìßÿ~ræùM·ý¢eÚôÎÖY¯_Ý˳g-¸&çýŠs_|üÛÜ(Ôñú +€DüŽjpˆ[1_±J±²/ "ž¼Y®ÐË劒@I0p“J©W©”*¥BŽªè¥ÞíŒ<J<5Åø†zÀÿ†é ç“5JRA+Xž?em +‘B®P•¦2ß±n¨†a>fÊÇËÆb¼Äg³q(Äe.å¨mw<íV—™'PÔ$~E¸á×CÝ2~„_‘\ah‰zìÏZ=í söX.®¢]Æ!ÃØ‹‘e6Æê´Ó Já%x.ÔÙ Oï1Y|[·n¸7ô¸hæzÖ(j„F£i_ïØ}ÛN§*Ù†tz;Þ°zµk)RæÓôŽÊdssºr[ Ö¼ñ£Å޵€â±ÿ¨‹ò9UÅœ êßå\3+ˆ‰¬ +ϹLa‘"ûÿž,aøz²ÄžœÃ”’%]w@f·Ê­¨í++æ©.ßJîÎ=f‡™¡¿’,aJP“’% +ËžtqÃÜ`0»Îìr%äÒB®:aFä[@Õ¿¨&,¨†'Hmcm[ŸMDJaŸt@ú‰—JmÖ¼êÏòUXªùwKk˜1G›*ò)=¸YmuöbBÇ6oF«ÔóþìO3þõóï†@1>ÿ5òÙoáfàj’Ü÷'ÄjƼêj¬BÝŠ5ªbêµØØµj3ò jü ’vÊÞcßʇv1ò $qL-?©P#¿ã¤ raaÕI;yC0áoñØ@0B¼–?½ ax…8ïO`‘«…->ïòo±²!ä\ØËµS°ÏÆ~â팕Ìo, *´²&wˆ5ŠÞÈ/…ˆÛ°˜Ë±2*Œs|4×H¨Ñ8SàAn5+/-ßÊnŽJRéŒFœŒÓÆÜ‰ê#‘¨Óædl»I¥ž$•dUDJC âcdTÙŽ÷à}8ί»UÚøÐ! •Qþ*©®Š7סP[ItÈTµUH²‹ Äl>’‘eã¼`k~T_¥ wSÂ2qÏç) Ecž¼D–ˆ'Ö‡óÒ/‡’bœO]eZÒ#í¥êÐ-ˆÀœ +ä…#Kj$Ö…A¸Á¹Ô|ݹhf[ÖZ2«;÷\,cÖ‘Û¥ÎQ¸í岸¤¾šôNõ²ÜÞ¾µÿ}X×`¶FD\­¨º2÷Q®jííG"!ÇtÞ7Y3þ¾Qô]àGÈ·˜[ ´î~¢O.¦8•2(€CÙ+b±Wµq¶vn³i_òRiô|(0á”–d$"–Jä as¨7?G9ƒÎ¨“sN"ÓAŽÑâ²å$XYñçí¬Ñü[,1yýÇ“‰~vMæ?ÊãéþÊš(‘†›RYVÊ–ì™¾æø³Å•DQyÕÝóÎýÉü¼QD3¾Õ‹µ)Í Ì¾)ÓËKfz]e _Ê‹‹8åññÏA hYð·b§,lršKwŠúÅ[çKý÷1`5 ›vÐÊ„pW$’ä• ÆtQIÎêH&“dÿ8gáA™í½Ð{S°òò9¤‘÷É3nޏwÊ ÑRÆDŽgq"ŽÛÀ„˰|Íñ+Þ1ï å}#fR€¿·¤¬6ÓðÌž÷ß=úNÎduµÎèYóú±HwìúƒÏûÆí×›b!§cf°ô~WYö‹;Ùƒ^³dfgv¤"a?½yÝB§Ù6oÿ#+ý=--;ÊØŠ];Wn©e6­!Jt»ÈÈÙ۟Ъ{ÄáÞØÍOHC^_@"% ”C¬óoÝðº³åoß;Ʀ¦ª¹aÙ,†³YÝ›òñîC0IìÅK„<Ä)\PôÓ¨˜cb1ü)‹µ!#&!ñ Þ†÷㎋F¡¦Œ¬MÆ/NÇyG;ïe%¡;áF~µ›Ø{™ÄÿÌïØwväÈù¸éê\#|Nô A¬âÁÆi?å¸è¤Ú•=Ê>>WJ{PlóqõË ŒˆÉˆ\IYw8 ƒ.™ n +^ÝFØH_ôN,6Šð( +É ÙÌß +)¾IóZP7ÈëºbTt“WÕãé»:»DË訖r“3êh u= oW“Ålš ÏgZZ¢á:«A›°œ}ûÀU­UñZ£þg1_Ž™û@oE4Õ<_F/ÂXôF€-PIúâu›û`¿Þ€töÍÊ@¸–«²¤B©”¶&UQ3UÛ¥]£ÝBßX'g˜Êƒ2e§2(c²ª6/|SÊz¤ƒàMo´„+iG8˜'¥Ô&KJ¨†¶,½Ëøl}qí~SürM©Kl!}/ï«ðÈkOŠ*öªì¿„_DpbâÊÄÍcÒ5fÚ,¦ª]%ÓS ¬®nj¯Ïœ™_·ÂK×ªæ¥ •ÕažnÊÝ+õ[í³[¤ýÞ SWæ izp¦eIƒ©µ©ñÇ×m:×T7Ó¢Q%7K§ÿröå>&®’“ÅfZ¦˜Ì®ÏÞ츭:Õ0ˆÀúñ÷ÅÑ÷„\3° Žìž&-/!×Çbñ¯££Ñ¾^ÿ;aDx!ú¹¹ÛDÐî¶[Ý·á2=²ýv‹ÝiÙ­’#_J®²¸q™H®+ ‚:¥!ûä·Ê1¹ª0•\†[Üb (å¡(eK!Ÿi”)m+%42óº6+DUÿ5&BÏWrƾž0V©œ v™í¨ÞÙ¨èf->Ú©ïŽÀ— ä¢àÖ»>#׺M¦R5¼?"-¯½5÷ÎѲUÂ]¯Í>n¡Væîéë„àkÖØä%ò¡ %ˆ9D‹ð6·Ü ÇÒö­¥D¹1†­U,g1‡ÃŲ¥1ëͤB!©«k$kÉ›­V¾’Ýul¸1¼Ûå’$¬ÕµMÖÖÚvÃ<ëÂÚ­ÖkeétµÏÇôC´YII£+«eªå¦–bR^KË´þipoü Sñ©ÉŸªª&˜S^RoB0¯å”AÞGˆÙø•¼<q±|ºÞnjl÷È562Âgéí–ŽHG(ÑØF4ÎÓ=Å^a)±èT$óÂh?‘9zbUBè%—«‰dôrËüLEWTB¦Ó¹ýszcW|ÔÚ0~ÏU«”³•L6@H›h¸nf§Ó½pÎÂk«-µõ"¹Aæ§»ÖÝØ$wÊŒ„¿ôéPÉíÛ§½Ñìgëë¥j™Qå¹³-:P%1È ¾?é n_7p|~iœÈãúyðuìlÒ³Î_¡1Y'¢ƒí‡ý…,N0až°Gƾ‹uÀ×\É¡Ï"Ÿ%Þä–nYP2@}Ü ÙP,ÎÅç”­v//[™ØW"VÆ*]&ÄT3­ ÁÜF0«ŒŠ¢¶hŸhk´¯’`\Q¤E’TðTé©0%˜7 LAœ<¥.­ä'¼R©NÒQ{Œ®‹¡û™RtƒDį}¹@@ê"«hYªã.Ñ ã´ú„á\ºè,ò‘—¦0›wù•ä1ÄYÈkéÈX–Aű<ÈB$KÃ7gÙ}r‘´ñþc6÷óY÷ÌAj»Ô1‘coè¶ÁõêYOÖJuóKàã7yÌ]ms^cK›6A솙ò²ŠÉéõ7øê4”œ÷ƾõýf™Cf³¢i´´:õ ¦­È}©öæÑŒdÏ/V!=´˜«]ŒoDhƒw?–Jå¾ÏKš¬§,4 ÕhÔê ȨÅj æÓ”ÊK zN[NŒ»¡û\˜,¥K±,õWäK +¶ŽGYÁ§DÕB<.¯góÌï€qÃ×Ã3L"ž¨ÐòÈÙ-§Y½Þ£l˜–ËÙæöbîß‹/þñ±î¢{#µV£1¥ÁŸ|iEÏX SʧmNøË?ëÉüšš ÿÖÀy«t ÍBg'šo ¡ŒÃ¹p ÜwÂ{°—°·]~WÔUåú®Û3>Îÿo…s`êßQèסþôDÿ7oýÆÛð< @Ÿ£…ÏKèó2|õ—O\¾êÎ2dMÅèn;pòæhvLÀ + ÿÏ“Ú}“®'¯ºŸþJM‡Æðõ-xŽ×#zh D‘” îATqïc9’ Ë‚ix‘…ÿÿÛUÒ]híEtÄWhM”óeüç€ÿ7W8þV8¾@®Q¸ë T:ûÍÏÿÛÕ}M[~ÿŸ¶õ´ü—~sß7oà3ðKÀëh?~ ~îG{3xü +üLËÁFÞ½›@7à³n¯ëA˜»Àf0¨F­??E>l 8 îFø»µ´` #}µÌËÀ°<]ÐÚÑçWèW›Ñç9ðz††ÁZp#¸Ti «põàCð9ò¿(ÌŽ-Bô8 ~_Àè£}È¡zqüx/ÇV‚íèiÃX –w`¯c5\:•¬LTÄcåQ¶,RK~Ÿ—ñ¸]´Óa·Y-f“Ñ ×i5©æ£Ü2©D,"p ‚R8lnè:c‘„mn·»;R¨[¿ZÆ}Ôgîa ýÊE¶«n²_Uw\UwNÔg ýp3ÓÐÈ?ø hþ`膡~ð¿u3Ñ/njZ¾†iZ=liXÞÓƒîhd(×pó§láU„gŸQȘ†òH)8#W ¢•е}g`s- +XsSÕ HU‘Òamxó5ñûšano*0èI¨Gw¥ÞÛ'wt[±¤Ë—à°¸aX"ü®kõ0·dìu)ºý,–ö„•Ë™åK®A”[‚Þñ À}M½<›ø½§×5L ‡ jq5õº†žM½=èÈ4¢»þe;j–5tív؆µèÜ4¬ · +Zn¸dǚ̫]|uhh·køèì®É½nþØÝÝmF/<ÔÄ ¢‡5­©GC1³‘Òü˜ +XÞ³†ÿÍ5Kø÷lZãÚ»Bx×Û…w.mêE³äºjh¨i9Ó´|ÉòúüÓ†¹á:t D¤kì.4.@=„ÐÓÓØíλuNWÿbÌ’F[~Ú'Zz +-¨¡©Øéâß`zÀ°k™kÌébÐ¥)þ°"†–¥æqwCtWû•»†E>Šq ý Ãfô£¯¶,)´ˆ}Ôß_lfš{††šWóPÏÐ’³ãKÅ imêkêA¿ÚÞ…î:;þÌ^ÛpóíÝÃTO/¬B´ç9 yNWÆæÖt«íÅ*@,…K! Q}§NˆÊ £ËíB„š×ÕmCtêâ˨œ?óŒ„7…æ¸@6žF+Räi(Ýnž;÷žåÀRT˜Ý•¯»ÀRÛã€cÃh>zøž‘baß3P외½‡A¿ò„€T ÃRÿÄ—¤Œº¦Þªahü7Ý+òýú†.܆uçK˜ çKò0’ôšaS•KÂCh.0ÃTxXÔ5b«évQ¤øÙ›Ë´Î^Ðåjšà‚|Ka¤< Vg–ôD 1½ìÀïêGoµ/&kþly{ô½:ýüùñõ¿½'w$×(›'™ª2€LºGҙˠ¦¡þeó„'MÞbRÔD|ˆ±Џ¸ñ­`6žÆG@¹èƒñ/±.ÆßSñ0+wàƒ©D;h–(AZT: )h'†8ˆÚÿHâÆñO‰Ý ƒ¨Õ„t£ò*b”ÿ ôk‡÷]Äv°ø#X%Y ¢O'žAÏž0üÄ?Åßk‰|àÖ9¾Zäÿ’¸Lõø?ÇG 9Pb90˜†Þû0Ã…±¸ÀEX_ÂÖa§±ðg#q‘•ˆŠ>¿*¦¤¯ÊÉÞ–wÈ/)îT|¬¼Eù¦êuú2E¢š©_kz5OiCÚ‹ºEúFývýÇÂð°±Þø²éaÓ æ[ÍŸ›?ÏÓÄÀC±í@xCŽÿ7ölã10§?…ôûìûw1©—¨K®KÂzsì’ÃWy×%H¾M¿y»ím‚~}=ózÛë‹_ßøº˜¾À^È\h»@¼ú +E¿vÞJÿ íümÌy¥ò‘ÃúÐa+ý-t>|O€¾ë~H=àz`߸ë£`ÂÊäèºS¤ô}ôÁú^´¸ÏEüžÏXàôÇJË*Ý#¥ÿÝ¿íw£]ÈX½‡ñWr?©+{ží{vàYÜõÌ…g0î9YIƒ=çúÎ œûäܧçD¢ùY™²’{ºýé}Oãà)H>E?…'á¾'…ß?©PWöÿö TÏüÖJW¾úÓÓØé4ýæ }üDŒ¦öíÛ‡½qÔB?„ö£<Ê>ºñÑ£`)µ{ð~¯ï=ìÅï[ið}H>O?üÐJÿÚŸCû?tÐ?Üi£÷±ô´ídéÛ¥ôîÁ©ôcGà‘A+}ë ‡¾eWš–evµíÂjv Æé·PóÀà¾Aì½A8¸ÓN_ø=¼y€¡û°›vN§ûwzè;Kz<´Óã«;aÏξŸîÄK#d(¬. ’þ€Úë#=ŒÚå&´Úfw¨Ì«Ê`4©´:½J"Ñsˆ6B´N¢ > +endobj +25 0 obj +<> +stream +xœ]RËnƒ0¼û+|Lb“H©J/úPi?€Øë©Ëß]o”J=ÀŽÇ3Þ‘×Ù©{îü¸Êì=Φ‡UºÑÛË|ä.£E)íhÖÛ*ýÍ4‘¡¹ß–¦Î»Y4Ì>psYã&wOv>ÃRfoÑBýEî¾N=Sý5„˜À¯2m+-8<îe¯Ã2Kæ}gq\·=ÚþŸ[Y¦uÁ‘Ìla ƒ8ø ˆ&Ï[Ù8× +ðöß^ydËÙ™ï!ŠF•(Ís,¢Ñ*a,¢©Æ‚˜ùšxmXcˆ¯˜¯—yÂXP£Y£ ;ÆŽôÜ«¦^нмšy2 Œ ÒsEy4cM¸² cAžÏÔt¦âÌŠ2Wœ¹¢ÌXÄ×Ì×Ä3Ö„kÎ_SþŠóT)÷Ò©×ñz±^‘^ñ=`¡Ë¿Ý2ÞË}¾æ#Ž6=ª4SšæèáþîÂÈ•¾_K0²R +endstream +endobj +26 0 obj +358 +endobj +27 0 obj +<> +stream +xœÝz{|ÕÝ÷93³÷ËÌÞwö6³;{É^’Iv7›,²lB $áž‹ „‹*( 5 jr‡ ÔÚâbÑ"øúо¶}žöQi­mmÕ‚­>Æ×öµ¶µìæ=3»¼>ïûùô¯wfç̹Μó;¿óý}g@€ô°KVwõüæ'‡«p•€Í_rç:vú’ÖoÀÞ|wYÏòÕÒò«»ð¬@Â/_µqY÷ÿ6=‚žð]œ÷¬XÚÕýÓüÛ×<Šò+PU.;Ò—QÚ»bõº ƒN‰¥ÿŽÒV­YÒuÛñîÅ”ô ôÄÕ]zð:ì!”΢4Ûó¥=Ï>øÌ (}|À„ÎÊ€%ÐÍø)Fáâ_zó%1¨(wëÜ: + ªõiŸüS¸ ¤“l¥ ö¤º•xƹx¢‰—°7à ´^'±'ÓF÷:†¸ºâä°Vëe¼ö@Ü›öÞâí,([ã]¸­¬×»)pw™¶ì^·ÛÀM=õ®º§ ÔIzCÚ!Ó3UÔ'W®ä¢W2]ŒÏè-I~$øK²vdDŸäsº¤. ï§r*ÊA&ýX€ÓÍ´˜Ü•aÕDX©‹ûe0Péf “Q*CE…ŒûÃP‹&¤Çroí8¿½Êî7ÌpæTÎ[Œ~›9ÄΣqTAÓ“OÕ?³˜¹-hi$sóŽìmmÞ{ìW<žŸáêä:¼¥WÉ© +?þž·\¯Ñ-=±ÿ™XûŸ6ÖjdJˆ¿ú­­¹Sä×8ú±Ï„À¬TUR[œ\\”ØC!i`POQl‹±¬s¿ÔÌžÀ½•~>BFøHk¤3B„l[ÕçÃÔ'¹h†úd$Æ€ZfjQŒT”g|Z(ÓBÎ# ¸2ž@£Ea8¡ÛhF#­‚¢,8TF¬æ–ÔÖ=رïõ††ô´tý+}ŸŒçþù—Õ¤n|éô…ÄÿJ.õú³¸vÙù¦Æöúšä#s&½ôËå­0]so _þèÂØ ¨ýþþOé §2fvÒ±$]^ÞÀ7”Ïåç–/ç—•¯/í7ìâ÷•;OðOƲÎçc¦óާ£ãëõíôá>Ÿ— +:"T” ¤”´MÚ)í‘öIÑ!Ñ 3wÒëõŸôE¶9¨mQŸC}>Ñ™€ÄI‰DvRz¾’úXJ†zW—LR#<: Bâ)!í©E‘ ’”ÉHÆá1Qd* J"þä±UÅ œ(+“¨P&#)ºž‹¹Z4MdC)¿1½ £„ dêë»â¥‰‘ ÅMÍT#÷ÅÓÛ7¯ûþÉü¨'ÉÖÃõ¥kKK'6N-‰Œ£1 ÜÞ¼ã”Ï<>ÿ䊃©ds½«ìÈÝÇÏdH޾#™…xГjV«\ª°w”«¨*Bð ú/(ã é’™âÁ%h߯4cégü˜ÿ²«\ž«`*`EJ©­â+vV©­ ¬ýÆËšçÊÑ*É„¿n¹+™/Häã‘Zñ§Ó'+Êß$PÉ©Ïõ5ã³è +Šó™ aõHfå9Rê™T[0ïàQmLÙàUUkºq­ÍFëë8x•tØ \&§v+3Þj·={þ(Pa 5X“Ì-_¾xj³{:µ\ȸv«Ð©° a±<"UT¥Üä uIhl‚ã†~ê<ÎØ¡=¥ÔT9”Ëí64>Î œ¸ø\©¢<?·ú¯w{$·ÃVa`-ŒÍ8ƒ#mNcÄÕ„IeêR1Û?I§±¢QŸþÔW¦Qhq±?£WqD, 5UN¤d•JEid”¤ÅbÜ›I´NÐKã´Ø/š§¡\Cõ+å²ç¬Ô'Ñh.Ê# gxAö(Q;’LÆx$w_QÞ\e A¯Ûä.Ê÷¤öÜúèÁ3gaZóïOšmï4”9Jw`ËVA>ÿêªÜo×/–Káü©D@Wª¶Ùß\‚õJ¡Tè†Tª8”Æ}ÀKZlƒ4£eÊXÀkù²Ðë‘y´@ ¬§(—ê÷ÐǺùÌ•êu%ãy>#J¥ «"ü,à‹VÀ±·ŸÅZ4Ž1ÜÁ? ô¦x¼u~¬$ +ù½Nk “ˈ²ÿùÏ'Nª}yû=H–Ð5&Úv{Ÿî[﷮ʵÂJ9‰7§;·ê¶ÿhmé\TÄÎWvZÐê¦h÷ ‰*T˜í[ñç+Ê+Z+:+ðÀVòµõ7;6½ÔÚÜ>}úÔ7¶=ô‹3f“Ñh3©qŽÅDií–¹“kæâ+ÓzÖü¸aZ[CCÝ7m8ßÔ0}zNR=´²áL¼vJËÄä¡Y«wN™8¥ÍQÂ…ÿ ÙÍX+~ ¾ïÅ WìWLaŠô^òQó Iz8;z!eS!MBƒE3QËãÆSM¿÷²é8p@Ÿ)EdÃ#E¯Õ'“‚1(L“ Th¬hA•9ôYL1Q„kÑô¦¥J¢lYÀl3/1ç–Ð1=kõXõUnø&I¤™Y‹›ï˜:… è°šhî7\™FEB4K2©ªÌ‡5x“:5…£e¼»mÁh¼ÄoV!žÀ©`ÝånÌí–Ó{=8©ÖÁc`5$ï¥Ùcî]º!ÒGÑÂÊ¡}ÞVô¥Ü…3âš¾òñ•C8Â\ .†f”A™î/èž8•2Nç–¬šÎ<8Ž]äám~K—çÚ{Î[ ïYÄŽ{™.¹ÿë‚‹rBúÏǼU”Â@LxÂG,‘ò‹ à?£Œ¾Düa¢`IªÞ§H(:ì·Ú7)6•JMƒæK  qÿ~'¥T–âæ4˜0v+x>ÎÄùxk|gœPžTÑ¡~•ùÐîÔÑâZay¡ÅôócÄb„U%Xî¤XhÒ@AG²ÀgqKœ&ý Ó­3ZÄò¯_iï”UQ;ÇKdŒÍÐÄÀIiÓÃÓ/ý%Èb··OšÐÆJÝ:k¢bÙð½·ó¿¢õŸz‹¥éÉÝøãëÔzërw6Nο3 +šw$“J¹sÆIz›ý÷"gq£ài‹} .à;:’)’ÙoÛlc°H)ÕLø ˜,@²`€ Š´õk‘S[¤”ØÓ¹lQ=kc­ú&|Ÿt9Œå¶=ëÛf¬_?cƺ1|hà*)µYмkïrj×Uóm·57¯Z%ô½uômâ4ÂŒz0|+ÕMj‰j—V—ô%ç—¯¬XÕ¶É´±âî6Uú`„®¡›é…ô*úZJÓ•š§"0’RPU‘;XIÕÀÍ-û5f^Èâü÷ñüxj¢,M÷O—ÇŸ›µsœ•R¨«¦ÝGŸ‰ 'ŒðG˜è(/Ha$±¨¢¢\ŠTM˜î&WD&áw—n®›ÙœÉˆñ +Š­M“AœŽl¨»{Iê©õòóZÖ÷º]­üükãämMEd¼wèu–äøÙs;RµÇºŽM𨤰;tM®~çÓ¿^² >ai Bãâ¯údCjÀ‘ÔŠje£¢I»\q—B KB[J£B¡ –C%›I•‘$U*%JHH8¤è-; +Ž&žØ:±g"fyÜxÍúóÌ%©âU˜*¥ÐT©€*TdiPbåýÃ%¸¹b=l-¸–¹¨ hµÆ è~^Én(÷þ²°ü›Ô‹÷kˬbÙ£Ì DmÓ Ó˜ª€(Ãm*,Úb-Ù®z–è}lÞz¯¢Ñœ?äöÑ›m¹ÃôZo‰ƒeKf‡±p $`¶ ÐtÀ¸€nÁµr2^Bxÿév¿8åÚÑ{6»L~Á5Ùýwcÿ–šC3z¼åÚ<ì¡uúL­ÔT{®¼z…ø”¤áºylí©dR5UÞ!ï!ïŽK,ƒÖK4 (Yð †r ®Ft¿ÌŒYOy0ªœ²ŸKð‰‰‹ <²U‰\.‘o!:½2æWÜ0j‚W Tưt¾ú>ÝgWÒ'IcÞ@Ê*›ó³ü§Ðwqæ®°‹f2<æ i‡i†-Éh³±.ÔÝgq:¤&´!c!VÙ +#¾Ë|4lôMÒ› „ÀáßöÇI•ÞŠUZªiûÎË36WVÖðºI޾!}LÜËhKYÆ)¡%„qØ„»w+ ‘×¼[Àk2‘†¡¥#“ñm<fÊŒ™ºzMGSš6 ¦AöPZ³rÑ"Ä Ÿ> mË–Þ>ÞS•ûô½wòÙüùŸæWrE°§Õ£eG¾žx¿ƃ©`!Ø‘Z¨,¡KJ<Á’fÇÇ*ÇÝ9<0nÊ`1¯R*ÙÚÁ*ªVuºÀ…pÆüAÖJ©©ªÀ4í¶Ð´m6`5ý¡ +å8(‰Ä"r¿¨s>{Ç¥ûãç3Åý($1aóIðªGx¤c#DÎÌØÖP&îßAnŒG„á˜Sz3»àX¯`~+ÇŒr!&ÊÕ Çµ`” y³kûðo©5Žw« œ+÷PYMÓ´Ö7‡óÿȸïх˃¬£Í~/$/Ö÷ºá}ùðÔéqzº¹aÊôÇý“½'vq¼ÃÅÍ·ù¼'²¸2½Ñˆ(úˆÃTº¹ÕÍÛ*bÕ}}­Ë$jfy}hœÙ`—«¢»VìÍZù_¬ÀÇy”¯~èÞ\ØSg’®™ãè›ÓÝ àèÕÑ¿§ð·@lKeçSA­Áá·ßÉH´ƒyWàÝDwÐi‚¾_£QjhWH”†’ ²Wƒ:RÉ˃X0¨Q*pš‘êbñÚ* îŸb@_®ïÔ÷è ½^'p?aGF}LØé ±ca/9sr‘ +ª,ÅD¯R ¯ƒ R³ÞR€1ý%N•Îq4Ü?ÉÓ½cx©£ [áY(—²›§DÔ)pÎJ—‘ðÛøAY"¹'ÿúöÐ} ¨‚?ãÒ¦&è0K­dsþë_=fuIôv¥R‰5 ëº|&ÂpùÒf=9Lá 6 õ ¥ÑU!ºWNAa:P‘nƱòrùy¯œËݬ[¨ÝŽÌÇá(•CAÑŸþ_ìsäŸymÄ~«Ñg·ù­‹<¸Á5Ÿ Øì~S—»“ËÉ +?þ¡'N)M7ÛàQ +VÀlYaöbp4ÕÚ`ÕFuøÛüÒºÁúKiªqF¥z;åßßBÅh»c1Äd‰ÁJp|a?Pž—Û °Q6Ìvb†¡¿VØóCùö§âXüDCiýåÊã5ß‘‡ïníÆº…©öxº—€n(úYáÌ• O] ¯îkQDØ$¡þ&šò‡öÿvÀò‹ Ëå¾k.§Ìê¦úpÃɪt*hÉýØÐ˜4cyz1ï Áñ½±ÿâ˜îñ­Kã«pÎæÓ‡ÍNŠgšpB®ä}ðµåËíFSˆÌýÑ[ª)Ø‹‚!¹QÀ•]/fvBq»f6YÙ%3íMfÚóôñ¼ÍWª³'(”´ ~8Üššr³Í_gsù¢Õ%>ouOýË­®î‹V·%w҈䩛ÞX°ºzš¬@VWÜrtÙÍ.øg’ðOˆøîJCVWa¯[ÝåËŠV×ÖÞ$,b;E¯!ÅM’6O•Ãê97(š]¹š9Öè…Ѥ“Ey2UOx(w{…–ð0ÿ©Zêa6S”&$娤´FÓ$¨fédªC=Ws«tu§t#¥¤4d‘¥QK ‘“‘j ;O©4UV!ωÌe…Vk¯Z(Æ/UK,:\ +ó°€ h‘aá3á°ÈÜDp ‹¾íg0­kèÇa øÝã&d3$ôEdCfy²»† ó¦gJjý<”ÿÝxK˜÷ÄÃ8\5]&c?±t[Œv/¼«•ŒÇõ:MçÿöÄ`þÀI8{q ³HiK³ÆiVѦöüÚüòÀöûRklXÙVø¦(¹ ÉÏÂ`aŠëôôx°’=@Ö)ë‘á2Øëfp­n˜âî +棂0LJ=Pi[)$‡Jd½Ì5dy&2¦^ÂÐ3…m'ñ3afäúæõ—ìÞø>(û$(¹kɼùܵÎî7Îg®:; ÚZâÈXp •ß´ùĬÐñ'‰’ ßKTGók½•”\_üXÄßãb:µoyêCäv ¸¢„/j@`=w +åhA/…³`Üï…{°Ÿ`¿eýl9;Žý®Û3:*|ÇCp&ìDåß,–PyòzùW½ã·ðaø(<ŒÎ¡âùtþ;üwñSð¿ò0£‹cF ïN±$Pp|i-’ôhNåÀì¾1:$ˆT™€BŒ+‘Œ¤€Öi_ÿ¿:F£­ Ä§H_ŠQ)ě挾!†o…yqûHò)Šýêg~Éñù2€&¯pýwÇ—=­pÀ{¾ºìkZí‚[áØ;À¸vÀ©0Sá6Š©Vp;Ø‚T0–ƒ.°*ÀQ°t‚fÄž^}`>\× n]ÿ ZÐyÜÀd”ÓŒ=^éÐö‚ãà=ˆÁñÐM(ÝΉùp:œ 7Ãíp¸Õù;H&0t‹-ž?o¸>€½€4ú”àІúq/Z#=øLü޾‰y±7À§Ø=¨eüx V€gg*Ç·@|^Á—€Ëà2Ö @*Y]•¨ŒÇoãËJ#áP°$à÷y9›e\N‡ÝF[-f“Ñ ×Q¤V£V)r™TBàâb0k­k?MËÂv·ÛÝQZLÛ>›Îâ>ê/î,Ц’ýsŸK;?—v]O·d1ÛÀÕÕ > ÞÍC³@x 4LGo*6Jw¯äÒ·féºîÎNÔ¢ž£ØlÃG|±+â³O«”u\ÝReiœVªPT…b¨nÏiØ0Ь!=î4‚Mi$«g1_Z¸VfSÛ;Q„«GOB%†%ÈŠcþ +²°“ùà³9]Å©ú+¢ \CçÀ@Ç6 ttí[̱7pzÚ´žt'zk[;juvôÜv{¶á¡Ž,Õ¹ŽC²4 af{­Ý­ëK¶%R)¤X*q8H +è×T¼!)ƒÙín jN{‡É©]ˆÏFñÂ]P$¤¸ÕhŽ‹bd´´úºxêŠQ·[ÐÎígS`1Jdûf´Ò,Xl¤ø0šN¡äÂX‰iŽPÒ7Vr½y'‡ÞrFd/¦¬ÜýGRfCzŸ,4MñÒByÖP׎۱ŽB ³ãBLF+½&k £xIxMÂE.K…³’ö öš–Ò!fo7mÆüv6=p] +9Å‘ +z€TëZ1P\JHé ÿ#AWºÙ˜¿…¬ù+°lÔ÷<óºpzõ;ó›òõÊŒ¬ÕSû¢âÚÈææ‘ß­|•oRf +ÿH¹épÉ…?^t4±46P'Y Hì‡ÈÚ–€¡×à> •˜QYD$Fý» ÜÄ‹ UR{å倓´€Fé“ )¹¤%ý "]Ú|8ˆG¯â»A­œEí{.¥G/H¸2²é`¼ˆÍÆÅÞÇÞÇáÏqâ€Ä&Ù MHß—Í•KåÛäW,T|¨Ü¢jSýZИ5ßÑNÕ¾Pb…ˆûõ!ž…¡3’¨Ï¿†µ?=“z»ímL Øö·T‚ù/H¾ÕóÆüþçE9óº^¾¨öðŠB•x¥Oý袖J‡˜Cü¡‡Ž’<ü¨ŽyäQ9óè%ÌÃ!¦ípçážÃÙÃÄcƒræà ‡Ù È@ñATH°#ØÈ>šaöõîÛ¹ïÈ>‚ÙÇïËîÃ÷î‘3»Ñ•zÞN¤žWhçá®?Ã?Ÿ£þLó‡©sJ*±ë#øÑs4SþÏõ>‡¥Î¢ªGž…©gQËŸI=Óö Nü†ú Öúغë–]Ø©s]ÇÑõÚ9:ä†ñý!Úž†³wˆÔ%ø¿ÀÑ¿@°˜Zܶïýì|·ç]ìH~ÿW†ÿüàuóú æ‡/è˜ èú7týt‘g˜3Xë™§Î`¿?Ï Œzu µöjëUü¡í%ÌöÞæÁfÝè—3÷÷‡˜o÷›˜mý*æ¾­†ÜÊlŶösÌ/Pá‘~ØßK3›Q]¡_Oõ™éDzÞ½½,óMtuööôb©7{ßÄ"¥d(¬- ’þ€Öë#=œ–u“.Fkw85VÚ¦1™-½Á¨‘IC m 1fSˆ1èC Š 1$¥S«5ZµB©RKer5NHÔbjÆÅ»0F +yi­´UŠ“$OÖ’­$Q‹·âX+>„c<¨­` ìãå 9NÎàI9ªåL[ fõÓÀ´Ù“³ˆî³&gcáigå`f6ž–U´-h? á·:Pn{à,Dvxà,†núºù ÚÏBZ(î Š…}ý;vØOÅXGGØ™íž6«=ÛãìÈF…È.g£ãŽ;ÖÝŽðW§ß$»Ø•}“«¿ãôïÞdöw\ýi…бa±íºpxýõf(ïŽuëÇââÖ oCç:¡ +PU Ôß1Ö²ˆUÃw𸉸 +endstream +endobj +28 0 obj +7946 +endobj +29 0 obj +921 +endobj +30 0 obj +<> +stream +xœÕX]oã¶}÷¯àK»€i’ÃÏ  (.PܺmŠ>,ŠB‰Û[$–ÓtûëïÚV6qìÐrÚQÄ#‰<‡œÎð¾w/F?T›M½^Š›FŒîœhn–bT)1izJ(á’Ñj±®ÅmïCï9/!Zœ°ÑÈ‚“$¥üâ/bÙÓ‚דã}¡§è¥ÓF„sWÆpÇCÜî:yÉΰóFx§… F ;#G$• x¢¤¢$Âç±öí¹ð$¼MÒDn8ÂSˆzB~ù½(Id=†;¼yúEG‹W:šöžÌï<ç6Bl”nËnûMÛ>ìåöëíÚÐV>ÄÓøÝç¯yD±÷!+oþ)Šóz«cëÝJ~Ù_Ùzÿ;Ô³§=-÷óoß°ô‹]³³«/Ø|{Õ3Zº”¢³ùÑSk׃G8"£H‹«Eot;TC…iººí}ìÿ8ú~=Ú~3Rÿa0týù†¯â–¯+~´æ‹¸âWW >pûšïfÕà׫ï{š¤N)¨ÇjíÆG0Kf-ÿ±ÿÓ`¨sÏÚöop5ýÙ`ûUæ|+x¨÷ƒ¡!榩?Ο´¯ÞèᕟqŸXƒŽýÿáêYúÌ üS%Æu™ßgÆß]mçQ&âžNÌ#p`DÊÌS¥OÚ*¿›9½Ÿ¹þt³¹kþ3mg•åÍj1únQ¯«‡q}µz¸žU£fSmšQrÁ{kS´1 ÖêÁÕ§?þ7{~‚xÄ£ïñ÷©÷ñW JŒ{Z‰÷âcóGCþDZþfÑÛ56À@¬³’W™[sñ“øP¤»–²>b«¹DcŒäiã’q&P8¢ñ„ýÖe$ ƲGÊ¥ø(±Væ"%Þ‘r^‘W‰’3J¯$Ø]l°1!P‹”+ÁJ¯ƒN—I²‚%eŒŠçK‰ïe%ÈOaw@¹«¥†Ž‹„¼¿ÙJøùn\mêæ ¢ˆŒÊ“·Áúàèl%¤±[åEi[å:LØW1£E:®«e]-ÇóúqöR"±S))Å"´“FgË¢ ‰…ìr!ˆÎñËÍà !몙Ío泿þúün^-'ßÔËói›(£g3"‡0Ô"å´•’º4FÕ;wØõÂ\â’µ2ñ¼orâ/ðéÍñ2„‰ßÍ–0™ºÙ0q¹øsT5°´m×`¸[„³5`Þd \r˜žrˆ¨È†N=¾ªâz½ú½^ÞVËñjѼT2œ5CöŽùç!½³ei'y‹ä‚*f_Þ#å²4INVò²þÖ•1Iªœi&>h×{ \JIeØh\WÔ×UÓ¸ð\ÁCÖä¶…Eˆ¦Š%èè‘™úS‡‹¯H(·«³9ðÉ.oáêÁû)—Œ (µN3Jš¬&ëº^NVÊã~=©WÍðr ó ¹gV㽌1´H¹›LáÔaã¡´FˆÖ¦„-^)„MRþ‘òY »’PTê{¤œ¿u’ë—;ö›üµrîÀ?iòQ ÅÄçQ-RΟq\ÄÞhbˆç³IF¤{¤J-RÎ[ŽöáÔÉâQþ´…íD>¶ˆªƒ/csnÊÖÞI·H9•?8uŒx„?,&$ƒ‰8ªÐ>ñÜm‡ËB‹ÓgÙóÕ3Ù;¥´V…œò +Œë@ßeÃÝ;¬ï‘bú!ûÊ©SÂ#ô1ad`AÉ9«lãñ7Â.ôXjböž#Õ©*þMòÎú °!œO>pÐŽ;ò¼‹í‘-û½ÿPS9 +endstream +endobj +31 0 obj +<>>> /Font + <> /Pattern <>>> +endobj +32 0 obj +<>>> /TilingType 1 /XStep 1588 /YStep 2246>> +stream + /x10 Do + + +endstream +endobj +33 0 obj +<>>> /TilingType 1 /XStep 1126 + /YStep 200>> +stream + /x12 Do + + +endstream +endobj +34 0 obj +<> +stream +xœ+ä*ä253V0BC™œË¥Ÿh ^¬ _ah©à’Ï„ÍB _ +endstream +endobj +35 0 obj +42 +endobj +36 0 obj +<>>> /XObject <>>> +endobj +37 0 obj +<> +stream +xœí¡TWÆ«YÙII¬"£š$‹Ä4Y¹IEIMQMeM†¤f% f%²’?‰\¹Y‰¤ C`wvÞÌÜûÎyç;çý~ªÜlßûÎwî½_gºÜûñ#@r>¼}¶<¸Éòç¿‘?>»HQW«N5ýQþ[ùf…šÿj¾e÷Gm~ZéÉÞ—o…¼yüÝ&~üí'©ñ{/ÎÛTW«N5ýQþ[ùf…šÿj¾e÷Gm~ZéÉÞ—z…ˆÔE0õé'˜úÆ ¦íãÓöç¨õ¥^!"uL}ú ¦¾q‚iû8Á´ý9j}©WˆH]SŸ~‚©oœ`Ú>N0mŽZ_ê"RÁÔ§Ÿ`ê'˜¶LÛŸ£Ö—t…Ü~tçÚŸ—gï%ëjÕ©¦?Ê+߬Pó_Í·ìþ¨ÍO+=Ùû’n‚]MØïžÝ;|©L­:ÕôGùoå›jþ«ù–ݵùi¥'{_ÒM°¯ »Xž¾{«L­:ÕôGùoå›jþ«ù–ݵùi¥'{_ÒM°/ {þbyðB9˜ZuªéòßÊ7+ÔüWó-»?jóÓJOö¾”™`VVÛ(ÔúB0Ùú©6ßææÚü$˜&)jú ¦>ýYú‚?“Â8Á$®SM?ÁÔ§?K_ð‡`R'˜Äuªé'˜úôgé þL +ã{ӓŦñáïGRãËÓ‹Orß¿~úôõÅùË“goþÛÑ蘺ZuªéòßÊ7+ÔüWó-»?jóÓJOö¾|3Dìø÷\œ¿<wúääß÷¡ú£Ž©WóˆÎº.ÎNNÎÎÏOŸîx¾7UûbE&ßOŒŸ/³v2˜¬Ö…7Åý}Fçþ°÷õåû¢°cŽë'˜t>1Y¿?ç`²ZÞ÷gôucö‡}®·¢L_ÂvÏãâÕôL+|®óˆß³¯ oŠû3ú:ŒqûÃîë-Ê÷%8ae6X‚©F]Vd_ÞÌÍŸ)?1)¬ëð¾d/„`"˜<Ⱦ.¼™›?Ó4úËB0Ld_ÞÌÍ‚iýe +!˜&²¯ oææÁ4þ2…L“Ù×…7só‡`šFÿ•BÚŽI·º~"j|èZ‡¨ë!¬|3¾Î#íµj뛹ùã]oöýм/×X±÷qîjú­®uP»¢j]­d_ÞÌÔŸÑ×aX]o1D™¾t~åbEÔM²£©zƒmÕºZɾ.¼™©?Vó|ïç·R¦/Ù !˜&²¯ ofêÁ´‚)ZÕ ¼j]­d_ÞÌÔ‚i;S´þªxÕºZɾ.¼™©?Óv¦hýU7ðªuµ’}]x3S¦í„ÓúñìËç¯6þšâbà× o=8ºßtœ»˜þËñÞ÷ÊoàÓÇ1úeÖ…73õgôuV×[ Q¦/c6«¬òÚ +ýU7ðªuµ’}]x3SF_‡au½Åeú2nùz<{GÂÞ½6°ë8w1ý|bJVW+Ù×…73õgôuV×[ Q¦/óÞ@bþËDy¯ZW+Ùõ{ƒ?+Ô|PÓÓMöB&͉­VW+Ùõ{ƒ?+Ô|PÓÓMöB&͉­VW+Ùõ{ƒ?+Ô|PÓÓMöB&͉­VW+Ùõ{ƒ?+Ô|PÓÓMöB&͉­VW+Ùõ{ƒ?+Ô|PÓÓMçõ2ÇòGé·ºÖAízˆªuµ’}]xƒ?+Ô|PÓÓMë1éQãCdzG]¯`üÞÑÇéGùŸE¿÷¼RÓï þôù vml_¢n¦ÓæçLÓg¦>ð§Ï‚iE™`ºýèε?/Ïú6@í`ê?N¢‰´÷qýs›Wjú½ÁŸ>¦;û’¥« {õXõJÁ4æ8ý‰üßû¸~5ýÞóJM¿7øÓçÁ´bg_²ò5aËS…̃iäqúSÓ>ÇõÏm^©é÷ú| ˜VììK–BÔŽ¾ñ~¯Z_²ë÷žWjú½ÁŸ>ÔôÈö%{!Ó4ãÙõL¶àOŸjzdû’½‚išñìú &[ð§Ï5=²}É^Á4Íxvý“-øÓ烚Ù¾d/„`šf<»~‚ÉüéóAMl_ZI:ž=êzï÷ªõ¥õx|5ýÞóJM¿7øÓçƒÚµ5ê}¹qm(C:[õ[Õëý^µ¾d×?„Õ¼Š"J'þô=_MO;uêÝ`¸™½ôé|Ž•ž¨Ÿ÷&»þ!¬æUQ:ñ§ïùjz¢Ø©3{!Ó4d×?Á”ë½­¨šž(¦=Ÿc¥'êç½É®‚)×{[Q 5=QL{>ÇJOÔÏ{“]ÿS®÷¶¢jz¢ ˜ö|Ž•ž¨Ÿ÷&»þ!¦\ïmE-ÔôD±o0]½vaã¯.~ýÏ{üÖƒ£û¯WhÔ¿ë9ƺ½W¥/Ùõ{Ï+UýÞàO›jzäûò¹˜+ÇÚÙpLz—~ƒcð½ß+Ù—ìú‡°šWQLyíÅðgEÔþcª'Šm>l¸vA-aï^X®o ûéßõœV¼ß«Ò—ìú½ç•ª~oð§Í5=Õû‰ùO™„ +endstream +endobj +38 0 obj +2651 +endobj +39 0 obj +<> +stream +xœ+ä +T(ä2P0221S0·4Ö3³´TÐ5442Ò35R(JUWÈã*ä2T0B ”2VHÎåÒO4PH/VЯ04SpÉç +Ba +endstream +endobj +40 0 obj +<>>> /XObject <>>> +endobj +41 0 obj +<> /Length + 17 0 R /Resources 42 0 R /Subtype /Form /Type /XObject>> +stream +xœ+ä +ä’× +endstream +endobj +42 0 obj +<<>> +endobj +43 0 obj +1910 +endobj +44 0 obj +<> + /Count 1 /Next 46 0 R /Parent 3 0 R /Title (Social Media URLs found)>> +endobj +45 0 obj +<> + /Count 1 /Parent 3 0 R /Prev 46 0 R /Title + (Validated Instagram Profiles)>> +endobj +46 0 obj +<> + /Count 1 /Next 45 0 R /Parent 3 0 R /Prev 44 0 R /Title + (Google Reverse Image Search Suggestions)>> +endobj +xref +0 47 +0000000000 65535 f +0000000015 00000 n +0000000186 00000 n +0000000299 00000 n +0000000450 00000 n +0000000511 00000 n +0000008779 00000 n +0000010208 00000 n +0000011202 00000 n +0000011320 00000 n +0000011753 00000 n +0000012230 00000 n +0000012461 00000 n +0000012480 00000 n +0000012705 00000 n +0000012724 00000 n +0000012804 00000 n +0000013028 00000 n +0000013047 00000 n +0000013068 00000 n +0000013299 00000 n +0000013825 00000 n +0000013845 00000 n +0000025910 00000 n +0000025932 00000 n +0000026168 00000 n +0000026600 00000 n +0000026620 00000 n +0000034655 00000 n +0000034676 00000 n +0000034696 00000 n +0000036680 00000 n +0000036809 00000 n +0000037040 00000 n +0000037277 00000 n +0000037464 00000 n +0000037483 00000 n +0000037563 00000 n +0000040407 00000 n +0000040428 00000 n +0000040653 00000 n +0000040733 00000 n +0000040957 00000 n +0000040978 00000 n +0000040999 00000 n +0000041158 00000 n +0000041324 00000 n +trailer + +<> +startxref +41514 +%%EOF diff --git a/utils/config.py b/utils/config.py index b8f79f9..2f9d6dd 100644 --- a/utils/config.py +++ b/utils/config.py @@ -3,6 +3,7 @@ import sys import tempfile from selenium import webdriver +from selenium.webdriver.firefox.options import Options with open('./config.json') as json_data: cfg = json.load(json_data) @@ -35,14 +36,16 @@ def getWebDriver(): p = os.path.join(tempfile.gettempdir(), 'imageraider') if not os.path.isdir(p): os.makedirs(p) - profile = webdriver.FirefoxProfile() - profile.set_preference('browser.download.folderList', 2) # custom location - profile.set_preference('browser.download.manager.showWhenStarting', False) - profile.set_preference('browser.download.dir', p) - profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv') - profile.set_preference("browser.link.open_newwindow", 3) - profile.set_preference("browser.link.open_newwindow.restriction", 2) - return webdriver.Firefox(profile) + + options = Options() + options.add_argument("--headless") + options.set_preference('browser.download.folderList', 2) # custom location + options.set_preference('browser.download.manager.showWhenStarting', False) + options.set_preference('browser.download.dir', p) + options.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv') + options.set_preference("browser.link.open_newwindow", 3) + options.set_preference("browser.link.open_newwindow.restriction", 2) + return webdriver.Firefox(options=options) else: os.environ["webdriver.chrome.driver"] = cfg['WEBDRIVER']['PATH'] return webdriver.Chrome() From 6f40590ba1c2f7ec83e334e491eadd971e55f69b Mon Sep 17 00:00:00 2001 From: ziaflow Date: Thu, 19 Feb 2026 18:05:35 -0700 Subject: [PATCH 06/11] updated sel --- grabber/google.py | 24 ++++++++++++------------ result/Example.pdf | Bin 0 -> 42532 bytes 2 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 result/Example.pdf diff --git a/grabber/google.py b/grabber/google.py index 2fbe0fe..057a4fb 100644 --- a/grabber/google.py +++ b/grabber/google.py @@ -35,7 +35,7 @@ def __init__(self): def getLinks(self): try: - link_name = self.driver.find_elements_by_tag_name('a') + link_name = self.driver.find_elements(By.TAG_NAME, 'a') links = [] for l in link_name: link = l.get_attribute('href') @@ -73,10 +73,10 @@ def collectLinks(self, img_url): console.subtask('Inserting Image URL') console.task("Please agree to google's stuff in the browser") time.sleep(10) - elems = driver.find_elements_by_xpath(self.PHOTO_XPATH)[0] + elems = driver.find_elements(By.XPATH, self.PHOTO_XPATH)[0] elems.click() time.sleep(1) - input = driver.find_elements_by_xpath('//*[@id="Ycyxxc"]')[0] + input = driver.find_elements(By.XPATH, '//*[@id="Ycyxxc"]')[0] input.clear() input.send_keys(img_url) input.send_keys(Keys.RETURN) @@ -84,7 +84,7 @@ def collectLinks(self, img_url): time.sleep(cfg.timeout() * 2) pred_error = False try: - pred = driver.find_element_by_xpath(self.PRED_XPATH) + pred = driver.find_element(By.XPATH, self.PRED_XPATH) except NoSuchElementException: console.subfailure('No Prediction given sry...') pred = None @@ -92,7 +92,7 @@ def collectLinks(self, img_url): except BrokenPipeError: #just try again... try: - pred = driver.find_element_by_xpath(self.PRED_XPATH) + pred = driver.find_element(By.XPATH, self.PRED_XPATH) except NoSuchElementException: console.subfailure('Broken pipe Error. This is not a Problem...moving on!') console.subfailure('No Prediction given sry...') @@ -110,7 +110,7 @@ def collectLinks(self, img_url): for num in range(2, self.max_pages+1): console.subtask("Switching to Page {0}".format(num)) try: - page_n = driver.find_element_by_link_text(str(num)) + page_n = driver.find_element(By.LINK_TEXT, str(num)) page_n.click() time.sleep(cfg.timeout()) console.subtask("Collecting Links...(Page {0})".format(num)) @@ -133,21 +133,21 @@ def collectLinksLocal(self): driver.get("https://www.google.com/imghp") console.task("Please agree to google's stuff in the browser") time.sleep(10) - elems = driver.find_elements_by_xpath(self.PHOTO_XPATH)[0] + elems = driver.find_elements(By.XPATH, self.PHOTO_XPATH)[0] elems.click() time.sleep(1) - elems = driver.find_element_by_xpath(self.PHOTO_UPLOAD_XPATH) + elems = driver.find_element(By.XPATH, self.PHOTO_UPLOAD_XPATH) elems.click() time.sleep(1) console.subtask("Inserting Path") - input_box = driver.find_element_by_xpath('//*[@id="awyMjb"]') + input_box = driver.find_element(By.XPATH, '//*[@id="awyMjb"]') p_i = os.path.join(os.getcwd(), str_p) input_box.send_keys(p_i) time.sleep(cfg.timeout() * 2) pred_error = False try: - pred = driver.find_element_by_xpath(self.PRED_XPATH) + pred = driver.find_element(By.XPATH, self.PRED_XPATH) except NoSuchElementException: console.subfailure('No Prediction given sry...') pred = None @@ -155,7 +155,7 @@ def collectLinksLocal(self): except BrokenPipeError: #just try again... try: - pred = driver.find_element_by_xpath(self.PRED_XPATH) + pred = driver.find_element(By.XPATH, self.PRED_XPATH) except NoSuchElementException: console.subfailure('Broken pipe Error. This is not a Problem...moving on!') console.subfailure('No Prediction given sry...') @@ -172,7 +172,7 @@ def collectLinksLocal(self): for num in range(2, self.max_pages+1): console.subtask("Switching to Page {0}".format(num)) try: - page_n = driver.find_element_by_link_text(str(num)) + page_n = driver.find_element(By.LINK_TEXT, str(num)) page_n.click() time.sleep(cfg.timeout()) console.subtask("Collecting Links...(Page {0})".format(num)) diff --git a/result/Example.pdf b/result/Example.pdf new file mode 100644 index 0000000000000000000000000000000000000000..64ef0d4b4c574b9d816457dc47207ccde691dacf GIT binary patch literal 42532 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 literal 0 HcmV?d00001 From 11c27213402045fd2a4b80c9f6a1ce68af2fe680 Mon Sep 17 00:00:00 2001 From: ziaflow Date: Thu, 19 Feb 2026 18:07:38 -0700 Subject: [PATCH 07/11] grabber --- grabber/facebook.py | 15 ++++++++------- grabber/imageraider.py | 13 ++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/grabber/facebook.py b/grabber/facebook.py index 27add62..15d7b8b 100644 --- a/grabber/facebook.py +++ b/grabber/facebook.py @@ -3,6 +3,7 @@ from pathlib import Path from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.keys import Keys +from selenium.webdriver.common.by import By import utils.config as cfg import utils.console as console @@ -22,7 +23,7 @@ def grabData(self): time.sleep(10) #get all profile image links - profile_img_links = driver.find_elements_by_xpath("//a[@class='_2ial']") + profile_img_links = driver.find_elements(By.XPATH, "//a[@class='_2ial']") console.subtask('Collecting Image URLs...(Page 1)') if len(profile_img_links) <= 0: @@ -30,12 +31,12 @@ def grabData(self): else: for e in profile_img_links: href = e.get_attribute("href") - image = e.find_element_by_tag_name("img") + image = e.find_element(By.TAG_NAME, "img") img_src = image.get_attribute("src") self.profile_list.append(href) self.profile_img.append(img_src) - pages = driver.find_elements_by_xpath("//a") + pages = driver.find_elements(By.XPATH, "//a") pages_links = [] for e in pages: link = e.get_attribute('href') @@ -45,12 +46,12 @@ def grabData(self): for page in pages_links: driver.get(page) - profile_img_links = driver.find_elements_by_xpath("//a[@class='_2ial']") + profile_img_links = driver.find_elements(By.XPATH, "//a[@class='_2ial']") page_num = page[-1:] console.subtask('Collecting Images URLs...(Page {0})'.format(page_num)) for e in profile_img_links: href = e.get_attribute("href") - image = e.find_element_by_tag_name("img") + image = e.find_element(By.TAG_NAME, "img") img_src = image.get_attribute("src") self.profile_list.append(href) self.profile_img.append(img_src) @@ -76,13 +77,13 @@ def grabLinks(self): #first possibility - profile_img_links = driver.find_elements_by_xpath("/html/body/div[1]/div[4]/div[1]/div/div[2]/div[2]/div[2]/div/div[1]/div[1]/div[3]/div/div[2]/div[3]/div/div/div/img") + profile_img_links = driver.find_elements(By.XPATH, "/html/body/div[1]/div[4]/div[1]/div/div[2]/div[2]/div[2]/div/div[1]/div[1]/div[3]/div/div[2]/div[3]/div/div/div/img") for e in profile_img_links: img_src = e.get_attribute("src") img_urls.append(img_src) #second possivility - profile_img_links = driver.find_elements_by_xpath("/html/body/div[1]/div[1]/div[3]/div[1]/div/div/div[1]/div/div/div[1]/div/div/div/a/div/img") + profile_img_links = driver.find_elements(By.XPATH, "/html/body/div[1]/div[1]/div[3]/div[1]/div/div/div[1]/div/div/div[1]/div/div/div/a/div/img") for e in profile_img_links: img_src = e.get_attribute("src") img_urls.append(img_src) diff --git a/grabber/imageraider.py b/grabber/imageraider.py index bfc7475..2d5091b 100644 --- a/grabber/imageraider.py +++ b/grabber/imageraider.py @@ -1,4 +1,5 @@ from selenium.webdriver.common.keys import Keys +from selenium.webdriver.common.by import By import utils.config as cfg import utils.console as console from pathlib import Path @@ -24,21 +25,21 @@ def __init__(self): def insertImageLinks(self, images): self.driver.get("https://www.imageraider.com/") - input = self.driver.find_elements_by_xpath('//*[@id="topurllist"]')[0] + input = self.driver.find_elements(By.XPATH, '//*[@id="topurllist"]')[0] for i in images: console.subtask('Inserting {0}'.format(i)) input.send_keys(i) input.send_keys(Keys.RETURN) console.subtask('Submitting...') - btn = self.driver.find_elements_by_xpath('/html/body/div[4]/div/div/article/div/div[1]/form/span/input')[0] + btn = self.driver.find_elements(By.XPATH, '/html/body/div[4]/div/div/article/div/div[1]/form/span/input')[0] btn.click() def uploadLocalImage(self, img): self.driver.get("https://www.imageraider.com/") - input = self.driver.find_elements_by_xpath('//*[@id="file"]')[0] + input = self.driver.find_elements(By.XPATH, '//*[@id="file"]')[0] p_i = os.path.join(os.getcwd(), img) input.send_keys(p_i) - btn = self.driver.find_elements_by_xpath('/html/body/div[4]/div/div/article/div/div[1]/span/form/input[3]')[0] + btn = self.driver.find_elements(By.XPATH, '/html/body/div[4]/div/div/article/div/div[1]/span/form/input[3]')[0] btn.click() def downloadCSV(self): @@ -56,7 +57,7 @@ def downloadCSV(self): console.task('Downloading CSV') time.sleep(2) try: - dl = self.driver.find_elements_by_xpath('//*[@id="dltop"]')[0] + dl = self.driver.find_elements(By.XPATH, '//*[@id="dltop"]')[0] dl.click() except: console.failure('No Results...') @@ -80,5 +81,3 @@ def processCSV(self): return links else: return [] - - From 26f29e8650b298f7cd5301f099c5a87a0b5c7631 Mon Sep 17 00:00:00 2001 From: ziaflow Date: Thu, 19 Feb 2026 18:25:02 -0700 Subject: [PATCH 08/11] webdriver --- utils/config.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/utils/config.py b/utils/config.py index 2f9d6dd..025321c 100644 --- a/utils/config.py +++ b/utils/config.py @@ -4,6 +4,7 @@ import tempfile from selenium import webdriver from selenium.webdriver.firefox.options import Options +from selenium.webdriver.firefox.service import Service with open('./config.json') as json_data: cfg = json.load(json_data) @@ -30,22 +31,29 @@ def getWebDriver(): if not os.path.isfile(cfg['WEBDRIVER']['PATH']): print("{0} does not exist - install a webdriver".format(cfg['WEBDRIVER']['PATH'])) sys.exit(-2) + d = cfg['WEBDRIVER']['ENGINE'] if d.lower() == 'firefox': - os.environ["webdriver.firefox.driver"] = cfg['WEBDRIVER']['PATH'] p = os.path.join(tempfile.gettempdir(), 'imageraider') if not os.path.isdir(p): os.makedirs(p) options = Options() options.add_argument("--headless") - options.set_preference('browser.download.folderList', 2) # custom location + # ADD THESE THREE LINES: + options.add_argument("--no-sandbox") + options.add_argument("--disable-dev-shm-usage") + options.add_argument("--window-size=1920,1080") + + options.set_preference('browser.download.folderList', 2) options.set_preference('browser.download.manager.showWhenStarting', False) options.set_preference('browser.download.dir', p) options.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv') options.set_preference("browser.link.open_newwindow", 3) options.set_preference("browser.link.open_newwindow.restriction", 2) - return webdriver.Firefox(options=options) + + service = Service(executable_path=cfg['WEBDRIVER']['PATH']) + return webdriver.Firefox(service=service, options=options) else: - os.environ["webdriver.chrome.driver"] = cfg['WEBDRIVER']['PATH'] - return webdriver.Chrome() + # Note: If you ever switch to Chrome, you'll need similar options there too + return webdriver.Chrome() \ No newline at end of file From 129da620310713cf9722208b3d730267bd7cd083 Mon Sep 17 00:00:00 2001 From: ziaflow Date: Fri, 20 Feb 2026 19:16:29 -0700 Subject: [PATCH 09/11] docker --- config.json | 9 ++++++--- eagle-eye.py | 21 ++++++++++++++++++--- grabber/foca.py | 35 +++++++++++++++++++++++++++++++++++ requirements.txt | 1 + utils/config.py | 30 ++++++++++++++++-------------- 5 files changed, 76 insertions(+), 20 deletions(-) create mode 100644 grabber/foca.py diff --git a/config.json b/config.json index 69edf5c..b5c6264 100644 --- a/config.json +++ b/config.json @@ -4,8 +4,8 @@ "GOOGLE_IMG_PAGES": "3" }, "WEBDRIVER": { - "ENGINE": "firefox", - "PATH": "/usr/local/bin/geckodriver" + "ENGINE": "firefox", + "PATH": "/usr/local/bin/geckodriver" }, "FILTER": [ "instagram.com", @@ -15,5 +15,8 @@ "url?" ], "INSTA_VALIDATION_MAX_IMAGES": "5", - "JITTERS": "70" + "JITTERS": "70", + "FOCA": { + "ENABLED": "true" + } } diff --git a/eagle-eye.py b/eagle-eye.py index f162e1d..0920437 100755 --- a/eagle-eye.py +++ b/eagle-eye.py @@ -10,6 +10,7 @@ from grabber.facebook import FBGrabber, FBProfileGrabber from grabber.google import GoogleGrabber from grabber.instagram import InstagramGrabber +from grabber.foca import FocaGrabber from face_recog import FaceRecog import subprocess, json, shutil from report.report import makeReport, makeJSONReport @@ -61,7 +62,7 @@ def getInstaLinks(username): instagrabber = InstagramGrabber(username) return instagrabber.getLinks() -def main(skipFB=False, FBUrls=[], jsonRep=None, dockerMode=False, dockerName=None): +def main(skipFB=False, FBUrls=[], jsonRep=None, dockerMode=False, dockerName=None, useFoca=False): if not skipFB: # collect user input if dockerMode: @@ -77,6 +78,19 @@ def main(skipFB=False, FBUrls=[], jsonRep=None, dockerMode=False, dockerName=Non console.task('Skipping FB Search') name = "Unknown" + if useFoca: + console.section("Running Foca") + foca = FocaGrabber(name) + foca.grabData() + metadata = foca.getMetadata() + if metadata: + console.task("Found Metadata:") + for key, value in metadata.items(): + if value: + console.subtask(f"{key}: {value}") + else: + console.failure("No metadata found.") + if dockerMode: console.task('Skipping jitters since specified in config.json') @@ -188,6 +202,7 @@ def main(skipFB=False, FBUrls=[], jsonRep=None, dockerMode=False, dockerName=Non console.banner() parser = argparse.ArgumentParser() parser.add_argument('-sFB', '--skipfb', action='store_true', help='Skips the Facebook Search') + parser.add_argument('--foca', action='store_true', help='Enable FOCA to extract metadata from found documents.') parser.add_argument('-d', '--docker', action='store_true', help='Set this flag if run in docker mode') parser.add_argument('-n', '--name', nargs='?', help='Specify the persons name. Only active with the --docker flag') parser.add_argument('-json', '--json', nargs='?', help='Generates a json report. Specify a Filename') @@ -221,9 +236,9 @@ def main(skipFB=False, FBUrls=[], jsonRep=None, dockerMode=False, dockerName=Non with open(args.facebookList, 'r') as f: content = f.readlines() content = [x.strip() for x in content] - main(skipFB=args.skipfb, FBUrls=content, jsonRep=jsonRepFile, dockerMode=aDocker, dockerName=aName) + main(skipFB=args.skipfb, FBUrls=content, jsonRep=jsonRepFile, dockerMode=aDocker, dockerName=aName, useFoca=args.foca) else: console.failure("File '{}' does not exist".format(args.facebookList)) sys.exit(-1) else: - main(skipFB=args.skipfb, FBUrls=[], jsonRep=jsonRepFile, dockerMode=aDocker, dockerName=aName) + main(skipFB=args.skipfb, FBUrls=[], jsonRep=jsonRepFile, dockerMode=aDocker, dockerName=aName, useFoca=args.foca) diff --git a/grabber/foca.py b/grabber/foca.py new file mode 100644 index 0000000..7dd3569 --- /dev/null +++ b/grabber/foca.py @@ -0,0 +1,35 @@ +import os +from pypdf import PdfReader +import utils.console as console + +class FocaGrabber: + def __init__(self, target): + self.target = target + self.metadata = {} + + def grabData(self): + console.task('Searching for documents from "{}"'.format(self.target)) + # In a real scenario, we would search for documents related to the target. + # For this example, we'll just use the Example.pdf + + if os.path.exists("Example.pdf"): + console.subtask("Extracting metadata from Example.pdf") + try: + reader = PdfReader("Example.pdf") + meta = reader.metadata + self.metadata = { + "Author": meta.author, + "Creator": meta.creator, + "Producer": meta.producer, + "Subject": meta.subject, + "Title": meta.title, + "Creation Date": meta.creation_date, + "Modification Date": meta.modification_date, + } + except Exception as e: + console.subfailure(f"Could not read metadata from PDF: {e}") + else: + console.subfailure("No documents found for target.") + + def getMetadata(self): + return self.metadata diff --git a/requirements.txt b/requirements.txt index ed27471..c197df0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ selenium face_recognition WeasyPrint requests-html +pypdf diff --git a/utils/config.py b/utils/config.py index 025321c..810e32a 100644 --- a/utils/config.py +++ b/utils/config.py @@ -6,18 +6,16 @@ from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.service import Service +# Load config.json with open('./config.json') as json_data: cfg = json.load(json_data) - def timeout(): return int(cfg['DEFAULTS']['SLEEP_DELAY']) - def google_img_pages(): return int(cfg['DEFAULTS']['GOOGLE_IMG_PAGES']) - def google_filter(): return cfg['FILTER'] @@ -29,31 +27,35 @@ def jitters(): def getWebDriver(): if not os.path.isfile(cfg['WEBDRIVER']['PATH']): - print("{0} does not exist - install a webdriver".format(cfg['WEBDRIVER']['PATH'])) + print(f"{cfg['WEBDRIVER']['PATH']} does not exist - install a webdriver") sys.exit(-2) - d = cfg['WEBDRIVER']['ENGINE'] - if d.lower() == 'firefox': - p = os.path.join(tempfile.gettempdir(), 'imageraider') - if not os.path.isdir(p): - os.makedirs(p) + driver_type = cfg['WEBDRIVER']['ENGINE'].lower() + + if driver_type == 'firefox': + tmp_dir = os.path.join(tempfile.gettempdir(), 'imageraider') + if not os.path.isdir(tmp_dir): + os.makedirs(tmp_dir) options = Options() + # Docker-specific stability flags options.add_argument("--headless") - # ADD THESE THREE LINES: options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--window-size=1920,1080") options.set_preference('browser.download.folderList', 2) options.set_preference('browser.download.manager.showWhenStarting', False) - options.set_preference('browser.download.dir', p) + options.set_preference('browser.download.dir', tmp_dir) options.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv') options.set_preference("browser.link.open_newwindow", 3) options.set_preference("browser.link.open_newwindow.restriction", 2) service = Service(executable_path=cfg['WEBDRIVER']['PATH']) return webdriver.Firefox(service=service, options=options) - else: - # Note: If you ever switch to Chrome, you'll need similar options there too - return webdriver.Chrome() \ No newline at end of file + + elif driver_type == 'chrome': + # Fallback for Chrome if ever needed + return webdriver.Chrome() + + return None \ No newline at end of file From 88b9e7186dd48cf6cedbce121958b478a7d0b1af Mon Sep 17 00:00:00 2001 From: ziaflow Date: Fri, 20 Feb 2026 19:30:09 -0700 Subject: [PATCH 10/11] config --- utils/config.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/utils/config.py b/utils/config.py index 810e32a..1a2776a 100644 --- a/utils/config.py +++ b/utils/config.py @@ -33,29 +33,22 @@ def getWebDriver(): driver_type = cfg['WEBDRIVER']['ENGINE'].lower() if driver_type == 'firefox': - tmp_dir = os.path.join(tempfile.gettempdir(), 'imageraider') - if not os.path.isdir(tmp_dir): - os.makedirs(tmp_dir) - options = Options() - # Docker-specific stability flags + + # --- ESSENTIAL DOCKER & HEADLESS FLAGS --- options.add_argument("--headless") options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--window-size=1920,1080") - options.set_preference('browser.download.folderList', 2) - options.set_preference('browser.download.manager.showWhenStarting', False) - options.set_preference('browser.download.dir', tmp_dir) - options.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv') - options.set_preference("browser.link.open_newwindow", 3) - options.set_preference("browser.link.open_newwindow.restriction", 2) + # --- ADDITIONAL FIXES FOR STATUS 1 CRASHES --- + options.add_argument("--disable-gpu") + options.add_argument("--disable-software-rasterizer") service = Service(executable_path=cfg['WEBDRIVER']['PATH']) return webdriver.Firefox(service=service, options=options) elif driver_type == 'chrome': - # Fallback for Chrome if ever needed return webdriver.Chrome() return None \ No newline at end of file From e097a213562dc0fe6234e6c1a1d868665d3215ce Mon Sep 17 00:00:00 2001 From: ziaflow Date: Fri, 20 Feb 2026 22:02:59 -0700 Subject: [PATCH 11/11] docker --- dockerfile | 34 +++++++++++++++++++--------------- utils/config.py | 13 +++++-------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/dockerfile b/dockerfile index 86a3a37..6974a5f 100644 --- a/dockerfile +++ b/dockerfile @@ -3,7 +3,7 @@ FROM ubuntu:22.04 # Avoid prompts from apt ENV DEBIAN_FRONTEND=noninteractive -# 1. Install System Dependencies (Linux versions of Firefox and tools) +# 1. Install System Dependencies RUN apt-get update && apt-get install -y \ locales \ git \ @@ -13,43 +13,47 @@ RUN apt-get update && apt-get install -y \ wget \ python3-pip \ python3-dev \ - libgtk-3-dev \ libboost-all-dev \ build-essential \ cmake \ libffi-dev \ firefox \ - dos2unix && \ - apt-get clean + dos2unix \ + # --- LIBRARIES TO FIX STATUS 1 --- + libgtk-3-0 \ + libdbus-glib-1-2 \ + libxt6 \ + libxrender1 \ + libasound2 \ + libnss3 \ + libxcomposite1 \ + xvfb \ + && apt-get clean && \ + rm -rf /var/lib/apt/lists/* # Set up locales RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 ENV LC_ALL en_US.UTF-8 -# 2. Set working directory WORKDIR /EagleEye - -# 3. Copy project files from C:\Users\jerem\EagleEye into the container COPY . /EagleEye -# 4. Fix Windows line endings and permissions +# Fix Windows line endings and permissions RUN dos2unix /EagleEye/entry.sh && chmod +x /EagleEye/entry.sh -# 5. Install Python Dependencies +# Install Python Dependencies RUN pip3 install --upgrade pip RUN pip3 install "urllib3<2.0.0" RUN pip3 install lxml_html_clean RUN pip3 install -r requirements.txt -# 6. Install Geckodriver (Needed for Firefox automation) -RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux64.tar.gz && \ - tar -xvzf geckodriver-v0.33.0-linux64.tar.gz && \ +# Install Geckodriver (Updated for Firefox 147) +RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.36.0/geckodriver-v0.36.0-linux64.tar.gz && \ + tar -xvzf geckodriver-v0.36.0-linux64.tar.gz && \ mv geckodriver /usr/local/bin/ && \ - rm geckodriver-v0.33.0-linux64.tar.gz + rm geckodriver-v0.36.0-linux64.tar.gz -# 7. Create the missing result directory RUN mkdir -p /result -# Set entry point ENTRYPOINT ["/bin/bash", "/EagleEye/entry.sh"] \ No newline at end of file diff --git a/utils/config.py b/utils/config.py index 1a2776a..138e4d0 100644 --- a/utils/config.py +++ b/utils/config.py @@ -1,7 +1,6 @@ import json import os import sys -import tempfile from selenium import webdriver from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.service import Service @@ -27,7 +26,7 @@ def jitters(): def getWebDriver(): if not os.path.isfile(cfg['WEBDRIVER']['PATH']): - print(f"{cfg['WEBDRIVER']['PATH']} does not exist - install a webdriver") + print(f"{cfg['WEBDRIVER']['PATH']} does not exist") sys.exit(-2) driver_type = cfg['WEBDRIVER']['ENGINE'].lower() @@ -35,20 +34,18 @@ def getWebDriver(): if driver_type == 'firefox': options = Options() - # --- ESSENTIAL DOCKER & HEADLESS FLAGS --- + # Essential Docker Stability Flags options.add_argument("--headless") options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--window-size=1920,1080") - # --- ADDITIONAL FIXES FOR STATUS 1 CRASHES --- + # Extra 'Status 1' Killers options.add_argument("--disable-gpu") options.add_argument("--disable-software-rasterizer") + options.set_preference("browser.tabs.remote.autostart", False) service = Service(executable_path=cfg['WEBDRIVER']['PATH']) return webdriver.Firefox(service=service, options=options) - elif driver_type == 'chrome': - return webdriver.Chrome() - - return None \ No newline at end of file + return webdriver.Chrome() \ No newline at end of file