From 36680f535cd47c0c0281b75c136ee5d671656bc1 Mon Sep 17 00:00:00 2001 From: Koichi Hirachi Date: Sun, 9 Apr 2023 18:44:51 +0900 Subject: [PATCH 01/34] update script --- KM4K.py | 66 ++++++--------------------------------------------------- 1 file changed, 6 insertions(+), 60 deletions(-) diff --git a/KM4K.py b/KM4K.py index 1c173c4..0fae3fe 100755 --- a/KM4K.py +++ b/KM4K.py @@ -14,42 +14,6 @@ suica = nfc.clf.RemoteTarget("212F") suica.sensf_req = bytearray.fromhex("0000030000") - -def sql_add(cur, name, idm): - cur.execute("INSERT INTO users (name, idm) VALUES (?, ?)", (name, idm)) - - -def sql_del(res): - for row in res: - print(row) - - -def add_nfc(cur): - name = input("name> ") - print("Touch your Suica") - idm = read_nfc() - if idm: - cur.execute("SELECT * FROM users WHERE idm=?", (idm,)) - res = cur.fetchall() - if len(res) > 0: - print("This key has already registered.") - else: - sql_add(cur, name, idm) - print("Registered (idm:" + idm.decode() + ")") - - -def delete_nfc(cur): - name = input("name> ") - cur.execute("SELECT * FROM users WHERE name=?", (name,)) - res = cur.fetchall() - if len(res) == 0: - print("Unregistered name:" + name) - else: - # sql_del(res) - cur.execute("DELETE FROM users WHERE name=?", (name,)) - print("Deleted (name:" + name + ")") - - def read_nfc(): while True: with nfc.ContactlessFrontend("usb") as clf: @@ -61,7 +25,7 @@ def read_nfc(): return idm def check_card_manager(idm): - url = os.environ["VERIFY_API_URL"] + url = "https://card.ueckoken.club/api/card/verify" payload = json.dumps({ "idm": idm }) @@ -79,16 +43,14 @@ def check_card_manager(idm): print(e) return False -def start_system(cur, isopen, okled_pin, ngled_pin): +def start_system(isopen, okled_pin, ngled_pin): while True: idm = read_nfc() if idm: # Card Managerで登録されているか確認 isRegisteredSSO = check_card_manager(idm.decode()) - print("is registered sso", isRegisteredSSO) - cur.execute("SELECT * FROM users WHERE idm=?", (idm,)) - res = cur.fetchall() - if len(res) > 0 or isRegisteredSSO: + print("is registered sso", isRegisteredSSO) + if isRegisteredSSO: print("Registered (idm:" + idm.decode() + ")") GPIO.output(okled_pin, GPIO.HIGH) @@ -123,9 +85,6 @@ def start_system(cur, isopen, okled_pin, ngled_pin): def main(argv): mode = 2 - dbname = "database.db" - conn = sqlite3.connect(dbname) - cur = conn.cursor() isopen = False okled_pin = 19 ngled_pin = 26 @@ -139,24 +98,11 @@ def main(argv): mode = int(argv[1]) try: - cur.execute( - "CREATE TABLE IF NOT EXISTS users (name TEXT NOT NULL, idm BLOB NOT NULL, date TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP)" - ) - if mode == 0: - print("Add User") - add_nfc(cur) - elif mode == 1: - print("Delete User") - delete_nfc(cur) - else: - print("Welcome to Koken Kagi System") - start_system(cur, isopen, okled_pin, ngled_pin) + print("Welcome to Koken Kagi System") + start_system(isopen, okled_pin, ngled_pin) except Exception as e: print("An error has occured!") print(e) - finally: - conn.commit() - conn.close() if __name__ == "__main__": From fe4493926849431ef029efa64189346b71f4cf51 Mon Sep 17 00:00:00 2001 From: Koichi Hirachi Date: Thu, 27 Apr 2023 01:44:37 +0900 Subject: [PATCH 02/34] add redis --- docker-compose.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 docker-compose.yaml diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..de6f0ca --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,8 @@ +version: '3.1' +services: + redis: + image: redis:alpine + ports: + - 6379:6379 + volumes: + - ./redis-data:/data From d50ba5c46f6f08a6bdb962df43b90ef547912e76 Mon Sep 17 00:00:00 2001 From: Koichi Hirachi Date: Thu, 27 Apr 2023 01:44:38 +0900 Subject: [PATCH 03/34] add redis --- KM4K.py | 20 ++++++++++++++++---- README.md | 25 ++----------------------- 2 files changed, 18 insertions(+), 27 deletions(-) diff --git a/KM4K.py b/KM4K.py index 0fae3fe..99c33ad 100755 --- a/KM4K.py +++ b/KM4K.py @@ -10,10 +10,14 @@ import requests import json import os +import redis suica = nfc.clf.RemoteTarget("212F") suica.sensf_req = bytearray.fromhex("0000030000") +# Redisに接続 +conn = redis.StrictRedis(host='localhost', port=6379, db=0) + def read_nfc(): while True: with nfc.ContactlessFrontend("usb") as clf: @@ -47,10 +51,18 @@ def start_system(isopen, okled_pin, ngled_pin): while True: idm = read_nfc() if idm: - # Card Managerで登録されているか確認 - isRegisteredSSO = check_card_manager(idm.decode()) - print("is registered sso", isRegisteredSSO) - if isRegisteredSSO: + verified = False + # Redisに登録されているか確認 + if conn.get(idm.decode()) is not None: + verified = True + else: + # Card Managerで登録されているか確認 + isRegisteredSSO = check_card_manager(idm.decode()) + if(isRegisteredSSO): + # 有効期限を1週間でRedisに保存 + conn.set(idm.decode(), 60 * 60 * 24 * 7) + verified = True + if verified: print("Registered (idm:" + idm.decode() + ")") GPIO.output(okled_pin, GPIO.HIGH) diff --git a/README.md b/README.md index 7aa3fa0..378b867 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,6 @@ -# KagiMod for Koken (KM4K) +# KagiMod for Koken ver.2 (KM4K2) -## How to Use - -### Register - -``` -$ ./Register.sh -Add User -name> kokenuser -Touch your Suica -Registered (idm:****) -$ -``` - -### Unregister - -``` -$ ./Unregister.sh -Delete User -name> kokenuser -Deleted (name:kokenuser) -$ -``` +KagiMod for Kokenを元にして認証機能を切り離してたものです。 ### Launch From 3b7e269553e01a089da16a34adbbf6d46266329f Mon Sep 17 00:00:00 2001 From: otariidae Date: Fri, 28 Apr 2023 19:04:00 +0900 Subject: [PATCH 04/34] install redis-py --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index d36fa2f..fce8cc8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,4 @@ nfcpy==1.0.3; platform_machine == 'armv6l' RPi.GPIO==0.7.0; platform_machine == 'armv6l' wiringpi==2.60.1; platform_machine == 'armv6l' requests==2.18.4 +redis==4.5.4 From 7fb9e0d49c1eb3222e56f785e5ee5e8407192230 Mon Sep 17 00:00:00 2001 From: otariidae Date: Fri, 28 Apr 2023 21:46:56 +0900 Subject: [PATCH 05/34] use debian buster as base image --- Dockerfile.dev | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile.dev b/Dockerfile.dev index bf3059d..e9b7971 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,11 +1,11 @@ -FROM python:3.7.3 +FROM debian:buster-slim -RUN apt update \ - && apt install -y libusb-1.0-0 \ +RUN apt-get update \ + && apt-get install -y libusb-1.0-0 python3 python3-pip \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements*.txt /app/ -RUN pip install -r requirements-dev.txt +RUN pip3 install -r requirements-dev.txt COPY *.py /app/ \ No newline at end of file From ca6fcc60fe5c301992b2d8587718d7facd96fd35 Mon Sep 17 00:00:00 2001 From: otariidae Date: Sat, 29 Apr 2023 06:48:16 +0900 Subject: [PATCH 06/34] add redis server to dev containers --- .devcontainer/devcontainer.json | 60 +++++++++++++++++++++----------- .devcontainer/docker-compose.yml | 26 ++++++++++++++ docker-compose.dev.yaml | 9 +++++ 3 files changed, 74 insertions(+), 21 deletions(-) create mode 100644 .devcontainer/docker-compose.yml create mode 100644 docker-compose.dev.yaml diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index e1b01a9..b1152a5 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,30 +1,48 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: -// https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/docker-existing-dockerfile +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-docker-compose { - "name": "Existing Dockerfile", - - // Sets the run context to one level up instead of the .devcontainer folder. - "context": "..", - - // Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename. - "dockerFile": "../Dockerfile.dev", - - "workspaceFolder": "/app", - "workspaceMount": "source=${localWorkspaceFolder},target=/app,type=bind,consistency=cached" - + "name": "Existing Docker Compose (Extend)", + + // Update the 'dockerComposeFile' list if you have more compose files or use different names. + // The .devcontainer/docker-compose.yml file contains any overrides you need/want to make. + "dockerComposeFile": [ + "../docker-compose.dev.yaml", + "docker-compose.yml" + ], + + // The 'service' property is the name of the service for the container that VS Code should + // use. Update this value and .devcontainer/docker-compose.yml to the real service name. + "service": "km4k", + + // The optional 'workspaceFolder' property is the path VS Code should open by default when + // connected. This is typically a file mount in .devcontainer/docker-compose.yml + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + "customizations": { + "vscode": { + "extensions": [ + "ms-python.python" + ] + } + } + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, // Use 'forwardPorts' to make a list of ports inside the container available locally. // "forwardPorts": [], - // Uncomment the next line to run commands after the container is created - for example installing curl. - // "postCreateCommand": "apt-get update && apt-get install -y curl", + // Uncomment the next line if you want start specific services in your Docker Compose config. + // "runServices": [], + + // Uncomment the next line if you want to keep your containers running after VS Code shuts down. + // "shutdownAction": "none", - // Uncomment when using a ptrace-based debugger like C++, Go, and Rust - // "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ], + // Uncomment the next line to run commands after the container is created. + // "postCreateCommand": "cat /etc/os-release", - // Uncomment to use the Docker CLI from inside the container. See https://aka.ms/vscode-remote/samples/docker-from-docker. - // "mounts": [ "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind" ], + // Configure tool-specific properties. + // "customizations": {}, - // Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root. - // "remoteUser": "vscode" + // Uncomment to connect as an existing user other than the container default. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "devcontainer" } diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 0000000..23b1cd9 --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,26 @@ +version: '3.1' +services: + # Update this to the name of the service you want to work with in your docker-compose.yml file + km4k: + # Uncomment if you want to override the service's Dockerfile to one in the .devcontainer + # folder. Note that the path of the Dockerfile and context is relative to the *primary* + # docker-compose.yml file (the first in the devcontainer.json "dockerComposeFile" + # array). The sample below assumes your primary file is in the root of your project. + # + # build: + # context: . + # dockerfile: .devcontainer/Dockerfile + + volumes: + # Update this to wherever you want VS Code to mount the folder of your project + - ..:/workspaces:cached + + # Uncomment the next four lines if you will use a ptrace-based debugger like C++, Go, and Rust. + # cap_add: + # - SYS_PTRACE + # security_opt: + # - seccomp:unconfined + + # Overrides default command so things don't shut down after the process ends. + command: /bin/sh -c "while sleep 1000; do :; done" + diff --git a/docker-compose.dev.yaml b/docker-compose.dev.yaml new file mode 100644 index 0000000..05936f0 --- /dev/null +++ b/docker-compose.dev.yaml @@ -0,0 +1,9 @@ +version: '3.1' +services: + redis: + image: redis:alpine + ports: + - 6379:6379 + km4k: + build: + dockerfile: Dockerfile.dev From 7e5ad2349d0155da643129940c328e1f9e7b2165 Mon Sep 17 00:00:00 2001 From: otariidae Date: Sat, 29 Apr 2023 17:27:53 +0900 Subject: [PATCH 07/34] fix tests --- .github/workflows/python-app.yml | 12 ++ requirements-dev.txt | 3 +- test_KM4K.py | 335 +++++++++++++------------------ 3 files changed, 158 insertions(+), 192 deletions(-) diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 7aad309..3fb3d4e 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -16,6 +16,18 @@ jobs: runs-on: ubuntu-20.04 + services: + # ref: https://docs.github.com/ja/actions/using-containerized-services/creating-redis-service-containers + redis: + image: redis:alpine + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 6379:6379 + steps: - uses: actions/checkout@v3 - name: Set up Python diff --git a/requirements-dev.txt b/requirements-dev.txt index 1c394da..21bfe99 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,2 +1,3 @@ -r requirements.txt -coverage==6.4.4 \ No newline at end of file +coverage==6.4.4 +requests-mock==1.10.0 diff --git a/test_KM4K.py b/test_KM4K.py index de83b5a..340ca68 100644 --- a/test_KM4K.py +++ b/test_KM4K.py @@ -1,10 +1,11 @@ -import sqlite3 from unittest import TestCase from unittest.mock import patch, Mock +from redis import StrictRedis +import requests_mock rpi_mock = Mock() nfc_mock = Mock() -wiringpi = Mock() +wiringpi_mock = Mock() @patch.dict( @@ -13,124 +14,144 @@ "RPi": rpi_mock, "RPi.GPIO": rpi_mock.GPIO, "nfc": nfc_mock, - "wiringpi": wiringpi + "wiringpi": wiringpi_mock, }, ) class TestKM4K(TestCase): def setUp(self): - self.conn = sqlite3.connect(":memory:") - self.conn.row_factory = sqlite3.Row - self.cur = self.conn.cursor() - # mock CURRENT_TIMESTAMP - self.conn.create_function("CURRENT_TIMESTAMP", -1, - lambda: "2006/01/02 15:04:05") - # init schema - self.cur.execute( - "CREATE TABLE IF NOT EXISTS users (name TEXT NOT NULL, idm BLOB NOT NULL, date TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP)" - ) + self.conn = StrictRedis(host="localhost", port=6379, db=0) def tearDown(self): - self.conn.close() - - @patch("KM4K.input", return_value="kokentaro") - @patch("KM4K.read_nfc", return_value=b"456789") - def test_add_nfc_with_new_card(self, mocked_read_nfc, mocked_input): - from KM4K import add_nfc - - add_nfc(self.cur) - - mocked_read_nfc.assert_called_once() - mocked_input.assert_called_once() - - self.cur.execute("SELECT * FROM users") - users = self.cur.fetchall() - self.assertEqual(len(users), 1) - self.assertEqual(users[0]["name"], "kokentaro") - self.assertEqual(users[0]["idm"], b"456789") - self.assertEqual(users[0]["date"], "2006/01/02 15:04:05") - - @patch("KM4K.input", return_value="kokentaro") - @patch("KM4K.read_nfc", return_value=b"456789") - def test_add_nfc_with_registered_card(self, mocked_read_nfc, mocked_input): - self.cur.execute("INSERT INTO users (name, idm) VALUES(?, ?)", - ("kokenjiro", b"456789")) - - from KM4K import add_nfc - - add_nfc(self.cur) - - mocked_read_nfc.assert_called_once() - mocked_input.assert_called_once() - - self.cur.execute("SELECT * FROM users") - users = self.cur.fetchall() - self.assertEqual(len(users), 1) - self.assertEqual(users[0]["name"], "kokenjiro") - self.assertEqual(users[0]["idm"], b"456789") - self.assertEqual(users[0]["date"], "2006/01/02 15:04:05") - - @patch("KM4K.input", return_value="kokenjiro") - def test_delete_nfc_with_registerd_user(self, mocked_input): - self.cur.execute("INSERT INTO users (name, idm) VALUES(?, ?)", - ("kokenjiro", b"567890")) - - from KM4K import delete_nfc - - delete_nfc(self.cur) - - mocked_input.assert_called_once() - - self.cur.execute("SELECT * FROM users") - users = self.cur.fetchall() - self.assertEqual(len(users), 0) - - @patch("KM4K.input", return_value="kokenjiro") - def test_delete_nfc_with_unregistered_user(self, mocked_input): - from KM4K import delete_nfc - - delete_nfc(self.cur) - - mocked_input.assert_called_once() - - self.cur.execute("SELECT * FROM users") - users = self.cur.fetchall() - self.assertEqual(len(users), 0) + self.conn.flushdb() + + def test_check_card_manager_fail_without_api_key(self): + from KM4K import check_card_manager + + with self.assertRaises(KeyError): + check_card_manager("dummy") + + @patch.dict( + "os.environ", + { + "API_KEY": "dummy", + }, + ) + def test_check_card_manager_invalid_api_key(self): + with requests_mock.Mocker() as m: + m.get( + "https://card.ueckoken.club/api/card/verify", + status_code=401, + reason="Unauthorized", + json={"error": "Unauthorized"}, + ) + + from KM4K import check_card_manager + + self.assertFalse(check_card_manager("dummy")) + + @patch.dict( + "os.environ", + { + "API_KEY": "dummy", + }, + ) + def test_check_card_manager_invalid(self): + with requests_mock.Mocker() as m: + m.get( + "https://card.ueckoken.club/api/card/verify", + status_code=400, + reason="Bad Request", + json={"error": "Bad request"}, + ) + + from KM4K import check_card_manager + + self.assertFalse(check_card_manager("dummy")) + + @patch.dict( + "os.environ", + { + "API_KEY": "dummy", + }, + ) + def test_check_card_manager_does_not_exist(self): + with requests_mock.Mocker() as m: + m.get( + "https://card.ueckoken.club/api/card/verify", + status_code=404, + reason="Not Found", + json={"error": "Not found"}, + ) + + from KM4K import check_card_manager + + self.assertFalse(check_card_manager("dummy")) + + @patch.dict( + "os.environ", + { + "API_KEY": "dummy", + }, + ) + def test_check_card_manager_forbidden(self): + with requests_mock.Mocker() as m: + m.get( + "https://card.ueckoken.club/api/card/verify", + status_code=403, + reason="Forbidden", + json={"error": "Forbidden"}, + ) + + from KM4K import check_card_manager + + self.assertFalse(check_card_manager("dummy")) + + @patch.dict( + "os.environ", + { + "API_KEY": "dummy", + }, + ) + def test_check_card_manager_verified(self): + with requests_mock.Mocker() as m: + m.get( + "https://card.ueckoken.club/api/card/verify", + status_code=200, + reason="OK", + json={"verified": True}, + ) + + from KM4K import check_card_manager + + self.assertTrue(check_card_manager("dummy")) @patch("KM4K.servo", autospec=True) @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - @patch("KM4K.check_card_manager", return_value=True) - def test_start_system_with_closed_door_exist_card_manager_record( - self, - mocked_check_card_manager, - mocked_read_nfc, - mocked_servo, + @patch("KM4K.check_card_manager", return_value=False) + def test_start_system_with_closed_door_and_unregistered_card( + self, mocked_check_card_manager, mocked_read_nfc, mocked_servo ): - - self.cur.execute("INSERT INTO users (name, idm) VALUES(?, ?)", - ("kokensaburo", b"345678")) from KM4K import start_system try: - start_system(self.cur, False, 19, 26) + start_system(False, 19, 26) except InterruptedError: pass - mocked_servo.open.assert_called_once() + mocked_servo.open.assert_not_called() mocked_servo.lock.assert_not_called() @patch("KM4K.servo", autospec=True) @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - @patch("KM4K.check_card_manager", return_value=False) - def test_start_system_with_closed_door_no_exist_card_manager_record_and_exist_innerDB( - self, mocked_check_card_manager, mocked_read_nfc, mocked_servo): - self.cur.execute("INSERT INTO users (name, idm) VALUES(?, ?)", - ("kokensaburo", b"345678")) - + @patch("KM4K.check_card_manager", return_value=True) + def test_start_system_with_closed_door_and_registered_card( + self, mocked_check_card_manager, mocked_read_nfc, mocked_servo + ): from KM4K import start_system try: - start_system(self.cur, False, 19, 26) + start_system(False, 19, 26) except InterruptedError: pass @@ -139,134 +160,66 @@ def test_start_system_with_closed_door_no_exist_card_manager_record_and_exist_in @patch("KM4K.servo", autospec=True) @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - @patch("KM4K.check_card_manager", return_value=True) - def test_start_system_with_closed_door_and_unregistered_card_with_sso_record( - self, mocked_check_card_manager, mocked_read_nfc, mocked_servo): + @patch("KM4K.check_card_manager", return_value=False) + def test_start_system_with_open_door_and_unregistered_card( + self, mocked_check_card_manager, mocked_read_nfc, mocked_servo + ): from KM4K import start_system try: - start_system(self.cur, False, 19, 26) + start_system(True, 19, 26) except InterruptedError: pass - mocked_servo.open.assert_called_once() + mocked_servo.open.assert_not_called() mocked_servo.lock.assert_not_called() @patch("KM4K.servo", autospec=True) @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - @patch("KM4K.check_card_manager", return_value=False) - def test_start_system_with_closed_door_and_unregistered_card_without_sso_record( - self, mocked_check_card_manager, mocked_read_nfc, mocked_servo): + @patch("KM4K.check_card_manager", return_value=True) + def test_start_system_with_open_door_and_registered_card( + self, mocked_check_card_manager, mocked_read_nfc, mocked_servo + ): from KM4K import start_system try: - start_system(self.cur, False, 19, 26) + start_system(True, 19, 26) except InterruptedError: pass mocked_servo.open.assert_not_called() - mocked_servo.lock.assert_not_called() + mocked_servo.lock.assert_called_once() @patch("KM4K.servo", autospec=True) - @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) + @patch("KM4K.read_nfc", side_effect=[b"345678", b"345678", InterruptedError]) @patch("KM4K.check_card_manager", return_value=True) - def test_start_system_with_open_door_and_registered_card_with_sso_record( - self, mocked_check_card_manager, mocked_read_nfc, mocked_servo): - self.cur.execute("INSERT INTO users (name, idm) VALUES(?, ?)", - ("kokensaburo", b"345678")) - + def test_start_system_with_redis_cache( + self, mocked_check_card_manager, mocked_read_nfc, mocked_servo + ): from KM4K import start_system try: - start_system(self.cur, True, 19, 26) + start_system(True, 19, 26) except InterruptedError: pass - mocked_servo.open.assert_not_called() + mocked_servo.open.assert_called_once() mocked_servo.lock.assert_called_once() + mocked_check_card_manager.assert_called_once() @patch("KM4K.servo", autospec=True) - @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - @patch("KM4K.check_card_manager", return_value=False) - def test_start_system_with_open_door_and_registered_card_without_sso_record( - self, mocked_check_card_manager, mocked_read_nfc, mocked_servo): - self.cur.execute("INSERT INTO users (name, idm) VALUES(?, ?)", - ("kokensaburo", b"345678")) - + @patch("KM4K.read_nfc", side_effect=[b"456789", b"456789", InterruptedError]) + @patch("KM4K.check_card_manager", side_effect=[True, False]) + def test_start_system_unregistered_card_with_redis_cache( + self, mocked_check_card_manager, mocked_read_nfc, mocked_servo + ): from KM4K import start_system try: - start_system(self.cur, True, 19, 26) + start_system(True, 19, 26) except InterruptedError: pass - mocked_servo.open.assert_not_called() + mocked_servo.open.assert_called_once() mocked_servo.lock.assert_called_once() - - @patch("KM4K.start_system") - @patch("KM4K.delete_nfc") - @patch("KM4K.add_nfc") - @patch("KM4K.servo", autospec=True) - def test_main_without_args(self, mocked_servo, mocked_add_nfc, - mocked_delete_nfc, mocked_start_system): - from KM4K import main - - # No additional positional argument implicitly means mode 2: to run the daemon that authorizes IC card and locks/unlocks. - main(["KM4K.py"]) - - # To run the daemon, it should call start_system, not add_nfc or delete_nfc. - mocked_servo.reset.assert_called_once() - mocked_add_nfc.assert_not_called() - mocked_delete_nfc.assert_not_called() - mocked_start_system.assert_called_once() - - @patch("KM4K.start_system") - @patch("KM4K.delete_nfc") - @patch("KM4K.add_nfc") - @patch("KM4K.servo", autospec=True) - def test_main_with_0(self, mocked_servo, mocked_add_nfc, mocked_delete_nfc, - mocked_start_system): - from KM4K import main - - # Mode 0 means to add a user. - main(["KM4K.py", "0"]) - - # To add a user, it should call add_nfc, not delete_nfc or start_system. - mocked_servo.reset.assert_called_once() - mocked_add_nfc.assert_called_once() - mocked_delete_nfc.assert_not_called() - mocked_start_system.assert_not_called() - - @patch("KM4K.start_system") - @patch("KM4K.delete_nfc") - @patch("KM4K.add_nfc") - @patch("KM4K.servo", autospec=True) - def test_main_with_1(self, mocked_servo, mocked_add_nfc, mocked_delete_nfc, - mocked_start_system): - from KM4K import main - - # Mode 1 means to delete a user. - main(["KM4K.py", "1"]) - - # To delete a user, it should call delete_nfc, not add_nfc or start_system. - mocked_servo.reset.assert_called_once() - mocked_add_nfc.assert_not_called() - mocked_delete_nfc.assert_called_once() - mocked_start_system.assert_not_called() - - @patch("KM4K.start_system") - @patch("KM4K.delete_nfc") - @patch("KM4K.add_nfc") - @patch("KM4K.servo", autospec=True) - def test_main_with_2(self, mocked_servo, mocked_add_nfc, mocked_delete_nfc, - mocked_start_system): - from KM4K import main - - # Mode 2 means to run the daemon that authorizes IC card and locks/unlocks. - main(["KM4K.py", "2"]) - - # To run the daemon, it should call start_system, not add_nfc or delete_nfc. - mocked_servo.reset.assert_called_once() - mocked_add_nfc.assert_not_called() - mocked_delete_nfc.assert_not_called() - mocked_start_system.assert_called_once() + mocked_check_card_manager.assert_called_once() From 2dd8e239bf97e3e8f1aec0bda1f4acc008d2d904 Mon Sep 17 00:00:00 2001 From: Koichi Hirachi Date: Sat, 29 Apr 2023 19:51:40 +0900 Subject: [PATCH 08/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 378b867..39e31b8 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ KagiMod for Kokenを元にして認証機能を切り離してたものです。 KM4K.serviceはsystemdに登録されています。 ``` -systemctl status KM4K +systemctl status KM4K2 ``` で確認 From c4633ea322f5cb9963975b4272ba8de02222ae9f Mon Sep 17 00:00:00 2001 From: otariidae Date: Sat, 29 Apr 2023 07:43:20 +0900 Subject: [PATCH 09/34] format by black --- .github/workflows/python-app.yml | 2 ++ KM4K.py | 22 ++++++++++------------ requirements-dev.txt | 1 + test_KM4K.py | 1 - 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 3fb3d4e..f33dcc4 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -38,6 +38,8 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements-dev.txt + - name: Check format + run: black --check --verbose --diff . - name: Test with unittest and gather code coverage run: coverage run --branch -m unittest - name: Show coverage diff --git a/KM4K.py b/KM4K.py index 99c33ad..fd632f7 100755 --- a/KM4K.py +++ b/KM4K.py @@ -16,7 +16,8 @@ suica.sensf_req = bytearray.fromhex("0000030000") # Redisに接続 -conn = redis.StrictRedis(host='localhost', port=6379, db=0) +conn = redis.StrictRedis(host="localhost", port=6379, db=0) + def read_nfc(): while True: @@ -28,25 +29,22 @@ def read_nfc(): idm = binascii.hexlify(tag.idm) return idm + def check_card_manager(idm): url = "https://card.ueckoken.club/api/card/verify" - payload = json.dumps({ - "idm": idm - }) - headers = { - 'X-Api-Key': os.environ["API_KEY"], - 'Content-Type': 'application/json' - } + payload = json.dumps({"idm": idm}) + headers = {"X-Api-Key": os.environ["API_KEY"], "Content-Type": "application/json"} try: response = requests.request("GET", url, headers=headers, data=payload) status = json.loads(response.text) - if status['verified'] is not None and status['verified']: + if status["verified"] is not None and status["verified"]: return True return False except Exception as e: print(e) return False + def start_system(isopen, okled_pin, ngled_pin): while True: idm = read_nfc() @@ -55,12 +53,12 @@ def start_system(isopen, okled_pin, ngled_pin): # Redisに登録されているか確認 if conn.get(idm.decode()) is not None: verified = True - else: + else: # Card Managerで登録されているか確認 isRegisteredSSO = check_card_manager(idm.decode()) - if(isRegisteredSSO): + if isRegisteredSSO: # 有効期限を1週間でRedisに保存 - conn.set(idm.decode(), 60 * 60 * 24 * 7) + conn.set(idm.decode(), 60 * 60 * 24 * 7) verified = True if verified: print("Registered (idm:" + idm.decode() + ")") diff --git a/requirements-dev.txt b/requirements-dev.txt index 21bfe99..84d09c5 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,3 +1,4 @@ -r requirements.txt coverage==6.4.4 requests-mock==1.10.0 +black==23.3.0 diff --git a/test_KM4K.py b/test_KM4K.py index 340ca68..0ca0495 100644 --- a/test_KM4K.py +++ b/test_KM4K.py @@ -18,7 +18,6 @@ }, ) class TestKM4K(TestCase): - def setUp(self): self.conn = StrictRedis(host="localhost", port=6379, db=0) From 7d45f4f09faf8a10515ac80c0c1583e5639345c4 Mon Sep 17 00:00:00 2001 From: otariidae Date: Sat, 29 Apr 2023 07:06:02 +0900 Subject: [PATCH 10/34] softcode Redis connection --- KM4K.py | 6 +++++- README.md | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/KM4K.py b/KM4K.py index fd632f7..5090a9e 100755 --- a/KM4K.py +++ b/KM4K.py @@ -16,7 +16,11 @@ suica.sensf_req = bytearray.fromhex("0000030000") # Redisに接続 -conn = redis.StrictRedis(host="localhost", port=6379, db=0) +conn = redis.StrictRedis( + host=os.environ["REDIS_HOST"], + port=os.environ["REDIS_PORT"], + db=os.environ["REDIS_DB"], +) def read_nfc(): diff --git a/README.md b/README.md index 39e31b8..757738d 100644 --- a/README.md +++ b/README.md @@ -16,3 +16,6 @@ systemctl status KM4K2 - `VERIFY_API_URL` : CardManagerのカード認証用エンドポイント - `API_KEY` : CardManagerのAPI-Key +- `REDIS_HOST` : Redisサーバーのホスト名 +- `REDIS_PORT` : Redisサーバーのポート番号 +- `REDIS_DB` : RedisサーバーのDB番号 From 81ce7e3711ae78cee94274114f07705d511030e2 Mon Sep 17 00:00:00 2001 From: otariidae Date: Sat, 29 Apr 2023 21:06:00 +0900 Subject: [PATCH 11/34] softcode Redis connection in tests --- .github/workflows/python-app.yml | 6 ++++-- test_KM4K.py | 7 ++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index f33dcc4..c42c05e 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -25,8 +25,6 @@ jobs: --health-interval 10s --health-timeout 5s --health-retries 5 - ports: - - 6379:6379 steps: - uses: actions/checkout@v3 @@ -42,6 +40,10 @@ jobs: run: black --check --verbose --diff . - name: Test with unittest and gather code coverage run: coverage run --branch -m unittest + env: + REDIS_HOST: redis + REDIS_PORT: 6379 + REDIS_DB: 0 - name: Show coverage run: | coverage report -m diff --git a/test_KM4K.py b/test_KM4K.py index 0ca0495..fc49a11 100644 --- a/test_KM4K.py +++ b/test_KM4K.py @@ -1,3 +1,4 @@ +import os from unittest import TestCase from unittest.mock import patch, Mock from redis import StrictRedis @@ -19,7 +20,11 @@ ) class TestKM4K(TestCase): def setUp(self): - self.conn = StrictRedis(host="localhost", port=6379, db=0) + self.conn = StrictRedis( + host=os.environ["REDIS_HOST"], + port=os.environ["REDIS_PORT"], + db=os.environ["REDIS_DB"], + ) def tearDown(self): self.conn.flushdb() From ec3e0f9471fd2da9ff1aeb1b3a7c07dde11d4b22 Mon Sep 17 00:00:00 2001 From: otariidae Date: Sat, 29 Apr 2023 21:21:18 +0900 Subject: [PATCH 12/34] fix redis service container port binding --- .github/workflows/python-app.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index c42c05e..7d5409e 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -25,6 +25,8 @@ jobs: --health-interval 10s --health-timeout 5s --health-retries 5 + ports: + - 6379:6379 steps: - uses: actions/checkout@v3 @@ -41,7 +43,7 @@ jobs: - name: Test with unittest and gather code coverage run: coverage run --branch -m unittest env: - REDIS_HOST: redis + REDIS_HOST: localhost REDIS_PORT: 6379 REDIS_DB: 0 - name: Show coverage From caa3a1b31bec1b70b73fb7ba3d7696c6029b73a5 Mon Sep 17 00:00:00 2001 From: otariidae Date: Fri, 28 Apr 2023 18:34:39 +0900 Subject: [PATCH 13/34] remove unused lines --- KM4K.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/KM4K.py b/KM4K.py index fd632f7..38a9d81 100755 --- a/KM4K.py +++ b/KM4K.py @@ -2,7 +2,6 @@ import nfc import binascii -import sqlite3 import sys import RPi.GPIO as GPIO import time @@ -94,7 +93,6 @@ def start_system(isopen, okled_pin, ngled_pin): def main(argv): - mode = 2 isopen = False okled_pin = 19 ngled_pin = 26 @@ -104,9 +102,6 @@ def main(argv): GPIO.setup(okled_pin, GPIO.OUT) GPIO.setup(ngled_pin, GPIO.OUT) - if len(argv) == 2: - mode = int(argv[1]) - try: print("Welcome to Koken Kagi System") start_system(isopen, okled_pin, ngled_pin) From 9c4f670134ecb3a740ebf5156df3f5f969fcd675 Mon Sep 17 00:00:00 2001 From: Koichi Hirachi Date: Sat, 3 Jun 2023 18:22:21 +0900 Subject: [PATCH 14/34] update README --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 757738d..4c346c7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # KagiMod for Koken ver.2 (KM4K2) -KagiMod for Kokenを元にして認証機能を切り離してたものです。 +KagiMod for Kokenを元にして認証機能を切り離したものです。 + +RedisにIdmをキャッシュすることによって高速な認証を実現しています。 ### Launch From ee698341a9a8630517929b919b7ff907d5c251b2 Mon Sep 17 00:00:00 2001 From: otariidae Date: Tue, 15 Aug 2023 10:39:57 +0900 Subject: [PATCH 15/34] lint by ruff --- .github/workflows/python-app.yml | 2 + KM4K.py | 43 +++++++++++-------- rb303.py | 5 ++- ruff.toml | 3 ++ test_KM4K.py | 73 ++++++++++++++++++-------------- 5 files changed, 74 insertions(+), 52 deletions(-) create mode 100644 ruff.toml diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 7d5409e..7f79aee 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -40,6 +40,8 @@ jobs: pip install -r requirements-dev.txt - name: Check format run: black --check --verbose --diff . + - name: Lint + run: ruff check --format github . - name: Test with unittest and gather code coverage run: coverage run --branch -m unittest env: diff --git a/KM4K.py b/KM4K.py index 0992393..a9dd88d 100755 --- a/KM4K.py +++ b/KM4K.py @@ -1,15 +1,17 @@ #!/usr/bin/python3 -import nfc import binascii -import sys -import RPi.GPIO as GPIO -import time -import rb303 as servo -import requests import json import os +import sys +import time + +import nfc import redis +import requests +from RPi import GPIO + +import rb303 as servo suica = nfc.clf.RemoteTarget("212F") suica.sensf_req = bytearray.fromhex("0000030000") @@ -29,24 +31,29 @@ def read_nfc(): while target: tag = nfc.tag.activate(clf, target) tag.sys = 3 - idm = binascii.hexlify(tag.idm) - return idm + return binascii.hexlify(tag.idm) def check_card_manager(idm): url = "https://card.ueckoken.club/api/card/verify" payload = json.dumps({"idm": idm}) headers = {"X-Api-Key": os.environ["API_KEY"], "Content-Type": "application/json"} + response = requests.request("GET", url, headers=headers, data=payload) + try: - response = requests.request("GET", url, headers=headers, data=payload) - status = json.loads(response.text) - if status["verified"] is not None and status["verified"]: - return True + response.raise_for_status() + except requests.exceptions.HTTPError as e: + print(e) return False - except Exception as e: + + try: + status = response.json() + except requests.exceptions.JSONDecodeError as e: print(e) return False + return status["verified"] is not None and status["verified"] + def start_system(isopen, okled_pin, ngled_pin): while True: @@ -58,8 +65,8 @@ def start_system(isopen, okled_pin, ngled_pin): verified = True else: # Card Managerで登録されているか確認 - isRegisteredSSO = check_card_manager(idm.decode()) - if isRegisteredSSO: + is_registered_sso = check_card_manager(idm.decode()) + if is_registered_sso: # 有効期限を1週間でRedisに保存 conn.set(idm.decode(), 60 * 60 * 24 * 7) verified = True @@ -75,7 +82,7 @@ def start_system(isopen, okled_pin, ngled_pin): GPIO.output(okled_pin, GPIO.LOW) if not isopen: - servo.open() + servo.unlock() isopen = not isopen print("open") else: @@ -96,7 +103,7 @@ def start_system(isopen, okled_pin, ngled_pin): time.sleep(1.7) -def main(argv): +def main(_): isopen = False okled_pin = 19 ngled_pin = 26 @@ -109,7 +116,7 @@ def main(argv): try: print("Welcome to Koken Kagi System") start_system(isopen, okled_pin, ngled_pin) - except Exception as e: + except Exception as e: # noqa: BLE001 print("An error has occured!") print(e) diff --git a/rb303.py b/rb303.py index 717707d..3594164 100644 --- a/rb303.py +++ b/rb303.py @@ -1,6 +1,7 @@ -import wiringpi import time +import wiringpi + wiringpi.wiringPiSetupGpio() wiringpi.pinMode(12, wiringpi.GPIO.PWM_OUTPUT) wiringpi.pwmSetMode(wiringpi.PWM_MODE_MS) @@ -13,7 +14,7 @@ def servo(angle): wiringpi.pwmWrite(12, angle) -def open(): +def unlock(): servo(180) time.sleep(1) servo(90) diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 0000000..db2b0a2 --- /dev/null +++ b/ruff.toml @@ -0,0 +1,3 @@ +select = ["ALL"] +ignore = ["D", "ANN", "PT", "T201", "TD"] +target-version = "py37" \ No newline at end of file diff --git a/test_KM4K.py b/test_KM4K.py index fc49a11..8b5e452 100644 --- a/test_KM4K.py +++ b/test_KM4K.py @@ -1,8 +1,11 @@ +# ruff: noqa: S101 +import contextlib import os from unittest import TestCase -from unittest.mock import patch, Mock -from redis import StrictRedis +from unittest.mock import Mock, patch + import requests_mock +from redis import StrictRedis rpi_mock = Mock() nfc_mock = Mock() @@ -134,14 +137,15 @@ def test_check_card_manager_verified(self): @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) @patch("KM4K.check_card_manager", return_value=False) def test_start_system_with_closed_door_and_unregistered_card( - self, mocked_check_card_manager, mocked_read_nfc, mocked_servo + self, + mocked_check_card_manager, # noqa: ARG002 + mocked_read_nfc, # noqa: ARG002 + mocked_servo, ): from KM4K import start_system - try: - start_system(False, 19, 26) - except InterruptedError: - pass + with contextlib.suppress(InterruptedError): + start_system(19, 26, isopen=False) mocked_servo.open.assert_not_called() mocked_servo.lock.assert_not_called() @@ -150,14 +154,15 @@ def test_start_system_with_closed_door_and_unregistered_card( @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) @patch("KM4K.check_card_manager", return_value=True) def test_start_system_with_closed_door_and_registered_card( - self, mocked_check_card_manager, mocked_read_nfc, mocked_servo + self, + mocked_check_card_manager, # noqa: ARG002 + mocked_read_nfc, # noqa: ARG002 + mocked_servo, ): from KM4K import start_system - try: - start_system(False, 19, 26) - except InterruptedError: - pass + with contextlib.suppress(InterruptedError): + start_system(19, 26, isopen=False) mocked_servo.open.assert_called_once() mocked_servo.lock.assert_not_called() @@ -166,14 +171,15 @@ def test_start_system_with_closed_door_and_registered_card( @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) @patch("KM4K.check_card_manager", return_value=False) def test_start_system_with_open_door_and_unregistered_card( - self, mocked_check_card_manager, mocked_read_nfc, mocked_servo + self, + mocked_check_card_manager, # noqa: ARG002 + mocked_read_nfc, # noqa: ARG002 + mocked_servo, ): from KM4K import start_system - try: - start_system(True, 19, 26) - except InterruptedError: - pass + with contextlib.suppress(InterruptedError): + start_system(19, 26, isopen=True) mocked_servo.open.assert_not_called() mocked_servo.lock.assert_not_called() @@ -182,14 +188,15 @@ def test_start_system_with_open_door_and_unregistered_card( @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) @patch("KM4K.check_card_manager", return_value=True) def test_start_system_with_open_door_and_registered_card( - self, mocked_check_card_manager, mocked_read_nfc, mocked_servo + self, + mocked_check_card_manager, # noqa: ARG002 + mocked_read_nfc, # noqa: ARG002 + mocked_servo, ): from KM4K import start_system - try: - start_system(True, 19, 26) - except InterruptedError: - pass + with contextlib.suppress(InterruptedError): + start_system(19, 26, isopen=True) mocked_servo.open.assert_not_called() mocked_servo.lock.assert_called_once() @@ -198,14 +205,15 @@ def test_start_system_with_open_door_and_registered_card( @patch("KM4K.read_nfc", side_effect=[b"345678", b"345678", InterruptedError]) @patch("KM4K.check_card_manager", return_value=True) def test_start_system_with_redis_cache( - self, mocked_check_card_manager, mocked_read_nfc, mocked_servo + self, + mocked_check_card_manager, + mocked_read_nfc, # noqa: ARG002 + mocked_servo, ): from KM4K import start_system - try: - start_system(True, 19, 26) - except InterruptedError: - pass + with contextlib.suppress(InterruptedError): + start_system(19, 26, isopen=True) mocked_servo.open.assert_called_once() mocked_servo.lock.assert_called_once() @@ -215,14 +223,15 @@ def test_start_system_with_redis_cache( @patch("KM4K.read_nfc", side_effect=[b"456789", b"456789", InterruptedError]) @patch("KM4K.check_card_manager", side_effect=[True, False]) def test_start_system_unregistered_card_with_redis_cache( - self, mocked_check_card_manager, mocked_read_nfc, mocked_servo + self, + mocked_check_card_manager, + mocked_read_nfc, # noqa: ARG002 + mocked_servo, ): from KM4K import start_system - try: - start_system(True, 19, 26) - except InterruptedError: - pass + with contextlib.suppress(InterruptedError): + start_system(19, 26, isopen=True) mocked_servo.open.assert_called_once() mocked_servo.lock.assert_called_once() From aa514dc519d36b6a517a6a2fca65a7c631312ad7 Mon Sep 17 00:00:00 2001 From: otariidae Date: Tue, 15 Aug 2023 10:46:20 +0900 Subject: [PATCH 16/34] install ruff as a dev dependency --- requirements-dev.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements-dev.txt b/requirements-dev.txt index 84d09c5..d89c2b4 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,3 +2,4 @@ coverage==6.4.4 requests-mock==1.10.0 black==23.3.0 +ruff==0.0.284 From 034035b50ba0b0597b6cae8dcd55c0b3c4d56efc Mon Sep 17 00:00:00 2001 From: otariidae Date: Tue, 15 Aug 2023 10:51:35 +0900 Subject: [PATCH 17/34] fix keyword arguments --- test_KM4K.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test_KM4K.py b/test_KM4K.py index 8b5e452..8effd6d 100644 --- a/test_KM4K.py +++ b/test_KM4K.py @@ -145,7 +145,7 @@ def test_start_system_with_closed_door_and_unregistered_card( from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(19, 26, isopen=False) + start_system(isopen=False, okled_pin=19, ngled_pin=26) mocked_servo.open.assert_not_called() mocked_servo.lock.assert_not_called() @@ -162,7 +162,7 @@ def test_start_system_with_closed_door_and_registered_card( from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(19, 26, isopen=False) + start_system(isopen=False, okled_pin=19, ngled_pin=26) mocked_servo.open.assert_called_once() mocked_servo.lock.assert_not_called() @@ -179,7 +179,7 @@ def test_start_system_with_open_door_and_unregistered_card( from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(19, 26, isopen=True) + start_system(isopen=True, okled_pin=19, ngled_pin=26) mocked_servo.open.assert_not_called() mocked_servo.lock.assert_not_called() @@ -196,7 +196,7 @@ def test_start_system_with_open_door_and_registered_card( from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(19, 26, isopen=True) + start_system(isopen=True, okled_pin=19, ngled_pin=26) mocked_servo.open.assert_not_called() mocked_servo.lock.assert_called_once() @@ -213,7 +213,7 @@ def test_start_system_with_redis_cache( from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(19, 26, isopen=True) + start_system(isopen=True, okled_pin=19, ngled_pin=26) mocked_servo.open.assert_called_once() mocked_servo.lock.assert_called_once() @@ -231,7 +231,7 @@ def test_start_system_unregistered_card_with_redis_cache( from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(19, 26, isopen=True) + start_system(isopen=True, okled_pin=19, ngled_pin=26) mocked_servo.open.assert_called_once() mocked_servo.lock.assert_called_once() From cad4cd5e4f35e9e75322b80de997f2e60ab4005c Mon Sep 17 00:00:00 2001 From: otariidae Date: Tue, 15 Aug 2023 10:53:46 +0900 Subject: [PATCH 18/34] fix typo --- test_KM4K.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test_KM4K.py b/test_KM4K.py index 8effd6d..838342b 100644 --- a/test_KM4K.py +++ b/test_KM4K.py @@ -147,7 +147,7 @@ def test_start_system_with_closed_door_and_unregistered_card( with contextlib.suppress(InterruptedError): start_system(isopen=False, okled_pin=19, ngled_pin=26) - mocked_servo.open.assert_not_called() + mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_not_called() @patch("KM4K.servo", autospec=True) @@ -164,7 +164,7 @@ def test_start_system_with_closed_door_and_registered_card( with contextlib.suppress(InterruptedError): start_system(isopen=False, okled_pin=19, ngled_pin=26) - mocked_servo.open.assert_called_once() + mocked_servo.unlock.assert_called_once() mocked_servo.lock.assert_not_called() @patch("KM4K.servo", autospec=True) @@ -181,7 +181,7 @@ def test_start_system_with_open_door_and_unregistered_card( with contextlib.suppress(InterruptedError): start_system(isopen=True, okled_pin=19, ngled_pin=26) - mocked_servo.open.assert_not_called() + mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_not_called() @patch("KM4K.servo", autospec=True) @@ -198,7 +198,7 @@ def test_start_system_with_open_door_and_registered_card( with contextlib.suppress(InterruptedError): start_system(isopen=True, okled_pin=19, ngled_pin=26) - mocked_servo.open.assert_not_called() + mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_called_once() @patch("KM4K.servo", autospec=True) @@ -215,7 +215,7 @@ def test_start_system_with_redis_cache( with contextlib.suppress(InterruptedError): start_system(isopen=True, okled_pin=19, ngled_pin=26) - mocked_servo.open.assert_called_once() + mocked_servo.unlock.assert_called_once() mocked_servo.lock.assert_called_once() mocked_check_card_manager.assert_called_once() @@ -233,6 +233,6 @@ def test_start_system_unregistered_card_with_redis_cache( with contextlib.suppress(InterruptedError): start_system(isopen=True, okled_pin=19, ngled_pin=26) - mocked_servo.open.assert_called_once() + mocked_servo.unlock.assert_called_once() mocked_servo.lock.assert_called_once() mocked_check_card_manager.assert_called_once() From d07ce2d6df6fb6eef7fafba19d0b34bc3d73333b Mon Sep 17 00:00:00 2001 From: otariidae Date: Tue, 15 Aug 2023 14:43:54 +0900 Subject: [PATCH 19/34] add tests for cache expiration --- KM4K.py | 8 ++++++-- test_KM4K.py | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/KM4K.py b/KM4K.py index 0992393..2cd930f 100755 --- a/KM4K.py +++ b/KM4K.py @@ -22,6 +22,10 @@ ) +# 有効期間1週間 +CACHE_EXPIRES_SECONDS = 60 * 60 * 24 * 7 + + def read_nfc(): while True: with nfc.ContactlessFrontend("usb") as clf: @@ -60,8 +64,8 @@ def start_system(isopen, okled_pin, ngled_pin): # Card Managerで登録されているか確認 isRegisteredSSO = check_card_manager(idm.decode()) if isRegisteredSSO: - # 有効期限を1週間でRedisに保存 - conn.set(idm.decode(), 60 * 60 * 24 * 7) + # 有効期限付きでRedisに保存 + conn.set(idm.decode(), CACHE_EXPIRES_SECONDS) verified = True if verified: print("Registered (idm:" + idm.decode() + ")") diff --git a/test_KM4K.py b/test_KM4K.py index fc49a11..f58947b 100644 --- a/test_KM4K.py +++ b/test_KM4K.py @@ -1,4 +1,5 @@ import os +import time from unittest import TestCase from unittest.mock import patch, Mock from redis import StrictRedis @@ -227,3 +228,26 @@ def test_start_system_unregistered_card_with_redis_cache( mocked_servo.open.assert_called_once() mocked_servo.lock.assert_called_once() mocked_check_card_manager.assert_called_once() + + @patch("KM4K.CACHE_EXPIRES_SECONDS", 5) + @patch("KM4K.servo", autospec=True) + @patch("KM4K.read_nfc", side_effect=[b"456789", b"456789", InterruptedError]) + @patch("KM4K.check_card_manager", side_effect=[True, False]) + def test_start_system_with_redis_cache_expires( + self, mocked_check_card_manager, mocked_read_nfc, mocked_servo + ): + from KM4K import start_system + + try: + start_system(True, 19, 26) + except InterruptedError: + pass + + mocked_servo.open.assert_called_once() + mocked_servo.lock.assert_called_once() + mocked_check_card_manager.assert_called_once() + + time.sleep(10) + + self.assertEqual(self.conn.exists("456789"), 0) + self.assertIsNone(self.conn.get("456789")) From 45105edb1c603c8a4bf69cbdee00feddebc94309 Mon Sep 17 00:00:00 2001 From: otariidae Date: Tue, 15 Aug 2023 14:57:50 +0900 Subject: [PATCH 20/34] fix cache expiration --- KM4K.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/KM4K.py b/KM4K.py index 2cd930f..c91f493 100755 --- a/KM4K.py +++ b/KM4K.py @@ -65,7 +65,8 @@ def start_system(isopen, okled_pin, ngled_pin): isRegisteredSSO = check_card_manager(idm.decode()) if isRegisteredSSO: # 有効期限付きでRedisに保存 - conn.set(idm.decode(), CACHE_EXPIRES_SECONDS) + # 値は今のところ使わないので適当に1にしておいた + conn.set(idm.decode(), 1, ex=CACHE_EXPIRES_SECONDS) verified = True if verified: print("Registered (idm:" + idm.decode() + ")") From 6a22ff32a1d8ed029f10fb6161ae990b0f652e8e Mon Sep 17 00:00:00 2001 From: otariidae Date: Tue, 15 Aug 2023 16:42:56 +0900 Subject: [PATCH 21/34] single-responsibility class for card manager and dependency injection through arguments --- KM4K.py | 32 ++-------- card_sdk.py | 33 ++++++++++ test_KM4K.py | 152 +++++++++-------------------------------------- test_card_sdk.py | 73 +++++++++++++++++++++++ 4 files changed, 141 insertions(+), 149 deletions(-) create mode 100644 card_sdk.py create mode 100644 test_card_sdk.py diff --git a/KM4K.py b/KM4K.py index a9dd88d..2854a2c 100755 --- a/KM4K.py +++ b/KM4K.py @@ -1,17 +1,16 @@ #!/usr/bin/python3 import binascii -import json import os import sys import time import nfc import redis -import requests from RPi import GPIO import rb303 as servo +from card_sdk import CardSDK suica = nfc.clf.RemoteTarget("212F") suica.sensf_req = bytearray.fromhex("0000030000") @@ -34,28 +33,7 @@ def read_nfc(): return binascii.hexlify(tag.idm) -def check_card_manager(idm): - url = "https://card.ueckoken.club/api/card/verify" - payload = json.dumps({"idm": idm}) - headers = {"X-Api-Key": os.environ["API_KEY"], "Content-Type": "application/json"} - response = requests.request("GET", url, headers=headers, data=payload) - - try: - response.raise_for_status() - except requests.exceptions.HTTPError as e: - print(e) - return False - - try: - status = response.json() - except requests.exceptions.JSONDecodeError as e: - print(e) - return False - - return status["verified"] is not None and status["verified"] - - -def start_system(isopen, okled_pin, ngled_pin): +def start_system(isopen, okled_pin, ngled_pin, card: CardSDK): while True: idm = read_nfc() if idm: @@ -65,7 +43,7 @@ def start_system(isopen, okled_pin, ngled_pin): verified = True else: # Card Managerで登録されているか確認 - is_registered_sso = check_card_manager(idm.decode()) + is_registered_sso = card.verify(idm.decode()) if is_registered_sso: # 有効期限を1週間でRedisに保存 conn.set(idm.decode(), 60 * 60 * 24 * 7) @@ -113,9 +91,11 @@ def main(_): GPIO.setup(okled_pin, GPIO.OUT) GPIO.setup(ngled_pin, GPIO.OUT) + card = CardSDK("https://card.ueckoken.club", os.environ["API_KEY"]) + try: print("Welcome to Koken Kagi System") - start_system(isopen, okled_pin, ngled_pin) + start_system(isopen, okled_pin, ngled_pin, card) except Exception as e: # noqa: BLE001 print("An error has occured!") print(e) diff --git a/card_sdk.py b/card_sdk.py new file mode 100644 index 0000000..79a84ad --- /dev/null +++ b/card_sdk.py @@ -0,0 +1,33 @@ +import json +from urllib.parse import urljoin + +import requests + + +class CardSDK: + base_url: str + api_key: str + + def __init__(self, base_url: str, api_key: str) -> None: + self.base_url = base_url + self.api_key = api_key + + def verify(self, idm: str) -> bool: + url = urljoin(self.base_url, "/api/card/verify") + payload = json.dumps({"idm": idm}) + headers = {"X-Api-Key": self.api_key, "Content-Type": "application/json"} + response = requests.request("GET", url, headers=headers, data=payload) + + try: + response.raise_for_status() + except requests.exceptions.HTTPError as e: + print(e) + return False + + try: + status = response.json() + except requests.exceptions.JSONDecodeError as e: + print(e) + return False + + return status["verified"] is not None and status["verified"] diff --git a/test_KM4K.py b/test_KM4K.py index 838342b..6a36afd 100644 --- a/test_KM4K.py +++ b/test_KM4K.py @@ -2,11 +2,12 @@ import contextlib import os from unittest import TestCase -from unittest.mock import Mock, patch +from unittest.mock import Mock, create_autospec, patch -import requests_mock from redis import StrictRedis +from card_sdk import CardSDK + rpi_mock = Mock() nfc_mock = Mock() wiringpi_mock = Mock() @@ -32,207 +33,112 @@ def setUp(self): def tearDown(self): self.conn.flushdb() - def test_check_card_manager_fail_without_api_key(self): - from KM4K import check_card_manager - - with self.assertRaises(KeyError): - check_card_manager("dummy") - - @patch.dict( - "os.environ", - { - "API_KEY": "dummy", - }, - ) - def test_check_card_manager_invalid_api_key(self): - with requests_mock.Mocker() as m: - m.get( - "https://card.ueckoken.club/api/card/verify", - status_code=401, - reason="Unauthorized", - json={"error": "Unauthorized"}, - ) - - from KM4K import check_card_manager - - self.assertFalse(check_card_manager("dummy")) - - @patch.dict( - "os.environ", - { - "API_KEY": "dummy", - }, - ) - def test_check_card_manager_invalid(self): - with requests_mock.Mocker() as m: - m.get( - "https://card.ueckoken.club/api/card/verify", - status_code=400, - reason="Bad Request", - json={"error": "Bad request"}, - ) - - from KM4K import check_card_manager - - self.assertFalse(check_card_manager("dummy")) - - @patch.dict( - "os.environ", - { - "API_KEY": "dummy", - }, - ) - def test_check_card_manager_does_not_exist(self): - with requests_mock.Mocker() as m: - m.get( - "https://card.ueckoken.club/api/card/verify", - status_code=404, - reason="Not Found", - json={"error": "Not found"}, - ) - - from KM4K import check_card_manager - - self.assertFalse(check_card_manager("dummy")) - - @patch.dict( - "os.environ", - { - "API_KEY": "dummy", - }, - ) - def test_check_card_manager_forbidden(self): - with requests_mock.Mocker() as m: - m.get( - "https://card.ueckoken.club/api/card/verify", - status_code=403, - reason="Forbidden", - json={"error": "Forbidden"}, - ) - - from KM4K import check_card_manager - - self.assertFalse(check_card_manager("dummy")) - - @patch.dict( - "os.environ", - { - "API_KEY": "dummy", - }, - ) - def test_check_card_manager_verified(self): - with requests_mock.Mocker() as m: - m.get( - "https://card.ueckoken.club/api/card/verify", - status_code=200, - reason="OK", - json={"verified": True}, - ) - - from KM4K import check_card_manager - - self.assertTrue(check_card_manager("dummy")) - @patch("KM4K.servo", autospec=True) @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - @patch("KM4K.check_card_manager", return_value=False) def test_start_system_with_closed_door_and_unregistered_card( self, - mocked_check_card_manager, # noqa: ARG002 mocked_read_nfc, # noqa: ARG002 mocked_servo, ): + card = create_autospec(CardSDK) + card.verify.return_value = False + from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(isopen=False, okled_pin=19, ngled_pin=26) + start_system(isopen=False, okled_pin=19, ngled_pin=26, card=card) mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_not_called() @patch("KM4K.servo", autospec=True) @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - @patch("KM4K.check_card_manager", return_value=True) def test_start_system_with_closed_door_and_registered_card( self, - mocked_check_card_manager, # noqa: ARG002 mocked_read_nfc, # noqa: ARG002 mocked_servo, ): + card = create_autospec(CardSDK) + card.verify.return_value = True + from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(isopen=False, okled_pin=19, ngled_pin=26) + start_system(isopen=False, okled_pin=19, ngled_pin=26, card=card) mocked_servo.unlock.assert_called_once() mocked_servo.lock.assert_not_called() @patch("KM4K.servo", autospec=True) @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - @patch("KM4K.check_card_manager", return_value=False) def test_start_system_with_open_door_and_unregistered_card( self, - mocked_check_card_manager, # noqa: ARG002 mocked_read_nfc, # noqa: ARG002 mocked_servo, ): + card = create_autospec(CardSDK) + card.verify.return_value = False + from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(isopen=True, okled_pin=19, ngled_pin=26) + start_system(isopen=True, okled_pin=19, ngled_pin=26, card=card) mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_not_called() @patch("KM4K.servo", autospec=True) @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - @patch("KM4K.check_card_manager", return_value=True) def test_start_system_with_open_door_and_registered_card( self, - mocked_check_card_manager, # noqa: ARG002 mocked_read_nfc, # noqa: ARG002 mocked_servo, ): + card = create_autospec(CardSDK) + card.verify.return_value = True + from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(isopen=True, okled_pin=19, ngled_pin=26) + start_system(isopen=True, okled_pin=19, ngled_pin=26, card=card) mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_called_once() @patch("KM4K.servo", autospec=True) @patch("KM4K.read_nfc", side_effect=[b"345678", b"345678", InterruptedError]) - @patch("KM4K.check_card_manager", return_value=True) def test_start_system_with_redis_cache( self, - mocked_check_card_manager, mocked_read_nfc, # noqa: ARG002 mocked_servo, ): + card = create_autospec(CardSDK) + card.verify.return_value = True + from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(isopen=True, okled_pin=19, ngled_pin=26) + start_system(isopen=True, okled_pin=19, ngled_pin=26, card=card) mocked_servo.unlock.assert_called_once() mocked_servo.lock.assert_called_once() - mocked_check_card_manager.assert_called_once() + card.verify.assert_called_once() @patch("KM4K.servo", autospec=True) @patch("KM4K.read_nfc", side_effect=[b"456789", b"456789", InterruptedError]) - @patch("KM4K.check_card_manager", side_effect=[True, False]) def test_start_system_unregistered_card_with_redis_cache( self, - mocked_check_card_manager, mocked_read_nfc, # noqa: ARG002 mocked_servo, ): + card = create_autospec(CardSDK) + card.verify.side_effect = [True, False] + from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(isopen=True, okled_pin=19, ngled_pin=26) + start_system(isopen=True, okled_pin=19, ngled_pin=26, card=card) mocked_servo.unlock.assert_called_once() mocked_servo.lock.assert_called_once() - mocked_check_card_manager.assert_called_once() + card.verify.assert_called_once() diff --git a/test_card_sdk.py b/test_card_sdk.py new file mode 100644 index 0000000..ef90859 --- /dev/null +++ b/test_card_sdk.py @@ -0,0 +1,73 @@ +# ruff: noqa: S101 +from unittest import TestCase + +import requests_mock + +from card_sdk import CardSDK + + +class TestCardSDK(TestCase): + def test_verify_invalid_api_key(self): + card = CardSDK("https://card.ueckoken.club", "dummy_api_key") + + with requests_mock.Mocker() as m: + m.get( + "https://card.ueckoken.club/api/card/verify", + status_code=401, + reason="Unauthorized", + json={"error": "Unauthorized"}, + ) + + self.assertFalse(card.verify("dummy_idm")) + + def test_verify_invalid_request(self): + card = CardSDK("https://card.ueckoken.club", "dummy_api_key") + + with requests_mock.Mocker() as m: + m.get( + "https://card.ueckoken.club/api/card/verify", + status_code=400, + reason="Bad Request", + json={"error": "Bad request"}, + ) + + self.assertFalse(card.verify("dummy_idm")) + + def test_verify_does_not_exist(self): + card = CardSDK("https://card.ueckoken.club", "dummy_api_key") + + with requests_mock.Mocker() as m: + m.get( + "https://card.ueckoken.club/api/card/verify", + status_code=404, + reason="Not Found", + json={"error": "Not found"}, + ) + + self.assertFalse(card.verify("dummy_idm")) + + def test_verify_forbidden(self): + card = CardSDK("https://card.ueckoken.club", "dummy_api_key") + + with requests_mock.Mocker() as m: + m.get( + "https://card.ueckoken.club/api/card/verify", + status_code=403, + reason="Forbidden", + json={"error": "Forbidden"}, + ) + + self.assertFalse(card.verify("dummy_idm")) + + def test_verify_verified(self): + card = CardSDK("https://card.ueckoken.club", "dummy_api_key") + + with requests_mock.Mocker() as m: + m.get( + "https://card.ueckoken.club/api/card/verify", + status_code=200, + reason="OK", + json={"verified": True}, + ) + + self.assertTrue(card.verify("dummy_idm")) From 3e3caed1ef2fefbd6cb1ee21067012db0002b11d Mon Sep 17 00:00:00 2001 From: otariidae Date: Tue, 15 Aug 2023 18:12:47 +0900 Subject: [PATCH 22/34] dependency injection for Redis --- KM4K.py | 22 +++++++++++----------- docker-compose.dev.yaml | 4 ++++ test_KM4K.py | 12 ++++++------ 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/KM4K.py b/KM4K.py index a9dd88d..a2e2462 100755 --- a/KM4K.py +++ b/KM4K.py @@ -16,13 +16,6 @@ suica = nfc.clf.RemoteTarget("212F") suica.sensf_req = bytearray.fromhex("0000030000") -# Redisに接続 -conn = redis.StrictRedis( - host=os.environ["REDIS_HOST"], - port=os.environ["REDIS_PORT"], - db=os.environ["REDIS_DB"], -) - def read_nfc(): while True: @@ -55,20 +48,20 @@ def check_card_manager(idm): return status["verified"] is not None and status["verified"] -def start_system(isopen, okled_pin, ngled_pin): +def start_system(isopen, okled_pin, ngled_pin, cache: redis.Redis): while True: idm = read_nfc() if idm: verified = False # Redisに登録されているか確認 - if conn.get(idm.decode()) is not None: + if cache.get(idm.decode()) is not None: verified = True else: # Card Managerで登録されているか確認 is_registered_sso = check_card_manager(idm.decode()) if is_registered_sso: # 有効期限を1週間でRedisに保存 - conn.set(idm.decode(), 60 * 60 * 24 * 7) + cache.set(idm.decode(), 60 * 60 * 24 * 7) verified = True if verified: print("Registered (idm:" + idm.decode() + ")") @@ -108,6 +101,13 @@ def main(_): okled_pin = 19 ngled_pin = 26 + # Redisに接続 + conn = redis.StrictRedis( + host=os.environ["REDIS_HOST"], + port=os.environ["REDIS_PORT"], + db=os.environ["REDIS_DB"], + ) + servo.reset() GPIO.setmode(GPIO.BCM) GPIO.setup(okled_pin, GPIO.OUT) @@ -115,7 +115,7 @@ def main(_): try: print("Welcome to Koken Kagi System") - start_system(isopen, okled_pin, ngled_pin) + start_system(isopen, okled_pin, ngled_pin, conn) except Exception as e: # noqa: BLE001 print("An error has occured!") print(e) diff --git a/docker-compose.dev.yaml b/docker-compose.dev.yaml index 05936f0..42b4d1c 100644 --- a/docker-compose.dev.yaml +++ b/docker-compose.dev.yaml @@ -7,3 +7,7 @@ services: km4k: build: dockerfile: Dockerfile.dev + environment: + REDIS_HOST: redis + REDIS_PORT: 6379 + REDIS_DB: 0 diff --git a/test_KM4K.py b/test_KM4K.py index 838342b..2edd994 100644 --- a/test_KM4K.py +++ b/test_KM4K.py @@ -145,7 +145,7 @@ def test_start_system_with_closed_door_and_unregistered_card( from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(isopen=False, okled_pin=19, ngled_pin=26) + start_system(isopen=False, okled_pin=19, ngled_pin=26, cache=self.conn) mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_not_called() @@ -162,7 +162,7 @@ def test_start_system_with_closed_door_and_registered_card( from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(isopen=False, okled_pin=19, ngled_pin=26) + start_system(isopen=False, okled_pin=19, ngled_pin=26, cache=self.conn) mocked_servo.unlock.assert_called_once() mocked_servo.lock.assert_not_called() @@ -179,7 +179,7 @@ def test_start_system_with_open_door_and_unregistered_card( from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(isopen=True, okled_pin=19, ngled_pin=26) + start_system(isopen=True, okled_pin=19, ngled_pin=26, cache=self.conn) mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_not_called() @@ -196,7 +196,7 @@ def test_start_system_with_open_door_and_registered_card( from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(isopen=True, okled_pin=19, ngled_pin=26) + start_system(isopen=True, okled_pin=19, ngled_pin=26, cache=self.conn) mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_called_once() @@ -213,7 +213,7 @@ def test_start_system_with_redis_cache( from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(isopen=True, okled_pin=19, ngled_pin=26) + start_system(isopen=True, okled_pin=19, ngled_pin=26, cache=self.conn) mocked_servo.unlock.assert_called_once() mocked_servo.lock.assert_called_once() @@ -231,7 +231,7 @@ def test_start_system_unregistered_card_with_redis_cache( from KM4K import start_system with contextlib.suppress(InterruptedError): - start_system(isopen=True, okled_pin=19, ngled_pin=26) + start_system(isopen=True, okled_pin=19, ngled_pin=26, cache=self.conn) mocked_servo.unlock.assert_called_once() mocked_servo.lock.assert_called_once() From 1f4cd735c853d59ca02d039f21f11ddab0bcd2c3 Mon Sep 17 00:00:00 2001 From: otariidae Date: Wed, 16 Aug 2023 21:45:35 +0900 Subject: [PATCH 23/34] lint, format, and fix wrong conflict resolution --- test_KM4K.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/test_KM4K.py b/test_KM4K.py index 63b6704..2336f7b 100644 --- a/test_KM4K.py +++ b/test_KM4K.py @@ -157,12 +157,10 @@ def test_start_system_with_redis_cache_expires( from KM4K import start_system - try: - start_system(True, 19, 26) - except InterruptedError: - pass + with contextlib.suppress(InterruptedError): + start_system(isopen=True, okled_pin=19, ngled_pin=26, card=card) - mocked_servo.open.assert_called_once() + mocked_servo.unlock.assert_called_once() mocked_servo.lock.assert_called_once() card.verify.assert_called_once() From aeded583e52c7c53165f7774b22fd6f4c8333ca9 Mon Sep 17 00:00:00 2001 From: otariidae Date: Fri, 18 Aug 2023 00:46:10 +0900 Subject: [PATCH 24/34] use timedelta instead of primitive int --- KM4K.py | 5 +++-- test_KM4K.py | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/KM4K.py b/KM4K.py index f519010..5bb0104 100755 --- a/KM4K.py +++ b/KM4K.py @@ -4,6 +4,7 @@ import os import sys import time +from datetime import timedelta import nfc import redis @@ -17,7 +18,7 @@ # 有効期間1週間 -CACHE_EXPIRES_SECONDS = 60 * 60 * 24 * 7 +CACHE_EXPIRES_DELTA = timedelta(weeks=1) def read_nfc(): @@ -44,7 +45,7 @@ def start_system(isopen, okled_pin, ngled_pin, cache: redis.Redis, card: CardSDK if is_registered_sso: # 有効期限付きでRedisに保存 # 値は今のところ使わないので適当に1にしておいた - cache.set(idm.decode(), 1, ex=CACHE_EXPIRES_SECONDS) + cache.set(idm.decode(), 1, ex=CACHE_EXPIRES_DELTA) verified = True if verified: print("Registered (idm:" + idm.decode() + ")") diff --git a/test_KM4K.py b/test_KM4K.py index b420ca5..1f1dabd 100644 --- a/test_KM4K.py +++ b/test_KM4K.py @@ -2,6 +2,7 @@ import contextlib import os import time +from datetime import timedelta from unittest import TestCase from unittest.mock import Mock, create_autospec, patch @@ -180,7 +181,7 @@ def test_start_system_unregistered_card_with_redis_cache( mocked_servo.lock.assert_called_once() card.verify.assert_called_once() - @patch("KM4K.CACHE_EXPIRES_SECONDS", 5) + @patch("KM4K.CACHE_EXPIRES_DELTA", timedelta(seconds=5)) @patch("KM4K.servo", autospec=True) @patch("KM4K.read_nfc", side_effect=[b"456789", b"456789", InterruptedError]) def test_start_system_with_redis_cache_expires( From 8bc6e98abd876415ffd28a3730031b17d110ea32 Mon Sep 17 00:00:00 2001 From: otariidae Date: Sat, 19 Aug 2023 00:00:48 +0900 Subject: [PATCH 25/34] externalize authentication logic and add interface to verify --- KM4K.py | 33 ++++---- card_verifier_interface.py | 6 ++ redis_cache_aside_card_verifier.py | 34 ++++++++ requirements.txt | 1 + test_KM4K.py | 120 +++-------------------------- test_redis_cached_card_verifier.py | 70 +++++++++++++++++ 6 files changed, 134 insertions(+), 130 deletions(-) create mode 100644 card_verifier_interface.py create mode 100644 redis_cache_aside_card_verifier.py create mode 100644 test_redis_cached_card_verifier.py diff --git a/KM4K.py b/KM4K.py index f519010..f96ee5c 100755 --- a/KM4K.py +++ b/KM4K.py @@ -11,15 +11,13 @@ import rb303 as servo from card_sdk import CardSDK +from card_verifier_interface import CardVerifierInterface +from redis_cache_aside_card_verifier import RedisCacheAsideCardVerifier suica = nfc.clf.RemoteTarget("212F") suica.sensf_req = bytearray.fromhex("0000030000") -# 有効期間1週間 -CACHE_EXPIRES_SECONDS = 60 * 60 * 24 * 7 - - def read_nfc(): while True: with nfc.ContactlessFrontend("usb") as clf: @@ -30,22 +28,11 @@ def read_nfc(): return binascii.hexlify(tag.idm) -def start_system(isopen, okled_pin, ngled_pin, cache: redis.Redis, card: CardSDK): +def start_system(isopen, okled_pin, ngled_pin, verifier: CardVerifierInterface): while True: idm = read_nfc() if idm: - verified = False - # Redisに登録されているか確認 - if cache.get(idm.decode()) is not None: - verified = True - else: - # Card Managerで登録されているか確認 - is_registered_sso = card.verify(idm.decode()) - if is_registered_sso: - # 有効期限付きでRedisに保存 - # 値は今のところ使わないので適当に1にしておいた - cache.set(idm.decode(), 1, ex=CACHE_EXPIRES_SECONDS) - verified = True + verified = verifier.verify(idm.decode()) if verified: print("Registered (idm:" + idm.decode() + ")") @@ -83,6 +70,8 @@ def main(_): isopen = False okled_pin = 19 ngled_pin = 26 + # 有効期間1週間 + cache_expires_seconds = 60 * 60 * 24 * 7 # Redisに接続 conn = redis.StrictRedis( @@ -90,17 +79,21 @@ def main(_): port=os.environ["REDIS_PORT"], db=os.environ["REDIS_DB"], ) + api_verifier = CardSDK("https://card.ueckoken.club", os.environ["API_KEY"]) + redis_cached_api_verifier = RedisCacheAsideCardVerifier( + api_verifier, + conn, + cache_expires_seconds, + ) servo.reset() GPIO.setmode(GPIO.BCM) GPIO.setup(okled_pin, GPIO.OUT) GPIO.setup(ngled_pin, GPIO.OUT) - card = CardSDK("https://card.ueckoken.club", os.environ["API_KEY"]) - try: print("Welcome to Koken Kagi System") - start_system(isopen, okled_pin, ngled_pin, conn, card) + start_system(isopen, okled_pin, ngled_pin, redis_cached_api_verifier) except Exception as e: # noqa: BLE001 print("An error has occured!") print(e) diff --git a/card_verifier_interface.py b/card_verifier_interface.py new file mode 100644 index 0000000..ff91256 --- /dev/null +++ b/card_verifier_interface.py @@ -0,0 +1,6 @@ +from typing_extensions import Protocol + + +class CardVerifierInterface(Protocol): + def verify(self, idm: str) -> bool: + ... diff --git a/redis_cache_aside_card_verifier.py b/redis_cache_aside_card_verifier.py new file mode 100644 index 0000000..d599bfa --- /dev/null +++ b/redis_cache_aside_card_verifier.py @@ -0,0 +1,34 @@ +from redis import Redis + +from card_verifier_interface import CardVerifierInterface + + +class RedisCacheAsideCardVerifier: + verifier: CardVerifierInterface + cache: Redis + expire_in: int + + def __init__( + self, + verifier: CardVerifierInterface, + cache: Redis, + expire_in: int, + ): + super().__init__() + self.verifier = verifier + self.cache = cache + self.expire_in = expire_in + + def verify(self, idm: str) -> bool: + # Redisに登録されているか確認 + if self.cache.get(idm) is not None: + return True + + verified = self.verifier.verify(idm) + if not verified: + return False + + # 有効期限付きでRedisに保存 + # 値は今のところ使わないので適当に1にしておいた + self.cache.set(idm, 1, ex=self.expire_in) + return True diff --git a/requirements.txt b/requirements.txt index fce8cc8..baf2ac9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ RPi.GPIO==0.7.0; platform_machine == 'armv6l' wiringpi==2.60.1; platform_machine == 'armv6l' requests==2.18.4 redis==4.5.4 +typing-extensions==4.7.1 diff --git a/test_KM4K.py b/test_KM4K.py index b420ca5..8c45ad3 100644 --- a/test_KM4K.py +++ b/test_KM4K.py @@ -1,13 +1,9 @@ # ruff: noqa: S101 import contextlib -import os -import time from unittest import TestCase from unittest.mock import Mock, create_autospec, patch -from redis import StrictRedis - -from card_sdk import CardSDK +from card_verifier_interface import CardVerifierInterface rpi_mock = Mock() nfc_mock = Mock() @@ -25,14 +21,7 @@ ) class TestKM4K(TestCase): def setUp(self): - self.conn = StrictRedis( - host=os.environ["REDIS_HOST"], - port=os.environ["REDIS_PORT"], - db=os.environ["REDIS_DB"], - ) - - def tearDown(self): - self.conn.flushdb() + self.verifier = create_autospec(CardVerifierInterface) @patch("KM4K.servo", autospec=True) @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) @@ -41,8 +30,7 @@ def test_start_system_with_closed_door_and_unregistered_card( mocked_read_nfc, # noqa: ARG002 mocked_servo, ): - card = create_autospec(CardSDK) - card.verify.return_value = False + self.verifier.verify.return_value = False from KM4K import start_system @@ -51,8 +39,7 @@ def test_start_system_with_closed_door_and_unregistered_card( isopen=False, okled_pin=19, ngled_pin=26, - cache=self.conn, - card=card, + verifier=self.verifier, ) mocked_servo.unlock.assert_not_called() @@ -65,8 +52,7 @@ def test_start_system_with_closed_door_and_registered_card( mocked_read_nfc, # noqa: ARG002 mocked_servo, ): - card = create_autospec(CardSDK) - card.verify.return_value = True + self.verifier.verify.return_value = True from KM4K import start_system @@ -75,8 +61,7 @@ def test_start_system_with_closed_door_and_registered_card( isopen=False, okled_pin=19, ngled_pin=26, - cache=self.conn, - card=card, + verifier=self.verifier, ) mocked_servo.unlock.assert_called_once() @@ -89,8 +74,7 @@ def test_start_system_with_open_door_and_unregistered_card( mocked_read_nfc, # noqa: ARG002 mocked_servo, ): - card = create_autospec(CardSDK) - card.verify.return_value = False + self.verifier.verify.return_value = False from KM4K import start_system @@ -99,8 +83,7 @@ def test_start_system_with_open_door_and_unregistered_card( isopen=True, okled_pin=19, ngled_pin=26, - cache=self.conn, - card=card, + verifier=self.verifier, ) mocked_servo.unlock.assert_not_called() @@ -113,8 +96,7 @@ def test_start_system_with_open_door_and_registered_card( mocked_read_nfc, # noqa: ARG002 mocked_servo, ): - card = create_autospec(CardSDK) - card.verify.return_value = True + self.verifier.verify.return_value = True from KM4K import start_system @@ -123,90 +105,8 @@ def test_start_system_with_open_door_and_registered_card( isopen=True, okled_pin=19, ngled_pin=26, - cache=self.conn, - card=card, + verifier=self.verifier, ) mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_called_once() - - @patch("KM4K.servo", autospec=True) - @patch("KM4K.read_nfc", side_effect=[b"345678", b"345678", InterruptedError]) - def test_start_system_with_redis_cache( - self, - mocked_read_nfc, # noqa: ARG002 - mocked_servo, - ): - card = create_autospec(CardSDK) - card.verify.return_value = True - - from KM4K import start_system - - with contextlib.suppress(InterruptedError): - start_system( - isopen=True, - okled_pin=19, - ngled_pin=26, - cache=self.conn, - card=card, - ) - - mocked_servo.unlock.assert_called_once() - mocked_servo.lock.assert_called_once() - card.verify.assert_called_once() - - @patch("KM4K.servo", autospec=True) - @patch("KM4K.read_nfc", side_effect=[b"456789", b"456789", InterruptedError]) - def test_start_system_unregistered_card_with_redis_cache( - self, - mocked_read_nfc, # noqa: ARG002 - mocked_servo, - ): - card = create_autospec(CardSDK) - card.verify.side_effect = [True, False] - - from KM4K import start_system - - with contextlib.suppress(InterruptedError): - start_system( - isopen=True, - okled_pin=19, - ngled_pin=26, - cache=self.conn, - card=card, - ) - - mocked_servo.unlock.assert_called_once() - mocked_servo.lock.assert_called_once() - card.verify.assert_called_once() - - @patch("KM4K.CACHE_EXPIRES_SECONDS", 5) - @patch("KM4K.servo", autospec=True) - @patch("KM4K.read_nfc", side_effect=[b"456789", b"456789", InterruptedError]) - def test_start_system_with_redis_cache_expires( - self, - mocked_read_nfc, # noqa: ARG002 - mocked_servo, - ): - card = create_autospec(CardSDK) - card.verify.side_effect = [True, False] - - from KM4K import start_system - - with contextlib.suppress(InterruptedError): - start_system( - isopen=True, - okled_pin=19, - ngled_pin=26, - cache=self.conn, - card=card, - ) - - mocked_servo.unlock.assert_called_once() - mocked_servo.lock.assert_called_once() - card.verify.assert_called_once() - - time.sleep(10) - - self.assertEqual(self.conn.exists("456789"), 0) - self.assertIsNone(self.conn.get("456789")) diff --git a/test_redis_cached_card_verifier.py b/test_redis_cached_card_verifier.py new file mode 100644 index 0000000..a618011 --- /dev/null +++ b/test_redis_cached_card_verifier.py @@ -0,0 +1,70 @@ +# ruff: noqa: S101 +import os +import time +from unittest import TestCase +from unittest.mock import create_autospec + +from redis import StrictRedis + +from card_verifier_interface import CardVerifierInterface +from redis_cache_aside_card_verifier import RedisCacheAsideCardVerifier + + +class TestRedisCachedCardVerifier(TestCase): + def setUp(self): + super().setUp() + self.cache = StrictRedis( + host=os.environ["REDIS_HOST"], + port=os.environ["REDIS_PORT"], + db=os.environ["REDIS_DB"], + ) + self.verifier = create_autospec(CardVerifierInterface) + self.cached_verifier = RedisCacheAsideCardVerifier( + self.verifier, + self.cache, + 5, + ) + + def tearDown(self) -> None: + super().tearDown() + self.cache.flushdb() + + def test_cache_miss_verified(self): + self.verifier.verify.return_value = True + self.assertTrue(self.cached_verifier.verify("345678")) + self.verifier.verify.assert_called_once() + + def test_cache_miss_invalid(self): + self.verifier.verify.return_value = False + self.assertFalse(self.cached_verifier.verify("345678")) + self.verifier.verify.assert_called_once() + + def test_cache_hit_verified(self): + self.verifier.verify.return_value = True + self.cached_verifier.verify("345678") # init cache + self.verifier.verify.assert_called_once() # called first + self.assertTrue(self.cached_verifier.verify("345678")) + self.verifier.verify.assert_called_once() # not called again + + def test_cache_hit_invalid(self): + self.verifier.verify.return_value = False + self.cached_verifier.verify("345678") # init cache + self.verifier.verify.assert_called_once() # called first + self.assertFalse(self.cached_verifier.verify("345678")) + self.assertEqual(self.verifier.verify.call_count, 2) # called again + + def test_cache_expire(self): + self.verifier.verify.return_value = True + self.cached_verifier.verify("345678") # init cache + self.verifier.verify.assert_called_once() # called first + time.sleep(self.cached_verifier.expire_in) # wait for expiration + self.assertTrue(self.cached_verifier.verify("345678")) + self.assertEqual(self.verifier.verify.call_count, 2) # called again + + def test_obsoleted_cache_hit(self): + self.verifier.verify.return_value = True + self.cached_verifier.verify("345678") # init cache + self.verifier.verify.return_value = False # changes + self.assertTrue( + self.cached_verifier.verify("345678"), + ) # still returns obsoleted result From aa4795b6cb5dbaa7a40d78407adae172ab176e09 Mon Sep 17 00:00:00 2001 From: otariidae Date: Sat, 19 Aug 2023 22:13:02 +0900 Subject: [PATCH 26/34] pin pip to the current latest version ruff requires newer pip --- Dockerfile.dev | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile.dev b/Dockerfile.dev index e9b7971..f9b95b7 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -2,7 +2,8 @@ FROM debian:buster-slim RUN apt-get update \ && apt-get install -y libusb-1.0-0 python3 python3-pip \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* \ + && python3 -m pip install pip==23.2.1 WORKDIR /app COPY requirements*.txt /app/ From 601f420f49b6f601cba8a9ff35b773ab0d667fe5 Mon Sep 17 00:00:00 2001 From: otariidae Date: Sat, 19 Aug 2023 22:23:31 +0900 Subject: [PATCH 27/34] install git in Dev Container --- .devcontainer/devcontainer.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b1152a5..b656fb7 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -23,6 +23,12 @@ "ms-python.python" ] } + }, + "features": { + "ghcr.io/devcontainers/features/git:1": { + "ppa": true, + "version": "os-provided" + } } // Features to add to the dev container. More info: https://containers.dev/features. From 1c44496ee095177b1054236545043a857ba950d2 Mon Sep 17 00:00:00 2001 From: otariidae Date: Sun, 20 Aug 2023 03:07:48 +0900 Subject: [PATCH 28/34] flat layout --- Register.sh | 6 ---- Reset.py | 3 -- Unregister.sh | 6 ---- km4k2/__init__.py | 0 km4k2/__main__.py | 39 ++++++++++++++++++++++ card_sdk.py => km4k2/card_sdk.py | 0 KM4K.py => km4k2/km4k.py | 39 ++-------------------- rb303.py => km4k2/rb303.py | 0 km4k2/reset.py | 4 +++ tests/__init__.py | 0 test_card_sdk.py => tests/test_card_sdk.py | 2 +- test_KM4K.py => tests/test_km4k.py | 16 ++++----- 12 files changed, 54 insertions(+), 61 deletions(-) delete mode 100755 Register.sh delete mode 100644 Reset.py delete mode 100755 Unregister.sh create mode 100644 km4k2/__init__.py create mode 100644 km4k2/__main__.py rename card_sdk.py => km4k2/card_sdk.py (100%) rename KM4K.py => km4k2/km4k.py (75%) mode change 100755 => 100644 rename rb303.py => km4k2/rb303.py (100%) create mode 100644 km4k2/reset.py create mode 100644 tests/__init__.py rename test_card_sdk.py => tests/test_card_sdk.py (98%) rename test_KM4K.py => tests/test_km4k.py (94%) diff --git a/Register.sh b/Register.sh deleted file mode 100755 index ccacab0..0000000 --- a/Register.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -cd /home/pi/Kokey - -sudo systemctl stop KM4K && sudo ./KM4K.py 0 -sudo systemctl start KM4K diff --git a/Reset.py b/Reset.py deleted file mode 100644 index c465230..0000000 --- a/Reset.py +++ /dev/null @@ -1,3 +0,0 @@ -from rb303 import lock - -lock() diff --git a/Unregister.sh b/Unregister.sh deleted file mode 100755 index 27585db..0000000 --- a/Unregister.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -cd /home/pi/Kokey - -sudo systemctl stop KM4K && sudo ./KM4K.py 1 -sudo systemctl start KM4K diff --git a/km4k2/__init__.py b/km4k2/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/km4k2/__main__.py b/km4k2/__main__.py new file mode 100644 index 0000000..e479461 --- /dev/null +++ b/km4k2/__main__.py @@ -0,0 +1,39 @@ +import os + +import redis +from RPi import GPIO +from km4k2.km4k import start_system + +import km4k2.rb303 as servo +from km4k2.card_sdk import CardSDK + + +def main(): + isopen = False + okled_pin = 19 + ngled_pin = 26 + + # Redisに接続 + conn = redis.StrictRedis( + host=os.environ["REDIS_HOST"], + port=os.environ["REDIS_PORT"], + db=os.environ["REDIS_DB"], + ) + + servo.reset() + GPIO.setmode(GPIO.BCM) + GPIO.setup(okled_pin, GPIO.OUT) + GPIO.setup(ngled_pin, GPIO.OUT) + + card = CardSDK("https://card.ueckoken.club", os.environ["API_KEY"]) + + try: + print("Welcome to Koken Kagi System") + start_system(isopen, okled_pin, ngled_pin, conn, card) + except Exception as e: # noqa: BLE001 + print("An error has occured!") + print(e) + + +if __name__ == "__main__": + main() diff --git a/card_sdk.py b/km4k2/card_sdk.py similarity index 100% rename from card_sdk.py rename to km4k2/card_sdk.py diff --git a/KM4K.py b/km4k2/km4k.py old mode 100755 new mode 100644 similarity index 75% rename from KM4K.py rename to km4k2/km4k.py index f519010..43d0968 --- a/KM4K.py +++ b/km4k2/km4k.py @@ -1,16 +1,12 @@ -#!/usr/bin/python3 - import binascii -import os -import sys import time import nfc import redis from RPi import GPIO -import rb303 as servo -from card_sdk import CardSDK +import km4k2.rb303 as servo +from km4k2.card_sdk import CardSDK suica = nfc.clf.RemoteTarget("212F") suica.sensf_req = bytearray.fromhex("0000030000") @@ -77,34 +73,3 @@ def start_system(isopen, okled_pin, ngled_pin, cache: redis.Redis, card: CardSDK time.sleep(0.1) GPIO.output(ngled_pin, GPIO.LOW) time.sleep(1.7) - - -def main(_): - isopen = False - okled_pin = 19 - ngled_pin = 26 - - # Redisに接続 - conn = redis.StrictRedis( - host=os.environ["REDIS_HOST"], - port=os.environ["REDIS_PORT"], - db=os.environ["REDIS_DB"], - ) - - servo.reset() - GPIO.setmode(GPIO.BCM) - GPIO.setup(okled_pin, GPIO.OUT) - GPIO.setup(ngled_pin, GPIO.OUT) - - card = CardSDK("https://card.ueckoken.club", os.environ["API_KEY"]) - - try: - print("Welcome to Koken Kagi System") - start_system(isopen, okled_pin, ngled_pin, conn, card) - except Exception as e: # noqa: BLE001 - print("An error has occured!") - print(e) - - -if __name__ == "__main__": - main(sys.argv) diff --git a/rb303.py b/km4k2/rb303.py similarity index 100% rename from rb303.py rename to km4k2/rb303.py diff --git a/km4k2/reset.py b/km4k2/reset.py new file mode 100644 index 0000000..932f2ec --- /dev/null +++ b/km4k2/reset.py @@ -0,0 +1,4 @@ +from km4k2.rb303 import lock + +if __name__ == "__main__": + lock() diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test_card_sdk.py b/tests/test_card_sdk.py similarity index 98% rename from test_card_sdk.py rename to tests/test_card_sdk.py index ef90859..aadf4d7 100644 --- a/test_card_sdk.py +++ b/tests/test_card_sdk.py @@ -3,7 +3,7 @@ import requests_mock -from card_sdk import CardSDK +from km4k2.card_sdk import CardSDK class TestCardSDK(TestCase): diff --git a/test_KM4K.py b/tests/test_km4k.py similarity index 94% rename from test_KM4K.py rename to tests/test_km4k.py index b420ca5..e90ab6b 100644 --- a/test_KM4K.py +++ b/tests/test_km4k.py @@ -7,7 +7,7 @@ from redis import StrictRedis -from card_sdk import CardSDK +from km4k2.card_sdk import CardSDK rpi_mock = Mock() nfc_mock = Mock() @@ -44,7 +44,7 @@ def test_start_system_with_closed_door_and_unregistered_card( card = create_autospec(CardSDK) card.verify.return_value = False - from KM4K import start_system + from km4k2.km4k import start_system with contextlib.suppress(InterruptedError): start_system( @@ -68,7 +68,7 @@ def test_start_system_with_closed_door_and_registered_card( card = create_autospec(CardSDK) card.verify.return_value = True - from KM4K import start_system + from km4k2.km4k import start_system with contextlib.suppress(InterruptedError): start_system( @@ -92,7 +92,7 @@ def test_start_system_with_open_door_and_unregistered_card( card = create_autospec(CardSDK) card.verify.return_value = False - from KM4K import start_system + from km4k2.km4k import start_system with contextlib.suppress(InterruptedError): start_system( @@ -116,7 +116,7 @@ def test_start_system_with_open_door_and_registered_card( card = create_autospec(CardSDK) card.verify.return_value = True - from KM4K import start_system + from km4k2.km4k import start_system with contextlib.suppress(InterruptedError): start_system( @@ -140,7 +140,7 @@ def test_start_system_with_redis_cache( card = create_autospec(CardSDK) card.verify.return_value = True - from KM4K import start_system + from km4k2.km4k import start_system with contextlib.suppress(InterruptedError): start_system( @@ -165,7 +165,7 @@ def test_start_system_unregistered_card_with_redis_cache( card = create_autospec(CardSDK) card.verify.side_effect = [True, False] - from KM4K import start_system + from km4k2.km4k import start_system with contextlib.suppress(InterruptedError): start_system( @@ -191,7 +191,7 @@ def test_start_system_with_redis_cache_expires( card = create_autospec(CardSDK) card.verify.side_effect = [True, False] - from KM4K import start_system + from km4k2.km4k import start_system with contextlib.suppress(InterruptedError): start_system( From 50d2a52729da71954fd510c13b6989e4a0cae6a6 Mon Sep 17 00:00:00 2001 From: otariidae Date: Sun, 20 Aug 2023 03:14:11 +0900 Subject: [PATCH 29/34] lint --- km4k2/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/km4k2/__main__.py b/km4k2/__main__.py index e479461..6792130 100644 --- a/km4k2/__main__.py +++ b/km4k2/__main__.py @@ -2,10 +2,10 @@ import redis from RPi import GPIO -from km4k2.km4k import start_system import km4k2.rb303 as servo from km4k2.card_sdk import CardSDK +from km4k2.km4k import start_system def main(): From 875c3a349b2548d0776fc65969efba11fc38b015 Mon Sep 17 00:00:00 2001 From: otariidae Date: Mon, 21 Aug 2023 01:27:22 +0900 Subject: [PATCH 30/34] fix patch --- tests/test_km4k.py | 140 ++++++++++++++++++++++++++------------------- 1 file changed, 82 insertions(+), 58 deletions(-) diff --git a/tests/test_km4k.py b/tests/test_km4k.py index e90ab6b..8f4739a 100644 --- a/tests/test_km4k.py +++ b/tests/test_km4k.py @@ -23,7 +23,7 @@ "wiringpi": wiringpi_mock, }, ) -class TestKM4K(TestCase): +class TestKm4k(TestCase): def setUp(self): self.conn = StrictRedis( host=os.environ["REDIS_HOST"], @@ -34,19 +34,29 @@ def setUp(self): def tearDown(self): self.conn.flushdb() - @patch("KM4K.servo", autospec=True) - @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - def test_start_system_with_closed_door_and_unregistered_card( - self, - mocked_read_nfc, # noqa: ARG002 - mocked_servo, - ): + def test_start_system_with_closed_door_and_unregistered_card(self): card = create_autospec(CardSDK) card.verify.return_value = False from km4k2.km4k import start_system - with contextlib.suppress(InterruptedError): + # なぜか @patch だと2個目以降のテストメソッドでパッチが当たらないので、しかたな + # く with でべた書き。たぶんこのファイルのトップレベルで km4k2.card_sdk をインポ + # ートしたことで振る舞いが変わっている。 + # km4k2.card_sdk をすべてテストメソッド内でローカルインポートするようにすれば + # @patch が効くようになるが、ほかのファイルで1つでもトップレベルで km4k2 のモジ + # ュールをインポートしていたら効かなくなる + # パッケージ化する前(__init__.py)は効いてたのでパッケージの読み込みとかに関係 + # してそう + with patch( + "km4k2.km4k.read_nfc", + side_effect=[b"345678", InterruptedError], + ), patch( + "km4k2.km4k.servo", + autospec=True, + ) as mocked_servo, contextlib.suppress( + InterruptedError, + ): start_system( isopen=False, okled_pin=19, @@ -58,19 +68,21 @@ def test_start_system_with_closed_door_and_unregistered_card( mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_not_called() - @patch("KM4K.servo", autospec=True) - @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - def test_start_system_with_closed_door_and_registered_card( - self, - mocked_read_nfc, # noqa: ARG002 - mocked_servo, - ): + def test_start_system_with_closed_door_and_registered_card(self): card = create_autospec(CardSDK) card.verify.return_value = True from km4k2.km4k import start_system - with contextlib.suppress(InterruptedError): + with patch( + "km4k2.km4k.read_nfc", + side_effect=[b"345678", InterruptedError], + ), patch( + "km4k2.km4k.servo", + autospec=True, + ) as mocked_servo, contextlib.suppress( + InterruptedError, + ): start_system( isopen=False, okled_pin=19, @@ -82,19 +94,21 @@ def test_start_system_with_closed_door_and_registered_card( mocked_servo.unlock.assert_called_once() mocked_servo.lock.assert_not_called() - @patch("KM4K.servo", autospec=True) - @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - def test_start_system_with_open_door_and_unregistered_card( - self, - mocked_read_nfc, # noqa: ARG002 - mocked_servo, - ): + def test_start_system_with_open_door_and_unregistered_card(self): card = create_autospec(CardSDK) card.verify.return_value = False from km4k2.km4k import start_system - with contextlib.suppress(InterruptedError): + with patch( + "km4k2.km4k.read_nfc", + side_effect=[b"345678", InterruptedError], + ), patch( + "km4k2.km4k.servo", + autospec=True, + ) as mocked_servo, contextlib.suppress( + InterruptedError, + ): start_system( isopen=True, okled_pin=19, @@ -106,19 +120,21 @@ def test_start_system_with_open_door_and_unregistered_card( mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_not_called() - @patch("KM4K.servo", autospec=True) - @patch("KM4K.read_nfc", side_effect=[b"345678", InterruptedError]) - def test_start_system_with_open_door_and_registered_card( - self, - mocked_read_nfc, # noqa: ARG002 - mocked_servo, - ): + def test_start_system_with_open_door_and_registered_card(self): card = create_autospec(CardSDK) card.verify.return_value = True from km4k2.km4k import start_system - with contextlib.suppress(InterruptedError): + with patch( + "km4k2.km4k.read_nfc", + side_effect=[b"345678", InterruptedError], + ), patch( + "km4k2.km4k.servo", + autospec=True, + ) as mocked_servo, contextlib.suppress( + InterruptedError, + ): start_system( isopen=True, okled_pin=19, @@ -130,19 +146,21 @@ def test_start_system_with_open_door_and_registered_card( mocked_servo.unlock.assert_not_called() mocked_servo.lock.assert_called_once() - @patch("KM4K.servo", autospec=True) - @patch("KM4K.read_nfc", side_effect=[b"345678", b"345678", InterruptedError]) - def test_start_system_with_redis_cache( - self, - mocked_read_nfc, # noqa: ARG002 - mocked_servo, - ): + def test_start_system_with_redis_cache(self): card = create_autospec(CardSDK) card.verify.return_value = True from km4k2.km4k import start_system - with contextlib.suppress(InterruptedError): + with patch( + "km4k2.km4k.read_nfc", + side_effect=[b"345678", b"345678", InterruptedError], + ), patch( + "km4k2.km4k.servo", + autospec=True, + ) as mocked_servo, contextlib.suppress( + InterruptedError, + ): start_system( isopen=True, okled_pin=19, @@ -155,19 +173,21 @@ def test_start_system_with_redis_cache( mocked_servo.lock.assert_called_once() card.verify.assert_called_once() - @patch("KM4K.servo", autospec=True) - @patch("KM4K.read_nfc", side_effect=[b"456789", b"456789", InterruptedError]) - def test_start_system_unregistered_card_with_redis_cache( - self, - mocked_read_nfc, # noqa: ARG002 - mocked_servo, - ): + def test_start_system_unregistered_card_with_redis_cache(self): card = create_autospec(CardSDK) card.verify.side_effect = [True, False] from km4k2.km4k import start_system - with contextlib.suppress(InterruptedError): + with patch( + "km4k2.km4k.read_nfc", + side_effect=[b"456789", b"456789", InterruptedError], + ), patch( + "km4k2.km4k.servo", + autospec=True, + ) as mocked_servo, contextlib.suppress( + InterruptedError, + ): start_system( isopen=True, okled_pin=19, @@ -180,20 +200,24 @@ def test_start_system_unregistered_card_with_redis_cache( mocked_servo.lock.assert_called_once() card.verify.assert_called_once() - @patch("KM4K.CACHE_EXPIRES_SECONDS", 5) - @patch("KM4K.servo", autospec=True) - @patch("KM4K.read_nfc", side_effect=[b"456789", b"456789", InterruptedError]) - def test_start_system_with_redis_cache_expires( - self, - mocked_read_nfc, # noqa: ARG002 - mocked_servo, - ): + def test_start_system_with_redis_cache_expires(self): card = create_autospec(CardSDK) card.verify.side_effect = [True, False] from km4k2.km4k import start_system - with contextlib.suppress(InterruptedError): + with patch( + "km4k2.km4k.read_nfc", + side_effect=[b"456789", b"456789", InterruptedError], + ), patch( + "km4k2.km4k.servo", + autospec=True, + ) as mocked_servo, patch( + "km4k2.km4k.CACHE_EXPIRES_SECONDS", + 5, + ), contextlib.suppress( + InterruptedError, + ): start_system( isopen=True, okled_pin=19, From 98ecc8960dba42d73a40273f95adaa9d22ee283a Mon Sep 17 00:00:00 2001 From: otariidae Date: Tue, 22 Aug 2023 20:28:14 +0900 Subject: [PATCH 31/34] do not hard-code API base URL --- README.md | 2 +- km4k2/__main__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4c346c7..d7ec94a 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ systemctl status KM4K2 ### 環境変数 -- `VERIFY_API_URL` : CardManagerのカード認証用エンドポイント +- `CARD_MANAGER_BASE_URL` : CardManagerのAPIベースURL - `API_KEY` : CardManagerのAPI-Key - `REDIS_HOST` : Redisサーバーのホスト名 - `REDIS_PORT` : Redisサーバーのポート番号 diff --git a/km4k2/__main__.py b/km4k2/__main__.py index aaef288..92f898a 100644 --- a/km4k2/__main__.py +++ b/km4k2/__main__.py @@ -23,7 +23,7 @@ def main(): port=os.environ["REDIS_PORT"], db=os.environ["REDIS_DB"], ) - api_verifier = CardSDK("https://card.ueckoken.club", os.environ["API_KEY"]) + api_verifier = CardSDK(os.environ["CARD_MANAGER_BASE_URL"], os.environ["API_KEY"]) redis_cached_api_verifier = RedisCacheAsideCardVerifier( api_verifier, conn, From fbe0926b0d9089f27b98fc3bc6b7e80b9eeb5289 Mon Sep 17 00:00:00 2001 From: acaValkyrie Date: Fri, 12 Apr 2024 17:36:03 +0900 Subject: [PATCH 32/34] add kicad data --- hardware/kicad/.gitignore | 4 + hardware/kicad/Koken-KeyBox.kicad_pcb | 5605 +++++++++++++++++++++++++ hardware/kicad/Koken-KeyBox.kicad_prl | 83 + hardware/kicad/Koken-KeyBox.kicad_pro | 596 +++ hardware/kicad/Koken-KeyBox.kicad_sch | 3166 ++++++++++++++ 5 files changed, 9454 insertions(+) create mode 100644 hardware/kicad/.gitignore create mode 100644 hardware/kicad/Koken-KeyBox.kicad_pcb create mode 100644 hardware/kicad/Koken-KeyBox.kicad_prl create mode 100644 hardware/kicad/Koken-KeyBox.kicad_pro create mode 100644 hardware/kicad/Koken-KeyBox.kicad_sch diff --git a/hardware/kicad/.gitignore b/hardware/kicad/.gitignore new file mode 100644 index 0000000..e5d9a3d --- /dev/null +++ b/hardware/kicad/.gitignore @@ -0,0 +1,4 @@ +Koken-KeyBox-backups +fp-info-cache +# 出来上がりのガーバーデータとかドリルデータはReleaseにしてください +output \ No newline at end of file diff --git a/hardware/kicad/Koken-KeyBox.kicad_pcb b/hardware/kicad/Koken-KeyBox.kicad_pcb new file mode 100644 index 0000000..7c7243d --- /dev/null +++ b/hardware/kicad/Koken-KeyBox.kicad_pcb @@ -0,0 +1,5605 @@ +(kicad_pcb + (version 20240108) + (generator "pcbnew") + (generator_version "8.0") + (general + (thickness 1.6) + (legacy_teardrops no) + ) + (paper "A4") + (layers + (0 "F.Cu" signal) + (31 "B.Cu" signal) + (32 "B.Adhes" user "B.Adhesive") + (33 "F.Adhes" user "F.Adhesive") + (34 "B.Paste" user) + (35 "F.Paste" user) + (36 "B.SilkS" user "B.Silkscreen") + (37 "F.SilkS" user "F.Silkscreen") + (38 "B.Mask" user) + (39 "F.Mask" user) + (40 "Dwgs.User" user "User.Drawings") + (41 "Cmts.User" user "User.Comments") + (42 "Eco1.User" user "User.Eco1") + (43 "Eco2.User" user "User.Eco2") + (44 "Edge.Cuts" user) + (45 "Margin" user) + (46 "B.CrtYd" user "B.Courtyard") + (47 "F.CrtYd" user "F.Courtyard") + (48 "B.Fab" user) + (49 "F.Fab" user) + (50 "User.1" user) + (51 "User.2" user) + (52 "User.3" user) + (53 "User.4" user) + (54 "User.5" user) + (55 "User.6" user) + (56 "User.7" user) + (57 "User.8" user) + (58 "User.9" user) + ) + (setup + (pad_to_mask_clearance 0) + (allow_soldermask_bridges_in_footprints no) + (pcbplotparams + (layerselection 0x0001000_ffffffff) + (plot_on_all_layers_selection 0x0000000_00000000) + (disableapertmacros no) + (usegerberextensions no) + (usegerberattributes yes) + (usegerberadvancedattributes yes) + (creategerberjobfile yes) + (dashed_line_dash_ratio 12.000000) + (dashed_line_gap_ratio 3.000000) + (svgprecision 4) + (plotframeref no) + (viasonmask no) + (mode 1) + (useauxorigin no) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (pdf_front_fp_property_popups yes) + (pdf_back_fp_property_popups yes) + (dxfpolygonmode yes) + (dxfimperialunits yes) + (dxfusepcbnewfont yes) + (psnegative no) + (psa4output no) + (plotreference yes) + (plotvalue yes) + (plotfptext yes) + (plotinvisibletext no) + (sketchpadsonfab no) + (subtractmaskfromsilk no) + (outputformat 1) + (mirror no) + (drillshape 0) + (scaleselection 1) + (outputdirectory "output") + ) + ) + (net 0 "") + (net 1 "+5V") + (net 2 "GND") + (net 3 "LED_Success") + (net 4 "LED_Failure") + (net 5 "Servo_sig") + (net 6 "unconnected-(U1-GPIO4-Pad7)") + (net 7 "unconnected-(U1-GPIO9-Pad21)") + (net 8 "unconnected-(U1-GPIO24-Pad18)") + (net 9 "unconnected-(U1-GPIO17-Pad11)") + (net 10 "unconnected-(U1-3.3V-Pad1)") + (net 11 "unconnected-(U1-GPIO22-Pad15)") + (net 12 "unconnected-(U1-GPIO27-Pad13)") + (net 13 "unconnected-(U1-GPIO25-Pad22)") + (net 14 "unconnected-(U1-GPIO16-Pad36)") + (net 15 "unconnected-(U1-GND-Pad20)") + (net 16 "unconnected-(U1-GPIO3-Pad5)") + (net 17 "unconnected-(U1-GPIO11-Pad23)") + (net 18 "unconnected-(U1-GPIO6-Pad31)") + (net 19 "unconnected-(U1-3.3V-Pad17)") + (net 20 "unconnected-(U1-GPIO20-Pad38)") + (net 21 "unconnected-(U1-GPIO18-Pad12)") + (net 22 "unconnected-(U1-GPIO8-Pad24)") + (net 23 "unconnected-(U1-GPIO14-Pad8)") + (net 24 "unconnected-(U1-GPIO13-Pad33)") + (net 25 "unconnected-(U1-GND-Pad14)") + (net 26 "unconnected-(U1-5V-Pad4)") + (net 27 "unconnected-(U1-GND-Pad39)") + (net 28 "unconnected-(U1-GPIO23-Pad16)") + (net 29 "unconnected-(U1-GPIO10-Pad19)") + (net 30 "unconnected-(U1-GPIO7-Pad26)") + (net 31 "unconnected-(U1-GPIO21-Pad40)") + (net 32 "unconnected-(U1-GND-Pad34)") + (net 33 "unconnected-(U1-GPIO15-Pad10)") + (net 34 "unconnected-(U1-GND-Pad25)") + (net 35 "unconnected-(U1-GPIO2-Pad3)") + (net 36 "unconnected-(U1-GPIO5-Pad29)") + (net 37 "unconnected-(U1-GND-Pad30)") + (footprint "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" + (layer "F.Cu") + (uuid "08d7778d-3ecc-4fc9-8f77-ec4452abf006") + (at 135.5 85) + (descr "CP, Radial series, Radial, pin pitch=2.50mm, , diameter=5mm, Electrolytic Capacitor") + (tags "CP Radial series Radial pin pitch 2.50mm diameter 5mm Electrolytic Capacitor") + (property "Reference" "C1" + (at 1.25 -3.75 0) + (layer "F.SilkS") + (uuid "a0bbffae-901d-45ca-8f86-c2bf76ac6122") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "2.2u" + (at 1.25 3.75 0) + (layer "F.Fab") + (uuid "56e85da0-d145-4785-a22e-79e44899e346") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "b3f1ad66-3aa3-429f-a35e-e3a40c237d11") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "8fafd969-5769-4a55-9774-921f57dd43df") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Unpolarized capacitor" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "ea37a722-9073-4f2e-a2b1-a6e011c75253") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/0e997d87-bcf6-4ae8-8b1b-44f7128d66a4") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr through_hole) + (fp_line + (start -1.554775 -1.475) + (end -1.054775 -1.475) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "23056b0c-fe64-47ff-b5b0-3927935673b6") + ) + (fp_line + (start -1.304775 -1.725) + (end -1.304775 -1.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8d2ee6d3-814f-4512-b603-b7c83c6b2585") + ) + (fp_line + (start 1.25 -2.58) + (end 1.25 2.58) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9244dff6-a4c6-4925-a169-620930fdf863") + ) + (fp_line + (start 1.29 -2.58) + (end 1.29 2.58) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cc3e42b0-67fb-448e-aee2-c66320fe0b98") + ) + (fp_line + (start 1.33 -2.579) + (end 1.33 2.579) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e4791079-ac33-41a2-87e4-a962df1bad86") + ) + (fp_line + (start 1.37 -2.578) + (end 1.37 2.578) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "73424af9-98de-4205-a611-a20ce16205f2") + ) + (fp_line + (start 1.41 -2.576) + (end 1.41 2.576) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "93a801d8-a17b-4b72-a601-d316358e7dc6") + ) + (fp_line + (start 1.45 -2.573) + (end 1.45 2.573) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "05fb7832-9c37-4c15-812d-cf1719910d3b") + ) + (fp_line + (start 1.49 -2.569) + (end 1.49 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2744db90-1cbf-4d2e-b037-54e1a2a21d35") + ) + (fp_line + (start 1.49 1.04) + (end 1.49 2.569) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9c3803e5-56dd-4bf2-8132-cdb9b02adee6") + ) + (fp_line + (start 1.53 -2.565) + (end 1.53 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "836852c5-0bc7-4922-999f-47a66cc303ae") + ) + (fp_line + (start 1.53 1.04) + (end 1.53 2.565) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3b7bd456-ac62-4bce-970a-454117f627b6") + ) + (fp_line + (start 1.57 -2.561) + (end 1.57 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9a2531b6-0e2e-4176-a0b1-9d452e2d81fb") + ) + (fp_line + (start 1.57 1.04) + (end 1.57 2.561) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "294b0d58-c1f8-4eff-99dc-b1dd7b4d51d6") + ) + (fp_line + (start 1.61 -2.556) + (end 1.61 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "72516669-fc3f-4def-93b3-e805ae503cdb") + ) + (fp_line + (start 1.61 1.04) + (end 1.61 2.556) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "625882c3-52f1-4fa4-b0e5-cfb68a7af70d") + ) + (fp_line + (start 1.65 -2.55) + (end 1.65 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "eb88fb6b-8243-4b1c-bab2-1b289215becd") + ) + (fp_line + (start 1.65 1.04) + (end 1.65 2.55) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8364328d-714f-46a1-ae89-2252399a4c1b") + ) + (fp_line + (start 1.69 -2.543) + (end 1.69 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "be818265-17a8-41c4-956a-4e07574004aa") + ) + (fp_line + (start 1.69 1.04) + (end 1.69 2.543) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9c50302c-025d-4455-94c9-ca3f66715b82") + ) + (fp_line + (start 1.73 -2.536) + (end 1.73 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6adc545a-b4a4-4080-83da-cb0817f22013") + ) + (fp_line + (start 1.73 1.04) + (end 1.73 2.536) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f88133c9-2aa7-44aa-b471-a2514ef58751") + ) + (fp_line + (start 1.77 -2.528) + (end 1.77 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "94c5e82c-4996-4e26-9bad-7517f685f7e5") + ) + (fp_line + (start 1.77 1.04) + (end 1.77 2.528) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ac4c8c74-35de-451e-97ff-bff8a5ece897") + ) + (fp_line + (start 1.81 -2.52) + (end 1.81 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "38d4e270-1f46-4152-8c62-6ecb7cbc01b7") + ) + (fp_line + (start 1.81 1.04) + (end 1.81 2.52) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a8694a34-8833-4d01-a5a5-c77924eb8dea") + ) + (fp_line + (start 1.85 -2.511) + (end 1.85 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "bb2fb7ba-82ba-4cfa-a2fc-ac95b2524e0c") + ) + (fp_line + (start 1.85 1.04) + (end 1.85 2.511) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f4077226-3cdc-4d26-9649-b181d57b0e9f") + ) + (fp_line + (start 1.89 -2.501) + (end 1.89 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9ea17ab0-af27-4638-ab90-50baf95860d5") + ) + (fp_line + (start 1.89 1.04) + (end 1.89 2.501) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "aede9519-1ad4-41d8-bfe9-980cf7fec797") + ) + (fp_line + (start 1.93 -2.491) + (end 1.93 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "03653ad8-b9ba-4e91-bc78-cb71c9db8463") + ) + (fp_line + (start 1.93 1.04) + (end 1.93 2.491) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d800bd97-26c2-4f1f-b53f-95983cd7b43a") + ) + (fp_line + (start 1.971 -2.48) + (end 1.971 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b47661d5-fd3e-41c4-9633-18b29597a588") + ) + (fp_line + (start 1.971 1.04) + (end 1.971 2.48) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b65dd921-16a8-4a4f-b11f-6e78b90f27cf") + ) + (fp_line + (start 2.011 -2.468) + (end 2.011 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ca5df4eb-dc94-4a42-811c-d63664fc5447") + ) + (fp_line + (start 2.011 1.04) + (end 2.011 2.468) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "67c6358e-f8e5-4182-bd3b-390673a2356d") + ) + (fp_line + (start 2.051 -2.455) + (end 2.051 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7d1948f7-c184-4dc4-999b-99d3f052191f") + ) + (fp_line + (start 2.051 1.04) + (end 2.051 2.455) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d8f30f4f-9966-433b-a2af-27b3c979acec") + ) + (fp_line + (start 2.091 -2.442) + (end 2.091 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e9eb2b8e-bb11-43c6-827d-6e1416071e3f") + ) + (fp_line + (start 2.091 1.04) + (end 2.091 2.442) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2611429d-7ab7-4734-9d59-5dee2de81761") + ) + (fp_line + (start 2.131 -2.428) + (end 2.131 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "87a7348c-6a02-403c-83fa-c2418de233e6") + ) + (fp_line + (start 2.131 1.04) + (end 2.131 2.428) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "745e11d9-b29e-4237-b35f-56f4ef4c3e72") + ) + (fp_line + (start 2.171 -2.414) + (end 2.171 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "41b1c888-f942-4967-a4db-06d977bffd0f") + ) + (fp_line + (start 2.171 1.04) + (end 2.171 2.414) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a92b01b7-b816-403d-bbfa-dfa1a6282f88") + ) + (fp_line + (start 2.211 -2.398) + (end 2.211 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "afceca33-823c-444e-be2e-73c5c5c9a2ad") + ) + (fp_line + (start 2.211 1.04) + (end 2.211 2.398) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cebbca63-cf46-4d1c-a019-9e78b98dcb56") + ) + (fp_line + (start 2.251 -2.382) + (end 2.251 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6f34bb24-8c55-486b-aad5-ca0a542276f0") + ) + (fp_line + (start 2.251 1.04) + (end 2.251 2.382) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2e5d651c-9834-4456-83c9-a3f2a61bad0a") + ) + (fp_line + (start 2.291 -2.365) + (end 2.291 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a7ddfd38-d3fb-4a29-966b-02dd4f3f5bef") + ) + (fp_line + (start 2.291 1.04) + (end 2.291 2.365) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "991f4290-502d-467b-89cf-a5eb4189044e") + ) + (fp_line + (start 2.331 -2.348) + (end 2.331 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "bd15ed83-bbd4-4a71-8a5f-930129699ee7") + ) + (fp_line + (start 2.331 1.04) + (end 2.331 2.348) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "faddaae4-1907-4df9-b63a-a953e739022e") + ) + (fp_line + (start 2.371 -2.329) + (end 2.371 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3e12e0e6-84c5-4684-aad4-b7dc9670eb73") + ) + (fp_line + (start 2.371 1.04) + (end 2.371 2.329) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4dab959b-b260-40ab-9c36-7eaadc516aa5") + ) + (fp_line + (start 2.411 -2.31) + (end 2.411 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "44cfa4d8-4685-435e-9f6f-aa4965b2aa1e") + ) + (fp_line + (start 2.411 1.04) + (end 2.411 2.31) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9c58da4e-c475-4566-b6db-99ee2d424ed4") + ) + (fp_line + (start 2.451 -2.29) + (end 2.451 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4770c04f-b1ee-4c83-ac73-f5e4c740409f") + ) + (fp_line + (start 2.451 1.04) + (end 2.451 2.29) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f670e0ff-68d1-4047-bde1-d6a94e69397a") + ) + (fp_line + (start 2.491 -2.268) + (end 2.491 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d1138a37-5b71-45b7-9031-bf9379f1625e") + ) + (fp_line + (start 2.491 1.04) + (end 2.491 2.268) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0ace0778-ffe1-421f-8c39-97e8b567aae9") + ) + (fp_line + (start 2.531 -2.247) + (end 2.531 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8628510f-199c-42ac-95cd-3061cb227e29") + ) + (fp_line + (start 2.531 1.04) + (end 2.531 2.247) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ddf88672-03f8-46b8-9b64-cc0934047519") + ) + (fp_line + (start 2.571 -2.224) + (end 2.571 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8ef844cf-9013-4102-96fc-fc28e0d70bce") + ) + (fp_line + (start 2.571 1.04) + (end 2.571 2.224) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ca45424f-929b-43b3-9719-d715c432b8c3") + ) + (fp_line + (start 2.611 -2.2) + (end 2.611 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "be50001d-a2a2-42e3-b3e0-6353e0ff1d12") + ) + (fp_line + (start 2.611 1.04) + (end 2.611 2.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8780b5db-1fd7-4e49-921b-8efd8ed26dd3") + ) + (fp_line + (start 2.651 -2.175) + (end 2.651 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "73372273-4b2f-4e77-81b5-586275548fd6") + ) + (fp_line + (start 2.651 1.04) + (end 2.651 2.175) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "216e35f6-95cc-4475-82b6-97e03d84b79e") + ) + (fp_line + (start 2.691 -2.149) + (end 2.691 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "08ed6f6f-6ea8-4ac8-8813-4945b4c44cd6") + ) + (fp_line + (start 2.691 1.04) + (end 2.691 2.149) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9363ab5b-f1ac-4e21-a90b-a05f40fc0591") + ) + (fp_line + (start 2.731 -2.122) + (end 2.731 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fdca76f3-f876-47be-8f14-fd259dc1d9d6") + ) + (fp_line + (start 2.731 1.04) + (end 2.731 2.122) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "55ace999-7584-4030-9a5d-bde98b217b9d") + ) + (fp_line + (start 2.771 -2.095) + (end 2.771 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f710ec2a-97fe-4dba-912b-f7552bc90cfb") + ) + (fp_line + (start 2.771 1.04) + (end 2.771 2.095) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f5867595-57d4-4f2c-80fc-b48480fa35e6") + ) + (fp_line + (start 2.811 -2.065) + (end 2.811 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0636bd28-8ea1-4121-b5ff-e769385601be") + ) + (fp_line + (start 2.811 1.04) + (end 2.811 2.065) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ac4ffda4-c9cc-4789-a8c9-0386352fa7c3") + ) + (fp_line + (start 2.851 -2.035) + (end 2.851 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "17ea428b-3cff-48b3-a66a-7d3695348a01") + ) + (fp_line + (start 2.851 1.04) + (end 2.851 2.035) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "bccb9214-db46-4ec8-a937-b8556bb6ca95") + ) + (fp_line + (start 2.891 -2.004) + (end 2.891 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c133656a-a5c6-4592-b944-d371fbf2b059") + ) + (fp_line + (start 2.891 1.04) + (end 2.891 2.004) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4487f57f-63a2-4edb-8227-e88abc7fcdef") + ) + (fp_line + (start 2.931 -1.971) + (end 2.931 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4aec8b00-a508-4b18-b269-9e3ecca4016c") + ) + (fp_line + (start 2.931 1.04) + (end 2.931 1.971) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b9526174-ac55-4342-a2a1-f7c445236e60") + ) + (fp_line + (start 2.971 -1.937) + (end 2.971 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cb1bcd06-0985-4025-99b3-bdcf7f4b3e70") + ) + (fp_line + (start 2.971 1.04) + (end 2.971 1.937) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8292bce4-8614-456d-8c8e-e9f0543ce1f6") + ) + (fp_line + (start 3.011 -1.901) + (end 3.011 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "bc02ba58-61ec-4aca-a5f2-34cc95be0291") + ) + (fp_line + (start 3.011 1.04) + (end 3.011 1.901) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "156cccc7-aea0-4693-8fa2-9563b7c17898") + ) + (fp_line + (start 3.051 -1.864) + (end 3.051 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0d12d5f7-4745-4c2a-9987-6d0ab556081b") + ) + (fp_line + (start 3.051 1.04) + (end 3.051 1.864) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "10a27cf2-6533-411b-96c4-ec76b3ef6ea4") + ) + (fp_line + (start 3.091 -1.826) + (end 3.091 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c30be4d0-97b6-45d1-9132-5d6680a7612a") + ) + (fp_line + (start 3.091 1.04) + (end 3.091 1.826) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6e87d02f-5798-4824-85a1-3cb7261bb23b") + ) + (fp_line + (start 3.131 -1.785) + (end 3.131 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "da24db6e-dc2c-449f-b125-884436324c7e") + ) + (fp_line + (start 3.131 1.04) + (end 3.131 1.785) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "dbe6f562-9c67-4ef3-a77a-713c6e3ece96") + ) + (fp_line + (start 3.171 -1.743) + (end 3.171 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a7135ea7-551f-4065-bcd6-c8b58963e5ec") + ) + (fp_line + (start 3.171 1.04) + (end 3.171 1.743) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "521c2a01-f65a-43a4-bd70-d4ed815501d0") + ) + (fp_line + (start 3.211 -1.699) + (end 3.211 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4471ef90-1c23-486f-97e9-8244126642a7") + ) + (fp_line + (start 3.211 1.04) + (end 3.211 1.699) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d9494f69-50a1-4209-b818-35ea77d781dd") + ) + (fp_line + (start 3.251 -1.653) + (end 3.251 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f735b45e-431c-4861-8bed-6493a859e09d") + ) + (fp_line + (start 3.251 1.04) + (end 3.251 1.653) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3ca2530a-5325-46b5-b3a7-5c431be402c8") + ) + (fp_line + (start 3.291 -1.605) + (end 3.291 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "291e3fdb-527d-4462-9cdd-576dccab39a3") + ) + (fp_line + (start 3.291 1.04) + (end 3.291 1.605) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9c55e4ea-4eae-4c77-b502-1955a5a00931") + ) + (fp_line + (start 3.331 -1.554) + (end 3.331 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "23082b7f-7338-403e-b78d-e36a1d19cda1") + ) + (fp_line + (start 3.331 1.04) + (end 3.331 1.554) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9cf35c03-af15-422d-a44f-0294f852dc6d") + ) + (fp_line + (start 3.371 -1.5) + (end 3.371 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1cf469c6-e415-48ec-9ccb-2d315d5be90f") + ) + (fp_line + (start 3.371 1.04) + (end 3.371 1.5) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "eae0d153-a9e5-41ff-8605-afe0c3c5e838") + ) + (fp_line + (start 3.411 -1.443) + (end 3.411 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "bb28135b-227a-477c-883e-63dd90fb2783") + ) + (fp_line + (start 3.411 1.04) + (end 3.411 1.443) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "49e1d72b-3ec6-4631-aaeb-354150e65551") + ) + (fp_line + (start 3.451 -1.383) + (end 3.451 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "89e5e20f-72e6-45ed-b998-854fa9498ad3") + ) + (fp_line + (start 3.451 1.04) + (end 3.451 1.383) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4d420ca9-c90d-43ee-b718-5ec555ac720f") + ) + (fp_line + (start 3.491 -1.319) + (end 3.491 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6064ed1f-043e-4c8f-b8e4-69ddcc01303c") + ) + (fp_line + (start 3.491 1.04) + (end 3.491 1.319) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1087c381-a283-42b7-8845-09158f8f8cf3") + ) + (fp_line + (start 3.531 -1.251) + (end 3.531 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "005d55e2-a6c8-4a88-94a3-1922464837bb") + ) + (fp_line + (start 3.531 1.04) + (end 3.531 1.251) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "125f3e61-4fd4-4f72-b524-33920b1e94eb") + ) + (fp_line + (start 3.571 -1.178) + (end 3.571 1.178) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ac059106-13bf-46d5-ad10-93773f463c8b") + ) + (fp_line + (start 3.611 -1.098) + (end 3.611 1.098) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "bacdee23-b81c-44f1-824f-923cccb0e626") + ) + (fp_line + (start 3.651 -1.011) + (end 3.651 1.011) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ee21f86a-aaab-4139-9dd4-9a487b59de16") + ) + (fp_line + (start 3.691 -0.915) + (end 3.691 0.915) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6a3ea3a9-6d13-4527-9469-3e805c99994c") + ) + (fp_line + (start 3.731 -0.805) + (end 3.731 0.805) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "463e63f2-1816-41b4-b227-3859415f8436") + ) + (fp_line + (start 3.771 -0.677) + (end 3.771 0.677) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c2d49515-6916-4ee4-9110-a4b492f83781") + ) + (fp_line + (start 3.811 -0.518) + (end 3.811 0.518) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "40e6bbe4-3e38-4c14-8cf9-df8ab770308d") + ) + (fp_line + (start 3.851 -0.284) + (end 3.851 0.284) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "144c5ba4-0a59-48cb-b10b-9e7be7975b8f") + ) + (fp_circle + (center 1.25 0) + (end 3.87 0) + (stroke + (width 0.12) + (type solid) + ) + (fill none) + (layer "F.SilkS") + (uuid "4d1c3f6c-c8ea-4051-967c-695a641ae7d9") + ) + (fp_circle + (center 1.25 0) + (end 4 0) + (stroke + (width 0.05) + (type solid) + ) + (fill none) + (layer "F.CrtYd") + (uuid "e1de8cf0-94a1-4298-98ae-c27233172699") + ) + (fp_line + (start -0.883605 -1.0875) + (end -0.383605 -1.0875) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "07eafe7c-a327-4ab7-9247-77e27c84223a") + ) + (fp_line + (start -0.633605 -1.3375) + (end -0.633605 -0.8375) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3b3ae7bc-1ca8-429a-92e3-7151600b3668") + ) + (fp_circle + (center 1.25 0) + (end 3.75 0) + (stroke + (width 0.1) + (type solid) + ) + (fill none) + (layer "F.Fab") + (uuid "978f5ff0-75f1-4057-b6c2-d356fc96ca28") + ) + (fp_text user "${REFERENCE}" + (at 1.25 0 0) + (layer "F.Fab") + (uuid "2e8e3b79-72bd-4ba7-86ec-925628bf52db") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole rect + (at 0 0) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 1 "+5V") + (pintype "passive") + (uuid "3e02d21d-b0b9-41bb-97ad-d4036d5c8dc9") + ) + (pad "2" thru_hole circle + (at 2.5 0) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 2 "GND") + (pintype "passive") + (uuid "46602a92-614e-44c8-906e-6542c3cbd59a") + ) + (model "${KICAD8_3DMODEL_DIR}/Capacitor_THT.3dshapes/CP_Radial_D5.0mm_P2.50mm.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "MountingHole:MountingHole_3.2mm_M3" + (layer "F.Cu") + (uuid "1b6f01d5-203e-4034-802d-6b962041e945") + (at 128.15 106.44) + (descr "Mounting Hole 3.2mm, no annular, M3") + (tags "mounting hole 3.2mm no annular m3") + (property "Reference" "H4" + (at 0 -4.2 0) + (layer "F.SilkS") + (uuid "806745bb-9072-4cf4-8a35-3bf05b3bd37a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MountingHole" + (at 0 4.2 0) + (layer "F.Fab") + (hide yes) + (uuid "2c16ec3e-54a7-4497-be00-3137f9572a98") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "7237d972-49a3-41ab-82d0-c9cf870b7612") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "41a33c0f-e036-4d11-8ebe-183947d7cf68") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "9e5087b0-1c1e-4044-afa1-73e779094085") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property ki_fp_filters "MountingHole*") + (path "/56b60a67-b6f6-4e37-8620-6ffd4e19340d") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 3.2 0) + (stroke + (width 0.15) + (type solid) + ) + (fill none) + (layer "Cmts.User") + (uuid "8db8b9a1-3a25-402b-b0c5-71f22e5d27da") + ) + (fp_circle + (center 0 0) + (end 3.45 0) + (stroke + (width 0.05) + (type solid) + ) + (fill none) + (layer "F.CrtYd") + (uuid "7050664e-a222-4ba6-8d19-fbeeea68e9fd") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "505e73c6-d7a9-432c-b2a8-145a3fd22756") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "" np_thru_hole circle + (at 0 0) + (size 3.2 3.2) + (drill 3.2) + (layers "*.Cu" "*.Mask") + (uuid "a62de4a0-3a8c-4562-b850-1d69648d73f2") + ) + ) + (footprint "MountingHole:MountingHole_3.2mm_M3" + (layer "F.Cu") + (uuid "61348e5d-33e0-4851-899b-5ea3027bb792") + (at 128.14 48.45) + (descr "Mounting Hole 3.2mm, no annular, M3") + (tags "mounting hole 3.2mm no annular m3") + (property "Reference" "H2" + (at 0 -4.2 0) + (layer "F.SilkS") + (uuid "30de89db-8ccc-4439-9938-3a1a1d327393") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MountingHole" + (at 0 4.2 0) + (layer "F.Fab") + (uuid "a71a769a-0c96-42dd-a2d3-8a8a45be6043") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "6912009f-fe9d-4c3f-a8eb-2aeccf098f4c") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "77a871ce-55d5-4fcf-9c9f-dd4fbe0117a7") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "fd90030a-19b5-4719-9fd4-70fd67c74ce7") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property ki_fp_filters "MountingHole*") + (path "/de7b62de-164c-449e-af07-be99e3807b42") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 3.2 0) + (stroke + (width 0.15) + (type solid) + ) + (fill none) + (layer "Cmts.User") + (uuid "dd05899b-3910-4323-8b18-182fff20920d") + ) + (fp_circle + (center 0 0) + (end 3.45 0) + (stroke + (width 0.05) + (type solid) + ) + (fill none) + (layer "F.CrtYd") + (uuid "a83609b3-9330-4fb4-87d4-b79d24e4b54f") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "2d74ac8c-f7d1-4c6b-97aa-a325539208a3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "" np_thru_hole circle + (at 0 0) + (size 3.2 3.2) + (drill 3.2) + (layers "*.Cu" "*.Mask") + (uuid "1089ddb9-ac16-4faf-86d6-efe3b1a290fd") + ) + ) + (footprint "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" + (layer "F.Cu") + (uuid "ffeeedcf-9f08-4b4f-93c8-6220a3d3b141") + (at 134.97 95.58) + (descr "CP, Radial series, Radial, pin pitch=2.50mm, , diameter=5mm, Electrolytic Capacitor") + (tags "CP Radial series Radial pin pitch 2.50mm diameter 5mm Electrolytic Capacitor") + (property "Reference" "C2" + (at 1.25 -3.75 0) + (layer "F.SilkS") + (uuid "82d0096f-5698-45a1-b769-530741e6f5c1") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "2.2u" + (at 1.25 3.75 0) + (layer "F.Fab") + (uuid "01e5e267-fc97-48cf-b609-696c01d49c21") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "d6a32e0d-d2b6-407a-be5c-54ad4d2eafdd") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "d642d00a-0a8d-4f07-9a64-a62ce6277c73") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Unpolarized capacitor" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "931f9599-369a-4f04-9023-30ec73253949") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property ki_fp_filters "C_*") + (path "/1debcd2c-4001-4ed6-99eb-e9dad0b2ecd3") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr through_hole) + (fp_line + (start -1.554775 -1.475) + (end -1.054775 -1.475) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "23d788bb-31ef-41aa-8982-5d7b5480426d") + ) + (fp_line + (start -1.304775 -1.725) + (end -1.304775 -1.225) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fb302570-1f2b-40d2-9723-954a70a67e82") + ) + (fp_line + (start 1.25 -2.58) + (end 1.25 2.58) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "763cc5a0-1520-4c35-a53c-6898afe521fc") + ) + (fp_line + (start 1.29 -2.58) + (end 1.29 2.58) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c2dbebf0-3c83-4284-95d8-d93054945ce7") + ) + (fp_line + (start 1.33 -2.579) + (end 1.33 2.579) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b1623703-39d4-4f2f-8f75-8ef034fed88e") + ) + (fp_line + (start 1.37 -2.578) + (end 1.37 2.578) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d0bd827b-b47c-4ba1-980f-aff6800a4b46") + ) + (fp_line + (start 1.41 -2.576) + (end 1.41 2.576) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e25f6f21-6451-451b-a644-eb88087f3e02") + ) + (fp_line + (start 1.45 -2.573) + (end 1.45 2.573) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5c89b789-9301-42ed-8419-fdf381308958") + ) + (fp_line + (start 1.49 -2.569) + (end 1.49 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b2c62df1-8961-4a65-a283-925c095c282d") + ) + (fp_line + (start 1.49 1.04) + (end 1.49 2.569) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0a08438f-7471-471c-a671-edc46bffa7d2") + ) + (fp_line + (start 1.53 -2.565) + (end 1.53 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "089e08be-82b9-487b-801f-a2727408e3e5") + ) + (fp_line + (start 1.53 1.04) + (end 1.53 2.565) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2a816e40-0ba5-4def-bdb9-7a6d0acfd462") + ) + (fp_line + (start 1.57 -2.561) + (end 1.57 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "77342647-08f1-460e-a4bd-8c3af1da245a") + ) + (fp_line + (start 1.57 1.04) + (end 1.57 2.561) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f6f7497d-a392-45fe-ac5c-71403c501880") + ) + (fp_line + (start 1.61 -2.556) + (end 1.61 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9aa3bbc7-f5f4-48d9-81be-a85af3003002") + ) + (fp_line + (start 1.61 1.04) + (end 1.61 2.556) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "777df351-cc67-4083-a80f-f36f76e735a9") + ) + (fp_line + (start 1.65 -2.55) + (end 1.65 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7a8fe96e-06ff-450a-a8af-4ff03f17edc3") + ) + (fp_line + (start 1.65 1.04) + (end 1.65 2.55) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "008ea342-c27a-4bda-97b7-08090ef71c67") + ) + (fp_line + (start 1.69 -2.543) + (end 1.69 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "48846b6b-986d-4753-b03b-244ea8fe45fb") + ) + (fp_line + (start 1.69 1.04) + (end 1.69 2.543) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2fa7e316-709f-4ba2-b0ab-643ac4255f88") + ) + (fp_line + (start 1.73 -2.536) + (end 1.73 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9b31aefe-b764-44fe-82a6-583fd9e8276c") + ) + (fp_line + (start 1.73 1.04) + (end 1.73 2.536) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "efbdb4d1-1bc6-4a82-b060-61ab17ccfdd7") + ) + (fp_line + (start 1.77 -2.528) + (end 1.77 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "474b19e1-9c45-467f-9f62-812e7c64ee7b") + ) + (fp_line + (start 1.77 1.04) + (end 1.77 2.528) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "91f6d4f0-8d24-4fad-83be-2681ced9a392") + ) + (fp_line + (start 1.81 -2.52) + (end 1.81 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0f7b5017-8b35-4390-88af-a0587def0668") + ) + (fp_line + (start 1.81 1.04) + (end 1.81 2.52) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "70df9c4c-66a0-4722-b2a9-aee7f0281593") + ) + (fp_line + (start 1.85 -2.511) + (end 1.85 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "25f59fb6-c8da-43f0-b0fb-5af53df6ed29") + ) + (fp_line + (start 1.85 1.04) + (end 1.85 2.511) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "96f91061-8753-47d3-aad3-609f2d6846ac") + ) + (fp_line + (start 1.89 -2.501) + (end 1.89 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cf950807-2b47-4119-a258-86faecf89d9a") + ) + (fp_line + (start 1.89 1.04) + (end 1.89 2.501) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0fd2833a-0246-4522-9b76-0622ab8dc3ae") + ) + (fp_line + (start 1.93 -2.491) + (end 1.93 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ebd7ac30-cd10-409c-beff-eb456232f687") + ) + (fp_line + (start 1.93 1.04) + (end 1.93 2.491) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d50cb3e5-5516-4b89-ac0d-b213802f5263") + ) + (fp_line + (start 1.971 -2.48) + (end 1.971 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "60442af1-c8bd-4ca0-9cec-6fb4df5e080e") + ) + (fp_line + (start 1.971 1.04) + (end 1.971 2.48) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d2be1ad3-073a-466d-b75e-efe4252fd302") + ) + (fp_line + (start 2.011 -2.468) + (end 2.011 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "07b2b35b-71ee-48a7-83b5-d222f0eae34a") + ) + (fp_line + (start 2.011 1.04) + (end 2.011 2.468) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2850ae52-8e54-4b66-beab-ebbcbb770b1d") + ) + (fp_line + (start 2.051 -2.455) + (end 2.051 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e899b530-f1c9-4dab-a7c2-efcea8b7837f") + ) + (fp_line + (start 2.051 1.04) + (end 2.051 2.455) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d0556b0e-0d4e-481d-a0fc-529247b28593") + ) + (fp_line + (start 2.091 -2.442) + (end 2.091 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2f309c67-14a0-43c5-afba-b1f4b6292ed0") + ) + (fp_line + (start 2.091 1.04) + (end 2.091 2.442) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "561a784f-b7dc-45e6-b9da-9e03f845a48c") + ) + (fp_line + (start 2.131 -2.428) + (end 2.131 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0ee4dc62-2bf1-4267-976d-5235577a2c0c") + ) + (fp_line + (start 2.131 1.04) + (end 2.131 2.428) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ab77055c-0fb1-448f-b8c6-1fa48fa4c1e2") + ) + (fp_line + (start 2.171 -2.414) + (end 2.171 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d56ea5f4-34c9-4c68-9b67-26a74b602445") + ) + (fp_line + (start 2.171 1.04) + (end 2.171 2.414) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "61cd75dc-851b-4411-b75f-34fa3a919ef1") + ) + (fp_line + (start 2.211 -2.398) + (end 2.211 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "44fe3c0e-ed4a-4716-ba3a-dd3c8065adc3") + ) + (fp_line + (start 2.211 1.04) + (end 2.211 2.398) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "931203e0-9ffc-4665-b318-5a909f4b42a1") + ) + (fp_line + (start 2.251 -2.382) + (end 2.251 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4d025153-86eb-4979-9ccf-0fb70c7ede1a") + ) + (fp_line + (start 2.251 1.04) + (end 2.251 2.382) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "b167b28b-91b7-4b61-84ee-2cf8196addc1") + ) + (fp_line + (start 2.291 -2.365) + (end 2.291 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f4924814-6ace-4972-9a98-98acb24be62c") + ) + (fp_line + (start 2.291 1.04) + (end 2.291 2.365) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "767e3a5b-3771-4ecb-8bdb-43c615fc1d75") + ) + (fp_line + (start 2.331 -2.348) + (end 2.331 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e312c241-e28f-473f-b60b-2e8291097bb6") + ) + (fp_line + (start 2.331 1.04) + (end 2.331 2.348) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "484b93c7-107a-434e-a296-4ca10752eaa1") + ) + (fp_line + (start 2.371 -2.329) + (end 2.371 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5171c886-1a02-4375-9c6f-2d86a03a6792") + ) + (fp_line + (start 2.371 1.04) + (end 2.371 2.329) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "72139d41-753f-40d4-911b-c0685c765842") + ) + (fp_line + (start 2.411 -2.31) + (end 2.411 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "07325b7e-197d-45c4-bf69-536a8f6b13ac") + ) + (fp_line + (start 2.411 1.04) + (end 2.411 2.31) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8ca27c3a-6a08-4616-b923-355b3b60ef55") + ) + (fp_line + (start 2.451 -2.29) + (end 2.451 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c9f05a30-51fb-473e-b258-872b6d1c77e5") + ) + (fp_line + (start 2.451 1.04) + (end 2.451 2.29) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "18713915-e543-4b08-986a-f4d0b5fbd612") + ) + (fp_line + (start 2.491 -2.268) + (end 2.491 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "300edea4-c399-43e7-886f-4d26cd811888") + ) + (fp_line + (start 2.491 1.04) + (end 2.491 2.268) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "734a22d4-5179-4f29-8369-92f85194e27b") + ) + (fp_line + (start 2.531 -2.247) + (end 2.531 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f348c59e-1607-4cfb-85ac-dbc5ce482f7f") + ) + (fp_line + (start 2.531 1.04) + (end 2.531 2.247) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9625e5ec-354d-4e2e-a5f9-ab3e6cf985d1") + ) + (fp_line + (start 2.571 -2.224) + (end 2.571 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e52cf407-25c5-41be-9579-60ed9e3e27f5") + ) + (fp_line + (start 2.571 1.04) + (end 2.571 2.224) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "712d5516-2986-409f-8c11-765bbe4d60bd") + ) + (fp_line + (start 2.611 -2.2) + (end 2.611 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "500a42f0-4e6b-4b70-8f39-8199a334ea82") + ) + (fp_line + (start 2.611 1.04) + (end 2.611 2.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "f5dfe211-546c-4c48-a980-1ef42040a1f9") + ) + (fp_line + (start 2.651 -2.175) + (end 2.651 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fc3d35cd-13f7-4c14-be1a-eaf25a0872d0") + ) + (fp_line + (start 2.651 1.04) + (end 2.651 2.175) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8caad1c5-322d-44d5-9659-7ded0ef5ede6") + ) + (fp_line + (start 2.691 -2.149) + (end 2.691 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0ac0e329-b50a-4829-ae8d-c49f9538060d") + ) + (fp_line + (start 2.691 1.04) + (end 2.691 2.149) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "71a4c1ab-1b8d-4934-b316-955bc45707b1") + ) + (fp_line + (start 2.731 -2.122) + (end 2.731 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "12afc25d-1a1f-4513-97bf-5fe9b72b2763") + ) + (fp_line + (start 2.731 1.04) + (end 2.731 2.122) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3c5fa1ff-c21d-4a55-9ca1-563b17cc232f") + ) + (fp_line + (start 2.771 -2.095) + (end 2.771 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4345b3db-9e24-4efa-8e12-fc5cd2ac90f7") + ) + (fp_line + (start 2.771 1.04) + (end 2.771 2.095) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3dd09200-86c9-4d65-bd02-79b9fae31c41") + ) + (fp_line + (start 2.811 -2.065) + (end 2.811 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8d068057-4169-40a2-834a-711f5a15698a") + ) + (fp_line + (start 2.811 1.04) + (end 2.811 2.065) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "de28c29c-a983-402a-9a90-a01ac0e64089") + ) + (fp_line + (start 2.851 -2.035) + (end 2.851 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "87ff5710-80a0-45c3-8513-fc2bc434b564") + ) + (fp_line + (start 2.851 1.04) + (end 2.851 2.035) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2e0b430e-936e-4202-ad56-116f7ea4c0c1") + ) + (fp_line + (start 2.891 -2.004) + (end 2.891 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "715f00ed-9c54-45cb-9c7a-48b755b6f711") + ) + (fp_line + (start 2.891 1.04) + (end 2.891 2.004) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "51af9d7a-92a7-4255-9aa8-79d9d2832299") + ) + (fp_line + (start 2.931 -1.971) + (end 2.931 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "9fa7374a-8680-4055-9275-01c4bf930aa1") + ) + (fp_line + (start 2.931 1.04) + (end 2.931 1.971) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "00e0e6f4-c9ca-4682-b329-fbdb8c237e54") + ) + (fp_line + (start 2.971 -1.937) + (end 2.971 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "bbc288f4-4bf7-4853-8218-8977cf51ed29") + ) + (fp_line + (start 2.971 1.04) + (end 2.971 1.937) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a2915c9b-b111-4b15-977d-88164d31aa4c") + ) + (fp_line + (start 3.011 -1.901) + (end 3.011 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8aa10ea0-e8d5-4bfe-a184-dd046137e0bc") + ) + (fp_line + (start 3.011 1.04) + (end 3.011 1.901) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2166da68-116f-452a-83f4-a8eafbef2f9b") + ) + (fp_line + (start 3.051 -1.864) + (end 3.051 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e595054f-e4a4-46d0-bcde-9b60b4eb502a") + ) + (fp_line + (start 3.051 1.04) + (end 3.051 1.864) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "11672327-a740-4b6e-a033-b1c7d11775c7") + ) + (fp_line + (start 3.091 -1.826) + (end 3.091 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1b533d53-dce4-4799-a8e5-f2799ee1b6ff") + ) + (fp_line + (start 3.091 1.04) + (end 3.091 1.826) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "955da046-7a17-4752-8b95-0c6aca8f02f1") + ) + (fp_line + (start 3.131 -1.785) + (end 3.131 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "707671b9-957a-4b19-a773-547e3cadc657") + ) + (fp_line + (start 3.131 1.04) + (end 3.131 1.785) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "58f25006-890e-4295-8b15-faefd6e10472") + ) + (fp_line + (start 3.171 -1.743) + (end 3.171 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "09dcdf9e-76a1-428b-9f0d-a7a06f18f9ef") + ) + (fp_line + (start 3.171 1.04) + (end 3.171 1.743) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8f8e2462-3f62-4502-bf5b-ad8e773bf63f") + ) + (fp_line + (start 3.211 -1.699) + (end 3.211 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "667062fc-36ed-4e71-b24f-e98f9062eefb") + ) + (fp_line + (start 3.211 1.04) + (end 3.211 1.699) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "775af508-9f6a-4389-850a-0e402b4abf03") + ) + (fp_line + (start 3.251 -1.653) + (end 3.251 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5f1808bd-d7f6-4bf3-a257-fd712f14e8a0") + ) + (fp_line + (start 3.251 1.04) + (end 3.251 1.653) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "7724e0f6-c5cb-401b-bd04-a92a8889f9a4") + ) + (fp_line + (start 3.291 -1.605) + (end 3.291 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d9f5cf25-94a2-4fce-8319-6e5b327fcd5e") + ) + (fp_line + (start 3.291 1.04) + (end 3.291 1.605) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "70bbfcca-0d8a-431f-abcf-3f41b3007f55") + ) + (fp_line + (start 3.331 -1.554) + (end 3.331 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "37cd7dc1-3bbc-4a80-a9d8-6ef6e2495494") + ) + (fp_line + (start 3.331 1.04) + (end 3.331 1.554) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "a7126d8e-ed30-49f6-9a13-26c63ec6c995") + ) + (fp_line + (start 3.371 -1.5) + (end 3.371 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8508aaf9-601c-4cc6-bba6-0bf1c2d96fd3") + ) + (fp_line + (start 3.371 1.04) + (end 3.371 1.5) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "01869b05-00e2-4da3-8bd8-4fb54feda0a8") + ) + (fp_line + (start 3.411 -1.443) + (end 3.411 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "3bfcf4b4-3530-4c54-aa86-66ca51840bb4") + ) + (fp_line + (start 3.411 1.04) + (end 3.411 1.443) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "01b76ccc-e0ec-4120-97a1-b887ec1f4fe7") + ) + (fp_line + (start 3.451 -1.383) + (end 3.451 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4da786f8-c620-4928-aca6-aa33b3a95174") + ) + (fp_line + (start 3.451 1.04) + (end 3.451 1.383) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "fd6f9d58-0ede-43c7-9a90-659906d6ba6c") + ) + (fp_line + (start 3.491 -1.319) + (end 3.491 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "75594720-54f2-40a9-84eb-54f99ea72ec7") + ) + (fp_line + (start 3.491 1.04) + (end 3.491 1.319) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "334057da-fd80-4a94-b340-620581d89cf4") + ) + (fp_line + (start 3.531 -1.251) + (end 3.531 -1.04) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8a573016-312f-4337-8017-90a6f7327a79") + ) + (fp_line + (start 3.531 1.04) + (end 3.531 1.251) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "1a959e8c-ffb7-4b36-ae19-d032e842f8c6") + ) + (fp_line + (start 3.571 -1.178) + (end 3.571 1.178) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "c43ab598-838f-4aea-b791-df519a1ee8d4") + ) + (fp_line + (start 3.611 -1.098) + (end 3.611 1.098) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ef114e72-c0cb-46b4-b08b-a3b14c897ed1") + ) + (fp_line + (start 3.651 -1.011) + (end 3.651 1.011) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "8bb6ecca-ef22-4456-b9f9-ec18da21c00d") + ) + (fp_line + (start 3.691 -0.915) + (end 3.691 0.915) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e7877306-32a8-462f-bc46-59ed89b19bda") + ) + (fp_line + (start 3.731 -0.805) + (end 3.731 0.805) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "27b4854b-bcb4-42d0-892c-90f059cba127") + ) + (fp_line + (start 3.771 -0.677) + (end 3.771 0.677) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "605d9b2e-2171-48ff-b0f5-d38c74b6038d") + ) + (fp_line + (start 3.811 -0.518) + (end 3.811 0.518) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "5045216d-8619-43a0-80df-dd225edec983") + ) + (fp_line + (start 3.851 -0.284) + (end 3.851 0.284) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "6a4307fa-f2c2-40ab-ae2c-1fed650c93b7") + ) + (fp_circle + (center 1.25 0) + (end 3.87 0) + (stroke + (width 0.12) + (type solid) + ) + (fill none) + (layer "F.SilkS") + (uuid "aa5875ea-d4c2-4bb0-9e09-fd384cbc3f25") + ) + (fp_circle + (center 1.25 0) + (end 4 0) + (stroke + (width 0.05) + (type solid) + ) + (fill none) + (layer "F.CrtYd") + (uuid "607d2597-1493-42e8-9384-65d6b3e2e04f") + ) + (fp_line + (start -0.883605 -1.0875) + (end -0.383605 -1.0875) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "a77ac503-ec8e-45c5-8670-cbdfd69563e6") + ) + (fp_line + (start -0.633605 -1.3375) + (end -0.633605 -0.8375) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b32c8b03-7bed-4d2f-b98e-4faca7f22293") + ) + (fp_circle + (center 1.25 0) + (end 3.75 0) + (stroke + (width 0.1) + (type solid) + ) + (fill none) + (layer "F.Fab") + (uuid "166ce892-79fa-4c31-ac15-6e05a7aeb6ae") + ) + (fp_text user "${REFERENCE}" + (at 1.25 0 0) + (layer "F.Fab") + (uuid "95a86ca8-57d5-47ed-b340-09d4ed488b9a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole rect + (at 0 0) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 2 "GND") + (pintype "passive") + (uuid "47a749a4-7b04-4f3c-9993-759194eaece0") + ) + (pad "2" thru_hole circle + (at 2.5 0) + (size 1.6 1.6) + (drill 0.8) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 1 "+5V") + (pintype "passive") + (uuid "c0511394-2453-44ba-b27a-4c5d20b42eaa") + ) + (model "${KICAD8_3DMODEL_DIR}/Capacitor_THT.3dshapes/CP_Radial_D5.0mm_P2.50mm.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "Connector_BarrelJack:BarrelJack_Horizontal" + (layer "B.Cu") + (uuid "435eebcb-c275-4415-b3a3-121b7ea29892") + (at 138.01 76.66) + (descr "DC Barrel Jack") + (tags "Power Jack") + (property "Reference" "J1" + (at -8.45 -5.75 0) + (layer "B.SilkS") + (uuid "b542a15c-0857-4648-b67c-acf2405c1887") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "Jack-DC" + (at -6.2 5.5 0) + (layer "B.Fab") + (uuid "785143bd-5398-4b34-9666-a03cba10d0a0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Footprint" "Connector_BarrelJack:BarrelJack_Horizontal" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "f06cb9c3-1de6-422a-b2ab-5e4c0645ffe8") + (effects + (font + (size 1.27 1.27) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "6e4653f6-0344-4239-b477-96080d9c1d1a") + (effects + (font + (size 1.27 1.27) + ) + (justify mirror) + ) + ) + (property "Description" "DC Barrel Jack" + (at 0 0 180) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "c01bc736-6671-40b4-abaf-f4bb98df5496") + (effects + (font + (size 1.27 1.27) + ) + (justify mirror) + ) + ) + (property ki_fp_filters "BarrelJack*") + (path "/e07d5664-1123-4e43-a5be-f46dbb258563") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr through_hole) + (fp_line + (start -13.8 -4.6) + (end -5 -4.6) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "2dae7cbb-981a-487f-a7e6-d595fa62619d") + ) + (fp_line + (start -13.8 4.6) + (end -13.8 -4.6) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "e85309fa-d3cb-4300-93e4-0e35e4773410") + ) + (fp_line + (start -1 -4.6) + (end 0.9 -4.6) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "43088279-3ab9-4693-adde-5fb9fefdcc91") + ) + (fp_line + (start 0.9 -4.6) + (end 0.9 -1.9) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "24700acb-58f7-464b-92ce-e0bce1386e3f") + ) + (fp_line + (start 0.9 2) + (end 0.9 4.6) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "7dd09193-73ca-4039-a0fb-d6b812fe6d1f") + ) + (fp_line + (start 0.9 4.6) + (end -13.8 4.6) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "d46385f6-3104-4cba-ade4-790c7c91c6bb") + ) + (fp_line + (start 1.1 4.8) + (end 0.05 4.8) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "84ff7ea3-0bce-43b6-8039-ce8027c6b501") + ) + (fp_line + (start 1.1 4.8) + (end 1.1 3.75) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "53ebeabd-67de-43f9-bc56-075ea86faaa5") + ) + (fp_line + (start -14 -4.75) + (end -5 -4.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "fd34afb6-488b-4b8b-892e-e0aa694e89a9") + ) + (fp_line + (start -14 4.75) + (end -14 -4.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "cbe7095f-c3d4-4c0b-b8fa-cd58bd7dca58") + ) + (fp_line + (start -14 4.75) + (end 1 4.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "e9ed2aa3-9a1d-4721-aa47-14d089cf5c4a") + ) + (fp_line + (start -5 -6.75) + (end -1 -6.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "00f9a8a6-8c01-448f-b22a-f8fa7ed2c482") + ) + (fp_line + (start -5 -4.75) + (end -5 -6.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "b37cfd30-6405-40ad-8682-17f46186adb2") + ) + (fp_line + (start -1 -6.75) + (end -1 -4.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1a78e356-159d-4c53-bc54-9f8c1e12a133") + ) + (fp_line + (start -1 -4.75) + (end 1 -4.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "4194e96f-5377-45f6-a237-cd20d356e219") + ) + (fp_line + (start 1 -4.75) + (end 1 -2) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "0cfeafa4-f6c7-4c89-833d-b8697cb32b92") + ) + (fp_line + (start 1 -2) + (end 2 -2) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "17427c69-1082-4ee9-a25b-4a63275a286c") + ) + (fp_line + (start 1 2) + (end 1 4.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "5a9c4eb2-f52f-4cb9-bd8a-f9656814b294") + ) + (fp_line + (start 1 4.75) + (end 1 4.5) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "35c713ca-ac63-4a51-87be-4e86eab5b532") + ) + (fp_line + (start 2 -2) + (end 2 2) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "66dffeb7-0394-401c-8a28-b182a0d38b14") + ) + (fp_line + (start 2 2) + (end 1 2) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "82d689d8-d9f9-4617-afb4-1e2cd67685b0") + ) + (fp_line + (start -13.7 -4.5) + (end -13.7 4.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "06578d7e-86a8-4777-8056-2a3cf5a5c6f0") + ) + (fp_line + (start -13.7 4.5) + (end 0 4.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "4ec647ba-f396-43e1-8c9b-5d82c2a3353b") + ) + (fp_line + (start -10.2 -4.5) + (end -10.2 4.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "a6e737c9-a99c-4e30-85fd-6777e4642f9a") + ) + (fp_line + (start 0.8 -4.5) + (end -13.7 -4.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "213e40d9-589a-43ef-84a8-bc698b9e16da") + ) + (fp_line + (start 0.8 3.75) + (end -0.003213 4.505425) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "89c30631-fbac-4c3b-b7f4-2a28f7cfe209") + ) + (fp_line + (start 0.8 3.75) + (end 0.8 -4.5) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "ad7e19a6-db1d-4771-842e-9a417ea78e88") + ) + (pad "1" thru_hole rect + (at 0 0) + (size 3.5 3.5) + (drill oval 1 3) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 1 "+5V") + (pintype "passive") + (uuid "17e575be-db4e-4a85-bbf9-baef43bcc3f6") + ) + (pad "2" thru_hole roundrect + (at -6 0) + (size 3 3.5) + (drill oval 1 3) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (roundrect_rratio 0.25) + (net 2 "GND") + (pintype "passive") + (uuid "e45caf49-cdb8-48e3-8fa6-6b4fc0b2a014") + ) + (pad "3" thru_hole roundrect + (at -3 -4.7) + (size 3.5 3.5) + (drill oval 3 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (roundrect_rratio 0.25) + (uuid "c9dceb68-c59f-4db0-8a93-608ec3a39921") + ) + (model "${KICAD8_3DMODEL_DIR}/Connector_BarrelJack.3dshapes/BarrelJack_Horizontal.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "MyLibrary:ZH_3P_Side" + (layer "B.Cu") + (uuid "95abe7dd-a72e-4dd0-a841-81d864abf6a5") + (at 128 90 90) + (property "Reference" "J2" + (at 0 0.5 -90) + (unlocked yes) + (layer "B.SilkS") + (uuid "f62c9570-afb8-463d-9b96-3305600ad724") + (effects + (font + (size 1 1) + (thickness 0.1) + ) + (justify mirror) + ) + ) + (property "Value" "LED" + (at 0 -1 -90) + (unlocked yes) + (layer "B.Fab") + (uuid "da506a5b-2b40-414b-afc2-7eb955f2824a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Footprint" "MyLibrary:ZH_3P_Side" + (at 0 0 -90) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "26b932c7-2958-4203-953d-cf86f2114a4f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 -90) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "26486f93-e1ab-4136-a817-6ebf63c7ba69") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Generic connector, single row, 01x03, script generated" + (at 0 0 -90) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "947d98f6-5e9c-4e7a-83e0-20a69fab3401") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property ki_fp_filters "Connector*:*_1x??_*") + (path "/54446d53-569e-4d86-88cb-922b5e44eef7") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr through_hole) + (fp_line + (start 3 1.6) + (end -3 1.6) + (stroke + (width 0.1) + (type default) + ) + (layer "B.SilkS") + (uuid "37a8a8dd-16b6-4e08-b69d-940a5b0b8fcb") + ) + (fp_line + (start -1.5 1.6) + (end -3 1.6) + (stroke + (width 0.1) + (type default) + ) + (layer "B.SilkS") + (uuid "5c311d3a-916b-4580-b387-65ca75d98193") + ) + (fp_rect + (start 3 -3) + (end -3 3) + (stroke + (width 0.1) + (type default) + ) + (fill none) + (layer "B.SilkS") + (uuid "40546eb7-45bb-4b11-a4ab-de6704b514b7") + ) + (fp_rect + (start 3.2 -3.3) + (end -3.2 3.2) + (stroke + (width 0.1) + (type default) + ) + (fill none) + (layer "B.CrtYd") + (uuid "fe428028-18b6-4683-ab2b-cf5ecee954e0") + ) + (fp_text user "${REFERENCE}" + (at 0 -2.5 -90) + (unlocked yes) + (layer "B.Fab") + (uuid "825b84b7-1553-4867-9800-0fe4a0736bbd") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (pad "1" thru_hole circle + (at -1.5 1.6 90) + (size 1.2 1.2) + (drill 0.6) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 4 "LED_Failure") + (pinfunction "Pin_1") + (pintype "passive") + (uuid "56b1d63e-1319-4897-b40c-358851bb76ec") + ) + (pad "2" thru_hole circle + (at 0 1.6 90) + (size 1.2 1.2) + (drill 0.6) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 3 "LED_Success") + (pinfunction "Pin_2") + (pintype "passive") + (uuid "0a5fc622-a203-4ba6-ad07-a013e90d541c") + ) + (pad "3" thru_hole circle + (at 1.5 1.6 90) + (size 1.2 1.2) + (drill 0.6) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 2 "GND") + (pinfunction "Pin_3") + (pintype "passive") + (uuid "4c0e4d0b-bf7c-41ca-91d1-7f03d51ae54e") + ) + ) + (footprint "Connector_PinSocket_2.54mm:PinSocket_2x20_P2.54mm_Vertical" + (layer "B.Cu") + (uuid "96edb442-11be-4d33-9add-271b40297b0c") + (at 149.86 53.34 180) + (descr "Through hole straight socket strip, 2x20, 2.54mm pitch, double cols (from Kicad 4.0.7), script generated") + (tags "Through hole socket strip THT 2x20 2.54mm double row") + (property "Reference" "U1" + (at -1.27 2.77 180) + (layer "B.SilkS") + (uuid "198f907d-ba6c-471c-9dfe-7140ca75daee") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "~" + (at -1.27 -51.03 180) + (layer "B.Fab") + (uuid "89bac327-e877-4c93-b9c0-9b69af9e44bf") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_2x20_P2.54mm_Vertical" + (at 0 0 0) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "6003b9dd-77a9-469e-ab24-51d6f1f48e7b") + (effects + (font + (size 1.27 1.27) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "60f3bc0a-7792-4954-b591-018c1bbe49b8") + (effects + (font + (size 1.27 1.27) + ) + (justify mirror) + ) + ) + (property "Description" "" + (at 0 0 0) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "d3fc6fa2-1d69-4037-a8f0-82ed4ede3910") + (effects + (font + (size 1.27 1.27) + ) + (justify mirror) + ) + ) + (path "/d4d379a9-5e9e-4139-853a-d5e9f52c0389") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr through_hole) + (fp_line + (start 1.33 1.33) + (end 0 1.33) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "75c9e67c-4835-492d-98a0-aee8462612c1") + ) + (fp_line + (start 1.33 0) + (end 1.33 1.33) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "50f5e5c5-a000-42cf-b551-b1fcd507f6a8") + ) + (fp_line + (start 1.33 -1.27) + (end -1.27 -1.27) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "6f6e4a13-0309-408d-b816-f8677a31024e") + ) + (fp_line + (start 1.33 -49.59) + (end 1.33 -1.27) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "3c0208d4-c934-430a-8d71-00a8fc9504bc") + ) + (fp_line + (start 1.33 -49.59) + (end -3.87 -49.59) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "9ce62f00-1c5e-4f2a-9de0-b5028878a893") + ) + (fp_line + (start -1.27 1.33) + (end -3.87 1.33) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "881e68c6-2032-4a65-95e8-b62dc8e88fc7") + ) + (fp_line + (start -1.27 -1.27) + (end -1.27 1.33) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "d2bb63f8-7a53-4d9e-bd80-22a4cab61c2e") + ) + (fp_line + (start -3.87 -49.59) + (end -3.87 1.33) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "9616a06e-a56d-49b2-a793-f21d9a2eaf52") + ) + (fp_line + (start 1.76 1.8) + (end -4.34 1.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "9554a3f3-b497-41d5-8608-fc1a60d933a3") + ) + (fp_line + (start 1.76 -50) + (end 1.76 1.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "350e1da2-58e1-4562-aac8-11825e052df5") + ) + (fp_line + (start -4.34 1.8) + (end -4.34 -50) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "87b5868c-851c-4d00-a88c-f4133aea5c14") + ) + (fp_line + (start -4.34 -50) + (end 1.76 -50) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "1a994ae8-b1e8-43f9-afe4-23183058861c") + ) + (fp_line + (start 1.27 0.27) + (end 0.27 1.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "d5bea8c2-7c0b-4144-86cb-04b8a331f3b8") + ) + (fp_line + (start 1.27 -49.53) + (end 1.27 0.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "705ae2d0-3c4e-4a94-b220-1943d9194066") + ) + (fp_line + (start 0.27 1.27) + (end -3.81 1.27) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "131be64f-ce90-49d7-b2d7-48d90d31f0d9") + ) + (fp_line + (start -3.81 1.27) + (end -3.81 -49.53) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "e6b4cc07-cc67-4b11-9887-0f01f2ddc13c") + ) + (fp_line + (start -3.81 -49.53) + (end 1.27 -49.53) + (stroke + (width 0.1) + (type solid) + ) + (layer "B.Fab") + (uuid "ff69aa22-7d5c-49a8-9a01-e8744d4f069d") + ) + (fp_text user "${REFERENCE}" + (at -1.27 -24.13 -90) + (layer "B.Fab") + (uuid "524b6e91-23bc-4192-b704-02ef23bb167b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (pad "1" thru_hole rect + (at 0 0 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 10 "unconnected-(U1-3.3V-Pad1)") + (pinfunction "3.3V") + (pintype "input") + (uuid "f43dc88c-61b5-480d-9279-bf821458f6d4") + ) + (pad "2" thru_hole oval + (at -2.54 0 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 1 "+5V") + (pinfunction "5V") + (pintype "input") + (uuid "81c13d96-8f39-4e22-aa12-f95359a91ecc") + ) + (pad "3" thru_hole oval + (at 0 -2.54 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 35 "unconnected-(U1-GPIO2-Pad3)") + (pinfunction "GPIO2") + (pintype "input") + (uuid "9809c2c2-1c77-45db-a15b-f44dad09fcb2") + ) + (pad "4" thru_hole oval + (at -2.54 -2.54 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 26 "unconnected-(U1-5V-Pad4)") + (pinfunction "5V") + (pintype "input") + (uuid "935741fe-8148-40c0-9149-39981d06f0ff") + ) + (pad "5" thru_hole oval + (at 0 -5.08 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 16 "unconnected-(U1-GPIO3-Pad5)") + (pinfunction "GPIO3") + (pintype "input") + (uuid "00c7087f-799b-4ee1-94c7-df4615389258") + ) + (pad "6" thru_hole oval + (at -2.54 -5.08 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 2 "GND") + (pinfunction "GND") + (pintype "input") + (uuid "4227d33b-7d37-443d-82a5-2a3ac4e1106d") + ) + (pad "7" thru_hole oval + (at 0 -7.62 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 6 "unconnected-(U1-GPIO4-Pad7)") + (pinfunction "GPIO4") + (pintype "input") + (uuid "694ea517-c610-4f06-afc8-360f6ec8bce4") + ) + (pad "8" thru_hole oval + (at -2.54 -7.62 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 23 "unconnected-(U1-GPIO14-Pad8)") + (pinfunction "GPIO14") + (pintype "input") + (uuid "2b2639d8-97e3-479e-ad6d-a816f246663e") + ) + (pad "9" thru_hole oval + (at 0 -10.16 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 2 "GND") + (pinfunction "GND") + (pintype "input") + (uuid "7f5dffbe-2069-4c74-8e06-f692bc376018") + ) + (pad "10" thru_hole oval + (at -2.54 -10.16 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 33 "unconnected-(U1-GPIO15-Pad10)") + (pinfunction "GPIO15") + (pintype "input") + (uuid "5dd9c4ad-28b5-4607-9d0e-1dcd95895ac8") + ) + (pad "11" thru_hole oval + (at 0 -12.7 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 9 "unconnected-(U1-GPIO17-Pad11)") + (pinfunction "GPIO17") + (pintype "input") + (uuid "36307477-78d8-437c-a6d8-bd97c6fd4acd") + ) + (pad "12" thru_hole oval + (at -2.54 -12.7 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 21 "unconnected-(U1-GPIO18-Pad12)") + (pinfunction "GPIO18") + (pintype "input") + (uuid "cd9a0cca-5eaf-4566-bde5-616b2de07dfa") + ) + (pad "13" thru_hole oval + (at 0 -15.24 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 12 "unconnected-(U1-GPIO27-Pad13)") + (pinfunction "GPIO27") + (pintype "input") + (uuid "3e0a2080-9cc1-4c08-ab0d-afb3180a4b7b") + ) + (pad "14" thru_hole oval + (at -2.54 -15.24 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 25 "unconnected-(U1-GND-Pad14)") + (pinfunction "GND") + (pintype "input") + (uuid "55665bf9-ab44-4b5e-8422-1cffd91438c9") + ) + (pad "15" thru_hole oval + (at 0 -17.78 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 11 "unconnected-(U1-GPIO22-Pad15)") + (pinfunction "GPIO22") + (pintype "input") + (uuid "21787ed4-3f87-403e-833a-6029794d6978") + ) + (pad "16" thru_hole oval + (at -2.54 -17.78 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 28 "unconnected-(U1-GPIO23-Pad16)") + (pinfunction "GPIO23") + (pintype "input") + (uuid "56ee75f3-3995-4fa5-9fe8-7488eb52851a") + ) + (pad "17" thru_hole oval + (at 0 -20.32 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 19 "unconnected-(U1-3.3V-Pad17)") + (pinfunction "3.3V") + (pintype "input") + (uuid "5f5ed39a-954f-4006-8d82-57643e7376b4") + ) + (pad "18" thru_hole oval + (at -2.54 -20.32 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 8 "unconnected-(U1-GPIO24-Pad18)") + (pinfunction "GPIO24") + (pintype "input") + (uuid "8befaf1d-5034-4377-956e-204a7147e2a8") + ) + (pad "19" thru_hole oval + (at 0 -22.86 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 29 "unconnected-(U1-GPIO10-Pad19)") + (pinfunction "GPIO10") + (pintype "input") + (uuid "26ba6c3b-1f1d-48be-b169-a0a2952840f2") + ) + (pad "20" thru_hole oval + (at -2.54 -22.86 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 15 "unconnected-(U1-GND-Pad20)") + (pinfunction "GND") + (pintype "input") + (uuid "94723bc8-519d-4d7f-ac47-ac01b7de03c0") + ) + (pad "21" thru_hole oval + (at 0 -25.4 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 7 "unconnected-(U1-GPIO9-Pad21)") + (pinfunction "GPIO9") + (pintype "input") + (uuid "57e27f43-4cd5-4c8e-ada0-27d4301db468") + ) + (pad "22" thru_hole oval + (at -2.54 -25.4 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 13 "unconnected-(U1-GPIO25-Pad22)") + (pinfunction "GPIO25") + (pintype "input") + (uuid "91fcf30f-0fa1-4d52-8c71-4c95514fd400") + ) + (pad "23" thru_hole oval + (at 0 -27.94 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 17 "unconnected-(U1-GPIO11-Pad23)") + (pinfunction "GPIO11") + (pintype "input") + (uuid "05a695d1-bce0-4d81-b8a9-eac66f8334d5") + ) + (pad "24" thru_hole oval + (at -2.54 -27.94 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 22 "unconnected-(U1-GPIO8-Pad24)") + (pinfunction "GPIO8") + (pintype "input") + (uuid "78356134-ca02-4f1a-ae49-586ce3c0b187") + ) + (pad "25" thru_hole oval + (at 0 -30.48 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 34 "unconnected-(U1-GND-Pad25)") + (pinfunction "GND") + (pintype "input") + (uuid "bc00e82a-ca4f-489d-9ed1-3b5c05cd0287") + ) + (pad "26" thru_hole oval + (at -2.54 -30.48 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 30 "unconnected-(U1-GPIO7-Pad26)") + (pinfunction "GPIO7") + (pintype "input") + (uuid "5bce4bf1-e05a-46a6-924c-b05399cd0c93") + ) + (pad "27" thru_hole oval + (at 0 -33.02 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (uuid "fe3a2c95-1c97-4eea-8714-2b54f195ab75") + ) + (pad "28" thru_hole oval + (at -2.54 -33.02 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (uuid "9e1ab9f6-18de-48da-82ad-fc2449e9a035") + ) + (pad "29" thru_hole oval + (at 0 -35.56 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 36 "unconnected-(U1-GPIO5-Pad29)") + (pinfunction "GPIO5") + (pintype "input") + (uuid "2c0604c0-9a2f-43c0-81f4-51468e4452ff") + ) + (pad "30" thru_hole oval + (at -2.54 -35.56 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 37 "unconnected-(U1-GND-Pad30)") + (pinfunction "GND") + (pintype "input") + (uuid "c5e70fd0-9704-47c0-8c89-bf7559e80a02") + ) + (pad "31" thru_hole oval + (at 0 -38.1 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 18 "unconnected-(U1-GPIO6-Pad31)") + (pinfunction "GPIO6") + (pintype "input") + (uuid "da7efbcd-cf1c-4f4e-ae26-b0afeaf5f75d") + ) + (pad "32" thru_hole oval + (at -2.54 -38.1 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 5 "Servo_sig") + (pinfunction "GPIO12") + (pintype "input") + (uuid "84608def-b7b9-4194-a8de-42987651faa0") + ) + (pad "33" thru_hole oval + (at 0 -40.64 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 24 "unconnected-(U1-GPIO13-Pad33)") + (pinfunction "GPIO13") + (pintype "input") + (uuid "51414db3-4b00-41b1-b790-656547cab681") + ) + (pad "34" thru_hole oval + (at -2.54 -40.64 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 32 "unconnected-(U1-GND-Pad34)") + (pinfunction "GND") + (pintype "input") + (uuid "04f1b8aa-6252-42f3-8cc2-445c9ba4bdb6") + ) + (pad "35" thru_hole oval + (at 0 -43.18 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 3 "LED_Success") + (pinfunction "GPIO19") + (pintype "input") + (uuid "57de3b8b-c3a8-4def-98a4-a8c65e1bc3d6") + ) + (pad "36" thru_hole oval + (at -2.54 -43.18 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 14 "unconnected-(U1-GPIO16-Pad36)") + (pinfunction "GPIO16") + (pintype "input") + (uuid "21c0368e-b621-4e1a-aa12-c3727d19b35f") + ) + (pad "37" thru_hole oval + (at 0 -45.72 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 4 "LED_Failure") + (pinfunction "GPIO26") + (pintype "input") + (uuid "fa4b321d-8d61-493b-adc4-d5dbca5a2552") + ) + (pad "38" thru_hole oval + (at -2.54 -45.72 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 20 "unconnected-(U1-GPIO20-Pad38)") + (pinfunction "GPIO20") + (pintype "input") + (uuid "324858a6-884d-4683-89f4-5191c03d5e84") + ) + (pad "39" thru_hole oval + (at 0 -48.26 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 27 "unconnected-(U1-GND-Pad39)") + (pinfunction "GND") + (pintype "input") + (uuid "35d3bf17-ce01-4076-9ba9-bfa2cc52d6f1") + ) + (pad "40" thru_hole oval + (at -2.54 -48.26 180) + (size 1.7 1.7) + (drill 1) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 31 "unconnected-(U1-GPIO21-Pad40)") + (pinfunction "GPIO21") + (pintype "input") + (uuid "ffcff8b6-ec0a-4e5f-b4b3-8b2210f0d976") + ) + (model "${KICAD8_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_2x20_P2.54mm_Vertical.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "MyLibrary:ZH_3P_Side" + (layer "B.Cu") + (uuid "c86ab907-a7ea-458f-8db9-7ebb2a361e6d") + (at 128 98 90) + (property "Reference" "J3" + (at 0 0.5 -90) + (unlocked yes) + (layer "B.SilkS") + (uuid "38f5c3e1-cdfb-45f2-9ee3-7016cf3be78c") + (effects + (font + (size 1 1) + (thickness 0.1) + ) + (justify mirror) + ) + ) + (property "Value" "Servo" + (at 0 -1 -90) + (unlocked yes) + (layer "B.Fab") + (uuid "f5237e03-4ff4-417b-8187-35b792dfdf1d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Footprint" "MyLibrary:ZH_3P_Side" + (at 0 0 -90) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "aa213386-d43a-4020-98e7-a2079d5dbb8f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 -90) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "9bfdf0d0-ff15-4bd3-a3f6-3a094be5cbe2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Description" "Generic connector, single row, 01x03, script generated" + (at 0 0 -90) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "73b93f5b-5330-4f71-9f09-0deae9342bfc") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property ki_fp_filters "Connector*:*_1x??_*") + (path "/f00a3780-4ff0-441c-811d-d6b9ad87d9d6") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr through_hole) + (fp_line + (start 3 1.6) + (end -3 1.6) + (stroke + (width 0.1) + (type default) + ) + (layer "B.SilkS") + (uuid "def8e6cc-cc5f-4f94-a998-90ae12eb3be9") + ) + (fp_line + (start -1.5 1.6) + (end -3 1.6) + (stroke + (width 0.1) + (type default) + ) + (layer "B.SilkS") + (uuid "c0718652-685c-47ab-abd9-679fcf422503") + ) + (fp_rect + (start 3 -3) + (end -3 3) + (stroke + (width 0.1) + (type default) + ) + (fill none) + (layer "B.SilkS") + (uuid "578a3ec8-9b4d-4abb-8b0a-538796e55d08") + ) + (fp_rect + (start 3.2 -3.3) + (end -3.2 3.2) + (stroke + (width 0.1) + (type default) + ) + (fill none) + (layer "B.CrtYd") + (uuid "79d3c257-fddf-44d2-9dd1-1066ccf1c022") + ) + (fp_text user "${REFERENCE}" + (at 0 -2.5 -90) + (unlocked yes) + (layer "B.Fab") + (uuid "0d1a32f3-6826-4873-a8f1-e53bfcb61593") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (pad "1" thru_hole circle + (at -1.5 1.6 90) + (size 1.2 1.2) + (drill 0.6) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 5 "Servo_sig") + (pinfunction "Pin_1") + (pintype "passive") + (uuid "a847c90e-d156-483d-8fcb-ddc032618df6") + ) + (pad "2" thru_hole circle + (at 0 1.6 90) + (size 1.2 1.2) + (drill 0.6) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 1 "+5V") + (pinfunction "Pin_2") + (pintype "passive") + (uuid "50d832fa-9342-4d2b-b7e4-4e9f293d7fd0") + ) + (pad "3" thru_hole circle + (at 1.5 1.6 90) + (size 1.2 1.2) + (drill 0.6) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 2 "GND") + (pinfunction "Pin_3") + (pintype "passive") + (uuid "260ba83e-5a6b-4534-bdcc-ca31742e0703") + ) + ) + (gr_rect + (start 124.5 45) + (end 154.5 110) + (stroke + (width 0.1) + (type default) + ) + (fill none) + (layer "F.SilkS") + (uuid "2cb17968-4135-4279-a650-d171563cfcab") + ) + (gr_rect + (start 124.5 44.93) + (end 154.99 109.99) + (stroke + (width 0.05) + (type default) + ) + (fill none) + (layer "Edge.Cuts") + (uuid "ff7ad154-3e86-4cb6-8230-335d727b4f05") + ) + (gr_line + (start 124.49 62.37) + (end 124.48 82.33) + (stroke + (width 0.1) + (type default) + ) + (layer "User.1") + (uuid "45360337-4dcc-4ddc-a72a-95b7d8362e8b") + ) + (gr_line + (start 124.48 82.33) + (end 127.34 82.33) + (stroke + (width 0.1) + (type default) + ) + (layer "User.1") + (uuid "621fcbdb-a64c-4619-b2d2-2f46239799a2") + ) + (gr_line + (start 128.1 48.37) + (end 128.06 62.37) + (stroke + (width 0.1) + (type default) + ) + (layer "User.1") + (uuid "8049a709-f63d-43e4-94cd-3e6e749b15e9") + ) + (gr_line + (start 128.06 62.37) + (end 124.49 62.37) + (stroke + (width 0.1) + (type default) + ) + (layer "User.1") + (uuid "9d260317-e4dc-4902-ac57-da17ef5805d6") + ) + (via + (at 134.65 72.01) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 0) + (uuid "0e2eede6-66fb-4d4a-b959-8e788308da94") + ) + (via + (at 136.12 71.99) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 0) + (uuid "11ffe731-cac6-4b6b-8857-76b5faf53a4d") + ) + (via + (at 134.01 72.01) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 0) + (uuid "33d274d1-486f-4dac-b7ba-02c0c1d70ce1") + ) + (via + (at 133.77 72.01) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 0) + (uuid "61ab2bed-4057-46ba-b99b-ff6b57d523de") + ) + (via + (at 136.03 71.97) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 0) + (uuid "6588161c-a38c-4191-a5e7-b0fba98312da") + ) + (via + (at 135.22 71.97) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 0) + (uuid "6781fcdf-74f1-4cd3-9356-24cb8ec1f1a4") + ) + (via + (at 134.27 72.01) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 0) + (uuid "81f70d9d-d0c7-4b7c-8318-ad0d18cf00dd") + ) + (via + (at 135.46 71.99) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 0) + (uuid "a95d5484-2ac0-4863-85f7-a1aef7228a95") + ) + (via + (at 134.95 71.99) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 0) + (uuid "aec70614-ae36-49a0-9111-30bfabb025aa") + ) + (via + (at 135.72 71.99) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 0) + (uuid "ec29d980-e926-40c4-bdcc-73204513931e") + ) + (via + (at 136.32 71.99) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 0) + (uuid "fd737422-f733-43fb-adad-cf4363411ba1") + ) + (segment + (start 144 48) + (end 151 48) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "03abd867-2077-44c4-91b8-195dfe794592") + ) + (segment + (start 153.1 50.1) + (end 153.1 52.64) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "218ea6c9-d7b0-4e79-b178-be950ead7ac0") + ) + (segment + (start 135.5 85) + (end 138.01 82.49) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "2452bf60-6d89-4400-bc92-875483e238c8") + ) + (segment + (start 151 48) + (end 153.1 50.1) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "305e54cb-b3cc-4224-813d-0e316c27644f") + ) + (segment + (start 129.6 98) + (end 136 98) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "7146734e-52a0-4994-823f-0fbc799246aa") + ) + (segment + (start 127.13 92.49) + (end 127.13 85.691215) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "753cea75-6ee7-40da-891e-bbe6289a666b") + ) + (segment + (start 136.18 93.18) + (end 127.82 93.18) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "8325b76c-ad6c-432a-a528-9064e296602a") + ) + (segment + (start 153.1 52.64) + (end 152.4 53.34) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "99f01ec8-a4ec-4ed5-b378-efbc9606b56b") + ) + (segment + (start 138.01 76.66) + (end 138.01 53.99) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "9bd6cef5-106e-4672-aa31-f023ffaf0097") + ) + (segment + (start 136 98) + (end 137.53 96.47) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "a65d5622-25c4-498a-87fd-1ed4ac7b664f") + ) + (segment + (start 138.01 53.99) + (end 144 48) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "ab0d7962-0e8e-45d5-b61c-4ac4a0b5a83a") + ) + (segment + (start 127.82 93.18) + (end 127.13 92.49) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "ac07b025-eff2-428a-9a67-81f9da1708ac") + ) + (segment + (start 137.53 94.53) + (end 136.18 93.18) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "afc76ddc-f80b-4afa-89ee-dd487e091964") + ) + (segment + (start 137.53 96.47) + (end 137.53 94.53) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "c188e0f5-ce18-41c2-8cea-f74dc3141a5b") + ) + (segment + (start 127.821215 85) + (end 135.5 85) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "c78273f4-06e1-473c-99ef-a60f9a7cb65d") + ) + (segment + (start 127.13 85.691215) + (end 127.821215 85) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "d23b81de-2b9a-4068-abd5-5c6484bc8190") + ) + (segment + (start 138.01 82.49) + (end 138.01 76.66) + (width 1) + (layer "F.Cu") + (net 1) + (uuid "fe7f7691-b4ca-4c7c-8a22-3769b6a2c01c") + ) + (via + (at 138.06 77.71) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "1681a57d-dd53-4d7e-bfb9-cefc303cdcb2") + ) + (via + (at 138.06 77.47) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "1cd20c96-fc5f-44c2-9919-2ac60784fdaf") + ) + (via + (at 138.01 76.09) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "4525c3b2-80a4-4d68-b2a4-7ea8a75dd418") + ) + (via + (at 138.04 78.04) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "45487b0c-5f83-4e7f-b8ec-132c9b9bb800") + ) + (via + (at 138.04 75.32) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "613c8578-87e9-4ab3-97bd-f6f5d18b50ea") + ) + (via + (at 138.01 76.22) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "69e47e56-89f4-48b2-b6ec-cac87463afc4") + ) + (via + (at 138.01 76.79) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "72adc0f2-942d-4561-9497-ea18f02cd8a0") + ) + (via + (at 138.01 76.72) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "7d1833ef-0b15-4b93-84e5-dd15b2778455") + ) + (via + (at 138.01 76.33) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "92dcac0b-e0f6-445b-b43a-0d983dbd7001") + ) + (via + (at 138.04 76.94) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "afced4e9-c2d9-4315-acab-520a1b9e46b3") + ) + (via + (at 138.01 75.65) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "b0e75a4f-93ce-43f3-a54f-086458fbb8f5") + ) + (via + (at 138.01 75.49) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "b22eef09-11c1-4fdb-ab39-f8c7aba13a00") + ) + (via + (at 138.04 77.21) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "b9d2a824-de6d-4984-9a2b-7ffa9bfc22b0") + ) + (via + (at 138.01 75.8) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "bca4a96b-f8af-46f1-939f-69a56104a512") + ) + (via + (at 138.04 76.5) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "bfcac877-8244-4fb7-bb86-d9f83e6fd7de") + ) + (via + (at 138.06 77.89) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "cd6a576b-b1b0-4f76-972b-3aa429806215") + ) + (via + (at 138.06 77.58) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "cf919596-ba53-4488-a24f-976bb48507a8") + ) + (via + (at 138.01 75.91) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 1) + (uuid "e2f1868e-0bb8-43fe-83d1-010ba1541281") + ) + (via + (at 132 76.92) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "00829b79-e9a0-443e-8a37-65119e5313ea") + ) + (via + (at 132.05 75.56) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "068f44f0-455b-4940-8d10-eed76cf71e60") + ) + (via + (at 132.07 75.34) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "06adcd37-b420-4e5e-8f1f-6529770cccad") + ) + (via + (at 132 75.93) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "1cc481fa-ddc2-4502-8f47-dbb7c23c8ebc") + ) + (via + (at 132 76.99) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "1e3f1e63-6443-4f53-928f-711a89652ac3") + ) + (via + (at 132.03 77.47) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "3dadc9ab-513b-4285-b9ea-681775987af1") + ) + (via + (at 132 76.33) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "45476f51-0b91-495f-b549-fbda6b231e58") + ) + (via + (at 132.03 75.67) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "654e5827-b985-496c-8e53-d8cdfc9ddebb") + ) + (via + (at 132.03 77.19) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "689da11a-fb3b-44c1-bf9e-18193227f1e4") + ) + (via + (at 132.03 77.36) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "6f8a5d7d-5382-4f5d-99a8-6c21f5790a07") + ) + (via + (at 132 76.5) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "739cda5e-8711-460e-9c49-f1cdd66a0579") + ) + (via + (at 132.03 77.78) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "81784259-48f2-439e-a9f0-4ba472d5d32e") + ) + (via + (at 132 76.7) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "a6b4c905-72e1-45d7-b2af-493542e7bd41") + ) + (via + (at 132 76.15) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "b900496a-3879-4a7b-8c4f-f69e30df1f03") + ) + (via + (at 132.03 77.67) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "ccd8e2f9-ac17-4409-bb25-5386cbd03dc1") + ) + (via + (at 132 78) + (size 1.1) + (drill 1) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "f0325583-ce26-4d54-bad7-c221a4a7404c") + ) + (segment + (start 129.6 90) + (end 139.69 90) + (width 1) + (layer "F.Cu") + (net 3) + (uuid "704bc4ee-d1bb-4006-b900-2c600674bb9a") + ) + (segment + (start 139.69 90) + (end 146.21 96.52) + (width 1) + (layer "F.Cu") + (net 3) + (uuid "c801f6c4-57a6-463a-b084-3b15a6a492aa") + ) + (segment + (start 146.21 96.52) + (end 149.86 96.52) + (width 1) + (layer "F.Cu") + (net 3) + (uuid "f4ff4578-d932-4949-a6f5-d058ae259313") + ) + (segment + (start 146.06 99.06) + (end 149.86 99.06) + (width 1) + (layer "F.Cu") + (net 4) + (uuid "42735582-c8ce-4725-ba9c-751ca5c3dcca") + ) + (segment + (start 138.5 91.5) + (end 146.06 99.06) + (width 1) + (layer "F.Cu") + (net 4) + (uuid "6981963e-c2df-4b43-a105-9ffc3e0b501d") + ) + (segment + (start 129.6 91.5) + (end 138.5 91.5) + (width 1) + (layer "F.Cu") + (net 4) + (uuid "ae21779a-570d-4748-ba91-b946a1be196c") + ) + (segment + (start 142.5 99.5) + (end 129.6 99.5) + (width 1) + (layer "F.Cu") + (net 5) + (uuid "02fd1c11-4752-440f-bf27-452a3e8719a7") + ) + (segment + (start 152.41 91.43) + (end 154.33 91.43) + (width 1) + (layer "F.Cu") + (net 5) + (uuid "34b09be2-b732-4688-b7fd-534fdaa811e7") + ) + (segment + (start 152.4 91.44) + (end 152.41 91.43) + (width 1) + (layer "F.Cu") + (net 5) + (uuid "5a82a313-88d8-46e2-9cd6-7603e82d3ce3") + ) + (segment + (start 147.14 104.14) + (end 142.5 99.5) + (width 1) + (layer "F.Cu") + (net 5) + (uuid "5eca47d6-3bc3-43d9-912a-5eda8850bef5") + ) + (segment + (start 154.54 104.14) + (end 147.14 104.14) + (width 1) + (layer "F.Cu") + (net 5) + (uuid "8a16de96-a4c9-4599-b4fe-d694687c467e") + ) + (segment + (start 154.33 91.43) + (end 154.54 91.64) + (width 1) + (layer "F.Cu") + (net 5) + (uuid "bb6e864e-914a-48d5-ba2f-6b4d09c7e2c5") + ) + (segment + (start 154.54 91.64) + (end 154.54 104.14) + (width 1) + (layer "F.Cu") + (net 5) + (uuid "f02adf67-e0ed-40bf-b18e-e4eac774b6b2") + ) + (zone + (net 2) + (net_name "GND") + (layer "F.Cu") + (uuid "e1389a1a-6fce-401a-973f-041f770e7051") + (hatch edge 0.5) + (connect_pads + (clearance 0.5) + ) + (min_thickness 0.25) + (filled_areas_thickness no) + (fill yes + (thermal_gap 0.5) + (thermal_bridge_width 0.5) + ) + (polygon + (pts + (xy 123.7 43.8) (xy 156.1 43.7) (xy 156.3 110.47) (xy 123.7 110.4) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 154.933039 44.949685) (xy 154.978794 45.002489) (xy 154.99 45.054) (xy 154.99 90.435951) (xy 154.970315 90.50299) + (xy 154.917511 90.548745) (xy 154.848353 90.558689) (xy 154.807549 90.545311) (xy 154.803911 90.543366) + (xy 154.731315 90.513296) (xy 154.675165 90.490038) (xy 154.621836 90.467949) (xy 154.621832 90.467948) + (xy 154.621828 90.467946) (xy 154.525188 90.448724) (xy 154.428544 90.4295) (xy 154.428541 90.4295) + (xy 153.349896 90.4295) (xy 153.282857 90.409815) (xy 153.274852 90.403921) (xy 153.085842 90.271575) + (xy 153.042217 90.216998) (xy 153.035023 90.1475) (xy 153.066546 90.085145) (xy 153.085842 90.068425) + (xy 153.183564 89.999999) (xy 153.271401 89.938495) (xy 153.438495 89.771401) (xy 153.574035 89.57783) + (xy 153.673903 89.363663) (xy 153.735063 89.135408) (xy 153.755659 88.9) (xy 153.735063 88.664592) + (xy 153.688626 88.491285) (xy 153.673905 88.436344) (xy 153.673904 88.436343) (xy 153.673903 88.436337) + (xy 153.574035 88.222171) (xy 153.568425 88.214158) (xy 153.438494 88.028597) (xy 153.271402 87.861506) + (xy 153.271396 87.861501) (xy 153.085842 87.731575) (xy 153.042217 87.676998) (xy 153.035023 87.6075) + (xy 153.066546 87.545145) (xy 153.085842 87.528425) (xy 153.215753 87.43746) (xy 153.271401 87.398495) + (xy 153.438495 87.231401) (xy 153.574035 87.03783) (xy 153.673903 86.823663) (xy 153.735063 86.595408) + (xy 153.755659 86.36) (xy 153.735063 86.124592) (xy 153.673903 85.896337) (xy 153.574035 85.682171) + (xy 153.568425 85.674158) (xy 153.438494 85.488597) (xy 153.271402 85.321506) (xy 153.271396 85.321501) + (xy 153.085842 85.191575) (xy 153.042217 85.136998) (xy 153.035023 85.0675) (xy 153.066546 85.005145) + (xy 153.085842 84.988425) (xy 153.144519 84.947339) (xy 153.271401 84.858495) (xy 153.438495 84.691401) + (xy 153.574035 84.49783) (xy 153.673903 84.283663) (xy 153.735063 84.055408) (xy 153.755659 83.82) + (xy 153.735063 83.584592) (xy 153.673903 83.356337) (xy 153.574035 83.142171) (xy 153.568425 83.134158) + (xy 153.438494 82.948597) (xy 153.271402 82.781506) (xy 153.271396 82.781501) (xy 153.085842 82.651575) + (xy 153.042217 82.596998) (xy 153.035023 82.5275) (xy 153.066546 82.465145) (xy 153.085842 82.448425) + (xy 153.108026 82.432891) (xy 153.271401 82.318495) (xy 153.438495 82.151401) (xy 153.574035 81.95783) + (xy 153.673903 81.743663) (xy 153.735063 81.515408) (xy 153.755659 81.28) (xy 153.735063 81.044592) + (xy 153.673903 80.816337) (xy 153.574035 80.602171) (xy 153.568425 80.594158) (xy 153.438494 80.408597) + (xy 153.271402 80.241506) (xy 153.271396 80.241501) (xy 153.085842 80.111575) (xy 153.042217 80.056998) + (xy 153.035023 79.9875) (xy 153.066546 79.925145) (xy 153.085842 79.908425) (xy 153.108026 79.892891) + (xy 153.271401 79.778495) (xy 153.438495 79.611401) (xy 153.574035 79.41783) (xy 153.673903 79.203663) + (xy 153.735063 78.975408) (xy 153.755659 78.74) (xy 153.735063 78.504592) (xy 153.673903 78.276337) + (xy 153.574035 78.062171) (xy 153.572585 78.060099) (xy 153.438494 77.868597) (xy 153.271402 77.701506) + (xy 153.271396 77.701501) (xy 153.085842 77.571575) (xy 153.042217 77.516998) (xy 153.035023 77.4475) + (xy 153.066546 77.385145) (xy 153.085842 77.368425) (xy 153.108026 77.352891) (xy 153.271401 77.238495) + (xy 153.438495 77.071401) (xy 153.574035 76.87783) (xy 153.673903 76.663663) (xy 153.735063 76.435408) + (xy 153.755659 76.2) (xy 153.735063 75.964592) (xy 153.673903 75.736337) (xy 153.574035 75.522171) + (xy 153.568425 75.514158) (xy 153.438494 75.328597) (xy 153.271402 75.161506) (xy 153.271396 75.161501) + (xy 153.085842 75.031575) (xy 153.042217 74.976998) (xy 153.035023 74.9075) (xy 153.066546 74.845145) + (xy 153.085842 74.828425) (xy 153.122844 74.802516) (xy 153.271401 74.698495) (xy 153.438495 74.531401) + (xy 153.574035 74.33783) (xy 153.673903 74.123663) (xy 153.735063 73.895408) (xy 153.755659 73.66) + (xy 153.753487 73.63518) (xy 153.751539 73.612918) (xy 153.735063 73.424592) (xy 153.673903 73.196337) + (xy 153.574035 72.982171) (xy 153.573386 72.981243) (xy 153.438494 72.788597) (xy 153.271402 72.621506) + (xy 153.271396 72.621501) (xy 153.085842 72.491575) (xy 153.042217 72.436998) (xy 153.035023 72.3675) + (xy 153.066546 72.305145) (xy 153.085842 72.288425) (xy 153.108026 72.272891) (xy 153.271401 72.158495) + (xy 153.438495 71.991401) (xy 153.574035 71.79783) (xy 153.673903 71.583663) (xy 153.735063 71.355408) + (xy 153.755659 71.12) (xy 153.735063 70.884592) (xy 153.673903 70.656337) (xy 153.574035 70.442171) + (xy 153.568425 70.434158) (xy 153.438494 70.248597) (xy 153.271402 70.081506) (xy 153.271396 70.081501) + (xy 153.085842 69.951575) (xy 153.042217 69.896998) (xy 153.035023 69.8275) (xy 153.066546 69.765145) + (xy 153.085842 69.748425) (xy 153.141431 69.709501) (xy 153.271401 69.618495) (xy 153.438495 69.451401) + (xy 153.574035 69.25783) (xy 153.673903 69.043663) (xy 153.735063 68.815408) (xy 153.755659 68.58) + (xy 153.735063 68.344592) (xy 153.673903 68.116337) (xy 153.574035 67.902171) (xy 153.568425 67.894158) + (xy 153.438494 67.708597) (xy 153.271402 67.541506) (xy 153.271396 67.541501) (xy 153.085842 67.411575) + (xy 153.042217 67.356998) (xy 153.035023 67.2875) (xy 153.066546 67.225145) (xy 153.085842 67.208425) + (xy 153.108026 67.192891) (xy 153.271401 67.078495) (xy 153.438495 66.911401) (xy 153.574035 66.71783) + (xy 153.673903 66.503663) (xy 153.735063 66.275408) (xy 153.755659 66.04) (xy 153.735063 65.804592) + (xy 153.673903 65.576337) (xy 153.574035 65.362171) (xy 153.568425 65.354158) (xy 153.438494 65.168597) + (xy 153.271402 65.001506) (xy 153.271396 65.001501) (xy 153.085842 64.871575) (xy 153.042217 64.816998) + (xy 153.035023 64.7475) (xy 153.066546 64.685145) (xy 153.085842 64.668425) (xy 153.108026 64.652891) + (xy 153.271401 64.538495) (xy 153.438495 64.371401) (xy 153.574035 64.17783) (xy 153.673903 63.963663) + (xy 153.735063 63.735408) (xy 153.755659 63.5) (xy 153.735063 63.264592) (xy 153.673903 63.036337) + (xy 153.574035 62.822171) (xy 153.568731 62.814595) (xy 153.438494 62.628597) (xy 153.271402 62.461506) + (xy 153.271396 62.461501) (xy 153.085842 62.331575) (xy 153.042217 62.276998) (xy 153.035023 62.2075) + (xy 153.066546 62.145145) (xy 153.085842 62.128425) (xy 153.108026 62.112891) (xy 153.271401 61.998495) + (xy 153.438495 61.831401) (xy 153.574035 61.63783) (xy 153.673903 61.423663) (xy 153.735063 61.195408) + (xy 153.755659 60.96) (xy 153.735063 60.724592) (xy 153.673903 60.496337) (xy 153.574035 60.282171) + (xy 153.568425 60.274158) (xy 153.438494 60.088597) (xy 153.271402 59.921506) (xy 153.271401 59.921505) + (xy 153.085405 59.791269) (xy 153.041781 59.736692) (xy 153.034588 59.667193) (xy 153.06611 59.604839) + (xy 153.085405 59.588119) (xy 153.271082 59.458105) (xy 153.438105 59.291082) (xy 153.5736 59.097578) + (xy 153.673429 58.883492) (xy 153.673432 58.883486) (xy 153.730636 58.67) (xy 152.833012 58.67) + (xy 152.865925 58.612993) (xy 152.9 58.485826) (xy 152.9 58.354174) (xy 152.865925 58.227007) (xy 152.833012 58.17) + (xy 153.730636 58.17) (xy 153.730635 58.169999) (xy 153.673432 57.956513) (xy 153.673429 57.956507) + (xy 153.5736 57.742422) (xy 153.573599 57.74242) (xy 153.438113 57.548926) (xy 153.438108 57.54892) + (xy 153.271078 57.38189) (xy 153.085405 57.251879) (xy 153.04178 57.197302) (xy 153.034588 57.127804) + (xy 153.06611 57.065449) (xy 153.085406 57.04873) (xy 153.085842 57.048425) (xy 153.271401 56.918495) + (xy 153.438495 56.751401) (xy 153.574035 56.55783) (xy 153.673903 56.343663) (xy 153.735063 56.115408) + (xy 153.755659 55.88) (xy 153.735063 55.644592) (xy 153.673903 55.416337) (xy 153.574035 55.202171) + (xy 153.568425 55.194158) (xy 153.438494 55.008597) (xy 153.271402 54.841506) (xy 153.271396 54.841501) + (xy 153.085842 54.711575) (xy 153.042217 54.656998) (xy 153.035023 54.5875) (xy 153.066546 54.525145) + (xy 153.085842 54.508425) (xy 153.161024 54.455782) (xy 153.271401 54.378495) (xy 153.438495 54.211401) + (xy 153.574035 54.01783) (xy 153.673903 53.803663) (xy 153.735063 53.575408) (xy 153.746043 53.449902) + (xy 153.771495 53.384835) (xy 153.781891 53.373029) (xy 153.877136 53.277785) (xy 153.877136 53.277784) + (xy 153.877139 53.277782) (xy 153.986632 53.113914) (xy 154.062051 52.931835) (xy 154.073091 52.876337) + (xy 154.1005 52.738541) (xy 154.1005 52.54146) (xy 154.1005 50.001459) (xy 154.1005 50.001456) (xy 154.062052 49.80817) + (xy 154.062051 49.808169) (xy 154.062051 49.808165) (xy 154.005955 49.672736) (xy 153.986635 49.626092) + (xy 153.986628 49.626079) (xy 153.87714 49.462219) (xy 153.877139 49.462218) (xy 153.737782 49.322861) + (xy 153.737781 49.32286) (xy 151.784208 47.369288) (xy 151.784206 47.369285) (xy 151.784206 47.369286) + (xy 151.777139 47.362219) (xy 151.777139 47.362218) (xy 151.637782 47.222861) (xy 151.637781 47.22286) + (xy 151.63778 47.222859) (xy 151.47392 47.113371) (xy 151.473907 47.113364) (xy 151.334776 47.055735) + (xy 151.334775 47.055735) (xy 151.291836 47.037949) (xy 151.291828 47.037947) (xy 151.195188 47.018724) + (xy 151.098544 46.9995) (xy 151.098541 46.9995) (xy 143.901459 46.9995) (xy 143.901455 46.9995) + (xy 143.804812 47.018724) (xy 143.708171 47.037947) (xy 143.708163 47.037949) (xy 143.665225 47.055735) + (xy 143.665224 47.055735) (xy 143.526092 47.113364) (xy 143.526079 47.113371) (xy 143.362219 47.222859) + (xy 143.29254 47.292538) (xy 143.222861 47.362218) (xy 143.222858 47.362221) (xy 137.372221 53.212858) + (xy 137.372218 53.212861) (xy 137.307298 53.277781) (xy 137.232859 53.352219) (xy 137.123371 53.516079) + (xy 137.123364 53.516092) (xy 137.04795 53.69816) (xy 137.047947 53.69817) (xy 137.0095 53.891456) + (xy 137.0095 69.967202) (xy 136.989815 70.034241) (xy 136.937011 70.079996) (xy 136.867853 70.08994) + (xy 136.805571 70.062004) (xy 136.682131 69.957929) (xy 136.480189 69.839425) (xy 136.383673 69.803002) + (xy 136.261126 69.756755) (xy 136.218055 69.748425) (xy 136.031243 69.712295) (xy 135.978652 69.709501) + (xy 135.978629 69.7095) (xy 135.978622 69.7095) (xy 134.041378 69.7095) (xy 134.04137 69.7095) (xy 134.041347 69.709501) + (xy 133.988756 69.712295) (xy 133.988755 69.712295) (xy 133.758878 69.756754) (xy 133.758876 69.756754) + (xy 133.758874 69.756755) (xy 133.684933 69.784659) (xy 133.53981 69.839425) (xy 133.337868 69.957929) + (xy 133.337861 69.957934) (xy 133.158858 70.108856) (xy 133.158856 70.108858) (xy 133.007934 70.287861) + (xy 133.007929 70.287868) (xy 132.889425 70.48981) (xy 132.834659 70.634933) (xy 132.806755 70.708874) + (xy 132.806754 70.708876) (xy 132.806754 70.708878) (xy 132.762295 70.938755) (xy 132.762295 70.938756) + (xy 132.759501 70.991347) (xy 132.7595 70.991386) (xy 132.7595 71.703915) (xy 132.754161 71.739909) + (xy 132.734699 71.804066) (xy 132.714417 72.01) (xy 132.734699 72.215932) (xy 132.754161 72.280088) + (xy 132.7595 72.316083) (xy 132.7595 72.928613) (xy 132.759501 72.928652) (xy 132.762295 72.981243) + (xy 132.762295 72.981244) (xy 132.802276 73.187967) (xy 132.806755 73.211126) (xy 132.855326 73.339832) + (xy 132.889425 73.430189) (xy 133.007929 73.632131) (xy 133.007934 73.632138) (xy 133.158856 73.811141) + (xy 133.158858 73.811143) (xy 133.337861 73.962065) (xy 133.337868 73.96207) (xy 133.53981 74.080574) + (xy 133.758874 74.163245) (xy 133.988759 74.207705) (xy 134.041378 74.2105) (xy 134.041386 74.2105) + (xy 135.978614 74.2105) (xy 135.978622 74.2105) (xy 135.97863 74.210499) (xy 135.97865 74.210499) + (xy 135.999655 74.209382) (xy 136.015026 74.208566) (xy 136.083014 74.224665) (xy 136.131507 74.274966) + (xy 136.145106 74.3435) (xy 136.119495 74.408506) (xy 136.064939 74.448573) (xy 136.017669 74.466203) + (xy 136.017664 74.466206) (xy 135.902455 74.552452) (xy 135.902452 74.552455) (xy 135.816206 74.667664) + (xy 135.816202 74.667671) (xy 135.765908 74.802517) (xy 135.759501 74.862116) (xy 135.759501 74.862123) + (xy 135.7595 74.862135) (xy 135.7595 78.45787) (xy 135.759501 78.457876) (xy 135.765908 78.517483) + (xy 135.816202 78.652328) (xy 135.816206 78.652335) (xy 135.902452 78.767544) (xy 135.902455 78.767547) + (xy 136.017664 78.853793) (xy 136.017671 78.853797) (xy 136.152517 78.904091) (xy 136.152516 78.904091) + (xy 136.159444 78.904835) (xy 136.212127 78.9105) (xy 136.8855 78.910499) (xy 136.952539 78.930183) + (xy 136.998294 78.982987) (xy 137.0095 79.034499) (xy 137.0095 82.024217) (xy 136.989815 82.091256) + (xy 136.973181 82.111898) (xy 135.421897 83.663181) (xy 135.360574 83.696666) (xy 135.334216 83.6995) + (xy 134.652129 83.6995) (xy 134.652123 83.699501) (xy 134.592516 83.705908) (xy 134.457671 83.756202) + (xy 134.457664 83.756206) (xy 134.342456 83.842452) (xy 134.342455 83.842453) (xy 134.342454 83.842454) + (xy 134.321936 83.869863) (xy 134.262087 83.949811) (xy 134.206153 83.991682) (xy 134.16282 83.9995) + (xy 127.722669 83.9995) (xy 127.690606 84.005876) (xy 127.690607 84.005877) (xy 127.529385 84.037946) + (xy 127.529379 84.037948) (xy 127.347303 84.113366) (xy 127.347294 84.113371) (xy 127.183434 84.222859) + (xy 127.18343 84.222862) (xy 126.6519 84.754394) (xy 126.49222 84.914074) (xy 126.492218 84.914076) + (xy 126.422538 84.983755) (xy 126.352859 85.053434) (xy 126.243371 85.217295) (xy 126.243364 85.217308) + (xy 126.212495 85.291836) (xy 126.191571 85.342349) (xy 126.168549 85.397931) (xy 126.168543 85.397945) + (xy 126.167948 85.399378) (xy 126.1295 85.592671) (xy 126.1295 85.592674) (xy 126.1295 92.588541) + (xy 126.1295 92.588543) (xy 126.129499 92.588543) (xy 126.167947 92.781829) (xy 126.16795 92.781839) + (xy 126.243364 92.963907) (xy 126.243371 92.96392) (xy 126.352859 93.12778) (xy 126.35286 93.127781) + (xy 126.352861 93.127782) (xy 126.492218 93.267139) (xy 126.492219 93.267139) (xy 126.499286 93.274206) + (xy 126.499285 93.274206) (xy 126.499288 93.274208) (xy 127.04286 93.817781) (xy 127.042861 93.817782) + (xy 127.182218 93.957139) (xy 127.346086 94.066632) (xy 127.452745 94.110811) (xy 127.528164 94.142051) + (xy 127.721444 94.180497) (xy 127.721454 94.180499) (xy 127.721457 94.1805) (xy 127.721459 94.1805) + (xy 127.91854 94.1805) (xy 133.76394 94.1805) (xy 133.830979 94.200185) (xy 133.876734 94.252989) + (xy 133.886678 94.322147) (xy 133.857653 94.385703) (xy 133.838252 94.403766) (xy 133.812809 94.422812) + (xy 133.726649 94.537906) (xy 133.726645 94.537913) (xy 133.676403 94.67262) (xy 133.676401 94.672627) + (xy 133.67 94.732155) (xy 133.67 95.33) (xy 134.654314 95.33) (xy 134.64992 95.334394) (xy 134.597259 95.425606) + (xy 134.57 95.527339) (xy 134.57 95.632661) (xy 134.597259 95.734394) (xy 134.64992 95.825606) (xy 134.654314 95.83) + (xy 133.67 95.83) (xy 133.67 96.427844) (xy 133.676401 96.487372) (xy 133.676403 96.487379) (xy 133.726645 96.622086) + (xy 133.726649 96.622093) (xy 133.812809 96.737187) (xy 133.864968 96.776234) (xy 133.906838 96.832168) + (xy 133.911822 96.90186) (xy 133.878336 96.963182) (xy 133.817012 96.996667) (xy 133.790656 96.9995) + (xy 130.765741 96.9995) (xy 130.698702 96.979815) (xy 130.652947 96.927011) (xy 130.643003 96.857853) + (xy 130.646475 96.841566) (xy 130.685902 96.702992) (xy 130.685903 96.702989) (xy 130.704713 96.5) + (xy 130.704713 96.499999) (xy 130.685903 96.29701) (xy 130.685902 96.297007) (xy 130.630116 96.100936) + (xy 130.630113 96.10093) (xy 130.539249 95.918449) (xy 130.539247 95.918447) (xy 130.537465 95.916087) + (xy 129.894855 96.558696) (xy 129.9 96.539496) (xy 129.9 96.460504) (xy 129.879556 96.384204) (xy 129.84006 96.315795) + (xy 129.784205 96.25994) (xy 129.715796 96.220444) (xy 129.639496 96.2) (xy 129.560504 96.2) (xy 129.484204 96.220444) + (xy 129.415795 96.25994) (xy 129.35994 96.315795) (xy 129.320444 96.384204) (xy 129.3 96.460504) + (xy 129.3 96.539496) (xy 129.305145 96.558699) (xy 128.662533 95.916087) (xy 128.660755 95.918442) + (xy 128.660754 95.918443) (xy 128.569886 96.10093) (xy 128.569883 96.100936) (xy 128.514097 96.297007) + (xy 128.514096 96.29701) (xy 128.495287 96.499999) (xy 128.495287 96.5) (xy 128.514096 96.702989) + (xy 128.514097 96.702992) (xy 128.569883 96.899063) (xy 128.569886 96.899069) (xy 128.660754 97.081556) + (xy 128.731212 97.174857) (xy 128.755904 97.240218) (xy 128.741339 97.308553) (xy 128.731212 97.32431) + (xy 128.660328 97.418175) (xy 128.569422 97.600739) (xy 128.569417 97.600752) (xy 128.513602 97.796917) + (xy 128.494785 97.999999) (xy 128.494785 98) (xy 128.513602 98.203082) (xy 128.569417 98.399247) + (xy 128.569422 98.39926) (xy 128.660328 98.581824) (xy 128.730898 98.675274) (xy 128.75559 98.740635) + (xy 128.741025 98.80897) (xy 128.730898 98.824726) (xy 128.660328 98.918175) (xy 128.569422 99.100739) + (xy 128.569417 99.100752) (xy 128.513602 99.296917) (xy 128.494785 99.499999) (xy 128.494785 99.5) + (xy 128.513602 99.703082) (xy 128.569417 99.899247) (xy 128.569422 99.89926) (xy 128.660327 100.081821) + (xy 128.783237 100.244581) (xy 128.933958 100.38198) (xy 128.93396 100.381982) (xy 128.987052 100.414855) + (xy 129.107363 100.489348) (xy 129.297544 100.563024) (xy 129.498024 100.6005) (xy 129.498026 100.6005) + (xy 129.701974 100.6005) (xy 129.701976 100.6005) (xy 129.902456 100.563024) (xy 130.042237 100.508873) + (xy 130.087031 100.5005) (xy 142.034218 100.5005) (xy 142.101257 100.520185) (xy 142.121899 100.536819) + (xy 146.359735 104.774655) (xy 146.359764 104.774686) (xy 146.502214 104.917136) (xy 146.502218 104.917139) + (xy 146.666079 105.026628) (xy 146.666092 105.026635) (xy 146.794833 105.079961) (xy 146.837744 105.097735) + (xy 146.848164 105.102051) (xy 146.944812 105.121275) (xy 146.993135 105.130887) (xy 147.041458 105.1405) + (xy 147.041459 105.1405) (xy 154.638543 105.1405) (xy 154.837809 105.100863) (xy 154.838142 105.102538) + (xy 154.899847 105.101975) (xy 154.958967 105.139211) (xy 154.988572 105.202499) (xy 154.99 105.221266) + (xy 154.99 109.866) (xy 154.970315 109.933039) (xy 154.917511 109.978794) (xy 154.866 109.99) (xy 124.624 109.99) + (xy 124.556961 109.970315) (xy 124.511206 109.917511) (xy 124.5 109.866) (xy 124.5 106.561288) (xy 126.2995 106.561288) + (xy 126.331161 106.801785) (xy 126.393947 107.036104) (xy 126.486773 107.260205) (xy 126.486776 107.260212) + (xy 126.608064 107.470289) (xy 126.608066 107.470292) (xy 126.608067 107.470293) (xy 126.755733 107.662736) + (xy 126.755739 107.662743) (xy 126.927256 107.83426) (xy 126.927262 107.834265) (xy 127.119711 107.981936) + (xy 127.329788 108.103224) (xy 127.5539 108.196054) (xy 127.788211 108.258838) (xy 127.968586 108.282584) + (xy 128.028711 108.2905) (xy 128.028712 108.2905) (xy 128.271289 108.2905) (xy 128.319388 108.284167) + (xy 128.511789 108.258838) (xy 128.7461 108.196054) (xy 128.970212 108.103224) (xy 129.180289 107.981936) + (xy 129.372738 107.834265) (xy 129.544265 107.662738) (xy 129.691936 107.470289) (xy 129.813224 107.260212) + (xy 129.906054 107.0361) (xy 129.968838 106.801789) (xy 130.0005 106.561288) (xy 130.0005 106.318712) + (xy 129.968838 106.078211) (xy 129.906054 105.8439) (xy 129.813224 105.619788) (xy 129.691936 105.409711) + (xy 129.631018 105.330321) (xy 129.544266 105.217263) (xy 129.54426 105.217256) (xy 129.372743 105.045739) + (xy 129.372736 105.045733) (xy 129.180293 104.898067) (xy 129.180292 104.898066) (xy 129.180289 104.898064) + (xy 129.008661 104.798974) (xy 128.970214 104.776777) (xy 128.970205 104.776773) (xy 128.746104 104.683947) + (xy 128.511785 104.621161) (xy 128.271289 104.5895) (xy 128.271288 104.5895) (xy 128.028712 104.5895) + (xy 128.028711 104.5895) (xy 127.788214 104.621161) (xy 127.553895 104.683947) (xy 127.329794 104.776773) + (xy 127.329785 104.776777) (xy 127.119706 104.898067) (xy 126.927263 105.045733) (xy 126.927256 105.045739) + (xy 126.755739 105.217256) (xy 126.755733 105.217263) (xy 126.608067 105.409706) (xy 126.486777 105.619785) + (xy 126.486773 105.619794) (xy 126.393947 105.843895) (xy 126.331161 106.078214) (xy 126.2995 106.318711) + (xy 126.2995 106.561288) (xy 124.5 106.561288) (xy 124.5 95.565758) (xy 129.019311 95.565758) (xy 129.6 96.146446) + (xy 129.600001 96.146446) (xy 130.180687 95.565758) (xy 130.092413 95.511101) (xy 130.092411 95.5111) + (xy 129.902321 95.43746) (xy 129.701928 95.4) (xy 129.498072 95.4) (xy 129.297678 95.43746) (xy 129.107588 95.5111) + (xy 129.107581 95.511104) (xy 129.019312 95.565757) (xy 129.019311 95.565758) (xy 124.5 95.565758) + (xy 124.5 76.41) (xy 130.01 76.41) (xy 131.51 76.41) (xy 131.51 76.91) (xy 130.010001 76.91) (xy 130.010001 77.724197) + (xy 130.0204 77.856332) (xy 130.075377 78.074519) (xy 130.168428 78.279374) (xy 130.168431 78.27938) + (xy 130.296559 78.464323) (xy 130.296569 78.464335) (xy 130.455664 78.62343) (xy 130.455676 78.62344) + (xy 130.640619 78.751568) (xy 130.640625 78.751571) (xy 130.84548 78.844622) (xy 131.063667 78.899599) + (xy 131.19581 78.909999) (xy 131.759999 78.909999) (xy 131.76 78.909998) (xy 131.76 78.093012) (xy 131.817007 78.125925) + (xy 131.944174 78.16) (xy 132.075826 78.16) (xy 132.202993 78.125925) (xy 132.26 78.093012) (xy 132.26 78.909999) + (xy 132.824182 78.909999) (xy 132.824197 78.909998) (xy 132.956332 78.899599) (xy 133.174519 78.844622) + (xy 133.379374 78.751571) (xy 133.37938 78.751568) (xy 133.564323 78.62344) (xy 133.564335 78.62343) + (xy 133.72343 78.464335) (xy 133.72344 78.464323) (xy 133.851568 78.27938) (xy 133.851571 78.279374) + (xy 133.944622 78.074519) (xy 133.999599 77.856332) (xy 134.009999 77.724196) (xy 134.01 77.724184) + (xy 134.01 76.91) (xy 132.51 76.91) (xy 132.51 76.41) (xy 134.009999 76.41) (xy 134.009999 75.595817) + (xy 134.009998 75.595802) (xy 133.999599 75.463667) (xy 133.944622 75.24548) (xy 133.851571 75.040625) + (xy 133.851568 75.040619) (xy 133.72344 74.855676) (xy 133.72343 74.855664) (xy 133.564335 74.696569) + (xy 133.564323 74.696559) (xy 133.37938 74.568431) (xy 133.379374 74.568428) (xy 133.174519 74.475377) + (xy 132.956332 74.4204) (xy 132.824196 74.41) (xy 132.26 74.41) (xy 132.26 75.226988) (xy 132.202993 75.194075) + (xy 132.075826 75.16) (xy 131.944174 75.16) (xy 131.817007 75.194075) (xy 131.76 75.226988) (xy 131.76 74.41) + (xy 131.195817 74.41) (xy 131.195802 74.410001) (xy 131.063667 74.4204) (xy 130.84548 74.475377) + (xy 130.640625 74.568428) (xy 130.640619 74.568431) (xy 130.455676 74.696559) (xy 130.455664 74.696569) + (xy 130.296569 74.855664) (xy 130.296559 74.855676) (xy 130.168431 75.040619) (xy 130.168428 75.040625) + (xy 130.075377 75.24548) (xy 130.0204 75.463667) (xy 130.01 75.595803) (xy 130.01 76.41) (xy 124.5 76.41) + (xy 124.5 48.571288) (xy 126.2895 48.571288) (xy 126.321161 48.811785) (xy 126.383947 49.046104) + (xy 126.476773 49.270205) (xy 126.476776 49.270212) (xy 126.598064 49.480289) (xy 126.598066 49.480292) + (xy 126.598067 49.480293) (xy 126.745733 49.672736) (xy 126.745739 49.672743) (xy 126.917256 49.84426) + (xy 126.917262 49.844265) (xy 127.109711 49.991936) (xy 127.319788 50.113224) (xy 127.5439 50.206054) + (xy 127.778211 50.268838) (xy 127.958586 50.292584) (xy 128.018711 50.3005) (xy 128.018712 50.3005) + (xy 128.261289 50.3005) (xy 128.309388 50.294167) (xy 128.501789 50.268838) (xy 128.7361 50.206054) + (xy 128.960212 50.113224) (xy 129.170289 49.991936) (xy 129.362738 49.844265) (xy 129.534265 49.672738) + (xy 129.681936 49.480289) (xy 129.803224 49.270212) (xy 129.896054 49.0461) (xy 129.958838 48.811789) + (xy 129.9905 48.571288) (xy 129.9905 48.328712) (xy 129.958838 48.088211) (xy 129.896054 47.8539) + (xy 129.803224 47.629788) (xy 129.681936 47.419711) (xy 129.534265 47.227262) (xy 129.53426 47.227256) + (xy 129.362743 47.055739) (xy 129.362736 47.055733) (xy 129.170293 46.908067) (xy 129.170292 46.908066) + (xy 129.170289 46.908064) (xy 128.960212 46.786776) (xy 128.960205 46.786773) (xy 128.736104 46.693947) + (xy 128.501785 46.631161) (xy 128.261289 46.5995) (xy 128.261288 46.5995) (xy 128.018712 46.5995) + (xy 128.018711 46.5995) (xy 127.778214 46.631161) (xy 127.543895 46.693947) (xy 127.319794 46.786773) + (xy 127.319785 46.786777) (xy 127.109706 46.908067) (xy 126.917263 47.055733) (xy 126.917256 47.055739) + (xy 126.745739 47.227256) (xy 126.745733 47.227263) (xy 126.598067 47.419706) (xy 126.476777 47.629785) + (xy 126.476773 47.629794) (xy 126.383947 47.853895) (xy 126.321161 48.088214) (xy 126.2895 48.328711) + (xy 126.2895 48.571288) (xy 124.5 48.571288) (xy 124.5 45.054) (xy 124.519685 44.986961) (xy 124.572489 44.941206) + (xy 124.624 44.93) (xy 154.866 44.93) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 150.601257 49.020185) (xy 150.621899 49.036819) (xy 152.063181 50.478101) (xy 152.096666 50.539424) + (xy 152.0995 50.565782) (xy 152.0995 51.927228) (xy 152.079815 51.994267) (xy 152.027011 52.040022) + (xy 152.007594 52.047003) (xy 151.936342 52.066095) (xy 151.936335 52.066098) (xy 151.722171 52.165964) + (xy 151.722169 52.165965) (xy 151.5286 52.301503) (xy 151.406673 52.42343) (xy 151.34535 52.456914) + (xy 151.275658 52.45193) (xy 151.219725 52.410058) (xy 151.20281 52.379081) (xy 151.153797 52.247671) + (xy 151.153793 52.247664) (xy 151.067547 52.132455) (xy 151.067544 52.132452) (xy 150.952335 52.046206) + (xy 150.952328 52.046202) (xy 150.817482 51.995908) (xy 150.817483 51.995908) (xy 150.757883 51.989501) + (xy 150.757881 51.9895) (xy 150.757873 51.9895) (xy 150.757864 51.9895) (xy 148.962129 51.9895) + (xy 148.962123 51.989501) (xy 148.902516 51.995908) (xy 148.767671 52.046202) (xy 148.767664 52.046206) + (xy 148.652455 52.132452) (xy 148.652452 52.132455) (xy 148.566206 52.247664) (xy 148.566202 52.247671) + (xy 148.515908 52.382517) (xy 148.509501 52.442116) (xy 148.5095 52.442135) (xy 148.5095 54.23787) + (xy 148.509501 54.237876) (xy 148.515908 54.297483) (xy 148.566202 54.432328) (xy 148.566206 54.432335) + (xy 148.652452 54.547544) (xy 148.652455 54.547547) (xy 148.767664 54.633793) (xy 148.767671 54.633797) + (xy 148.899081 54.68281) (xy 148.955015 54.724681) (xy 148.979432 54.790145) (xy 148.96458 54.858418) + (xy 148.94343 54.886673) (xy 148.821503 55.0086) (xy 148.685965 55.202169) (xy 148.685964 55.202171) + (xy 148.586098 55.416335) (xy 148.586094 55.416344) (xy 148.524938 55.644586) (xy 148.524936 55.644596) + (xy 148.504341 55.879999) (xy 148.504341 55.88) (xy 148.524936 56.115403) (xy 148.524938 56.115413) + (xy 148.586094 56.343655) (xy 148.586096 56.343659) (xy 148.586097 56.343663) (xy 148.59 56.352032) + (xy 148.685965 56.55783) (xy 148.685967 56.557834) (xy 148.794281 56.712521) (xy 148.821501 56.751396) + (xy 148.821506 56.751402) (xy 148.988597 56.918493) (xy 148.988603 56.918498) (xy 149.174158 57.048425) + (xy 149.217783 57.103002) (xy 149.224977 57.1725) (xy 149.193454 57.234855) (xy 149.174158 57.251575) + (xy 148.988597 57.381505) (xy 148.821505 57.548597) (xy 148.685965 57.742169) (xy 148.685964 57.742171) + (xy 148.586098 57.956335) (xy 148.586094 57.956344) (xy 148.524938 58.184586) (xy 148.524936 58.184596) + (xy 148.504341 58.419999) (xy 148.504341 58.42) (xy 148.524936 58.655403) (xy 148.524938 58.655413) + (xy 148.586094 58.883655) (xy 148.586096 58.883659) (xy 148.586097 58.883663) (xy 148.669155 59.061781) + (xy 148.685965 59.09783) (xy 148.685967 59.097834) (xy 148.794281 59.252521) (xy 148.821501 59.291396) + (xy 148.821506 59.291402) (xy 148.988597 59.458493) (xy 148.988603 59.458498) (xy 149.174158 59.588425) + (xy 149.217783 59.643002) (xy 149.224977 59.7125) (xy 149.193454 59.774855) (xy 149.174158 59.791575) + (xy 148.988597 59.921505) (xy 148.821505 60.088597) (xy 148.685965 60.282169) (xy 148.685964 60.282171) + (xy 148.586098 60.496335) (xy 148.586094 60.496344) (xy 148.524938 60.724586) (xy 148.524936 60.724596) + (xy 148.504341 60.959999) (xy 148.504341 60.96) (xy 148.524936 61.195403) (xy 148.524938 61.195413) + (xy 148.586094 61.423655) (xy 148.586096 61.423659) (xy 148.586097 61.423663) (xy 148.59 61.432032) + (xy 148.685965 61.63783) (xy 148.685967 61.637834) (xy 148.794281 61.792521) (xy 148.821501 61.831396) + (xy 148.821506 61.831402) (xy 148.988597 61.998493) (xy 148.988603 61.998498) (xy 149.174594 62.12873) + (xy 149.218219 62.183307) (xy 149.225413 62.252805) (xy 149.19389 62.31516) (xy 149.174595 62.33188) + (xy 148.988922 62.46189) (xy 148.98892 62.461891) (xy 148.821891 62.62892) (xy 148.821886 62.628926) + (xy 148.6864 62.82242) (xy 148.686399 62.822422) (xy 148.58657 63.036507) (xy 148.586567 63.036513) + (xy 148.529364 63.249999) (xy 148.529364 63.25) (xy 149.426988 63.25) (xy 149.394075 63.307007) + (xy 149.36 63.434174) (xy 149.36 63.565826) (xy 149.394075 63.692993) (xy 149.426988 63.75) (xy 148.529364 63.75) + (xy 148.586567 63.963486) (xy 148.58657 63.963492) (xy 148.686399 64.177578) (xy 148.821894 64.371082) + (xy 148.988917 64.538105) (xy 149.174595 64.668119) (xy 149.218219 64.722696) (xy 149.225412 64.792195) + (xy 149.19389 64.854549) (xy 149.174595 64.871269) (xy 148.988594 65.001508) (xy 148.821505 65.168597) + (xy 148.685965 65.362169) (xy 148.685964 65.362171) (xy 148.586098 65.576335) (xy 148.586094 65.576344) + (xy 148.524938 65.804586) (xy 148.524936 65.804596) (xy 148.504341 66.039999) (xy 148.504341 66.04) + (xy 148.524936 66.275403) (xy 148.524938 66.275413) (xy 148.586094 66.503655) (xy 148.586096 66.503659) + (xy 148.586097 66.503663) (xy 148.59 66.512032) (xy 148.685965 66.71783) (xy 148.685967 66.717834) + (xy 148.794281 66.872521) (xy 148.821501 66.911396) (xy 148.821506 66.911402) (xy 148.988597 67.078493) + (xy 148.988603 67.078498) (xy 149.174158 67.208425) (xy 149.217783 67.263002) (xy 149.224977 67.3325) + (xy 149.193454 67.394855) (xy 149.174158 67.411575) (xy 148.988597 67.541505) (xy 148.821505 67.708597) + (xy 148.685965 67.902169) (xy 148.685964 67.902171) (xy 148.586098 68.116335) (xy 148.586094 68.116344) + (xy 148.524938 68.344586) (xy 148.524936 68.344596) (xy 148.504341 68.579999) (xy 148.504341 68.58) + (xy 148.524936 68.815403) (xy 148.524938 68.815413) (xy 148.586094 69.043655) (xy 148.586096 69.043659) + (xy 148.586097 69.043663) (xy 148.59 69.052032) (xy 148.685965 69.25783) (xy 148.685967 69.257834) + (xy 148.794281 69.412521) (xy 148.821501 69.451396) (xy 148.821506 69.451402) (xy 148.988597 69.618493) + (xy 148.988603 69.618498) (xy 149.174158 69.748425) (xy 149.217783 69.803002) (xy 149.224977 69.8725) + (xy 149.193454 69.934855) (xy 149.174158 69.951575) (xy 148.988597 70.081505) (xy 148.821505 70.248597) + (xy 148.685965 70.442169) (xy 148.685964 70.442171) (xy 148.586098 70.656335) (xy 148.586094 70.656344) + (xy 148.524938 70.884586) (xy 148.524936 70.884596) (xy 148.504341 71.119999) (xy 148.504341 71.12) + (xy 148.524936 71.355403) (xy 148.524938 71.355413) (xy 148.586094 71.583655) (xy 148.586096 71.583659) + (xy 148.586097 71.583663) (xy 148.658956 71.739909) (xy 148.685965 71.79783) (xy 148.685967 71.797834) + (xy 148.794281 71.952521) (xy 148.821501 71.991396) (xy 148.821506 71.991402) (xy 148.988597 72.158493) + (xy 148.988603 72.158498) (xy 149.174158 72.288425) (xy 149.217783 72.343002) (xy 149.224977 72.4125) + (xy 149.193454 72.474855) (xy 149.174158 72.491575) (xy 148.988597 72.621505) (xy 148.821505 72.788597) + (xy 148.685965 72.982169) (xy 148.685964 72.982171) (xy 148.586098 73.196335) (xy 148.586094 73.196344) + (xy 148.524938 73.424586) (xy 148.524936 73.424596) (xy 148.504341 73.659999) (xy 148.504341 73.66) + (xy 148.524936 73.895403) (xy 148.524938 73.895413) (xy 148.586094 74.123655) (xy 148.586096 74.123659) + (xy 148.586097 74.123663) (xy 148.62659 74.2105) (xy 148.685965 74.33783) (xy 148.685967 74.337834) + (xy 148.794281 74.492521) (xy 148.821501 74.531396) (xy 148.821506 74.531402) (xy 148.988597 74.698493) + (xy 148.988603 74.698498) (xy 149.174158 74.828425) (xy 149.217783 74.883002) (xy 149.224977 74.9525) + (xy 149.193454 75.014855) (xy 149.174158 75.031575) (xy 148.988597 75.161505) (xy 148.821505 75.328597) + (xy 148.685965 75.522169) (xy 148.685964 75.522171) (xy 148.586098 75.736335) (xy 148.586094 75.736344) + (xy 148.524938 75.964586) (xy 148.524936 75.964596) (xy 148.504341 76.199999) (xy 148.504341 76.2) + (xy 148.524936 76.435403) (xy 148.524938 76.435413) (xy 148.586094 76.663655) (xy 148.586096 76.663659) + (xy 148.586097 76.663663) (xy 148.59 76.672032) (xy 148.685965 76.87783) (xy 148.685967 76.877834) + (xy 148.794281 77.032521) (xy 148.821501 77.071396) (xy 148.821506 77.071402) (xy 148.988597 77.238493) + (xy 148.988603 77.238498) (xy 149.174158 77.368425) (xy 149.217783 77.423002) (xy 149.224977 77.4925) + (xy 149.193454 77.554855) (xy 149.174158 77.571575) (xy 148.988597 77.701505) (xy 148.821505 77.868597) + (xy 148.685965 78.062169) (xy 148.685964 78.062171) (xy 148.586098 78.276335) (xy 148.586094 78.276344) + (xy 148.524938 78.504586) (xy 148.524936 78.504596) (xy 148.504341 78.739999) (xy 148.504341 78.74) + (xy 148.524936 78.975403) (xy 148.524938 78.975413) (xy 148.586094 79.203655) (xy 148.586096 79.203659) + (xy 148.586097 79.203663) (xy 148.59 79.212032) (xy 148.685965 79.41783) (xy 148.685967 79.417834) + (xy 148.794281 79.572521) (xy 148.821501 79.611396) (xy 148.821506 79.611402) (xy 148.988597 79.778493) + (xy 148.988603 79.778498) (xy 149.174158 79.908425) (xy 149.217783 79.963002) (xy 149.224977 80.0325) + (xy 149.193454 80.094855) (xy 149.174158 80.111575) (xy 148.988597 80.241505) (xy 148.821505 80.408597) + (xy 148.685965 80.602169) (xy 148.685964 80.602171) (xy 148.586098 80.816335) (xy 148.586094 80.816344) + (xy 148.524938 81.044586) (xy 148.524936 81.044596) (xy 148.504341 81.279999) (xy 148.504341 81.28) + (xy 148.524936 81.515403) (xy 148.524938 81.515413) (xy 148.586094 81.743655) (xy 148.586096 81.743659) + (xy 148.586097 81.743663) (xy 148.59 81.752032) (xy 148.685965 81.95783) (xy 148.685967 81.957834) + (xy 148.779391 82.091256) (xy 148.821501 82.151396) (xy 148.821506 82.151402) (xy 148.988597 82.318493) + (xy 148.988603 82.318498) (xy 149.174158 82.448425) (xy 149.217783 82.503002) (xy 149.224977 82.5725) + (xy 149.193454 82.634855) (xy 149.174158 82.651575) (xy 148.988597 82.781505) (xy 148.821505 82.948597) + (xy 148.685965 83.142169) (xy 148.685964 83.142171) (xy 148.586098 83.356335) (xy 148.586094 83.356344) + (xy 148.524938 83.584586) (xy 148.524936 83.584596) (xy 148.504341 83.819999) (xy 148.504341 83.82) + (xy 148.524936 84.055403) (xy 148.524938 84.055413) (xy 148.586094 84.283655) (xy 148.586096 84.283659) + (xy 148.586097 84.283663) (xy 148.59 84.292032) (xy 148.685965 84.49783) (xy 148.685967 84.497834) + (xy 148.725063 84.553668) (xy 148.821501 84.691396) (xy 148.821506 84.691402) (xy 148.988597 84.858493) + (xy 148.988603 84.858498) (xy 149.174158 84.988425) (xy 149.217783 85.043002) (xy 149.224977 85.1125) + (xy 149.193454 85.174855) (xy 149.174158 85.191575) (xy 148.988597 85.321505) (xy 148.821505 85.488597) + (xy 148.685965 85.682169) (xy 148.685964 85.682171) (xy 148.586098 85.896335) (xy 148.586094 85.896344) + (xy 148.524938 86.124586) (xy 148.524936 86.124596) (xy 148.504341 86.359999) (xy 148.504341 86.36) + (xy 148.524936 86.595403) (xy 148.524938 86.595413) (xy 148.586094 86.823655) (xy 148.586096 86.823659) + (xy 148.586097 86.823663) (xy 148.59 86.832032) (xy 148.685965 87.03783) (xy 148.685967 87.037834) + (xy 148.794281 87.192521) (xy 148.821501 87.231396) (xy 148.821506 87.231402) (xy 148.988597 87.398493) + (xy 148.988603 87.398498) (xy 149.174158 87.528425) (xy 149.217783 87.583002) (xy 149.224977 87.6525) + (xy 149.193454 87.714855) (xy 149.174158 87.731575) (xy 148.988597 87.861505) (xy 148.821505 88.028597) + (xy 148.685965 88.222169) (xy 148.685964 88.222171) (xy 148.586098 88.436335) (xy 148.586094 88.436344) + (xy 148.524938 88.664586) (xy 148.524936 88.664596) (xy 148.504341 88.899999) (xy 148.504341 88.9) + (xy 148.524936 89.135403) (xy 148.524938 89.135413) (xy 148.586094 89.363655) (xy 148.586096 89.363659) + (xy 148.586097 89.363663) (xy 148.666004 89.535023) (xy 148.685965 89.57783) (xy 148.685967 89.577834) + (xy 148.794281 89.732521) (xy 148.821501 89.771396) (xy 148.821506 89.771402) (xy 148.988597 89.938493) + (xy 148.988603 89.938498) (xy 149.174158 90.068425) (xy 149.217783 90.123002) (xy 149.224977 90.1925) + (xy 149.193454 90.254855) (xy 149.174158 90.271575) (xy 148.988597 90.401505) (xy 148.821505 90.568597) + (xy 148.685965 90.762169) (xy 148.685964 90.762171) (xy 148.586098 90.976335) (xy 148.586094 90.976344) + (xy 148.524938 91.204586) (xy 148.524936 91.204596) (xy 148.504341 91.439999) (xy 148.504341 91.44) + (xy 148.524936 91.675403) (xy 148.524938 91.675413) (xy 148.586094 91.903655) (xy 148.586096 91.903659) + (xy 148.586097 91.903663) (xy 148.663201 92.069013) (xy 148.685965 92.11783) (xy 148.685967 92.117834) + (xy 148.794281 92.272521) (xy 148.821501 92.311396) (xy 148.821506 92.311402) (xy 148.988597 92.478493) + (xy 148.988603 92.478498) (xy 149.174158 92.608425) (xy 149.217783 92.663002) (xy 149.224977 92.7325) + (xy 149.193454 92.794855) (xy 149.174158 92.811575) (xy 148.988597 92.941505) (xy 148.821505 93.108597) + (xy 148.685965 93.302169) (xy 148.685964 93.302171) (xy 148.586098 93.516335) (xy 148.586094 93.516344) + (xy 148.524938 93.744586) (xy 148.524936 93.744596) (xy 148.504341 93.979999) (xy 148.504341 93.98) + (xy 148.524936 94.215403) (xy 148.524938 94.215413) (xy 148.586094 94.443655) (xy 148.586096 94.443659) + (xy 148.586097 94.443663) (xy 148.630047 94.537913) (xy 148.685965 94.65783) (xy 148.685967 94.657834) + (xy 148.738008 94.732155) (xy 148.821501 94.851396) (xy 148.821506 94.851402) (xy 148.988597 95.018493) + (xy 148.988603 95.018498) (xy 149.174158 95.148425) (xy 149.217783 95.203002) (xy 149.224977 95.2725) + (xy 149.193454 95.334855) (xy 149.174158 95.351575) (xy 148.988597 95.481505) (xy 148.986922 95.483181) + (xy 148.986 95.483684) (xy 148.984449 95.484986) (xy 148.984187 95.484674) (xy 148.925599 95.516666) + (xy 148.899241 95.5195) (xy 146.675783 95.5195) (xy 146.608744 95.499815) (xy 146.588102 95.483181) + (xy 140.474209 89.369289) (xy 140.474206 89.369285) (xy 140.474206 89.369286) (xy 140.467139 89.362219) + (xy 140.467139 89.362218) (xy 140.327782 89.222861) (xy 140.327781 89.22286) (xy 140.32778 89.222859) + (xy 140.16392 89.113371) (xy 140.163911 89.113366) (xy 140.080683 89.078892) (xy 140.035165 89.060038) + (xy 140.0085 89.048993) (xy 139.981837 89.037949) (xy 139.981833 89.037948) (xy 139.844605 89.010652) + (xy 139.788543 88.9995) (xy 139.788541 88.9995) (xy 130.765741 88.9995) (xy 130.698702 88.979815) + (xy 130.652947 88.927011) (xy 130.643003 88.857853) (xy 130.646475 88.841566) (xy 130.685902 88.702992) + (xy 130.685903 88.702989) (xy 130.704713 88.5) (xy 130.704713 88.499999) (xy 130.685903 88.29701) + (xy 130.685902 88.297007) (xy 130.630116 88.100936) (xy 130.630113 88.10093) (xy 130.539249 87.918449) + (xy 130.539247 87.918447) (xy 130.537465 87.916087) (xy 129.894855 88.558696) (xy 129.9 88.539496) + (xy 129.9 88.460504) (xy 129.879556 88.384204) (xy 129.84006 88.315795) (xy 129.784205 88.25994) + (xy 129.715796 88.220444) (xy 129.639496 88.2) (xy 129.560504 88.2) (xy 129.484204 88.220444) (xy 129.415795 88.25994) + (xy 129.35994 88.315795) (xy 129.320444 88.384204) (xy 129.3 88.460504) (xy 129.3 88.539496) (xy 129.305145 88.558699) + (xy 128.662533 87.916087) (xy 128.660755 87.918442) (xy 128.660754 87.918443) (xy 128.569886 88.10093) + (xy 128.569883 88.100936) (xy 128.514097 88.297007) (xy 128.514096 88.29701) (xy 128.495287 88.499999) + (xy 128.495287 88.5) (xy 128.514096 88.702989) (xy 128.514097 88.702992) (xy 128.569883 88.899063) + (xy 128.569886 88.899069) (xy 128.660754 89.081556) (xy 128.731212 89.174857) (xy 128.755904 89.240218) + (xy 128.741339 89.308553) (xy 128.731212 89.32431) (xy 128.660328 89.418175) (xy 128.569422 89.600739) + (xy 128.569417 89.600752) (xy 128.513602 89.796917) (xy 128.494785 89.999999) (xy 128.494785 90) + (xy 128.513602 90.203082) (xy 128.569417 90.399247) (xy 128.569422 90.39926) (xy 128.660328 90.581824) + (xy 128.730898 90.675274) (xy 128.75559 90.740635) (xy 128.741025 90.80897) (xy 128.730898 90.824726) + (xy 128.660328 90.918175) (xy 128.569422 91.100739) (xy 128.569417 91.100752) (xy 128.513602 91.296917) + (xy 128.494785 91.499999) (xy 128.494785 91.5) (xy 128.513602 91.703082) (xy 128.569417 91.899247) + (xy 128.569422 91.89926) (xy 128.619699 92.000228) (xy 128.63196 92.069013) (xy 128.605087 92.133508) + (xy 128.547611 92.173236) (xy 128.508699 92.1795) (xy 128.285783 92.1795) (xy 128.218744 92.159815) + (xy 128.198102 92.143181) (xy 128.166819 92.111898) (xy 128.133334 92.050575) (xy 128.1305 92.024217) + (xy 128.1305 87.565758) (xy 129.019311 87.565758) (xy 129.6 88.146446) (xy 129.600001 88.146446) + (xy 130.180687 87.565758) (xy 130.092413 87.511101) (xy 130.092411 87.5111) (xy 129.902321 87.43746) + (xy 129.701928 87.4) (xy 129.498072 87.4) (xy 129.297678 87.43746) (xy 129.107588 87.5111) (xy 129.107581 87.511104) + (xy 129.019312 87.565757) (xy 129.019311 87.565758) (xy 128.1305 87.565758) (xy 128.1305 86.156998) + (xy 128.150185 86.089959) (xy 128.16682 86.069315) (xy 128.199319 86.036817) (xy 128.260643 86.003333) + (xy 128.286999 86.0005) (xy 134.16282 86.0005) (xy 134.229859 86.020185) (xy 134.262085 86.050187) + (xy 134.342454 86.157546) (xy 134.388643 86.192123) (xy 134.457664 86.243793) (xy 134.457671 86.243797) + (xy 134.592517 86.294091) (xy 134.592516 86.294091) (xy 134.599444 86.294835) (xy 134.652127 86.3005) + (xy 136.347872 86.300499) (xy 136.407483 86.294091) (xy 136.542331 86.243796) (xy 136.657546 86.157546) + (xy 136.743796 86.042331) (xy 136.794091 85.907483) (xy 136.8005 85.847873) (xy 136.800499 85.847845) + (xy 136.800678 85.844547) (xy 136.802183 85.844627) (xy 136.820112 85.783326) (xy 136.872868 85.737514) + (xy 136.916465 85.729981) (xy 137.6 85.046446) (xy 137.6 85.052661) (xy 137.627259 85.154394) (xy 137.67992 85.245606) + (xy 137.754394 85.32008) (xy 137.845606 85.372741) (xy 137.947339 85.4) (xy 137.953553 85.4) (xy 137.274526 86.079025) + (xy 137.347513 86.130132) (xy 137.347521 86.130136) (xy 137.553668 86.226264) (xy 137.553682 86.226269) + (xy 137.773389 86.285139) (xy 137.7734 86.285141) (xy 137.999998 86.304966) (xy 138.000002 86.304966) + (xy 138.226599 86.285141) (xy 138.22661 86.285139) (xy 138.446317 86.226269) (xy 138.446331 86.226264) + (xy 138.652478 86.130136) (xy 138.725471 86.079024) (xy 138.046447 85.4) (xy 138.052661 85.4) (xy 138.154394 85.372741) + (xy 138.245606 85.32008) (xy 138.32008 85.245606) (xy 138.372741 85.154394) (xy 138.4 85.052661) + (xy 138.4 85.046447) (xy 139.079024 85.725471) (xy 139.130136 85.652478) (xy 139.226264 85.446331) + (xy 139.226269 85.446317) (xy 139.285139 85.22661) (xy 139.285141 85.226599) (xy 139.304966 85.000002) + (xy 139.304966 84.999997) (xy 139.285141 84.7734) (xy 139.285139 84.773389) (xy 139.226269 84.553682) + (xy 139.226264 84.553668) (xy 139.130136 84.347521) (xy 139.130132 84.347513) (xy 139.079025 84.274526) + (xy 138.4 84.953551) (xy 138.4 84.947339) (xy 138.372741 84.845606) (xy 138.32008 84.754394) (xy 138.245606 84.67992) + (xy 138.154394 84.627259) (xy 138.052661 84.6) (xy 138.046446 84.6) (xy 138.725472 83.920974) (xy 138.652478 83.869863) + (xy 138.446331 83.773735) (xy 138.446314 83.773729) (xy 138.413122 83.764835) (xy 138.353463 83.728469) + (xy 138.322935 83.665622) (xy 138.331231 83.596246) (xy 138.357532 83.557386) (xy 138.647778 83.267141) + (xy 138.647782 83.267139) (xy 138.787139 83.127782) (xy 138.896632 82.963914) (xy 138.902977 82.948597) + (xy 138.972049 82.781839) (xy 138.972051 82.781835) (xy 138.999078 82.645965) (xy 139.0105 82.588543) + (xy 139.0105 79.034499) (xy 139.030185 78.96746) (xy 139.082989 78.921705) (xy 139.1345 78.910499) + (xy 139.807871 78.910499) (xy 139.807872 78.910499) (xy 139.867483 78.904091) (xy 140.002331 78.853796) + (xy 140.117546 78.767546) (xy 140.203796 78.652331) (xy 140.254091 78.517483) (xy 140.2605 78.457873) + (xy 140.260499 74.862128) (xy 140.254091 74.802517) (xy 140.215294 74.698498) (xy 140.203797 74.667671) + (xy 140.203793 74.667664) (xy 140.117547 74.552455) (xy 140.117544 74.552452) (xy 140.002335 74.466206) + (xy 140.002328 74.466202) (xy 139.867482 74.415908) (xy 139.867483 74.415908) (xy 139.807883 74.409501) + (xy 139.807881 74.4095) (xy 139.807873 74.4095) (xy 139.807865 74.4095) (xy 139.1345 74.4095) (xy 139.067461 74.389815) + (xy 139.021706 74.337011) (xy 139.0105 74.2855) (xy 139.0105 54.455782) (xy 139.030185 54.388743) + (xy 139.046819 54.368101) (xy 144.378101 49.036819) (xy 144.439424 49.003334) (xy 144.465782 49.0005) + (xy 150.534218 49.0005) + ) + ) + ) +) \ No newline at end of file diff --git a/hardware/kicad/Koken-KeyBox.kicad_prl b/hardware/kicad/Koken-KeyBox.kicad_prl new file mode 100644 index 0000000..86e158e --- /dev/null +++ b/hardware/kicad/Koken-KeyBox.kicad_prl @@ -0,0 +1,83 @@ +{ + "board": { + "active_layer": 45, + "active_layer_preset": "All Layers", + "auto_track_width": true, + "hidden_netclasses": [], + "hidden_nets": [], + "high_contrast_mode": 0, + "net_color_mode": 1, + "opacity": { + "images": 0.6, + "pads": 1.0, + "tracks": 1.0, + "vias": 1.0, + "zones": 0.6 + }, + "selection_filter": { + "dimensions": true, + "footprints": true, + "graphics": true, + "keepouts": true, + "lockedItems": false, + "otherItems": true, + "pads": true, + "text": true, + "tracks": true, + "vias": true, + "zones": true + }, + "visible_items": [ + 0, + 1, + 2, + 3, + 4, + 5, + 8, + 9, + 10, + 11, + 12, + 13, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 39, + 40 + ], + "visible_layers": "fffffff_ffffffff", + "zone_display_mode": 0 + }, + "git": { + "repo_password": "", + "repo_type": "", + "repo_username": "", + "ssh_key": "" + }, + "meta": { + "filename": "Koken-KeyBox.kicad_prl", + "version": 3 + }, + "project": { + "files": [] + } +} diff --git a/hardware/kicad/Koken-KeyBox.kicad_pro b/hardware/kicad/Koken-KeyBox.kicad_pro new file mode 100644 index 0000000..7e21b40 --- /dev/null +++ b/hardware/kicad/Koken-KeyBox.kicad_pro @@ -0,0 +1,596 @@ +{ + "board": { + "3dviewports": [], + "design_settings": { + "defaults": { + "apply_defaults_to_fp_fields": false, + "apply_defaults_to_fp_shapes": false, + "apply_defaults_to_fp_text": false, + "board_outline_line_width": 0.05, + "copper_line_width": 0.2, + "copper_text_italic": false, + "copper_text_size_h": 1.5, + "copper_text_size_v": 1.5, + "copper_text_thickness": 0.3, + "copper_text_upright": false, + "courtyard_line_width": 0.05, + "dimension_precision": 4, + "dimension_units": 3, + "dimensions": { + "arrow_length": 1270000, + "extension_offset": 500000, + "keep_text_aligned": true, + "suppress_zeroes": false, + "text_position": 0, + "units_format": 1 + }, + "fab_line_width": 0.1, + "fab_text_italic": false, + "fab_text_size_h": 1.0, + "fab_text_size_v": 1.0, + "fab_text_thickness": 0.15, + "fab_text_upright": false, + "other_line_width": 0.1, + "other_text_italic": false, + "other_text_size_h": 1.0, + "other_text_size_v": 1.0, + "other_text_thickness": 0.15, + "other_text_upright": false, + "pads": { + "drill": 0.8, + "height": 1.6, + "width": 1.6 + }, + "silk_line_width": 0.1, + "silk_text_italic": false, + "silk_text_size_h": 1.0, + "silk_text_size_v": 1.0, + "silk_text_thickness": 0.1, + "silk_text_upright": false, + "zones": { + "min_clearance": 0.5 + } + }, + "diff_pair_dimensions": [ + { + "gap": 0.0, + "via_gap": 0.0, + "width": 0.0 + } + ], + "drc_exclusions": [], + "meta": { + "version": 2 + }, + "rule_severities": { + "annular_width": "error", + "clearance": "error", + "connection_width": "warning", + "copper_edge_clearance": "error", + "copper_sliver": "warning", + "courtyards_overlap": "error", + "diff_pair_gap_out_of_range": "error", + "diff_pair_uncoupled_length_too_long": "error", + "drill_out_of_range": "error", + "duplicate_footprints": "warning", + "extra_footprint": "warning", + "footprint": "error", + "footprint_symbol_mismatch": "warning", + "footprint_type_mismatch": "ignore", + "hole_clearance": "error", + "hole_near_hole": "error", + "invalid_outline": "error", + "isolated_copper": "warning", + "item_on_disabled_layer": "error", + "items_not_allowed": "error", + "length_out_of_range": "error", + "lib_footprint_issues": "warning", + "lib_footprint_mismatch": "warning", + "malformed_courtyard": "error", + "microvia_drill_out_of_range": "error", + "missing_courtyard": "ignore", + "missing_footprint": "warning", + "net_conflict": "warning", + "npth_inside_courtyard": "ignore", + "padstack": "warning", + "pth_inside_courtyard": "ignore", + "shorting_items": "error", + "silk_edge_clearance": "warning", + "silk_over_copper": "warning", + "silk_overlap": "warning", + "skew_out_of_range": "error", + "solder_mask_bridge": "error", + "starved_thermal": "error", + "text_height": "warning", + "text_thickness": "warning", + "through_hole_pad_without_hole": "error", + "too_many_vias": "error", + "track_dangling": "warning", + "track_width": "error", + "tracks_crossing": "error", + "unconnected_items": "error", + "unresolved_variable": "error", + "via_dangling": "warning", + "zones_intersect": "error" + }, + "rules": { + "max_error": 0.005, + "min_clearance": 0.5, + "min_connection": 0.0, + "min_copper_edge_clearance": 0.0, + "min_hole_clearance": 0.25, + "min_hole_to_hole": 0.25, + "min_microvia_diameter": 0.2, + "min_microvia_drill": 0.1, + "min_resolved_spokes": 2, + "min_silk_clearance": 0.0, + "min_text_height": 0.8, + "min_text_thickness": 0.08, + "min_through_hole_diameter": 0.3, + "min_track_width": 0.0, + "min_via_annular_width": 0.1, + "min_via_diameter": 0.5, + "solder_mask_to_copper_clearance": 0.0, + "use_height_for_length_calcs": true + }, + "teardrop_options": [ + { + "td_onpadsmd": true, + "td_onroundshapesonly": false, + "td_ontrackend": false, + "td_onviapad": true + } + ], + "teardrop_parameters": [ + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_on_pad_in_zone": false, + "td_target_name": "td_round_shape", + "td_width_to_size_filter_ratio": 0.9 + }, + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_on_pad_in_zone": false, + "td_target_name": "td_rect_shape", + "td_width_to_size_filter_ratio": 0.9 + }, + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_on_pad_in_zone": false, + "td_target_name": "td_track_end", + "td_width_to_size_filter_ratio": 0.9 + } + ], + "track_widths": [ + 0.0, + 1.0 + ], + "tuning_pattern_settings": { + "diff_pair_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 1.0 + }, + "diff_pair_skew_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 0.6 + }, + "single_track_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 0.6 + } + }, + "via_dimensions": [ + { + "diameter": 0.0, + "drill": 0.0 + } + ], + "zones_allow_external_fillets": false + }, + "ipc2581": { + "dist": "", + "distpn": "", + "internal_id": "", + "mfg": "", + "mpn": "" + }, + "layer_presets": [], + "viewports": [] + }, + "boards": [], + "cvpcb": { + "equivalence_files": [] + }, + "erc": { + "erc_exclusions": [], + "meta": { + "version": 0 + }, + "pin_map": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 2 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 1, + 1, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 2 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 1, + 2, + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + [ + 0, + 2, + 1, + 1, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ] + ], + "rule_severities": { + "bus_definition_conflict": "error", + "bus_entry_needed": "error", + "bus_to_bus_conflict": "error", + "bus_to_net_conflict": "error", + "conflicting_netclasses": "error", + "different_unit_footprint": "error", + "different_unit_net": "error", + "duplicate_reference": "error", + "duplicate_sheet_names": "error", + "endpoint_off_grid": "warning", + "extra_units": "error", + "global_label_dangling": "warning", + "hier_label_mismatch": "error", + "label_dangling": "error", + "lib_symbol_issues": "warning", + "missing_bidi_pin": "warning", + "missing_input_pin": "warning", + "missing_power_pin": "error", + "missing_unit": "warning", + "multiple_net_names": "warning", + "net_not_bus_member": "warning", + "no_connect_connected": "warning", + "no_connect_dangling": "warning", + "pin_not_connected": "error", + "pin_not_driven": "error", + "pin_to_pin": "warning", + "power_pin_not_driven": "error", + "similar_labels": "warning", + "simulation_model_issue": "ignore", + "unannotated": "error", + "unit_value_mismatch": "error", + "unresolved_variable": "error", + "wire_dangling": "error" + } + }, + "libraries": { + "pinned_footprint_libs": [], + "pinned_symbol_libs": [] + }, + "meta": { + "filename": "Koken-KeyBox.kicad_pro", + "version": 1 + }, + "net_settings": { + "classes": [ + { + "bus_width": 12, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "Default", + "pcb_color": "rgba(0, 0, 0, 0.000)", + "schematic_color": "rgba(0, 0, 0, 0.000)", + "track_width": 0.2, + "via_diameter": 0.6, + "via_drill": 0.3, + "wire_width": 6 + } + ], + "meta": { + "version": 3 + }, + "net_colors": null, + "netclass_assignments": null, + "netclass_patterns": [] + }, + "pcbnew": { + "last_paths": { + "gencad": "", + "idf": "", + "netlist": "", + "plot": "output", + "pos_files": "", + "specctra_dsn": "", + "step": "", + "svg": "", + "vrml": "" + }, + "page_layout_descr_file": "" + }, + "schematic": { + "annotate_start_num": 0, + "bom_fmt_presets": [], + "bom_fmt_settings": { + "field_delimiter": ",", + "keep_line_breaks": false, + "keep_tabs": false, + "name": "CSV", + "ref_delimiter": ",", + "ref_range_delimiter": "", + "string_delimiter": "\"" + }, + "bom_presets": [], + "bom_settings": { + "exclude_dnp": false, + "fields_ordered": [ + { + "group_by": false, + "label": "Reference", + "name": "Reference", + "show": true + }, + { + "group_by": true, + "label": "Value", + "name": "Value", + "show": true + }, + { + "group_by": false, + "label": "Datasheet", + "name": "Datasheet", + "show": true + }, + { + "group_by": false, + "label": "Footprint", + "name": "Footprint", + "show": true + }, + { + "group_by": false, + "label": "Qty", + "name": "${QUANTITY}", + "show": true + }, + { + "group_by": true, + "label": "DNP", + "name": "${DNP}", + "show": true + } + ], + "filter_string": "", + "group_symbols": true, + "name": "Grouped By Value", + "sort_asc": true, + "sort_field": "リファレンス" + }, + "connection_grid_size": 50.0, + "drawing": { + "dashed_lines_dash_length_ratio": 12.0, + "dashed_lines_gap_length_ratio": 3.0, + "default_line_thickness": 6.0, + "default_text_size": 50.0, + "field_names": [], + "intersheets_ref_own_page": false, + "intersheets_ref_prefix": "", + "intersheets_ref_short": false, + "intersheets_ref_show": false, + "intersheets_ref_suffix": "", + "junction_size_choice": 3, + "label_size_ratio": 0.375, + "operating_point_overlay_i_precision": 3, + "operating_point_overlay_i_range": "~A", + "operating_point_overlay_v_precision": 3, + "operating_point_overlay_v_range": "~V", + "overbar_offset_ratio": 1.23, + "pin_symbol_size": 25.0, + "text_offset_ratio": 0.15 + }, + "legacy_lib_dir": "", + "legacy_lib_list": [], + "meta": { + "version": 1 + }, + "net_format_name": "", + "page_layout_descr_file": "", + "plot_directory": "", + "spice_current_sheet_as_root": false, + "spice_external_command": "spice \"%I\"", + "spice_model_current_sheet_as_root": true, + "spice_save_all_currents": false, + "spice_save_all_dissipations": false, + "spice_save_all_voltages": false, + "subpart_first_id": 65, + "subpart_id_separator": 0 + }, + "sheets": [ + [ + "701e1df7-6d5c-4f74-9c32-94939907fe91", + "ルート" + ] + ], + "text_variables": {} +} diff --git a/hardware/kicad/Koken-KeyBox.kicad_sch b/hardware/kicad/Koken-KeyBox.kicad_sch new file mode 100644 index 0000000..2ab92a9 --- /dev/null +++ b/hardware/kicad/Koken-KeyBox.kicad_sch @@ -0,0 +1,3166 @@ +(kicad_sch + (version 20231120) + (generator "eeschema") + (generator_version "8.0") + (uuid "701e1df7-6d5c-4f74-9c32-94939907fe91") + (paper "A4") + (lib_symbols + (symbol "Connector:Conn_01x03_Pin" + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x03_Pin" + (at 0 -5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Generic connector, single row, 01x03, script generated" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_locked" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Conn_01x03_Pin_1_1" + (polyline + (pts + (xy 1.27 -2.54) (xy 0.8636 -2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 0) (xy 0.8636 0) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 2.54) (xy 0.8636 2.54) + ) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 0.8636 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type outline) + ) + ) + (rectangle + (start 0.8636 0.127) + (end 0 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type outline) + ) + ) + (rectangle + (start 0.8636 2.667) + (end 0 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type outline) + ) + ) + (pin passive line + (at 5.08 2.54 180) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 0 180) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -2.54 180) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Connector:Jack-DC" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "J" + (at 0 5.334 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Jack-DC" + (at 0 -5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 1.27 -1.016 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 1.27 -1.016 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "DC Barrel Jack" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "DC power barrel jack connector" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "BarrelJack*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Jack-DC_0_1" + (rectangle + (start -5.08 3.81) + (end 5.08 -3.81) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (arc + (start -3.302 3.175) + (mid -3.9343 2.54) + (end -3.302 1.905) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -3.302 3.175) + (mid -3.9343 2.54) + (end -3.302 1.905) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 5.08 2.54) (xy 3.81 2.54) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.81 -2.54) (xy -2.54 -2.54) (xy -1.27 -1.27) (xy 0 -2.54) (xy 2.54 -2.54) (xy 5.08 -2.54) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 3.683 3.175) + (end -3.302 1.905) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + ) + (symbol "Jack-DC_1_1" + (pin passive line + (at 7.62 2.54 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 7.62 -2.54 180) + (length 2.54) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Device:C" + (pin_numbers hide) + (pin_names + (offset 0.254) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "C" + (at 0.635 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "C" + (at 0.635 -2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 0.9652 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Unpolarized capacitor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "cap capacitor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "C_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "C_0_1" + (polyline + (pts + (xy -2.032 -0.762) (xy 2.032 -0.762) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -2.032 0.762) (xy 2.032 0.762) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "C_1_1" + (pin passive line + (at 0 3.81 270) + (length 2.794) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -3.81 90) + (length 2.794) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Mechanical:MountingHole" + (pin_names + (offset 1.016) + ) + (exclude_from_sim yes) + (in_bom no) + (on_board yes) + (property "Reference" "H" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MountingHole" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "mounting hole" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "MountingHole*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MountingHole_0_1" + (circle + (center 0 0) + (radius 1.27) + (stroke + (width 1.27) + (type default) + ) + (fill + (type none) + ) + ) + ) + ) + (symbol "RaspberryPi:Raspberry_Pi_Zero" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "" + (at -1.27 0 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at -1.27 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at -1.27 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at -1.27 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Raspberry_Pi_Zero_0_1" + (rectangle + (start -8.89 2.54) + (end 8.89 -53.34) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Raspberry_Pi_Zero_1_1" + (text "Raspberry Pi ZERO W" + (at 0 4.318 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin input line + (at -11.43 -2.54 0) + (length 2.54) + (name "3.3V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -12.7 180) + (length 2.54) + (name "GPIO15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -15.24 0) + (length 2.54) + (name "GPIO17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -15.24 180) + (length 2.54) + (name "GPIO18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -17.78 0) + (length 2.54) + (name "GPIO27" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -17.78 180) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -20.32 0) + (length 2.54) + (name "GPIO22" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -20.32 180) + (length 2.54) + (name "GPIO23" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -22.86 0) + (length 2.54) + (name "3.3V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -22.86 180) + (length 2.54) + (name "GPIO24" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -25.4 0) + (length 2.54) + (name "GPIO10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -2.54 180) + (length 2.54) + (name "5V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -25.4 180) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -27.94 0) + (length 2.54) + (name "GPIO9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -27.94 180) + (length 2.54) + (name "GPIO25" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "22" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -30.48 0) + (length 2.54) + (name "GPIO11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "23" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -30.48 180) + (length 2.54) + (name "GPIO8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "24" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -33.02 0) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "25" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -33.02 180) + (length 2.54) + (name "GPIO7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "26" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -38.1 0) + (length 2.54) + (name "GPIO5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "29" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -5.08 0) + (length 2.54) + (name "GPIO2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -38.1 180) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "30" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -40.64 0) + (length 2.54) + (name "GPIO6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "31" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -40.64 180) + (length 2.54) + (name "GPIO12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "32" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -43.18 0) + (length 2.54) + (name "GPIO13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "33" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -43.18 180) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "34" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -45.72 0) + (length 2.54) + (name "GPIO19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "35" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -45.72 180) + (length 2.54) + (name "GPIO16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "36" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -48.26 0) + (length 2.54) + (name "GPIO26" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "37" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -48.26 180) + (length 2.54) + (name "GPIO20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "38" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -50.8 0) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "39" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -5.08 180) + (length 2.54) + (name "5V" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -50.8 180) + (length 2.54) + (name "GPIO21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "40" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -7.62 0) + (length 2.54) + (name "GPIO3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -7.62 180) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -10.16 0) + (length 2.54) + (name "GPIO4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 11.43 -10.16 180) + (length 2.54) + (name "GPIO14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -11.43 -12.7 0) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "power:+5V" + (power) + (pin_numbers hide) + (pin_names + (offset 0) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 0 3.556 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"+5V\"" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "global power" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "+5V_0_1" + (polyline + (pts + (xy -0.762 1.27) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 0) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 2.54) (xy 0.762 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "+5V_1_1" + (pin power_in line + (at 0 0 90) + (length 0) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "power:GND" + (power) + (pin_numbers hide) + (pin_names + (offset 0) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "global power" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "GND_0_1" + (polyline + (pts + (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "GND_1_1" + (pin power_in line + (at 0 0 270) + (length 0) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + ) + (junction + (at 120.65 50.8) + (diameter 0) + (color 0 0 0 0) + (uuid "0204e082-97d1-453e-bf78-6e5613137762") + ) + (junction + (at 120.65 58.42) + (diameter 0) + (color 0 0 0 0) + (uuid "0353dce8-09cb-439c-abb3-1e89cfdccf2c") + ) + (junction + (at 119.38 83.82) + (diameter 0) + (color 0 0 0 0) + (uuid "1e959861-49d0-4f8d-9667-96d726e54059") + ) + (junction + (at 119.38 76.2) + (diameter 0) + (color 0 0 0 0) + (uuid "b35566e0-f75b-450a-a0c6-40d3fb9e247d") + ) + (wire + (pts + (xy 118.11 50.8) (xy 120.65 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "54bdcd9c-3cc6-4408-8e9a-d4641c7ac91c") + ) + (wire + (pts + (xy 116.84 83.82) (xy 119.38 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "71d0cab2-0b64-495b-9b1f-a9eec011dd95") + ) + (wire + (pts + (xy 119.38 83.82) (xy 124.46 83.82) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86739556-d5f4-417f-891d-2e6f4cc3f01a") + ) + (wire + (pts + (xy 120.65 58.42) (xy 123.19 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "91ac7a5a-2d19-40fe-bc8f-c4e1064bdd89") + ) + (wire + (pts + (xy 124.46 83.82) (xy 124.46 78.74) + ) + (stroke + (width 0) + (type default) + ) + (uuid "93534c43-6d5f-4bbc-b1f4-fc19046bd66c") + ) + (wire + (pts + (xy 116.84 76.2) (xy 119.38 76.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a4abbb87-6e1d-40a8-bc87-16c47a17a048") + ) + (wire + (pts + (xy 120.65 50.8) (xy 123.19 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "b4ffca00-3f37-488a-bc75-4be5ead4b0ff") + ) + (wire + (pts + (xy 119.38 76.2) (xy 124.46 76.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d8caff86-2516-43fb-b39b-fe12854c9cfd") + ) + (wire + (pts + (xy 118.11 58.42) (xy 120.65 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e603ed91-ac72-4a59-a620-662a6cf8a8c3") + ) + (wire + (pts + (xy 123.19 58.42) (xy 123.19 55.88) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e779592b-ab3b-4d25-802c-04642450c85b") + ) + (global_label "LED_Failure" + (shape input) + (at 78.74 110.49 180) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + (uuid "20cfa307-e543-4f09-8865-5f9e177f8ce6") + (property "Intersheetrefs" "${INTERSHEET_REFS}" + (at 64.8087 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + (hide yes) + ) + ) + ) + (global_label "Servo_sig" + (shape input) + (at 101.6 102.87 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + (uuid "2187f8a9-c08a-4a55-a0e8-d44b4f2b46fc") + (property "Intersheetrefs" "${INTERSHEET_REFS}" + (at 113.5356 102.87 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + ) + (global_label "Servo_sig" + (shape input) + (at 124.46 73.66 180) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + (uuid "3fb1f147-d65c-4677-ad8c-3b64a86d2a70") + (property "Intersheetrefs" "${INTERSHEET_REFS}" + (at 112.5244 73.66 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + (hide yes) + ) + ) + ) + (global_label "LED_Success" + (shape input) + (at 78.74 107.95 180) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + (uuid "9d9e3218-3cf1-40fc-99d3-95147935ad88") + (property "Intersheetrefs" "${INTERSHEET_REFS}" + (at 63.6596 107.95 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + (hide yes) + ) + ) + ) + (global_label "LED_Success" + (shape input) + (at 124.46 90.17 180) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + (uuid "ec2dbe8a-ef86-43b7-a78d-a7c9bc31b0b8") + (property "Intersheetrefs" "${INTERSHEET_REFS}" + (at 109.3796 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + (hide yes) + ) + ) + ) + (global_label "LED_Failure" + (shape input) + (at 124.46 87.63 180) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + (uuid "fac1890f-098f-455e-8b50-48f439f3cbe4") + (property "Intersheetrefs" "${INTERSHEET_REFS}" + (at 110.5287 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + (hide yes) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 119.38 80.01 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "0e997d87-bcf6-4ae8-8b1b-44f7128d66a4") + (property "Reference" "C1" + (at 121.158 77.724 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2.2u" + (at 112.776 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" + (at 120.3452 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 119.38 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Unpolarized capacitor" + (at 119.38 80.01 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c6ce458f-d4f5-4ae7-80ed-092d398419bb") + ) + (pin "2" + (uuid "e6e3148d-83e9-47a9-bd3d-92862cd4b288") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "C1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C") + (at 120.65 54.61 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "1debcd2c-4001-4ed6-99eb-e9dad0b2ecd3") + (property "Reference" "C2" + (at 122.428 52.324 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2.2u" + (at 114.046 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" + (at 121.6152 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 120.65 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Unpolarized capacitor" + (at 120.65 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "0311629b-aaac-4020-9f94-ad76ebbb5314") + ) + (pin "2" + (uuid "03c4ac5e-7207-453e-ab1b-28d55d344a6d") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "C2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 78.74 74.93 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "42695a2f-d241-46a6-a209-9592b7eb81dc") + (property "Reference" "#PWR08" + (at 72.39 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 74.93 74.9299 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "" + (at 78.74 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 78.74 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 78.74 74.93 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "921c33fc-1b18-40d0-a680-f5956a9a08c8") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "#PWR08") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole") + (at 127 110.49 0) + (unit 1) + (exclude_from_sim yes) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "49bbc4fa-139c-47de-aea6-bdf976bd0026") + (property "Reference" "H3" + (at 129.54 109.2199 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MountingHole" + (at 129.54 111.7599 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3" + (at 127 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 127 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 127 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "H3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole") + (at 127 100.33 0) + (unit 1) + (exclude_from_sim yes) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4b46b89c-1c1b-4f06-9391-63c1a0d071b0") + (property "Reference" "H1" + (at 129.54 99.0599 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MountingHole" + (at 129.54 101.5999 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3" + (at 127 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 127 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 127 100.33 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "H1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 116.84 76.2 90) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4cd61808-e00c-4cd6-a140-2c8086ad8e86") + (property "Reference" "#PWR05" + (at 120.65 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 113.03 76.2001 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 116.84 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 116.84 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"+5V\"" + (at 116.84 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4e5fcccd-ba62-414e-99ee-6849652cde93") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "#PWR05") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x03_Pin") + (at 129.54 90.17 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "54446d53-569e-4d86-88cb-922b5e44eef7") + (property "Reference" "J2" + (at 130.81 91.4401 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "LED" + (at 130.81 88.9001 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "MyLibrary:ZH_3P_Side" + (at 129.54 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 129.54 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Generic connector, single row, 01x03, script generated" + (at 129.54 90.17 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "5a042088-a546-4859-81b1-1b9cc9165e51") + ) + (pin "2" + (uuid "1c8851c0-6a13-467f-a787-ecca77606908") + ) + (pin "3" + (uuid "80c2b002-afa2-44ec-94e7-585dbe29063f") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "J2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole") + (at 127 115.57 0) + (unit 1) + (exclude_from_sim yes) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "56b60a67-b6f6-4e37-8620-6ffd4e19340d") + (property "Reference" "H4" + (at 129.54 114.2999 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MountingHole" + (at 129.54 116.8399 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3" + (at 127 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 127 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 127 115.57 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "H4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 118.11 50.8 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "88852c1a-1a0b-48bf-bf27-d6a87240c1eb") + (property "Reference" "#PWR02" + (at 111.76 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 114.3 50.7999 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "" + (at 118.11 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 118.11 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 118.11 50.8 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "4519c687-b904-456f-86a9-a4da045e999c") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "#PWR02") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 116.84 83.82 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "ac948a58-ae78-4465-9ba5-ae6158023442") + (property "Reference" "#PWR06" + (at 110.49 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 113.03 83.8201 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "" + (at 116.84 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 116.84 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 116.84 83.82 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "c8933f70-e988-4dc3-bd81-ff24d20dfbfc") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "#PWR06") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 101.6 64.77 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "b628fa78-5453-4c1c-a0c9-f69a6eb5f2c9") + (property "Reference" "#PWR01" + (at 97.79 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 105.41 64.7699 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 101.6 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 101.6 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"+5V\"" + (at 101.6 64.77 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "e02a4980-36ef-46fd-9d76-2a6037f4ad63") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "#PWR01") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 124.46 92.71 270) + (mirror x) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cf9443ef-64ba-4b2d-9078-5abb8b9c25c5") + (property "Reference" "#PWR07" + (at 118.11 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 120.65 92.7101 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "" + (at 124.46 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 124.46 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 124.46 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "028616a8-0053-40aa-a333-7382b27f2e1f") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "#PWR07") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RaspberryPi:Raspberry_Pi_Zero") + (at 90.17 62.23 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "d4d379a9-5e9e-4139-853a-d5e9f52c0389") + (property "Reference" "U1" + (at 90.17 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "~" + (at 90.17 54.61 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_2x20_P2.54mm_Vertical" + (at 88.9 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 88.9 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "" + (at 88.9 62.23 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "34" + (uuid "4fdfb51b-f81e-4426-9a73-50b8a4b45f52") + ) + (pin "31" + (uuid "a4c836e9-3c75-4cc5-bfe8-a16e39862285") + ) + (pin "32" + (uuid "aa1f5551-cb87-4dc3-84a7-56420710c839") + ) + (pin "39" + (uuid "0d9bb700-9e27-42dd-9e4b-a7c74198b5b4") + ) + (pin "24" + (uuid "10b3805c-c713-4af2-aecc-1ee39e3408c9") + ) + (pin "37" + (uuid "7396f005-64e9-41d3-88e2-bbc49dbcb997") + ) + (pin "30" + (uuid "027d9e3e-3a8e-4ab6-a885-8cfb04de0702") + ) + (pin "11" + (uuid "8b3840ac-dc3c-48cd-9cce-85a906643d8c") + ) + (pin "13" + (uuid "6f39a753-6eef-4407-be67-b19c6d78d1a8") + ) + (pin "20" + (uuid "d5134414-7719-45d8-86ee-63f8574d3561") + ) + (pin "17" + (uuid "cd37698d-c933-4740-bfda-48fee6f43246") + ) + (pin "35" + (uuid "aad50368-53ee-4c9f-aea4-32c45cded6a1") + ) + (pin "29" + (uuid "5e6b3251-1e8e-47d7-aa35-4da0e45c097e") + ) + (pin "10" + (uuid "3d2b1ce1-6ad0-453e-bc57-41432d9cc0d5") + ) + (pin "14" + (uuid "bfb7858d-d6b0-4a56-afd6-d5b4d7b07f88") + ) + (pin "21" + (uuid "eb6f9f31-6b38-4488-8108-ad8db2884995") + ) + (pin "8" + (uuid "20acfff2-25af-40ff-9fb1-a99b2d7019ce") + ) + (pin "23" + (uuid "aa304d7a-3b6e-4732-9d1b-f3e7695016fc") + ) + (pin "1" + (uuid "4dd3ab75-5cc9-43b8-8bee-d989f619d5e1") + ) + (pin "33" + (uuid "b3bfbc23-ca4a-4ef8-8a72-55e5529740e1") + ) + (pin "7" + (uuid "7c335090-0493-482e-81f3-b09b4b067559") + ) + (pin "2" + (uuid "e58d31e7-4a7f-4d16-8ec3-a14a2066cc25") + ) + (pin "19" + (uuid "a47f32ba-ef1a-4efe-a19b-a0ad4b9cc64c") + ) + (pin "38" + (uuid "f25021d6-44a5-4f96-9f90-fc8bc0fa664c") + ) + (pin "15" + (uuid "993d91a1-e232-47b9-90d9-3f9c8990a661") + ) + (pin "22" + (uuid "3bffa0f5-6e3e-4b1e-95db-64b6f00a0a64") + ) + (pin "36" + (uuid "67ebee9b-b5a8-4e63-8478-1624c0ef9734") + ) + (pin "4" + (uuid "1c575271-cc9b-4491-a8ef-1dee0696da81") + ) + (pin "12" + (uuid "a1fe29c4-3021-4588-86ce-7809fec1e5c7") + ) + (pin "40" + (uuid "d2cfd468-59ff-4b04-bb17-769588196d40") + ) + (pin "5" + (uuid "9730f035-fc58-46c6-bbc1-d262a035807f") + ) + (pin "6" + (uuid "26bf703b-a5fd-45d7-8ac8-bf61e41108f3") + ) + (pin "3" + (uuid "1b695417-12fa-420e-ba25-73cfa2f3bead") + ) + (pin "9" + (uuid "306c2e52-d933-4f5d-84c1-b08f78a48142") + ) + (pin "18" + (uuid "fa1ad9ab-2607-4b95-a9ef-4e2c6e0c2042") + ) + (pin "25" + (uuid "3db694e7-1a79-4f84-9865-57a51e3ef879") + ) + (pin "16" + (uuid "fa852978-13b7-45f3-9587-afdfd1448233") + ) + (pin "26" + (uuid "7fbc0678-5d39-4db6-874e-bbf071599f67") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "U1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole") + (at 127 105.41 0) + (unit 1) + (exclude_from_sim yes) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "de7b62de-164c-449e-af07-be99e3807b42") + (property "Reference" "H2" + (at 129.54 104.1399 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MountingHole" + (at 129.54 106.6799 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3" + (at 127 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 127 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 127 105.41 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "H2") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Jack-DC") + (at 130.81 53.34 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e07d5664-1123-4e43-a5be-f46dbb258563") + (property "Reference" "J1" + (at 137.16 52.0699 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "Jack-DC" + (at 137.16 54.6099 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "Connector_BarrelJack:BarrelJack_Horizontal" + (at 129.54 52.324 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 129.54 52.324 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "DC Barrel Jack" + (at 130.81 53.34 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "78e87ec5-11ea-4d6c-be42-a74211a54d4b") + ) + (pin "1" + (uuid "a780bdd7-1822-4cc8-99bf-82008d4d1ac5") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "J1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Connector:Conn_01x03_Pin") + (at 129.54 76.2 0) + (mirror y) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f00a3780-4ff0-441c-811d-d6b9ad87d9d6") + (property "Reference" "J3" + (at 130.81 77.4701 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "Servo" + (at 130.81 74.9301 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "MyLibrary:ZH_3P_Side" + (at 129.54 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 129.54 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Generic connector, single row, 01x03, script generated" + (at 129.54 76.2 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "b56f5807-f35b-4ec7-94e8-efdf9710a0cd") + ) + (pin "2" + (uuid "e8c70657-9eea-41ed-a6ca-3b723e7df4b6") + ) + (pin "3" + (uuid "6e3b3cf9-ec24-4218-8f78-c7ef821a9a68") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "J3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 101.6 69.85 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f230fa4c-dfae-4fd9-b1c5-8442d6512450") + (property "Reference" "#PWR04" + (at 107.95 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 105.41 69.8499 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "" + (at 101.6 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 101.6 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 101.6 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "cba83f21-3cd5-4fd5-ada7-4277ff32baff") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "#PWR04") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:+5V") + (at 118.11 58.42 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f9191a64-d16d-435a-b618-fb8cb5ad0344") + (property "Reference" "#PWR03" + (at 121.92 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "+5V" + (at 114.3 58.4199 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 118.11 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 118.11 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"+5V\"" + (at 118.11 58.42 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "510999c0-ca07-4608-9964-2d71204ac25b") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "#PWR03") + (unit 1) + ) + ) + ) + ) + (sheet_instances + (path "/" + (page "1") + ) + ) +) \ No newline at end of file From 5eb9b4aecbfbc6e3e779fc81698219af4e9e81a6 Mon Sep 17 00:00:00 2001 From: acaValkyrie Date: Fri, 12 Apr 2024 17:38:46 +0900 Subject: [PATCH 33/34] =?UTF-8?q?=E3=83=94=E3=83=B3=E6=83=85=E5=A0=B1?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hardware/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 hardware/README.md diff --git a/hardware/README.md b/hardware/README.md new file mode 100644 index 0000000..c23d99c --- /dev/null +++ b/hardware/README.md @@ -0,0 +1,5 @@ +# ハードウェア情報 +## ピン +- サーボ信号 GPIO12 +- LED 成功 GPIO19 +- LED 失敗 GPIO26 \ No newline at end of file From 025abfbcbb847f15f16044116f857266cdfd2246 Mon Sep 17 00:00:00 2001 From: acaValkyrie Date: Tue, 16 Apr 2024 19:19:01 +0900 Subject: [PATCH 34/34] =?UTF-8?q?=E3=82=B3=E3=83=8D=E3=82=AF=E3=82=BF?= =?UTF-8?q?=E3=82=92XH=E3=81=AB=E3=80=81=E9=9B=BB=E6=BA=90=E7=94=A8?= =?UTF-8?q?=E3=82=B3=E3=83=8D=E3=82=AF=E3=82=BF=E3=82=92Type-C=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hardware/kicad/Koken-KeyBox.kicad_pcb | 5991 ++++++++++--------------- hardware/kicad/Koken-KeyBox.kicad_pro | 3 +- hardware/kicad/Koken-KeyBox.kicad_sch | 1094 ++++- 3 files changed, 3286 insertions(+), 3802 deletions(-) diff --git a/hardware/kicad/Koken-KeyBox.kicad_pcb b/hardware/kicad/Koken-KeyBox.kicad_pcb index 7c7243d..4b0367d 100644 --- a/hardware/kicad/Koken-KeyBox.kicad_pcb +++ b/hardware/kicad/Koken-KeyBox.kicad_pcb @@ -94,7 +94,7 @@ (net 12 "unconnected-(U1-GPIO27-Pad13)") (net 13 "unconnected-(U1-GPIO25-Pad22)") (net 14 "unconnected-(U1-GPIO16-Pad36)") - (net 15 "unconnected-(U1-GND-Pad20)") + (net 15 "Net-(J4-CC2)") (net 16 "unconnected-(U1-GPIO3-Pad5)") (net 17 "unconnected-(U1-GPIO11-Pad23)") (net 18 "unconnected-(U1-GPIO6-Pad31)") @@ -106,27 +106,26 @@ (net 24 "unconnected-(U1-GPIO13-Pad33)") (net 25 "unconnected-(U1-GND-Pad14)") (net 26 "unconnected-(U1-5V-Pad4)") - (net 27 "unconnected-(U1-GND-Pad39)") + (net 27 "Net-(J4-CC1)") (net 28 "unconnected-(U1-GPIO23-Pad16)") (net 29 "unconnected-(U1-GPIO10-Pad19)") (net 30 "unconnected-(U1-GPIO7-Pad26)") (net 31 "unconnected-(U1-GPIO21-Pad40)") (net 32 "unconnected-(U1-GND-Pad34)") (net 33 "unconnected-(U1-GPIO15-Pad10)") - (net 34 "unconnected-(U1-GND-Pad25)") - (net 35 "unconnected-(U1-GPIO2-Pad3)") - (net 36 "unconnected-(U1-GPIO5-Pad29)") - (net 37 "unconnected-(U1-GND-Pad30)") - (footprint "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" + (net 34 "unconnected-(U1-GPIO2-Pad3)") + (net 35 "unconnected-(U1-GPIO5-Pad29)") + (net 36 "unconnected-(U1-GND-Pad30)") + (footprint "Connector_JST:JST_XH_S3B-XH-A_1x03_P2.50mm_Horizontal" (layer "F.Cu") - (uuid "08d7778d-3ecc-4fc9-8f77-ec4452abf006") - (at 135.5 85) - (descr "CP, Radial series, Radial, pin pitch=2.50mm, , diameter=5mm, Electrolytic Capacitor") - (tags "CP Radial series Radial pin pitch 2.50mm diameter 5mm Electrolytic Capacitor") - (property "Reference" "C1" - (at 1.25 -3.75 0) + (uuid "121dff31-6126-49ef-9b97-ca566d5bd78f") + (at 134.38 78.71 -90) + (descr "JST XH series connector, S3B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") + (tags "connector JST XH horizontal") + (property "Reference" "J2" + (at 2.5 -3.5 90) (layer "F.SilkS") - (uuid "a0bbffae-901d-45ca-8f86-c2bf76ac6122") + (uuid "c87290ac-e111-4be2-a3dd-e25b644c4269") (effects (font (size 1 1) @@ -134,10 +133,10 @@ ) ) ) - (property "Value" "2.2u" - (at 1.25 3.75 0) + (property "Value" "LED" + (at 2.5 10.4 90) (layer "F.Fab") - (uuid "56e85da0-d145-4785-a22e-79e44899e346") + (uuid "af0f046d-cedc-4824-8f6c-5b5c3563cb0e") (effects (font (size 1 1) @@ -145,12 +144,12 @@ ) ) ) - (property "Footprint" "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" - (at 0 0 0) + (property "Footprint" "Connector_JST:JST_XH_S3B-XH-A_1x03_P2.50mm_Horizontal" + (at 0 0 -90) (unlocked yes) (layer "F.Fab") (hide yes) - (uuid "b3f1ad66-3aa3-429f-a35e-e3a40c237d11") + (uuid "c0d893da-1869-4e8d-882f-ef9883537a73") (effects (font (size 1.27 1.27) @@ -158,2905 +157,1131 @@ ) ) (property "Datasheet" "" - (at 0 0 0) + (at 0 0 -90) (unlocked yes) (layer "F.Fab") (hide yes) - (uuid "8fafd969-5769-4a55-9774-921f57dd43df") + (uuid "4dad3b94-2118-4ad1-831c-5cb29179fa8b") (effects (font (size 1.27 1.27) ) ) ) - (property "Description" "Unpolarized capacitor" - (at 0 0 0) + (property "Description" "Generic connector, single row, 01x03, script generated" + (at 0 0 -90) (unlocked yes) (layer "F.Fab") (hide yes) - (uuid "ea37a722-9073-4f2e-a2b1-a6e011c75253") + (uuid "abc42f57-036f-4d18-8b81-0ea84f352eda") (effects (font (size 1.27 1.27) ) ) ) - (property ki_fp_filters "C_*") - (path "/0e997d87-bcf6-4ae8-8b1b-44f7128d66a4") + (property ki_fp_filters "Connector*:*_1x??_*") + (path "/54446d53-569e-4d86-88cb-922b5e44eef7") (sheetname "ルート") (sheetfile "Koken-KeyBox.kicad_sch") (attr through_hole) (fp_line - (start -1.554775 -1.475) - (end -1.054775 -1.475) + (start -2.56 9.31) + (end -2.56 -2.41) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "23056b0c-fe64-47ff-b5b0-3927935673b6") + (uuid "5e4837c0-553b-4d5f-ac74-33fdacfb14b7") ) (fp_line - (start -1.304775 -1.725) - (end -1.304775 -1.225) + (start 2.5 9.31) + (end -2.56 9.31) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "8d2ee6d3-814f-4512-b603-b7c83c6b2585") + (uuid "c95d5785-84b4-4f83-ba6c-abf9f78eaa1b") ) (fp_line - (start 1.25 -2.58) - (end 1.25 2.58) + (start 2.5 9.31) + (end 7.56 9.31) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "9244dff6-a4c6-4925-a169-620930fdf863") + (uuid "ca5de0c1-dfd0-4708-bfa3-b891b0e1cf9f") ) (fp_line - (start 1.29 -2.58) - (end 1.29 2.58) + (start 7.56 9.31) + (end 7.56 -2.41) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "cc3e42b0-67fb-448e-aee2-c66320fe0b98") + (uuid "815347b5-c7c9-4376-b802-8dd52af05cfc") ) (fp_line - (start 1.33 -2.579) - (end 1.33 2.579) + (start -0.25 8.7) + (end 0.25 8.7) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "e4791079-ac33-41a2-87e4-a962df1bad86") + (uuid "ce6da8bc-8711-4e8e-aafc-348fa16c45b4") ) (fp_line - (start 1.37 -2.578) - (end 1.37 2.578) + (start 0.25 8.7) + (end 0.25 3.2) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "73424af9-98de-4205-a611-a20ce16205f2") + (uuid "60bee865-bd5b-4f1e-8a8d-5afb4f97444c") ) (fp_line - (start 1.41 -2.576) - (end 1.41 2.576) + (start 2.25 8.7) + (end 2.75 8.7) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "93a801d8-a17b-4b72-a601-d316358e7dc6") + (uuid "2f81b909-06b2-4adb-95b5-86a9a52d36af") ) (fp_line - (start 1.45 -2.573) - (end 1.45 2.573) + (start 2.75 8.7) + (end 2.75 3.2) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "05fb7832-9c37-4c15-812d-cf1719910d3b") + (uuid "7840da81-b037-4f10-ace5-0e69143ae740") ) (fp_line - (start 1.49 -2.569) - (end 1.49 -1.04) + (start 4.75 8.7) + (end 5.25 8.7) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "2744db90-1cbf-4d2e-b037-54e1a2a21d35") + (uuid "6a95b436-775a-4e6c-8431-ed7a7be63b18") ) (fp_line - (start 1.49 1.04) - (end 1.49 2.569) + (start 5.25 8.7) + (end 5.25 3.2) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "9c3803e5-56dd-4bf2-8132-cdb9b02adee6") + (uuid "3409714d-188d-49fa-b2ad-65d9e31cfa71") ) (fp_line - (start 1.53 -2.565) - (end 1.53 -1.04) + (start -0.25 3.2) + (end -0.25 8.7) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "836852c5-0bc7-4922-999f-47a66cc303ae") + (uuid "d6088e37-a561-4060-aef6-32f13c29aada") ) (fp_line - (start 1.53 1.04) - (end 1.53 2.565) + (start 0.25 3.2) + (end -0.25 3.2) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "3b7bd456-ac62-4bce-970a-454117f627b6") + (uuid "825b5d02-cea8-4786-b83a-ef8fbb192e69") ) (fp_line - (start 1.57 -2.561) - (end 1.57 -1.04) + (start 2.25 3.2) + (end 2.25 8.7) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "9a2531b6-0e2e-4176-a0b1-9d452e2d81fb") + (uuid "d050c63f-f854-4bbf-8547-491a90af0555") ) (fp_line - (start 1.57 1.04) - (end 1.57 2.561) + (start 2.75 3.2) + (end 2.25 3.2) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "294b0d58-c1f8-4eff-99dc-b1dd7b4d51d6") + (uuid "cb16aa67-5718-4c2f-aacd-e1d48cafaf0f") ) (fp_line - (start 1.61 -2.556) - (end 1.61 -1.04) + (start 4.75 3.2) + (end 4.75 8.7) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "72516669-fc3f-4def-93b3-e805ae503cdb") + (uuid "273def69-a76f-4603-823e-4c751f59a004") ) (fp_line - (start 1.61 1.04) - (end 1.61 2.556) + (start 5.25 3.2) + (end 4.75 3.2) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "625882c3-52f1-4fa4-b0e5-cfb68a7af70d") + (uuid "5feebf6d-496a-4aa9-b61c-b93f00778947") ) (fp_line - (start 1.65 -2.55) - (end 1.65 -1.04) + (start -1.14 2.09) + (end 2.5 2.09) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "eb88fb6b-8243-4b1c-bab2-1b289215becd") + (uuid "65c034dc-d2ca-4056-b851-e6b58c3bc8aa") ) (fp_line - (start 1.65 1.04) - (end 1.65 2.55) + (start 6.14 2.09) + (end 2.5 2.09) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "8364328d-714f-46a1-ae89-2252399a4c1b") + (uuid "c6d13db7-bbb5-402c-b318-799da67eb65e") ) (fp_line - (start 1.69 -2.543) - (end 1.69 -1.04) + (start 0 -1.5) + (end -0.3 -2.1) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "be818265-17a8-41c4-956a-4e07574004aa") + (uuid "8f621e7e-ed85-42c2-948e-ccbc167cfd6b") ) (fp_line - (start 1.69 1.04) - (end 1.69 2.543) + (start -0.3 -2.1) + (end 0.3 -2.1) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "9c50302c-025d-4455-94c9-ca3f66715b82") + (uuid "020a451a-35ae-42a7-b04c-bddb6deebcfb") ) (fp_line - (start 1.73 -2.536) - (end 1.73 -1.04) + (start 0.3 -2.1) + (end 0 -1.5) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "6adc545a-b4a4-4080-83da-cb0817f22013") + (uuid "84747f40-825d-476e-a9dd-5e8af4224134") ) (fp_line - (start 1.73 1.04) - (end 1.73 2.536) + (start -2.56 -2.41) + (end -1.14 -2.41) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "f88133c9-2aa7-44aa-b471-a2514ef58751") + (uuid "c875f453-b385-4188-8a97-b12beb373b3f") ) (fp_line - (start 1.77 -2.528) - (end 1.77 -1.04) + (start -1.14 -2.41) + (end -1.14 2.09) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "94c5e82c-4996-4e26-9bad-7517f685f7e5") + (uuid "a6fa8d6d-4276-4c77-b5ca-e62073445314") ) (fp_line - (start 1.77 1.04) - (end 1.77 2.528) + (start 6.14 -2.41) + (end 6.14 2.09) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "ac4c8c74-35de-451e-97ff-bff8a5ece897") + (uuid "76840e29-ff15-4873-8974-711ebe59ad66") ) (fp_line - (start 1.81 -2.52) - (end 1.81 -1.04) + (start 7.56 -2.41) + (end 6.14 -2.41) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "38d4e270-1f46-4152-8c62-6ecb7cbc01b7") + (uuid "0eaf7788-edae-4be5-b469-b9050a9d75d1") ) (fp_line - (start 1.81 1.04) - (end 1.81 2.52) + (start -2.95 9.7) + (end 7.95 9.7) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "a8694a34-8833-4d01-a5a5-c77924eb8dea") + (layer "F.CrtYd") + (uuid "5e947e82-e595-42da-a73f-77ca78c37fed") ) (fp_line - (start 1.85 -2.511) - (end 1.85 -1.04) + (start 7.95 9.7) + (end 7.95 -2.8) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "bb2fb7ba-82ba-4cfa-a2fc-ac95b2524e0c") + (layer "F.CrtYd") + (uuid "dc86cd49-cf94-4db4-b3df-e41e110f3979") ) (fp_line - (start 1.85 1.04) - (end 1.85 2.511) + (start -2.95 -2.8) + (end -2.95 9.7) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "f4077226-3cdc-4d26-9649-b181d57b0e9f") + (layer "F.CrtYd") + (uuid "d0281ba5-3737-4796-be47-2b9e61be5477") ) (fp_line - (start 1.89 -2.501) - (end 1.89 -1.04) + (start 7.95 -2.8) + (end -2.95 -2.8) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "9ea17ab0-af27-4638-ab90-50baf95860d5") + (layer "F.CrtYd") + (uuid "bf332d47-5849-4965-83cf-7a4835105383") ) (fp_line - (start 1.89 1.04) - (end 1.89 2.501) + (start -2.45 9.2) + (end -2.45 -2.3) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "aede9519-1ad4-41d8-bfe9-980cf7fec797") + (layer "F.Fab") + (uuid "c793f125-502b-4640-b8ff-722d52f53d62") ) (fp_line - (start 1.93 -2.491) - (end 1.93 -1.04) + (start 2.5 9.2) + (end -2.45 9.2) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "03653ad8-b9ba-4e91-bc78-cb71c9db8463") + (layer "F.Fab") + (uuid "59fc7143-7657-4c23-91be-c2d48808c67f") ) (fp_line - (start 1.93 1.04) - (end 1.93 2.491) + (start 2.5 9.2) + (end 7.45 9.2) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "d800bd97-26c2-4f1f-b53f-95983cd7b43a") + (layer "F.Fab") + (uuid "8d1a961b-c154-4967-ac30-b1a44b973ce1") ) (fp_line - (start 1.971 -2.48) - (end 1.971 -1.04) + (start 7.45 9.2) + (end 7.45 -2.3) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "b47661d5-fd3e-41c4-9633-18b29597a588") + (layer "F.Fab") + (uuid "076393da-d517-43b9-8b9c-f9e853b12002") ) (fp_line - (start 1.971 1.04) - (end 1.971 2.48) + (start -1.25 2.2) + (end 2.5 2.2) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "b65dd921-16a8-4a4f-b11f-6e78b90f27cf") + (layer "F.Fab") + (uuid "c8bab97c-accc-411d-b044-f7768ef65549") ) (fp_line - (start 2.011 -2.468) - (end 2.011 -1.04) + (start -0.625 2.2) + (end 0 1.2) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "ca5df4eb-dc94-4a42-811c-d63664fc5447") + (layer "F.Fab") + (uuid "9f2f4318-341e-4e9b-a042-70095df85f6c") ) (fp_line - (start 2.011 1.04) - (end 2.011 2.468) + (start 6.25 2.2) + (end 2.5 2.2) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "67c6358e-f8e5-4182-bd3b-390673a2356d") + (layer "F.Fab") + (uuid "6d746b30-06af-47fd-865a-74792e17b7d9") ) (fp_line - (start 2.051 -2.455) - (end 2.051 -1.04) + (start 0 1.2) + (end 0.625 2.2) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "7d1948f7-c184-4dc4-999b-99d3f052191f") + (layer "F.Fab") + (uuid "69aed9fb-b018-493b-92d2-bc8ca7ca051d") ) (fp_line - (start 2.051 1.04) - (end 2.051 2.455) + (start -2.45 -2.3) + (end -1.25 -2.3) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "d8f30f4f-9966-433b-a2af-27b3c979acec") + (layer "F.Fab") + (uuid "9b890695-208c-4a37-ace0-52afe906d087") ) (fp_line - (start 2.091 -2.442) - (end 2.091 -1.04) + (start -1.25 -2.3) + (end -1.25 2.2) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "e9eb2b8e-bb11-43c6-827d-6e1416071e3f") + (layer "F.Fab") + (uuid "2922038b-efe1-4548-9b7f-42654e710c80") ) (fp_line - (start 2.091 1.04) - (end 2.091 2.442) + (start 6.25 -2.3) + (end 6.25 2.2) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "2611429d-7ab7-4734-9d59-5dee2de81761") + (layer "F.Fab") + (uuid "fd401437-e7ab-4e3e-b844-3843660520ef") ) (fp_line - (start 2.131 -2.428) - (end 2.131 -1.04) + (start 7.45 -2.3) + (end 6.25 -2.3) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "87a7348c-6a02-403c-83fa-c2418de233e6") + (layer "F.Fab") + (uuid "240358ed-baa8-458b-8a15-5c35805904a7") ) - (fp_line - (start 2.131 1.04) - (end 2.131 2.428) - (stroke - (width 0.12) - (type solid) + (fp_text user "${REFERENCE}" + (at 2.5 3.45 90) + (layer "F.Fab") + (uuid "015c7397-65fa-4833-8ff1-6d2b24db4fe9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) ) - (layer "F.SilkS") - (uuid "745e11d9-b29e-4237-b35f-56f4ef4c3e72") ) - (fp_line - (start 2.171 -2.414) - (end 2.171 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "41b1c888-f942-4967-a4db-06d977bffd0f") + (pad "1" thru_hole roundrect + (at 0 0 270) + (size 1.7 1.95) + (drill 0.95) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (roundrect_rratio 0.147059) + (net 2 "GND") + (pinfunction "Pin_1") + (pintype "passive") + (uuid "edd2ee75-a454-4953-9ffc-dfe7b13b5909") ) - (fp_line - (start 2.171 1.04) - (end 2.171 2.414) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "a92b01b7-b816-403d-bbfa-dfa1a6282f88") + (pad "2" thru_hole oval + (at 2.5 0 270) + (size 1.7 1.95) + (drill 0.95) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 3 "LED_Success") + (pinfunction "Pin_2") + (pintype "passive") + (uuid "eafefc47-cee0-4f4a-9447-2a04c96b8ebe") ) - (fp_line - (start 2.211 -2.398) - (end 2.211 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "afceca33-823c-444e-be2e-73c5c5c9a2ad") + (pad "3" thru_hole oval + (at 5 0 270) + (size 1.7 1.95) + (drill 0.95) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (net 4 "LED_Failure") + (pinfunction "Pin_3") + (pintype "passive") + (uuid "ba7a1262-8f2e-4af8-8948-0e5f3a5f9262") ) - (fp_line - (start 2.211 1.04) - (end 2.211 2.398) - (stroke - (width 0.12) - (type solid) + (model "${KICAD8_3DMODEL_DIR}/Connector_JST.3dshapes/JST_XH_S3B-XH-A_1x03_P2.50mm_Horizontal.wrl" + (offset + (xyz 0 0 0) ) - (layer "F.SilkS") - (uuid "cebbca63-cf46-4d1c-a019-9e78b98dcb56") - ) - (fp_line - (start 2.251 -2.382) - (end 2.251 -1.04) - (stroke - (width 0.12) - (type solid) + (scale + (xyz 1 1 1) ) - (layer "F.SilkS") - (uuid "6f34bb24-8c55-486b-aad5-ca0a542276f0") - ) - (fp_line - (start 2.251 1.04) - (end 2.251 2.382) - (stroke - (width 0.12) - (type solid) + (rotate + (xyz 0 0 0) ) - (layer "F.SilkS") - (uuid "2e5d651c-9834-4456-83c9-a3f2a61bad0a") ) - (fp_line - (start 2.291 -2.365) - (end 2.291 -1.04) - (stroke - (width 0.12) - (type solid) - ) + ) + (footprint "MountingHole:MountingHole_3.2mm_M3" + (layer "F.Cu") + (uuid "1b6f01d5-203e-4034-802d-6b962041e945") + (at 128.15 106.44) + (descr "Mounting Hole 3.2mm, no annular, M3") + (tags "mounting hole 3.2mm no annular m3") + (property "Reference" "H4" + (at 0 -4.2 0) (layer "F.SilkS") - (uuid "a7ddfd38-d3fb-4a29-966b-02dd4f3f5bef") + (uuid "806745bb-9072-4cf4-8a35-3bf05b3bd37a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) ) - (fp_line - (start 2.291 1.04) - (end 2.291 2.365) - (stroke - (width 0.12) - (type solid) + (property "Value" "MountingHole" + (at 0 4.2 0) + (layer "F.Fab") + (hide yes) + (uuid "2c16ec3e-54a7-4497-be00-3137f9572a98") + (effects + (font + (size 1 1) + (thickness 0.15) + ) ) - (layer "F.SilkS") - (uuid "991f4290-502d-467b-89cf-a5eb4189044e") ) - (fp_line - (start 2.331 -2.348) - (end 2.331 -1.04) - (stroke - (width 0.12) - (type solid) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "7237d972-49a3-41ab-82d0-c9cf870b7612") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "F.SilkS") - (uuid "bd15ed83-bbd4-4a71-8a5f-930129699ee7") ) - (fp_line - (start 2.331 1.04) - (end 2.331 2.348) - (stroke - (width 0.12) - (type solid) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "41a33c0f-e036-4d11-8ebe-183947d7cf68") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "F.SilkS") - (uuid "faddaae4-1907-4df9-b63a-a953e739022e") ) - (fp_line - (start 2.371 -2.329) - (end 2.371 -1.04) - (stroke - (width 0.12) - (type solid) + (property "Description" "Mounting Hole without connection" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "9e5087b0-1c1e-4044-afa1-73e779094085") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "F.SilkS") - (uuid "3e12e0e6-84c5-4684-aad4-b7dc9670eb73") ) - (fp_line - (start 2.371 1.04) - (end 2.371 2.329) + (property ki_fp_filters "MountingHole*") + (path "/56b60a67-b6f6-4e37-8620-6ffd4e19340d") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 3.2 0) (stroke - (width 0.12) + (width 0.15) (type solid) ) - (layer "F.SilkS") - (uuid "4dab959b-b260-40ab-9c36-7eaadc516aa5") + (fill none) + (layer "Cmts.User") + (uuid "8db8b9a1-3a25-402b-b0c5-71f22e5d27da") ) - (fp_line - (start 2.411 -2.31) - (end 2.411 -1.04) + (fp_circle + (center 0 0) + (end 3.45 0) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "44cfa4d8-4685-435e-9f6f-aa4965b2aa1e") + (fill none) + (layer "F.CrtYd") + (uuid "7050664e-a222-4ba6-8d19-fbeeea68e9fd") ) - (fp_line - (start 2.411 1.04) - (end 2.411 2.31) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "9c58da4e-c475-4566-b6db-99ee2d424ed4") - ) - (fp_line - (start 2.451 -2.29) - (end 2.451 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "4770c04f-b1ee-4c83-ac73-f5e4c740409f") - ) - (fp_line - (start 2.451 1.04) - (end 2.451 2.29) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "f670e0ff-68d1-4047-bde1-d6a94e69397a") - ) - (fp_line - (start 2.491 -2.268) - (end 2.491 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "d1138a37-5b71-45b7-9031-bf9379f1625e") - ) - (fp_line - (start 2.491 1.04) - (end 2.491 2.268) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "0ace0778-ffe1-421f-8c39-97e8b567aae9") - ) - (fp_line - (start 2.531 -2.247) - (end 2.531 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "8628510f-199c-42ac-95cd-3061cb227e29") - ) - (fp_line - (start 2.531 1.04) - (end 2.531 2.247) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "ddf88672-03f8-46b8-9b64-cc0934047519") - ) - (fp_line - (start 2.571 -2.224) - (end 2.571 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "8ef844cf-9013-4102-96fc-fc28e0d70bce") - ) - (fp_line - (start 2.571 1.04) - (end 2.571 2.224) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "ca45424f-929b-43b3-9719-d715c432b8c3") - ) - (fp_line - (start 2.611 -2.2) - (end 2.611 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "be50001d-a2a2-42e3-b3e0-6353e0ff1d12") - ) - (fp_line - (start 2.611 1.04) - (end 2.611 2.2) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "8780b5db-1fd7-4e49-921b-8efd8ed26dd3") - ) - (fp_line - (start 2.651 -2.175) - (end 2.651 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "73372273-4b2f-4e77-81b5-586275548fd6") - ) - (fp_line - (start 2.651 1.04) - (end 2.651 2.175) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "216e35f6-95cc-4475-82b6-97e03d84b79e") - ) - (fp_line - (start 2.691 -2.149) - (end 2.691 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "08ed6f6f-6ea8-4ac8-8813-4945b4c44cd6") - ) - (fp_line - (start 2.691 1.04) - (end 2.691 2.149) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "9363ab5b-f1ac-4e21-a90b-a05f40fc0591") - ) - (fp_line - (start 2.731 -2.122) - (end 2.731 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "fdca76f3-f876-47be-8f14-fd259dc1d9d6") - ) - (fp_line - (start 2.731 1.04) - (end 2.731 2.122) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "55ace999-7584-4030-9a5d-bde98b217b9d") - ) - (fp_line - (start 2.771 -2.095) - (end 2.771 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "f710ec2a-97fe-4dba-912b-f7552bc90cfb") - ) - (fp_line - (start 2.771 1.04) - (end 2.771 2.095) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "f5867595-57d4-4f2c-80fc-b48480fa35e6") - ) - (fp_line - (start 2.811 -2.065) - (end 2.811 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "0636bd28-8ea1-4121-b5ff-e769385601be") - ) - (fp_line - (start 2.811 1.04) - (end 2.811 2.065) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "ac4ffda4-c9cc-4789-a8c9-0386352fa7c3") - ) - (fp_line - (start 2.851 -2.035) - (end 2.851 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "17ea428b-3cff-48b3-a66a-7d3695348a01") - ) - (fp_line - (start 2.851 1.04) - (end 2.851 2.035) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "bccb9214-db46-4ec8-a937-b8556bb6ca95") - ) - (fp_line - (start 2.891 -2.004) - (end 2.891 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "c133656a-a5c6-4592-b944-d371fbf2b059") - ) - (fp_line - (start 2.891 1.04) - (end 2.891 2.004) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "4487f57f-63a2-4edb-8227-e88abc7fcdef") - ) - (fp_line - (start 2.931 -1.971) - (end 2.931 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "4aec8b00-a508-4b18-b269-9e3ecca4016c") - ) - (fp_line - (start 2.931 1.04) - (end 2.931 1.971) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "b9526174-ac55-4342-a2a1-f7c445236e60") - ) - (fp_line - (start 2.971 -1.937) - (end 2.971 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "cb1bcd06-0985-4025-99b3-bdcf7f4b3e70") - ) - (fp_line - (start 2.971 1.04) - (end 2.971 1.937) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "8292bce4-8614-456d-8c8e-e9f0543ce1f6") - ) - (fp_line - (start 3.011 -1.901) - (end 3.011 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "bc02ba58-61ec-4aca-a5f2-34cc95be0291") - ) - (fp_line - (start 3.011 1.04) - (end 3.011 1.901) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "156cccc7-aea0-4693-8fa2-9563b7c17898") - ) - (fp_line - (start 3.051 -1.864) - (end 3.051 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "0d12d5f7-4745-4c2a-9987-6d0ab556081b") - ) - (fp_line - (start 3.051 1.04) - (end 3.051 1.864) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "10a27cf2-6533-411b-96c4-ec76b3ef6ea4") - ) - (fp_line - (start 3.091 -1.826) - (end 3.091 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "c30be4d0-97b6-45d1-9132-5d6680a7612a") - ) - (fp_line - (start 3.091 1.04) - (end 3.091 1.826) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "6e87d02f-5798-4824-85a1-3cb7261bb23b") - ) - (fp_line - (start 3.131 -1.785) - (end 3.131 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "da24db6e-dc2c-449f-b125-884436324c7e") - ) - (fp_line - (start 3.131 1.04) - (end 3.131 1.785) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "dbe6f562-9c67-4ef3-a77a-713c6e3ece96") - ) - (fp_line - (start 3.171 -1.743) - (end 3.171 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "a7135ea7-551f-4065-bcd6-c8b58963e5ec") - ) - (fp_line - (start 3.171 1.04) - (end 3.171 1.743) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "521c2a01-f65a-43a4-bd70-d4ed815501d0") - ) - (fp_line - (start 3.211 -1.699) - (end 3.211 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "4471ef90-1c23-486f-97e9-8244126642a7") - ) - (fp_line - (start 3.211 1.04) - (end 3.211 1.699) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "d9494f69-50a1-4209-b818-35ea77d781dd") - ) - (fp_line - (start 3.251 -1.653) - (end 3.251 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "f735b45e-431c-4861-8bed-6493a859e09d") - ) - (fp_line - (start 3.251 1.04) - (end 3.251 1.653) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "3ca2530a-5325-46b5-b3a7-5c431be402c8") - ) - (fp_line - (start 3.291 -1.605) - (end 3.291 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "291e3fdb-527d-4462-9cdd-576dccab39a3") - ) - (fp_line - (start 3.291 1.04) - (end 3.291 1.605) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "9c55e4ea-4eae-4c77-b502-1955a5a00931") - ) - (fp_line - (start 3.331 -1.554) - (end 3.331 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "23082b7f-7338-403e-b78d-e36a1d19cda1") - ) - (fp_line - (start 3.331 1.04) - (end 3.331 1.554) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "9cf35c03-af15-422d-a44f-0294f852dc6d") - ) - (fp_line - (start 3.371 -1.5) - (end 3.371 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "1cf469c6-e415-48ec-9ccb-2d315d5be90f") - ) - (fp_line - (start 3.371 1.04) - (end 3.371 1.5) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "eae0d153-a9e5-41ff-8605-afe0c3c5e838") - ) - (fp_line - (start 3.411 -1.443) - (end 3.411 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "bb28135b-227a-477c-883e-63dd90fb2783") - ) - (fp_line - (start 3.411 1.04) - (end 3.411 1.443) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "49e1d72b-3ec6-4631-aaeb-354150e65551") - ) - (fp_line - (start 3.451 -1.383) - (end 3.451 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "89e5e20f-72e6-45ed-b998-854fa9498ad3") - ) - (fp_line - (start 3.451 1.04) - (end 3.451 1.383) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "4d420ca9-c90d-43ee-b718-5ec555ac720f") - ) - (fp_line - (start 3.491 -1.319) - (end 3.491 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "6064ed1f-043e-4c8f-b8e4-69ddcc01303c") - ) - (fp_line - (start 3.491 1.04) - (end 3.491 1.319) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "1087c381-a283-42b7-8845-09158f8f8cf3") - ) - (fp_line - (start 3.531 -1.251) - (end 3.531 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "005d55e2-a6c8-4a88-94a3-1922464837bb") - ) - (fp_line - (start 3.531 1.04) - (end 3.531 1.251) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "125f3e61-4fd4-4f72-b524-33920b1e94eb") - ) - (fp_line - (start 3.571 -1.178) - (end 3.571 1.178) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "ac059106-13bf-46d5-ad10-93773f463c8b") - ) - (fp_line - (start 3.611 -1.098) - (end 3.611 1.098) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "bacdee23-b81c-44f1-824f-923cccb0e626") - ) - (fp_line - (start 3.651 -1.011) - (end 3.651 1.011) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "ee21f86a-aaab-4139-9dd4-9a487b59de16") - ) - (fp_line - (start 3.691 -0.915) - (end 3.691 0.915) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "6a3ea3a9-6d13-4527-9469-3e805c99994c") - ) - (fp_line - (start 3.731 -0.805) - (end 3.731 0.805) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "463e63f2-1816-41b4-b227-3859415f8436") - ) - (fp_line - (start 3.771 -0.677) - (end 3.771 0.677) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "c2d49515-6916-4ee4-9110-a4b492f83781") - ) - (fp_line - (start 3.811 -0.518) - (end 3.811 0.518) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "40e6bbe4-3e38-4c14-8cf9-df8ab770308d") - ) - (fp_line - (start 3.851 -0.284) - (end 3.851 0.284) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "144c5ba4-0a59-48cb-b10b-9e7be7975b8f") - ) - (fp_circle - (center 1.25 0) - (end 3.87 0) - (stroke - (width 0.12) - (type solid) - ) - (fill none) - (layer "F.SilkS") - (uuid "4d1c3f6c-c8ea-4051-967c-695a641ae7d9") - ) - (fp_circle - (center 1.25 0) - (end 4 0) - (stroke - (width 0.05) - (type solid) - ) - (fill none) - (layer "F.CrtYd") - (uuid "e1de8cf0-94a1-4298-98ae-c27233172699") - ) - (fp_line - (start -0.883605 -1.0875) - (end -0.383605 -1.0875) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "07eafe7c-a327-4ab7-9247-77e27c84223a") - ) - (fp_line - (start -0.633605 -1.3375) - (end -0.633605 -0.8375) - (stroke - (width 0.1) - (type solid) - ) - (layer "F.Fab") - (uuid "3b3ae7bc-1ca8-429a-92e3-7151600b3668") - ) - (fp_circle - (center 1.25 0) - (end 3.75 0) - (stroke - (width 0.1) - (type solid) - ) - (fill none) - (layer "F.Fab") - (uuid "978f5ff0-75f1-4057-b6c2-d356fc96ca28") - ) - (fp_text user "${REFERENCE}" - (at 1.25 0 0) - (layer "F.Fab") - (uuid "2e8e3b79-72bd-4ba7-86ec-925628bf52db") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (pad "1" thru_hole rect - (at 0 0) - (size 1.6 1.6) - (drill 0.8) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net 1 "+5V") - (pintype "passive") - (uuid "3e02d21d-b0b9-41bb-97ad-d4036d5c8dc9") - ) - (pad "2" thru_hole circle - (at 2.5 0) - (size 1.6 1.6) - (drill 0.8) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net 2 "GND") - (pintype "passive") - (uuid "46602a92-614e-44c8-906e-6542c3cbd59a") - ) - (model "${KICAD8_3DMODEL_DIR}/Capacitor_THT.3dshapes/CP_Radial_D5.0mm_P2.50mm.wrl" - (offset - (xyz 0 0 0) - ) - (scale - (xyz 1 1 1) - ) - (rotate - (xyz 0 0 0) - ) - ) - ) - (footprint "MountingHole:MountingHole_3.2mm_M3" - (layer "F.Cu") - (uuid "1b6f01d5-203e-4034-802d-6b962041e945") - (at 128.15 106.44) - (descr "Mounting Hole 3.2mm, no annular, M3") - (tags "mounting hole 3.2mm no annular m3") - (property "Reference" "H4" - (at 0 -4.2 0) - (layer "F.SilkS") - (uuid "806745bb-9072-4cf4-8a35-3bf05b3bd37a") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Value" "MountingHole" - (at 0 4.2 0) - (layer "F.Fab") - (hide yes) - (uuid "2c16ec3e-54a7-4497-be00-3137f9572a98") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Footprint" "MountingHole:MountingHole_3.2mm_M3" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "7237d972-49a3-41ab-82d0-c9cf870b7612") - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "41a33c0f-e036-4d11-8ebe-183947d7cf68") - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Mounting Hole without connection" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "9e5087b0-1c1e-4044-afa1-73e779094085") - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property ki_fp_filters "MountingHole*") - (path "/56b60a67-b6f6-4e37-8620-6ffd4e19340d") - (sheetname "ルート") - (sheetfile "Koken-KeyBox.kicad_sch") - (attr exclude_from_pos_files exclude_from_bom) - (fp_circle - (center 0 0) - (end 3.2 0) - (stroke - (width 0.15) - (type solid) - ) - (fill none) - (layer "Cmts.User") - (uuid "8db8b9a1-3a25-402b-b0c5-71f22e5d27da") - ) - (fp_circle - (center 0 0) - (end 3.45 0) - (stroke - (width 0.05) - (type solid) - ) - (fill none) - (layer "F.CrtYd") - (uuid "7050664e-a222-4ba6-8d19-fbeeea68e9fd") - ) - (fp_text user "${REFERENCE}" - (at 0 0 0) - (layer "F.Fab") - (uuid "505e73c6-d7a9-432c-b2a8-145a3fd22756") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (pad "" np_thru_hole circle - (at 0 0) - (size 3.2 3.2) - (drill 3.2) - (layers "*.Cu" "*.Mask") - (uuid "a62de4a0-3a8c-4562-b850-1d69648d73f2") - ) - ) - (footprint "MountingHole:MountingHole_3.2mm_M3" - (layer "F.Cu") - (uuid "61348e5d-33e0-4851-899b-5ea3027bb792") - (at 128.14 48.45) - (descr "Mounting Hole 3.2mm, no annular, M3") - (tags "mounting hole 3.2mm no annular m3") - (property "Reference" "H2" - (at 0 -4.2 0) - (layer "F.SilkS") - (uuid "30de89db-8ccc-4439-9938-3a1a1d327393") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Value" "MountingHole" - (at 0 4.2 0) - (layer "F.Fab") - (uuid "a71a769a-0c96-42dd-a2d3-8a8a45be6043") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Footprint" "MountingHole:MountingHole_3.2mm_M3" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "6912009f-fe9d-4c3f-a8eb-2aeccf098f4c") - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "77a871ce-55d5-4fcf-9c9f-dd4fbe0117a7") - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Mounting Hole without connection" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "fd90030a-19b5-4719-9fd4-70fd67c74ce7") - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property ki_fp_filters "MountingHole*") - (path "/de7b62de-164c-449e-af07-be99e3807b42") - (sheetname "ルート") - (sheetfile "Koken-KeyBox.kicad_sch") - (attr exclude_from_pos_files exclude_from_bom) - (fp_circle - (center 0 0) - (end 3.2 0) - (stroke - (width 0.15) - (type solid) - ) - (fill none) - (layer "Cmts.User") - (uuid "dd05899b-3910-4323-8b18-182fff20920d") - ) - (fp_circle - (center 0 0) - (end 3.45 0) - (stroke - (width 0.05) - (type solid) - ) - (fill none) - (layer "F.CrtYd") - (uuid "a83609b3-9330-4fb4-87d4-b79d24e4b54f") - ) - (fp_text user "${REFERENCE}" - (at 0 0 0) - (layer "F.Fab") - (uuid "2d74ac8c-f7d1-4c6b-97aa-a325539208a3") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (pad "" np_thru_hole circle - (at 0 0) - (size 3.2 3.2) - (drill 3.2) - (layers "*.Cu" "*.Mask") - (uuid "1089ddb9-ac16-4faf-86d6-efe3b1a290fd") - ) - ) - (footprint "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" - (layer "F.Cu") - (uuid "ffeeedcf-9f08-4b4f-93c8-6220a3d3b141") - (at 134.97 95.58) - (descr "CP, Radial series, Radial, pin pitch=2.50mm, , diameter=5mm, Electrolytic Capacitor") - (tags "CP Radial series Radial pin pitch 2.50mm diameter 5mm Electrolytic Capacitor") - (property "Reference" "C2" - (at 1.25 -3.75 0) - (layer "F.SilkS") - (uuid "82d0096f-5698-45a1-b769-530741e6f5c1") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Value" "2.2u" - (at 1.25 3.75 0) - (layer "F.Fab") - (uuid "01e5e267-fc97-48cf-b609-696c01d49c21") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - ) - ) - (property "Footprint" "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "d6a32e0d-d2b6-407a-be5c-54ad4d2eafdd") - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Datasheet" "" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "d642d00a-0a8d-4f07-9a64-a62ce6277c73") - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property "Description" "Unpolarized capacitor" - (at 0 0 0) - (unlocked yes) - (layer "F.Fab") - (hide yes) - (uuid "931f9599-369a-4f04-9023-30ec73253949") - (effects - (font - (size 1.27 1.27) - ) - ) - ) - (property ki_fp_filters "C_*") - (path "/1debcd2c-4001-4ed6-99eb-e9dad0b2ecd3") - (sheetname "ルート") - (sheetfile "Koken-KeyBox.kicad_sch") - (attr through_hole) - (fp_line - (start -1.554775 -1.475) - (end -1.054775 -1.475) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "23d788bb-31ef-41aa-8982-5d7b5480426d") - ) - (fp_line - (start -1.304775 -1.725) - (end -1.304775 -1.225) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "fb302570-1f2b-40d2-9723-954a70a67e82") - ) - (fp_line - (start 1.25 -2.58) - (end 1.25 2.58) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "763cc5a0-1520-4c35-a53c-6898afe521fc") - ) - (fp_line - (start 1.29 -2.58) - (end 1.29 2.58) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "c2dbebf0-3c83-4284-95d8-d93054945ce7") - ) - (fp_line - (start 1.33 -2.579) - (end 1.33 2.579) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "b1623703-39d4-4f2f-8f75-8ef034fed88e") - ) - (fp_line - (start 1.37 -2.578) - (end 1.37 2.578) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "d0bd827b-b47c-4ba1-980f-aff6800a4b46") - ) - (fp_line - (start 1.41 -2.576) - (end 1.41 2.576) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "e25f6f21-6451-451b-a644-eb88087f3e02") - ) - (fp_line - (start 1.45 -2.573) - (end 1.45 2.573) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "5c89b789-9301-42ed-8419-fdf381308958") - ) - (fp_line - (start 1.49 -2.569) - (end 1.49 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "b2c62df1-8961-4a65-a283-925c095c282d") - ) - (fp_line - (start 1.49 1.04) - (end 1.49 2.569) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "0a08438f-7471-471c-a671-edc46bffa7d2") - ) - (fp_line - (start 1.53 -2.565) - (end 1.53 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "089e08be-82b9-487b-801f-a2727408e3e5") - ) - (fp_line - (start 1.53 1.04) - (end 1.53 2.565) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "2a816e40-0ba5-4def-bdb9-7a6d0acfd462") - ) - (fp_line - (start 1.57 -2.561) - (end 1.57 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "77342647-08f1-460e-a4bd-8c3af1da245a") - ) - (fp_line - (start 1.57 1.04) - (end 1.57 2.561) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "f6f7497d-a392-45fe-ac5c-71403c501880") - ) - (fp_line - (start 1.61 -2.556) - (end 1.61 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "9aa3bbc7-f5f4-48d9-81be-a85af3003002") - ) - (fp_line - (start 1.61 1.04) - (end 1.61 2.556) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "777df351-cc67-4083-a80f-f36f76e735a9") - ) - (fp_line - (start 1.65 -2.55) - (end 1.65 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "7a8fe96e-06ff-450a-a8af-4ff03f17edc3") - ) - (fp_line - (start 1.65 1.04) - (end 1.65 2.55) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "008ea342-c27a-4bda-97b7-08090ef71c67") - ) - (fp_line - (start 1.69 -2.543) - (end 1.69 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "48846b6b-986d-4753-b03b-244ea8fe45fb") - ) - (fp_line - (start 1.69 1.04) - (end 1.69 2.543) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "2fa7e316-709f-4ba2-b0ab-643ac4255f88") - ) - (fp_line - (start 1.73 -2.536) - (end 1.73 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "9b31aefe-b764-44fe-82a6-583fd9e8276c") - ) - (fp_line - (start 1.73 1.04) - (end 1.73 2.536) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "efbdb4d1-1bc6-4a82-b060-61ab17ccfdd7") - ) - (fp_line - (start 1.77 -2.528) - (end 1.77 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "474b19e1-9c45-467f-9f62-812e7c64ee7b") - ) - (fp_line - (start 1.77 1.04) - (end 1.77 2.528) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "91f6d4f0-8d24-4fad-83be-2681ced9a392") - ) - (fp_line - (start 1.81 -2.52) - (end 1.81 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "0f7b5017-8b35-4390-88af-a0587def0668") - ) - (fp_line - (start 1.81 1.04) - (end 1.81 2.52) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "70df9c4c-66a0-4722-b2a9-aee7f0281593") - ) - (fp_line - (start 1.85 -2.511) - (end 1.85 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "25f59fb6-c8da-43f0-b0fb-5af53df6ed29") - ) - (fp_line - (start 1.85 1.04) - (end 1.85 2.511) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "96f91061-8753-47d3-aad3-609f2d6846ac") - ) - (fp_line - (start 1.89 -2.501) - (end 1.89 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "cf950807-2b47-4119-a258-86faecf89d9a") - ) - (fp_line - (start 1.89 1.04) - (end 1.89 2.501) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "0fd2833a-0246-4522-9b76-0622ab8dc3ae") - ) - (fp_line - (start 1.93 -2.491) - (end 1.93 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "ebd7ac30-cd10-409c-beff-eb456232f687") - ) - (fp_line - (start 1.93 1.04) - (end 1.93 2.491) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "d50cb3e5-5516-4b89-ac0d-b213802f5263") - ) - (fp_line - (start 1.971 -2.48) - (end 1.971 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "60442af1-c8bd-4ca0-9cec-6fb4df5e080e") - ) - (fp_line - (start 1.971 1.04) - (end 1.971 2.48) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "d2be1ad3-073a-466d-b75e-efe4252fd302") - ) - (fp_line - (start 2.011 -2.468) - (end 2.011 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "07b2b35b-71ee-48a7-83b5-d222f0eae34a") - ) - (fp_line - (start 2.011 1.04) - (end 2.011 2.468) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "2850ae52-8e54-4b66-beab-ebbcbb770b1d") - ) - (fp_line - (start 2.051 -2.455) - (end 2.051 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "e899b530-f1c9-4dab-a7c2-efcea8b7837f") - ) - (fp_line - (start 2.051 1.04) - (end 2.051 2.455) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "d0556b0e-0d4e-481d-a0fc-529247b28593") - ) - (fp_line - (start 2.091 -2.442) - (end 2.091 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "2f309c67-14a0-43c5-afba-b1f4b6292ed0") - ) - (fp_line - (start 2.091 1.04) - (end 2.091 2.442) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "561a784f-b7dc-45e6-b9da-9e03f845a48c") - ) - (fp_line - (start 2.131 -2.428) - (end 2.131 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "0ee4dc62-2bf1-4267-976d-5235577a2c0c") - ) - (fp_line - (start 2.131 1.04) - (end 2.131 2.428) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "ab77055c-0fb1-448f-b8c6-1fa48fa4c1e2") - ) - (fp_line - (start 2.171 -2.414) - (end 2.171 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "d56ea5f4-34c9-4c68-9b67-26a74b602445") - ) - (fp_line - (start 2.171 1.04) - (end 2.171 2.414) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "61cd75dc-851b-4411-b75f-34fa3a919ef1") - ) - (fp_line - (start 2.211 -2.398) - (end 2.211 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "44fe3c0e-ed4a-4716-ba3a-dd3c8065adc3") - ) - (fp_line - (start 2.211 1.04) - (end 2.211 2.398) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "931203e0-9ffc-4665-b318-5a909f4b42a1") - ) - (fp_line - (start 2.251 -2.382) - (end 2.251 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "4d025153-86eb-4979-9ccf-0fb70c7ede1a") - ) - (fp_line - (start 2.251 1.04) - (end 2.251 2.382) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "b167b28b-91b7-4b61-84ee-2cf8196addc1") - ) - (fp_line - (start 2.291 -2.365) - (end 2.291 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "f4924814-6ace-4972-9a98-98acb24be62c") - ) - (fp_line - (start 2.291 1.04) - (end 2.291 2.365) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "767e3a5b-3771-4ecb-8bdb-43c615fc1d75") - ) - (fp_line - (start 2.331 -2.348) - (end 2.331 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "e312c241-e28f-473f-b60b-2e8291097bb6") - ) - (fp_line - (start 2.331 1.04) - (end 2.331 2.348) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "484b93c7-107a-434e-a296-4ca10752eaa1") - ) - (fp_line - (start 2.371 -2.329) - (end 2.371 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "5171c886-1a02-4375-9c6f-2d86a03a6792") - ) - (fp_line - (start 2.371 1.04) - (end 2.371 2.329) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "72139d41-753f-40d4-911b-c0685c765842") - ) - (fp_line - (start 2.411 -2.31) - (end 2.411 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "07325b7e-197d-45c4-bf69-536a8f6b13ac") - ) - (fp_line - (start 2.411 1.04) - (end 2.411 2.31) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "8ca27c3a-6a08-4616-b923-355b3b60ef55") - ) - (fp_line - (start 2.451 -2.29) - (end 2.451 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "c9f05a30-51fb-473e-b258-872b6d1c77e5") - ) - (fp_line - (start 2.451 1.04) - (end 2.451 2.29) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "18713915-e543-4b08-986a-f4d0b5fbd612") - ) - (fp_line - (start 2.491 -2.268) - (end 2.491 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "300edea4-c399-43e7-886f-4d26cd811888") - ) - (fp_line - (start 2.491 1.04) - (end 2.491 2.268) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "734a22d4-5179-4f29-8369-92f85194e27b") - ) - (fp_line - (start 2.531 -2.247) - (end 2.531 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "f348c59e-1607-4cfb-85ac-dbc5ce482f7f") - ) - (fp_line - (start 2.531 1.04) - (end 2.531 2.247) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "9625e5ec-354d-4e2e-a5f9-ab3e6cf985d1") - ) - (fp_line - (start 2.571 -2.224) - (end 2.571 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "e52cf407-25c5-41be-9579-60ed9e3e27f5") - ) - (fp_line - (start 2.571 1.04) - (end 2.571 2.224) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "712d5516-2986-409f-8c11-765bbe4d60bd") - ) - (fp_line - (start 2.611 -2.2) - (end 2.611 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "500a42f0-4e6b-4b70-8f39-8199a334ea82") - ) - (fp_line - (start 2.611 1.04) - (end 2.611 2.2) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "f5dfe211-546c-4c48-a980-1ef42040a1f9") - ) - (fp_line - (start 2.651 -2.175) - (end 2.651 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "fc3d35cd-13f7-4c14-be1a-eaf25a0872d0") - ) - (fp_line - (start 2.651 1.04) - (end 2.651 2.175) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "8caad1c5-322d-44d5-9659-7ded0ef5ede6") - ) - (fp_line - (start 2.691 -2.149) - (end 2.691 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "0ac0e329-b50a-4829-ae8d-c49f9538060d") - ) - (fp_line - (start 2.691 1.04) - (end 2.691 2.149) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "71a4c1ab-1b8d-4934-b316-955bc45707b1") - ) - (fp_line - (start 2.731 -2.122) - (end 2.731 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "12afc25d-1a1f-4513-97bf-5fe9b72b2763") - ) - (fp_line - (start 2.731 1.04) - (end 2.731 2.122) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "3c5fa1ff-c21d-4a55-9ca1-563b17cc232f") - ) - (fp_line - (start 2.771 -2.095) - (end 2.771 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "4345b3db-9e24-4efa-8e12-fc5cd2ac90f7") - ) - (fp_line - (start 2.771 1.04) - (end 2.771 2.095) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "3dd09200-86c9-4d65-bd02-79b9fae31c41") - ) - (fp_line - (start 2.811 -2.065) - (end 2.811 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "8d068057-4169-40a2-834a-711f5a15698a") - ) - (fp_line - (start 2.811 1.04) - (end 2.811 2.065) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "de28c29c-a983-402a-9a90-a01ac0e64089") - ) - (fp_line - (start 2.851 -2.035) - (end 2.851 -1.04) - (stroke - (width 0.12) - (type solid) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "505e73c6-d7a9-432c-b2a8-145a3fd22756") + (effects + (font + (size 1 1) + (thickness 0.15) + ) ) - (layer "F.SilkS") - (uuid "87ff5710-80a0-45c3-8513-fc2bc434b564") ) - (fp_line - (start 2.851 1.04) - (end 2.851 2.035) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "2e0b430e-936e-4202-ad56-116f7ea4c0c1") + (pad "" np_thru_hole circle + (at 0 0) + (size 3.2 3.2) + (drill 3.2) + (layers "*.Cu" "*.Mask") + (uuid "a62de4a0-3a8c-4562-b850-1d69648d73f2") ) - (fp_line - (start 2.891 -2.004) - (end 2.891 -1.04) - (stroke - (width 0.12) - (type solid) - ) + ) + (footprint "Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder" + (layer "F.Cu") + (uuid "3c1ebd58-d6e8-48fe-a9ca-368354a27487") + (at 139.9 92.0275 -90) + (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (property "Reference" "C2" + (at 0 -1.43 90) (layer "F.SilkS") - (uuid "715f00ed-9c54-45cb-9c7a-48b755b6f711") - ) - (fp_line - (start 2.891 1.04) - (end 2.891 2.004) - (stroke - (width 0.12) - (type solid) + (uuid "2bacbf57-0f42-4255-8b62-f91d81092bf3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) ) - (layer "F.SilkS") - (uuid "51af9d7a-92a7-4255-9aa8-79d9d2832299") ) - (fp_line - (start 2.931 -1.971) - (end 2.931 -1.04) - (stroke - (width 0.12) - (type solid) + (property "Value" "2.2u" + (at 0 1.43 90) + (layer "F.Fab") + (uuid "aaff9871-0b92-481a-a4fa-755fb8ae88d9") + (effects + (font + (size 1 1) + (thickness 0.15) + ) ) - (layer "F.SilkS") - (uuid "9fa7374a-8680-4055-9275-01c4bf930aa1") ) - (fp_line - (start 2.931 1.04) - (end 2.931 1.971) - (stroke - (width 0.12) - (type solid) + (property "Footprint" "Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder" + (at 0 0 -90) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "e31945e3-7b42-4b5b-92bc-8a5d850f6a03") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "F.SilkS") - (uuid "00e0e6f4-c9ca-4682-b329-fbdb8c237e54") ) - (fp_line - (start 2.971 -1.937) - (end 2.971 -1.04) - (stroke - (width 0.12) - (type solid) + (property "Datasheet" "" + (at 0 0 -90) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "9cd25772-7bfc-4506-b116-6769ec698442") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "F.SilkS") - (uuid "bbc288f4-4bf7-4853-8218-8977cf51ed29") ) - (fp_line - (start 2.971 1.04) - (end 2.971 1.937) - (stroke - (width 0.12) - (type solid) + (property "Description" "Unpolarized capacitor" + (at 0 0 -90) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "dbb16999-6379-412c-b2c9-38cd20ddc6a0") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "F.SilkS") - (uuid "a2915c9b-b111-4b15-977d-88164d31aa4c") ) + (property ki_fp_filters "C_*") + (path "/1debcd2c-4001-4ed6-99eb-e9dad0b2ecd3") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr smd) (fp_line - (start 3.011 -1.901) - (end 3.011 -1.04) + (start -0.146267 0.51) + (end 0.146267 0.51) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "8aa10ea0-e8d5-4bfe-a184-dd046137e0bc") + (uuid "586ef34f-4b88-4397-aa8e-7997faedd676") ) (fp_line - (start 3.011 1.04) - (end 3.011 1.901) + (start -0.146267 -0.51) + (end 0.146267 -0.51) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "2166da68-116f-452a-83f4-a8eafbef2f9b") + (uuid "c631a159-5e9a-4e12-b013-51bfa438838e") ) (fp_line - (start 3.051 -1.864) - (end 3.051 -1.04) + (start -1.65 0.73) + (end -1.65 -0.73) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "e595054f-e4a4-46d0-bcde-9b60b4eb502a") + (layer "F.CrtYd") + (uuid "b18ea1ac-dcc7-4b98-bf03-0801fb951b55") ) (fp_line - (start 3.051 1.04) - (end 3.051 1.864) + (start 1.65 0.73) + (end -1.65 0.73) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "11672327-a740-4b6e-a033-b1c7d11775c7") + (layer "F.CrtYd") + (uuid "32451bd8-d3c9-4a53-8e8e-92c8ce21e09f") ) (fp_line - (start 3.091 -1.826) - (end 3.091 -1.04) + (start -1.65 -0.73) + (end 1.65 -0.73) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "1b533d53-dce4-4799-a8e5-f2799ee1b6ff") + (layer "F.CrtYd") + (uuid "a673259f-a4ca-44b9-ad19-72f71f110ae4") ) (fp_line - (start 3.091 1.04) - (end 3.091 1.826) + (start 1.65 -0.73) + (end 1.65 0.73) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "955da046-7a17-4752-8b95-0c6aca8f02f1") + (layer "F.CrtYd") + (uuid "a0d4bb7f-f428-492f-b60f-960f2517a6a2") ) (fp_line - (start 3.131 -1.785) - (end 3.131 -1.04) + (start -0.8 0.4) + (end -0.8 -0.4) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "707671b9-957a-4b19-a773-547e3cadc657") + (layer "F.Fab") + (uuid "4c48197f-d62d-4140-9394-ce2d52bc765e") ) (fp_line - (start 3.131 1.04) - (end 3.131 1.785) + (start 0.8 0.4) + (end -0.8 0.4) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "58f25006-890e-4295-8b15-faefd6e10472") + (layer "F.Fab") + (uuid "d86f0efa-83f7-40c3-b420-d69b0f88c5d1") ) (fp_line - (start 3.171 -1.743) - (end 3.171 -1.04) + (start -0.8 -0.4) + (end 0.8 -0.4) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "09dcdf9e-76a1-428b-9f0d-a7a06f18f9ef") + (layer "F.Fab") + (uuid "d73771f4-e41d-4e8e-8c8d-bbdf50c79e02") ) (fp_line - (start 3.171 1.04) - (end 3.171 1.743) + (start 0.8 -0.4) + (end 0.8 0.4) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "F.SilkS") - (uuid "8f8e2462-3f62-4502-bf5b-ad8e773bf63f") + (layer "F.Fab") + (uuid "99feeb71-474b-401d-a814-c8a0f04d08ca") ) - (fp_line - (start 3.211 -1.699) - (end 3.211 -1.04) - (stroke - (width 0.12) - (type solid) + (fp_text user "${REFERENCE}" + (at 0 0 90) + (layer "F.Fab") + (uuid "37195049-2f9f-4650-a7f8-2610e7362612") + (effects + (font + (size 0.4 0.4) + (thickness 0.06) + ) ) - (layer "F.SilkS") - (uuid "667062fc-36ed-4e71-b24f-e98f9062eefb") ) - (fp_line - (start 3.211 1.04) - (end 3.211 1.699) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "775af508-9f6a-4389-850a-0e402b4abf03") + (pad "1" smd roundrect + (at -0.8625 0 270) + (size 1.075 0.95) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 2 "GND") + (pintype "passive") + (uuid "f62dfafa-1cc3-4ee5-a874-a14987bbc1cc") ) - (fp_line - (start 3.251 -1.653) - (end 3.251 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "5f1808bd-d7f6-4bf3-a257-fd712f14e8a0") + (pad "2" smd roundrect + (at 0.8625 0 270) + (size 1.075 0.95) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 1 "+5V") + (pintype "passive") + (uuid "a453c3fc-7e11-4496-bcf9-7d2fb03b2ff2") ) - (fp_line - (start 3.251 1.04) - (end 3.251 1.653) - (stroke - (width 0.12) - (type solid) + (model "${KICAD8_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl" + (offset + (xyz 0 0 0) ) - (layer "F.SilkS") - (uuid "7724e0f6-c5cb-401b-bd04-a92a8889f9a4") - ) - (fp_line - (start 3.291 -1.605) - (end 3.291 -1.04) - (stroke - (width 0.12) - (type solid) + (scale + (xyz 1 1 1) ) - (layer "F.SilkS") - (uuid "d9f5cf25-94a2-4fce-8319-6e5b327fcd5e") - ) - (fp_line - (start 3.291 1.04) - (end 3.291 1.605) - (stroke - (width 0.12) - (type solid) + (rotate + (xyz 0 0 0) ) - (layer "F.SilkS") - (uuid "70bbfcca-0d8a-431f-abcf-3f41b3007f55") ) - (fp_line - (start 3.331 -1.554) - (end 3.331 -1.04) - (stroke - (width 0.12) - (type solid) - ) + ) + (footprint "MountingHole:MountingHole_3.2mm_M3" + (layer "F.Cu") + (uuid "61348e5d-33e0-4851-899b-5ea3027bb792") + (at 128.14 48.45) + (descr "Mounting Hole 3.2mm, no annular, M3") + (tags "mounting hole 3.2mm no annular m3") + (property "Reference" "H2" + (at 0 -4.2 0) (layer "F.SilkS") - (uuid "37cd7dc1-3bbc-4a80-a9d8-6ef6e2495494") + (uuid "30de89db-8ccc-4439-9938-3a1a1d327393") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) ) - (fp_line - (start 3.331 1.04) - (end 3.331 1.554) - (stroke - (width 0.12) - (type solid) + (property "Value" "MountingHole" + (at 0 4.2 0) + (layer "F.Fab") + (uuid "a71a769a-0c96-42dd-a2d3-8a8a45be6043") + (effects + (font + (size 1 1) + (thickness 0.15) + ) ) - (layer "F.SilkS") - (uuid "a7126d8e-ed30-49f6-9a13-26c63ec6c995") ) - (fp_line - (start 3.371 -1.5) - (end 3.371 -1.04) - (stroke - (width 0.12) - (type solid) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "6912009f-fe9d-4c3f-a8eb-2aeccf098f4c") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "F.SilkS") - (uuid "8508aaf9-601c-4cc6-bba6-0bf1c2d96fd3") ) - (fp_line - (start 3.371 1.04) - (end 3.371 1.5) - (stroke - (width 0.12) - (type solid) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "77a871ce-55d5-4fcf-9c9f-dd4fbe0117a7") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "F.SilkS") - (uuid "01869b05-00e2-4da3-8bd8-4fb54feda0a8") ) - (fp_line - (start 3.411 -1.443) - (end 3.411 -1.04) - (stroke - (width 0.12) - (type solid) + (property "Description" "Mounting Hole without connection" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "fd90030a-19b5-4719-9fd4-70fd67c74ce7") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "F.SilkS") - (uuid "3bfcf4b4-3530-4c54-aa86-66ca51840bb4") ) - (fp_line - (start 3.411 1.04) - (end 3.411 1.443) + (property ki_fp_filters "MountingHole*") + (path "/de7b62de-164c-449e-af07-be99e3807b42") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 3.2 0) (stroke - (width 0.12) + (width 0.15) (type solid) ) - (layer "F.SilkS") - (uuid "01b76ccc-e0ec-4120-97a1-b887ec1f4fe7") + (fill none) + (layer "Cmts.User") + (uuid "dd05899b-3910-4323-8b18-182fff20920d") ) - (fp_line - (start 3.451 -1.383) - (end 3.451 -1.04) + (fp_circle + (center 0 0) + (end 3.45 0) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "4da786f8-c620-4928-aca6-aa33b3a95174") + (fill none) + (layer "F.CrtYd") + (uuid "a83609b3-9330-4fb4-87d4-b79d24e4b54f") ) - (fp_line - (start 3.451 1.04) - (end 3.451 1.383) - (stroke - (width 0.12) - (type solid) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "2d74ac8c-f7d1-4c6b-97aa-a325539208a3") + (effects + (font + (size 1 1) + (thickness 0.15) + ) ) - (layer "F.SilkS") - (uuid "fd6f9d58-0ede-43c7-9a90-659906d6ba6c") ) - (fp_line - (start 3.491 -1.319) - (end 3.491 -1.04) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "75594720-54f2-40a9-84eb-54f99ea72ec7") + (pad "" np_thru_hole circle + (at 0 0) + (size 3.2 3.2) + (drill 3.2) + (layers "*.Cu" "*.Mask") + (uuid "1089ddb9-ac16-4faf-86d6-efe3b1a290fd") ) - (fp_line - (start 3.491 1.04) - (end 3.491 1.319) - (stroke - (width 0.12) - (type solid) + ) + (footprint "Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder" + (layer "F.Cu") + (uuid "6ce47c73-6c5e-4e60-b4ec-e6dff08d56e9") + (at 136.55 63.91) + (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (property "Reference" "R1" + (at 2.84 0.04 0) + (layer "F.SilkS") + (uuid "e59702f5-130d-4fdd-b241-9a4cd0bd5a0b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) ) - (layer "F.SilkS") - (uuid "334057da-fd80-4a94-b340-620581d89cf4") ) - (fp_line - (start 3.531 -1.251) - (end 3.531 -1.04) - (stroke - (width 0.12) - (type solid) + (property "Value" "5.1k" + (at 6.24 -0.05 0) + (layer "F.Fab") + (uuid "87965a71-160a-46ff-8afb-7bb5f22ad572") + (effects + (font + (size 1 1) + (thickness 0.15) + ) ) - (layer "F.SilkS") - (uuid "8a573016-312f-4337-8017-90a6f7327a79") ) - (fp_line - (start 3.531 1.04) - (end 3.531 1.251) - (stroke - (width 0.12) - (type solid) + (property "Footprint" "Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "2731a580-e085-46c2-a5a5-e759d4bbadfc") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "F.SilkS") - (uuid "1a959e8c-ffb7-4b36-ae19-d032e842f8c6") ) - (fp_line - (start 3.571 -1.178) - (end 3.571 1.178) - (stroke - (width 0.12) - (type solid) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "0ff60677-b9c2-466b-9713-cb6f6503db9c") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "F.SilkS") - (uuid "c43ab598-838f-4aea-b791-df519a1ee8d4") ) - (fp_line - (start 3.611 -1.098) - (end 3.611 1.098) - (stroke - (width 0.12) - (type solid) + (property "Description" "Resistor" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "8b7eb95f-f7b5-448c-b6f8-e693bf8afeca") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "F.SilkS") - (uuid "ef114e72-c0cb-46b4-b08b-a3b14c897ed1") ) + (property ki_fp_filters "R_*") + (path "/f990c2da-7cc8-4f42-a962-02e8738a3e68") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr smd) (fp_line - (start 3.651 -1.011) - (end 3.651 1.011) + (start -0.254724 -0.5225) + (end 0.254724 -0.5225) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "8bb6ecca-ef22-4456-b9f9-ec18da21c00d") + (uuid "92c6be81-cec4-4401-8f2a-5afa6c031a6c") ) (fp_line - (start 3.691 -0.915) - (end 3.691 0.915) + (start -0.254724 0.5225) + (end 0.254724 0.5225) (stroke (width 0.12) (type solid) ) (layer "F.SilkS") - (uuid "e7877306-32a8-462f-bc46-59ed89b19bda") + (uuid "85aa59ab-789f-43bb-8eff-5336795e6d58") ) (fp_line - (start 3.731 -0.805) - (end 3.731 0.805) + (start -1.65 -0.73) + (end 1.65 -0.73) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "27b4854b-bcb4-42d0-892c-90f059cba127") + (layer "F.CrtYd") + (uuid "b7f26af5-3fa3-4603-be04-fa19fe9270ae") ) (fp_line - (start 3.771 -0.677) - (end 3.771 0.677) + (start -1.65 0.73) + (end -1.65 -0.73) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "605d9b2e-2171-48ff-b0f5-d38c74b6038d") + (layer "F.CrtYd") + (uuid "51449966-10bb-420c-99c2-62f5c0c2c75c") ) (fp_line - (start 3.811 -0.518) - (end 3.811 0.518) + (start 1.65 -0.73) + (end 1.65 0.73) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "F.SilkS") - (uuid "5045216d-8619-43a0-80df-dd225edec983") + (layer "F.CrtYd") + (uuid "4c4d0b69-c26d-4872-9057-91999363fb76") ) (fp_line - (start 3.851 -0.284) - (end 3.851 0.284) - (stroke - (width 0.12) - (type solid) - ) - (layer "F.SilkS") - (uuid "6a4307fa-f2c2-40ab-ae2c-1fed650c93b7") - ) - (fp_circle - (center 1.25 0) - (end 3.87 0) + (start 1.65 0.73) + (end -1.65 0.73) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (fill none) - (layer "F.SilkS") - (uuid "aa5875ea-d4c2-4bb0-9e09-fd384cbc3f25") + (layer "F.CrtYd") + (uuid "6b7d4e30-83a3-4640-8b59-5fdfdbc6b8c0") ) - (fp_circle - (center 1.25 0) - (end 4 0) + (fp_line + (start -0.8 -0.4125) + (end 0.8 -0.4125) (stroke - (width 0.05) + (width 0.1) (type solid) ) - (fill none) - (layer "F.CrtYd") - (uuid "607d2597-1493-42e8-9384-65d6b3e2e04f") + (layer "F.Fab") + (uuid "c9b5bc47-8ec1-47cd-94ce-e74bcfd1b72d") ) (fp_line - (start -0.883605 -1.0875) - (end -0.383605 -1.0875) + (start -0.8 0.4125) + (end -0.8 -0.4125) (stroke (width 0.1) (type solid) ) (layer "F.Fab") - (uuid "a77ac503-ec8e-45c5-8670-cbdfd69563e6") + (uuid "77883fba-cc10-47fb-bc7c-b75c7f891499") ) (fp_line - (start -0.633605 -1.3375) - (end -0.633605 -0.8375) + (start 0.8 -0.4125) + (end 0.8 0.4125) (stroke (width 0.1) (type solid) ) (layer "F.Fab") - (uuid "b32c8b03-7bed-4d2f-b98e-4faca7f22293") + (uuid "bc25c225-08c1-45aa-8c08-8ee4b9923de5") ) - (fp_circle - (center 1.25 0) - (end 3.75 0) + (fp_line + (start 0.8 0.4125) + (end -0.8 0.4125) (stroke (width 0.1) (type solid) ) - (fill none) (layer "F.Fab") - (uuid "166ce892-79fa-4c31-ac15-6e05a7aeb6ae") + (uuid "a6273c27-61df-4378-8b78-28615b93a32e") ) (fp_text user "${REFERENCE}" - (at 1.25 0 0) + (at 0.07 0.07 0) (layer "F.Fab") - (uuid "95a86ca8-57d5-47ed-b340-09d4ed488b9a") + (uuid "9e81427d-75ed-4197-86bb-31b812922c3a") (effects (font - (size 1 1) - (thickness 0.15) + (size 0.4 0.4) + (thickness 0.06) ) ) ) - (pad "1" thru_hole rect - (at 0 0) - (size 1.6 1.6) - (drill 0.8) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net 2 "GND") + (pad "1" smd roundrect + (at -0.9125 0) + (size 0.975 0.95) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 15 "Net-(J4-CC2)") (pintype "passive") - (uuid "47a749a4-7b04-4f3c-9993-759194eaece0") + (uuid "6eda3140-f9d4-4328-b6b8-e45e99a9dcc0") ) - (pad "2" thru_hole circle - (at 2.5 0) - (size 1.6 1.6) - (drill 0.8) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net 1 "+5V") + (pad "2" smd roundrect + (at 0.9125 0) + (size 0.975 0.95) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 2 "GND") (pintype "passive") - (uuid "c0511394-2453-44ba-b27a-4c5d20b42eaa") + (uuid "cd09b622-fa5e-4f43-8d6f-81088541e4ca") ) - (model "${KICAD8_3DMODEL_DIR}/Capacitor_THT.3dshapes/CP_Radial_D5.0mm_P2.50mm.wrl" + (model "${KICAD8_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl" (offset (xyz 0 0 0) ) @@ -3068,381 +1293,468 @@ ) ) ) - (footprint "Connector_BarrelJack:BarrelJack_Horizontal" - (layer "B.Cu") - (uuid "435eebcb-c275-4415-b3a3-121b7ea29892") - (at 138.01 76.66) - (descr "DC Barrel Jack") - (tags "Power Jack") - (property "Reference" "J1" - (at -8.45 -5.75 0) - (layer "B.SilkS") - (uuid "b542a15c-0857-4648-b67c-acf2405c1887") + (footprint "Connector_USB:USB_C_Receptacle_GCT_USB4125-xx-x_6P_TopMnt_Horizontal" + (layer "F.Cu") + (uuid "74151137-ac9e-4bde-babb-0a22800bcd06") + (at 127.9 62.72 -90) + (descr "USB Type C Receptacle, GCT, power-only, 6P, top mounted, horizontal, 3A, 1mm stake: https://gct.co/files/drawings/usb4125.pdf") + (tags "USB C Type-C receptacle power-only charging-only 6P 6C right angled") + (property "Reference" "J4" + (at 0 -5.1 -90) + (unlocked yes) + (layer "F.SilkS") + (uuid "e495d17d-7578-4e23-beeb-4fc7c07f1455") (effects (font (size 1 1) (thickness 0.15) ) - (justify mirror) ) ) - (property "Value" "Jack-DC" - (at -6.2 5.5 0) - (layer "B.Fab") - (uuid "785143bd-5398-4b34-9666-a03cba10d0a0") + (property "Value" "USB_C_Receptacle_PowerOnly_6P" + (at 0 4.725 -90) + (unlocked yes) + (layer "F.Fab") + (uuid "c45b6ba1-97ec-40ca-a1c7-3795d7fe8b2a") (effects (font (size 1 1) (thickness 0.15) ) - (justify mirror) ) ) - (property "Footprint" "Connector_BarrelJack:BarrelJack_Horizontal" - (at 0 0 180) + (property "Footprint" "Connector_USB:USB_C_Receptacle_GCT_USB4125-xx-x_6P_TopMnt_Horizontal" + (at 0 0 -90) (unlocked yes) - (layer "B.Fab") + (layer "F.Fab") (hide yes) - (uuid "f06cb9c3-1de6-422a-b2ab-5e4c0645ffe8") + (uuid "ed32f43f-1196-4b34-81a6-052ded4fa070") (effects (font (size 1.27 1.27) ) - (justify mirror) ) ) - (property "Datasheet" "" - (at 0 0 180) + (property "Datasheet" "https://www.usb.org/sites/default/files/documents/usb_type-c.zip" + (at 0 0 -90) (unlocked yes) - (layer "B.Fab") + (layer "F.Fab") (hide yes) - (uuid "6e4653f6-0344-4239-b477-96080d9c1d1a") + (uuid "51993338-466c-4856-835b-cf23a474da8d") (effects (font (size 1.27 1.27) ) - (justify mirror) ) ) - (property "Description" "DC Barrel Jack" - (at 0 0 180) + (property "Description" "USB Power-Only 6P Type-C Receptacle connector" + (at 0 0 -90) (unlocked yes) - (layer "B.Fab") + (layer "F.Fab") (hide yes) - (uuid "c01bc736-6671-40b4-abaf-f4bb98df5496") + (uuid "9402a76a-d031-4226-a5be-1ab173ae1218") (effects (font (size 1.27 1.27) ) - (justify mirror) ) ) - (property ki_fp_filters "BarrelJack*") - (path "/e07d5664-1123-4e43-a5be-f46dbb258563") + (property ki_fp_filters "USB*C*Receptacle*") + (path "/e4d914fc-dd43-44b7-a08f-f346d72fe537") (sheetname "ルート") (sheetfile "Koken-KeyBox.kicad_sch") - (attr through_hole) + (attr smd) (fp_line - (start -13.8 -4.6) - (end -5 -4.6) + (start -4.67 -0.25) + (end -4.67 -1.95) (stroke (width 0.12) (type solid) ) - (layer "B.SilkS") - (uuid "2dae7cbb-981a-487f-a7e6-d595fa62619d") + (layer "F.SilkS") + (uuid "693ccbc5-d914-429e-bf94-ae2b94343f65") ) (fp_line - (start -13.8 4.6) - (end -13.8 -4.6) + (start 4.67 -0.25) + (end 4.67 -1.95) (stroke (width 0.12) (type solid) ) - (layer "B.SilkS") - (uuid "e85309fa-d3cb-4300-93e4-0e35e4773410") + (layer "F.SilkS") + (uuid "0e2bd75f-199f-4307-a8d0-283741876bdc") ) (fp_line - (start -1 -4.6) - (end 0.9 -4.6) + (start 5 3.4) + (end -5 3.4) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "B.SilkS") - (uuid "43088279-3ab9-4693-adde-5fb9fefdcc91") + (layer "Dwgs.User") + (uuid "7145058f-9e23-4e51-be63-cdde83bde593") ) - (fp_line - (start 0.9 -4.6) - (end 0.9 -1.9) + (fp_rect + (start -5.37 -4.35) + (end 5.37 3.9) (stroke - (width 0.12) + (width 0.05) (type solid) ) - (layer "B.SilkS") - (uuid "24700acb-58f7-464b-92ce-e0bce1386e3f") + (fill none) + (layer "F.CrtYd") + (uuid "6ef832ca-7430-4212-8e02-8040e5c7b7f2") ) - (fp_line - (start 0.9 2) - (end 0.9 4.6) + (fp_rect + (start -4.47 -3.4) + (end 4.47 3.4) (stroke - (width 0.12) + (width 0.1) (type solid) ) - (layer "B.SilkS") - (uuid "7dd09193-73ca-4039-a0fb-d6b812fe6d1f") + (fill none) + (layer "F.Fab") + (uuid "92a8f203-f35b-44ae-a298-481ead719c7c") ) - (fp_line - (start 0.9 4.6) - (end -13.8 4.6) - (stroke - (width 0.12) - (type solid) + (fp_text user "PCB Edge" + (at 0 2.825 -90) + (unlocked yes) + (layer "Dwgs.User") + (uuid "57f1a2da-f334-40a8-a31d-2499f1f1c4c9") + (effects + (font + (size 0.5 0.5) + (thickness 0.1) + ) ) - (layer "B.SilkS") - (uuid "d46385f6-3104-4cba-ade4-790c7c91c6bb") ) - (fp_line - (start 1.1 4.8) - (end 0.05 4.8) - (stroke - (width 0.12) - (type solid) + (fp_text user "${REFERENCE}" + (at 0 -0.275 -90) + (unlocked yes) + (layer "F.Fab") + (uuid "da45f0ce-c9e9-4394-ab50-c58736847497") + (effects + (font + (size 1 1) + (thickness 0.15) + ) ) - (layer "B.SilkS") - (uuid "84ff7ea3-0bce-43b6-8039-ce8027c6b501") ) - (fp_line - (start 1.1 4.8) - (end 1.1 3.75) - (stroke - (width 0.12) - (type solid) - ) - (layer "B.SilkS") - (uuid "53ebeabd-67de-43f9-bc56-075ea86faaa5") + (pad "A5" smd roundrect + (at -0.5 -3.08 270) + (size 0.7 1.2) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 27 "Net-(J4-CC1)") + (pinfunction "CC1") + (pintype "bidirectional") + (uuid "a1c09567-974a-4311-85d4-53b76c918fcb") + ) + (pad "A9" smd roundrect + (at 1.52 -3.08 90) + (size 0.76 1.2) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 1 "+5V") + (pinfunction "VBUS") + (pintype "passive") + (uuid "28a52af9-0df6-4022-b7ee-52bb2423d848") ) - (fp_line - (start -14 -4.75) - (end -5 -4.75) - (stroke - (width 0.05) - (type solid) - ) - (layer "B.CrtYd") - (uuid "fd34afb6-488b-4b8b-892e-e0aa694e89a9") + (pad "A12" smd roundrect + (at 2.75 -3.08 90) + (size 0.8 1.2) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 2 "GND") + (pinfunction "GND") + (pintype "passive") + (uuid "e8623878-4c1d-4f39-a7e4-961a1553ac3d") ) - (fp_line - (start -14 4.75) - (end -14 -4.75) - (stroke - (width 0.05) - (type solid) + (pad "B5" smd roundrect + (at 0.5 -3.08 90) + (size 0.7 1.2) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 15 "Net-(J4-CC2)") + (pinfunction "CC2") + (pintype "bidirectional") + (uuid "17576321-783e-4aae-8c0c-e3e00bd41911") + ) + (pad "B9" smd roundrect + (at -1.52 -3.08 270) + (size 0.76 1.2) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 1 "+5V") + (pinfunction "VBUS") + (pintype "passive") + (uuid "94b6e6fe-4d39-4a00-9371-f736d0438456") + ) + (pad "B12" smd roundrect + (at -2.75 -3.08 270) + (size 0.8 1.2) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 2 "GND") + (pinfunction "GND") + (pintype "passive") + (uuid "e309d2b6-0d36-4211-b883-b7cc791129b1") + ) + (pad "S1" thru_hole oval + (at -4.32 -3 270) + (size 1.1 1.7) + (drill oval 0.6 1.2) + (layers "*.Cu" "*.Mask" "F.Paste") + (remove_unused_layers no) + (net 2 "GND") + (pinfunction "SHIELD") + (pintype "passive") + (uuid "b1e17264-9103-43d8-9cae-4c4762836058") + ) + (pad "S1" thru_hole oval + (at -4.32 0.8 270) + (size 1.1 1.7) + (drill oval 0.6 1.2) + (layers "*.Cu" "*.Mask" "F.Paste") + (remove_unused_layers no) + (net 2 "GND") + (pinfunction "SHIELD") + (pintype "passive") + (uuid "375291fe-5b27-466e-a7a7-ecd030ecacb1") + ) + (pad "S1" thru_hole oval + (at 4.32 -3 270) + (size 1.1 1.7) + (drill oval 0.6 1.2) + (layers "*.Cu" "*.Mask" "F.Paste") + (remove_unused_layers no) + (net 2 "GND") + (pinfunction "SHIELD") + (pintype "passive") + (uuid "7af860c3-a70d-453b-a9b0-e995396623ab") + ) + (pad "S1" thru_hole oval + (at 4.32 0.8 270) + (size 1.1 1.7) + (drill oval 0.6 1.2) + (layers "*.Cu" "*.Mask" "F.Paste") + (remove_unused_layers no) + (net 2 "GND") + (pinfunction "SHIELD") + (pintype "passive") + (uuid "8dd8da62-2b74-45fd-b35f-e89e6922a031") + ) + (model "${KICAD8_3DMODEL_DIR}/Connector_USB.3dshapes/USB_C_Receptacle_GCT_USB4125-xx-x_6P_TopMnt_Horizontal.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) ) - (layer "B.CrtYd") - (uuid "cbe7095f-c3d4-4c0b-b8fa-cd58bd7dca58") ) - (fp_line - (start -14 4.75) - (end 1 4.75) - (stroke - (width 0.05) - (type solid) + ) + (footprint "Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder" + (layer "F.Cu") + (uuid "945c189e-22a9-4b32-833e-d8c201a77ca6") + (at 136.5975 66.26) + (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (property "Reference" "C1" + (at 0 -1.43 0) + (layer "F.SilkS") + (uuid "cf5dfa65-2172-409c-b561-838858c355ec") + (effects + (font + (size 1 1) + (thickness 0.15) + ) ) - (layer "B.CrtYd") - (uuid "e9ed2aa3-9a1d-4721-aa47-14d089cf5c4a") ) - (fp_line - (start -5 -6.75) - (end -1 -6.75) - (stroke - (width 0.05) - (type solid) + (property "Value" "2.2u" + (at 0 1.43 0) + (layer "F.Fab") + (uuid "94f20d0a-6bd3-4912-becd-c6ecf16b848f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) ) - (layer "B.CrtYd") - (uuid "00f9a8a6-8c01-448f-b22a-f8fa7ed2c482") ) - (fp_line - (start -5 -4.75) - (end -5 -6.75) - (stroke - (width 0.05) - (type solid) + (property "Footprint" "Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "4ba1af40-53b2-4766-8eca-e38e34f1ca2d") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "B.CrtYd") - (uuid "b37cfd30-6405-40ad-8682-17f46186adb2") ) - (fp_line - (start -1 -6.75) - (end -1 -4.75) - (stroke - (width 0.05) - (type solid) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "3b7fb69c-85b3-42df-bdc2-c01b42df001d") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "B.CrtYd") - (uuid "1a78e356-159d-4c53-bc54-9f8c1e12a133") ) - (fp_line - (start -1 -4.75) - (end 1 -4.75) - (stroke - (width 0.05) - (type solid) + (property "Description" "Unpolarized capacitor" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "a824d56e-3b59-4a92-8867-8a8516937908") + (effects + (font + (size 1.27 1.27) + ) ) - (layer "B.CrtYd") - (uuid "4194e96f-5377-45f6-a237-cd20d356e219") ) + (property ki_fp_filters "C_*") + (path "/0e997d87-bcf6-4ae8-8b1b-44f7128d66a4") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr smd) (fp_line - (start 1 -4.75) - (end 1 -2) + (start -0.146267 -0.51) + (end 0.146267 -0.51) (stroke - (width 0.05) + (width 0.12) (type solid) ) - (layer "B.CrtYd") - (uuid "0cfeafa4-f6c7-4c89-833d-b8697cb32b92") + (layer "F.SilkS") + (uuid "72ef1437-14eb-4382-9f66-1571767b60fb") ) (fp_line - (start 1 -2) - (end 2 -2) + (start -0.146267 0.51) + (end 0.146267 0.51) (stroke - (width 0.05) + (width 0.12) (type solid) ) - (layer "B.CrtYd") - (uuid "17427c69-1082-4ee9-a25b-4a63275a286c") + (layer "F.SilkS") + (uuid "61ec173b-573d-455f-8827-0e25e4079d81") ) (fp_line - (start 1 2) - (end 1 4.5) + (start -1.65 -0.73) + (end 1.65 -0.73) (stroke (width 0.05) (type solid) ) - (layer "B.CrtYd") - (uuid "5a9c4eb2-f52f-4cb9-bd8a-f9656814b294") + (layer "F.CrtYd") + (uuid "0b153df2-7fd2-4537-8c7b-85e9645147e8") ) (fp_line - (start 1 4.75) - (end 1 4.5) + (start -1.65 0.73) + (end -1.65 -0.73) (stroke (width 0.05) (type solid) ) - (layer "B.CrtYd") - (uuid "35c713ca-ac63-4a51-87be-4e86eab5b532") + (layer "F.CrtYd") + (uuid "56478ef2-dc81-476a-b36b-2964a41f305f") ) (fp_line - (start 2 -2) - (end 2 2) + (start 1.65 -0.73) + (end 1.65 0.73) (stroke (width 0.05) (type solid) ) - (layer "B.CrtYd") - (uuid "66dffeb7-0394-401c-8a28-b182a0d38b14") + (layer "F.CrtYd") + (uuid "34e6a88d-9ed5-4228-a815-09eecd959c44") ) (fp_line - (start 2 2) - (end 1 2) + (start 1.65 0.73) + (end -1.65 0.73) (stroke (width 0.05) (type solid) ) - (layer "B.CrtYd") - (uuid "82d689d8-d9f9-4617-afb4-1e2cd67685b0") - ) - (fp_line - (start -13.7 -4.5) - (end -13.7 4.5) - (stroke - (width 0.1) - (type solid) - ) - (layer "B.Fab") - (uuid "06578d7e-86a8-4777-8056-2a3cf5a5c6f0") + (layer "F.CrtYd") + (uuid "fa015687-16a9-49e0-838a-de6964a91708") ) (fp_line - (start -13.7 4.5) - (end 0 4.5) + (start -0.8 -0.4) + (end 0.8 -0.4) (stroke (width 0.1) (type solid) ) - (layer "B.Fab") - (uuid "4ec647ba-f396-43e1-8c9b-5d82c2a3353b") + (layer "F.Fab") + (uuid "4f7d8272-b01d-4c50-bebe-8028ea3bf1ac") ) (fp_line - (start -10.2 -4.5) - (end -10.2 4.5) + (start -0.8 0.4) + (end -0.8 -0.4) (stroke (width 0.1) (type solid) ) - (layer "B.Fab") - (uuid "a6e737c9-a99c-4e30-85fd-6777e4642f9a") + (layer "F.Fab") + (uuid "8a4a413c-fa6e-403b-a08c-eb0577a2c08c") ) (fp_line - (start 0.8 -4.5) - (end -13.7 -4.5) + (start 0.8 -0.4) + (end 0.8 0.4) (stroke (width 0.1) (type solid) ) - (layer "B.Fab") - (uuid "213e40d9-589a-43ef-84a8-bc698b9e16da") + (layer "F.Fab") + (uuid "329a54f5-deea-40b5-804e-60da95d5eb54") ) (fp_line - (start 0.8 3.75) - (end -0.003213 4.505425) + (start 0.8 0.4) + (end -0.8 0.4) (stroke (width 0.1) (type solid) ) - (layer "B.Fab") - (uuid "89c30631-fbac-4c3b-b7f4-2a28f7cfe209") + (layer "F.Fab") + (uuid "f36af9ad-9216-463d-9629-658139a50edd") ) - (fp_line - (start 0.8 3.75) - (end 0.8 -4.5) - (stroke - (width 0.1) - (type solid) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "da99c18c-f671-48d5-a7a8-1d3ec8220e99") + (effects + (font + (size 0.4 0.4) + (thickness 0.06) + ) ) - (layer "B.Fab") - (uuid "ad7e19a6-db1d-4771-842e-9a417ea78e88") ) - (pad "1" thru_hole rect - (at 0 0) - (size 3.5 3.5) - (drill oval 1 3) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) + (pad "1" smd roundrect + (at -0.8625 0) + (size 1.075 0.95) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) (net 1 "+5V") (pintype "passive") - (uuid "17e575be-db4e-4a85-bbf9-baef43bcc3f6") + (uuid "56c10675-930a-4b67-ad1d-2a6f97a9916e") ) - (pad "2" thru_hole roundrect - (at -6 0) - (size 3 3.5) - (drill oval 1 3) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) + (pad "2" smd roundrect + (at 0.8625 0) + (size 1.075 0.95) + (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (net 2 "GND") (pintype "passive") - (uuid "e45caf49-cdb8-48e3-8fa6-6b4fc0b2a014") - ) - (pad "3" thru_hole roundrect - (at -3 -4.7) - (size 3.5 3.5) - (drill oval 3 1) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (roundrect_rratio 0.25) - (uuid "c9dceb68-c59f-4db0-8a93-608ec3a39921") + (uuid "4d7515b2-db25-401d-87c5-3e11b745a9d4") ) - (model "${KICAD8_3DMODEL_DIR}/Connector_BarrelJack.3dshapes/BarrelJack_Horizontal.wrl" + (model "${KICAD8_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl" (offset (xyz 0 0 0) ) @@ -3454,170 +1766,214 @@ ) ) ) - (footprint "MyLibrary:ZH_3P_Side" - (layer "B.Cu") - (uuid "95abe7dd-a72e-4dd0-a841-81d864abf6a5") - (at 128 90 90) - (property "Reference" "J2" - (at 0 0.5 -90) - (unlocked yes) - (layer "B.SilkS") - (uuid "f62c9570-afb8-463d-9b96-3305600ad724") + (footprint "Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder" + (layer "F.Cu") + (uuid "b62105ff-4129-45c7-937e-f5fe9e5a9f47") + (at 136.55 61.7) + (descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (property "Reference" "R2" + (at 2.85 0.11 0) + (layer "F.SilkS") + (uuid "4d74e918-d6fa-4978-9c1d-4aae3a6b84cd") (effects (font (size 1 1) - (thickness 0.1) + (thickness 0.15) ) - (justify mirror) ) ) - (property "Value" "LED" - (at 0 -1 -90) - (unlocked yes) - (layer "B.Fab") - (uuid "da506a5b-2b40-414b-afc2-7eb955f2824a") + (property "Value" "5.1k" + (at 6.24 0.09 0) + (layer "F.Fab") + (uuid "be7dd1c0-052c-478c-af3b-521ecc751c83") (effects (font (size 1 1) (thickness 0.15) ) - (justify mirror) ) ) - (property "Footprint" "MyLibrary:ZH_3P_Side" - (at 0 0 -90) + (property "Footprint" "Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder" + (at 0 0 0) (unlocked yes) - (layer "B.Fab") + (layer "F.Fab") (hide yes) - (uuid "26b932c7-2958-4203-953d-cf86f2114a4f") + (uuid "92dffd95-618d-43da-9e41-3078cc46d2bc") (effects (font - (size 1 1) - (thickness 0.15) + (size 1.27 1.27) ) - (justify mirror) ) ) (property "Datasheet" "" - (at 0 0 -90) + (at 0 0 0) (unlocked yes) - (layer "B.Fab") + (layer "F.Fab") (hide yes) - (uuid "26486f93-e1ab-4136-a817-6ebf63c7ba69") + (uuid "2c9ee990-3691-460d-9676-2ef82c5df952") (effects (font - (size 1 1) - (thickness 0.15) + (size 1.27 1.27) ) - (justify mirror) ) ) - (property "Description" "Generic connector, single row, 01x03, script generated" - (at 0 0 -90) + (property "Description" "Resistor" + (at 0 0 0) (unlocked yes) - (layer "B.Fab") + (layer "F.Fab") (hide yes) - (uuid "947d98f6-5e9c-4e7a-83e0-20a69fab3401") + (uuid "ccf8a62d-0dfa-4cf6-bb30-003271575803") (effects (font - (size 1 1) - (thickness 0.15) + (size 1.27 1.27) ) - (justify mirror) ) ) - (property ki_fp_filters "Connector*:*_1x??_*") - (path "/54446d53-569e-4d86-88cb-922b5e44eef7") + (property ki_fp_filters "R_*") + (path "/30ba7f9f-a410-42a3-bcab-e8ee2b2deb37") (sheetname "ルート") (sheetfile "Koken-KeyBox.kicad_sch") - (attr through_hole) + (attr smd) + (fp_line + (start -0.254724 -0.5225) + (end 0.254724 -0.5225) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "07ca51d5-77d0-47a3-9a65-90d220c89da4") + ) + (fp_line + (start -0.254724 0.5225) + (end 0.254724 0.5225) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "32d60d95-7219-46f8-b2c2-98aa5a628fef") + ) + (fp_line + (start -1.65 -0.73) + (end 1.65 -0.73) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "77d922d0-ee72-4621-9d63-b3ad30dfa819") + ) + (fp_line + (start -1.65 0.73) + (end -1.65 -0.73) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "547f59a0-3bcf-4e85-b226-b8404484a64d") + ) + (fp_line + (start 1.65 -0.73) + (end 1.65 0.73) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a0342211-1b87-4249-935c-159ce09ad2b1") + ) + (fp_line + (start 1.65 0.73) + (end -1.65 0.73) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "70363461-4df9-4276-946e-a3888e7c890c") + ) (fp_line - (start 3 1.6) - (end -3 1.6) + (start -0.8 -0.4125) + (end 0.8 -0.4125) (stroke (width 0.1) - (type default) + (type solid) ) - (layer "B.SilkS") - (uuid "37a8a8dd-16b6-4e08-b69d-940a5b0b8fcb") + (layer "F.Fab") + (uuid "ac1633d4-7917-4192-a46a-a7c9b67edd46") ) (fp_line - (start -1.5 1.6) - (end -3 1.6) + (start -0.8 0.4125) + (end -0.8 -0.4125) (stroke (width 0.1) - (type default) + (type solid) ) - (layer "B.SilkS") - (uuid "5c311d3a-916b-4580-b387-65ca75d98193") + (layer "F.Fab") + (uuid "078588b5-2183-4c11-8976-b3ac1ef0ed9e") ) - (fp_rect - (start 3 -3) - (end -3 3) + (fp_line + (start 0.8 -0.4125) + (end 0.8 0.4125) (stroke (width 0.1) - (type default) + (type solid) ) - (fill none) - (layer "B.SilkS") - (uuid "40546eb7-45bb-4b11-a4ab-de6704b514b7") + (layer "F.Fab") + (uuid "e450a0e2-17e3-4236-b1f5-3ef5d40285f5") ) - (fp_rect - (start 3.2 -3.3) - (end -3.2 3.2) + (fp_line + (start 0.8 0.4125) + (end -0.8 0.4125) (stroke (width 0.1) - (type default) + (type solid) ) - (fill none) - (layer "B.CrtYd") - (uuid "fe428028-18b6-4683-ab2b-cf5ecee954e0") + (layer "F.Fab") + (uuid "35ebe83f-a993-4f8a-a62b-bf8f7992688c") ) (fp_text user "${REFERENCE}" - (at 0 -2.5 -90) - (unlocked yes) - (layer "B.Fab") - (uuid "825b84b7-1553-4867-9800-0fe4a0736bbd") + (at 0 0 0) + (layer "F.Fab") + (uuid "b8697ceb-b106-478d-8ff1-ee7265be4ab2") (effects (font - (size 1 1) - (thickness 0.15) + (size 0.4 0.4) + (thickness 0.06) ) - (justify mirror) ) ) - (pad "1" thru_hole circle - (at -1.5 1.6 90) - (size 1.2 1.2) - (drill 0.6) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net 4 "LED_Failure") - (pinfunction "Pin_1") - (pintype "passive") - (uuid "56b1d63e-1319-4897-b40c-358851bb76ec") - ) - (pad "2" thru_hole circle - (at 0 1.6 90) - (size 1.2 1.2) - (drill 0.6) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) - (net 3 "LED_Success") - (pinfunction "Pin_2") + (pad "1" smd roundrect + (at -0.9125 0) + (size 0.975 0.95) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 27 "Net-(J4-CC1)") (pintype "passive") - (uuid "0a5fc622-a203-4ba6-ad07-a013e90d541c") + (uuid "876ec612-6dac-448d-87ee-c80a71db1606") ) - (pad "3" thru_hole circle - (at 1.5 1.6 90) - (size 1.2 1.2) - (drill 0.6) - (layers "*.Cu" "*.Mask") - (remove_unused_layers no) + (pad "2" smd roundrect + (at 0.9125 0) + (size 0.975 0.95) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) (net 2 "GND") - (pinfunction "Pin_3") (pintype "passive") - (uuid "4c0e4d0b-bf7c-41ca-91d1-7f03d51ae54e") + (uuid "460a7617-3a7f-4556-92a9-1d84b7c68dbf") + ) + (model "${KICAD8_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) ) ) (footprint "Connector_PinSocket_2.54mm:PinSocket_2x20_P2.54mm_Vertical" @@ -3903,7 +2259,7 @@ (drill 1) (layers "*.Cu" "*.Mask") (remove_unused_layers no) - (net 35 "unconnected-(U1-GPIO2-Pad3)") + (net 34 "unconnected-(U1-GPIO2-Pad3)") (pinfunction "GPIO2") (pintype "input") (uuid "9809c2c2-1c77-45db-a15b-f44dad09fcb2") @@ -4090,7 +2446,7 @@ (drill 1) (layers "*.Cu" "*.Mask") (remove_unused_layers no) - (net 15 "unconnected-(U1-GND-Pad20)") + (net 2 "GND") (pinfunction "GND") (pintype "input") (uuid "94723bc8-519d-4d7f-ac47-ac01b7de03c0") @@ -4145,7 +2501,7 @@ (drill 1) (layers "*.Cu" "*.Mask") (remove_unused_layers no) - (net 34 "unconnected-(U1-GND-Pad25)") + (net 2 "GND") (pinfunction "GND") (pintype "input") (uuid "bc00e82a-ca4f-489d-9ed1-3b5c05cd0287") @@ -4183,7 +2539,7 @@ (drill 1) (layers "*.Cu" "*.Mask") (remove_unused_layers no) - (net 36 "unconnected-(U1-GPIO5-Pad29)") + (net 35 "unconnected-(U1-GPIO5-Pad29)") (pinfunction "GPIO5") (pintype "input") (uuid "2c0604c0-9a2f-43c0-81f4-51468e4452ff") @@ -4194,7 +2550,7 @@ (drill 1) (layers "*.Cu" "*.Mask") (remove_unused_layers no) - (net 37 "unconnected-(U1-GND-Pad30)") + (net 36 "unconnected-(U1-GND-Pad30)") (pinfunction "GND") (pintype "input") (uuid "c5e70fd0-9704-47c0-8c89-bf7559e80a02") @@ -4293,7 +2649,7 @@ (drill 1) (layers "*.Cu" "*.Mask") (remove_unused_layers no) - (net 27 "unconnected-(U1-GND-Pad39)") + (net 2 "GND") (pinfunction "GND") (pintype "input") (uuid "35d3bf17-ce01-4076-9ba9-bfa2cc52d6f1") @@ -4321,130 +2677,495 @@ ) ) ) - (footprint "MyLibrary:ZH_3P_Side" + (footprint "Connector_JST:JST_XH_S3B-XH-A_1x03_P2.50mm_Horizontal" (layer "B.Cu") (uuid "c86ab907-a7ea-458f-8db9-7ebb2a361e6d") - (at 128 98 90) + (at 134.24 95.82 90) + (descr "JST XH series connector, S3B-XH-A (http://www.jst-mfg.com/product/pdf/eng/eXH.pdf), generated with kicad-footprint-generator") + (tags "connector JST XH horizontal") (property "Reference" "J3" - (at 0 0.5 -90) - (unlocked yes) + (at 2.5 3.5 90) (layer "B.SilkS") - (uuid "38f5c3e1-cdfb-45f2-9ee3-7016cf3be78c") + (hide yes) + (uuid "c995016e-215b-4819-8ffe-60c10c8ab743") (effects (font (size 1 1) - (thickness 0.1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Value" "Servo" + (at 2.5 -10.4 90) + (layer "B.Fab") + (uuid "a395aed0-ae28-47fa-bf3e-de5d0ce9c225") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify mirror) + ) + ) + (property "Footprint" "Connector_JST:JST_XH_S3B-XH-A_1x03_P2.50mm_Horizontal" + (at 0 0 -90) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "3cd1ff01-d025-4216-8169-42dccb33088e") + (effects + (font + (size 1.27 1.27) + ) + (justify mirror) + ) + ) + (property "Datasheet" "" + (at 0 0 -90) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "b1d6ce6e-d393-4491-ac6e-09ba35831bcd") + (effects + (font + (size 1.27 1.27) + ) + (justify mirror) + ) + ) + (property "Description" "Generic connector, single row, 01x03, script generated" + (at 0 0 -90) + (unlocked yes) + (layer "B.Fab") + (hide yes) + (uuid "aac7671e-7e55-43d7-aae5-7c91089101e5") + (effects + (font + (size 1.27 1.27) ) (justify mirror) ) ) - (property "Value" "Servo" - (at 0 -1 -90) - (unlocked yes) + (property ki_fp_filters "Connector*:*_1x??_*") + (path "/f00a3780-4ff0-441c-811d-d6b9ad87d9d6") + (sheetname "ルート") + (sheetfile "Koken-KeyBox.kicad_sch") + (attr through_hole) + (fp_line + (start 7.56 -9.31) + (end 2.5 -9.31) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "18bc8a49-a1e9-44a1-98e1-cef75e4b8877") + ) + (fp_line + (start -2.56 -9.31) + (end 2.5 -9.31) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "ee2fa7f6-7124-4580-b66f-9a9db33424a0") + ) + (fp_line + (start 5.25 -8.7) + (end 4.75 -8.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "be064275-9b94-4b9d-adc3-71915080041f") + ) + (fp_line + (start 4.75 -8.7) + (end 4.75 -3.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "97313b09-06db-473d-84ee-843a7f18ebf5") + ) + (fp_line + (start 2.75 -8.7) + (end 2.25 -8.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "5528b33b-36ee-404c-bd4d-7b0bc1627191") + ) + (fp_line + (start 2.25 -8.7) + (end 2.25 -3.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "7afe5807-1f67-4068-b512-4c5a7dfe9d63") + ) + (fp_line + (start 0.25 -8.7) + (end -0.25 -8.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "73bd80c5-a56f-447d-b24e-2b4c5d9a16bf") + ) + (fp_line + (start -0.25 -8.7) + (end -0.25 -3.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "be8b0ff4-3d76-42f6-82ed-bd6991cbdef6") + ) + (fp_line + (start 5.25 -3.2) + (end 5.25 -8.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "a0ab46e5-db74-45a5-bf27-de191905979c") + ) + (fp_line + (start 4.75 -3.2) + (end 5.25 -3.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "8324481c-284f-406e-841f-fcfcabd77a72") + ) + (fp_line + (start 2.75 -3.2) + (end 2.75 -8.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "153398cf-2954-4cc9-976e-e53406aae837") + ) + (fp_line + (start 2.25 -3.2) + (end 2.75 -3.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "5e5570e0-ec1c-45f0-aecd-fbd11ef0a99b") + ) + (fp_line + (start 0.25 -3.2) + (end 0.25 -8.7) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "fc87bc9b-dcb1-4cbb-977a-597b18c5986f") + ) + (fp_line + (start -0.25 -3.2) + (end 0.25 -3.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "3fa9c4df-e1a3-47a1-855a-ef4ebb3fb42f") + ) + (fp_line + (start 6.14 -2.09) + (end 6.14 2.41) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "fce75d92-ebad-443b-81fa-5dd08b1b530a") + ) + (fp_line + (start 2.5 -2.09) + (end 6.14 -2.09) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "3079a491-aa80-4b46-a83f-d43fc4f8c5c9") + ) + (fp_line + (start 2.5 -2.09) + (end -1.14 -2.09) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "9fc94719-2898-4869-b7dd-137e99356dab") + ) + (fp_line + (start -1.14 -2.09) + (end -1.14 2.41) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "0a1f76e5-4f12-4f57-8799-55251e1537d3") + ) + (fp_line + (start 0 1.5) + (end 0.3 2.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "10cd0e47-3b27-415f-8839-64d23c63e517") + ) + (fp_line + (start 0.3 2.1) + (end -0.3 2.1) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "d7580ea9-8117-401c-84ac-8d6fad76639e") + ) + (fp_line + (start -0.3 2.1) + (end 0 1.5) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "43e6a3cb-f4df-49ba-9e67-8f6187c0a78c") + ) + (fp_line + (start 7.56 2.41) + (end 7.56 -9.31) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "045f1b4f-08d7-491e-aa5a-ccd85943da89") + ) + (fp_line + (start 6.14 2.41) + (end 7.56 2.41) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "c2c6dc95-171e-4df1-9711-2f00cf93e665") + ) + (fp_line + (start -1.14 2.41) + (end -2.56 2.41) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "f54e3468-317f-4a26-bb68-2e9561964440") + ) + (fp_line + (start -2.56 2.41) + (end -2.56 -9.31) + (stroke + (width 0.12) + (type solid) + ) + (layer "B.SilkS") + (uuid "f94edaee-2731-4522-be5e-4471427ffa0d") + ) + (fp_line + (start 7.95 -9.7) + (end -2.95 -9.7) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "653fab9b-6923-4823-9f09-20692ed83b69") + ) + (fp_line + (start -2.95 -9.7) + (end -2.95 2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "281b8fde-4fcb-444e-a691-abfde1a7c467") + ) + (fp_line + (start 7.95 2.8) + (end 7.95 -9.7) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "f27ba28c-a861-4ed4-a9c2-e2e227fca7ea") + ) + (fp_line + (start -2.95 2.8) + (end 7.95 2.8) + (stroke + (width 0.05) + (type solid) + ) + (layer "B.CrtYd") + (uuid "34a7641c-2b24-4265-ba7a-767a18455fd7") + ) + (fp_line + (start 7.45 -9.2) + (end 2.5 -9.2) + (stroke + (width 0.1) + (type solid) + ) (layer "B.Fab") - (uuid "f5237e03-4ff4-417b-8187-35b792dfdf1d") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) + (uuid "acb9ace6-48b5-4c38-a649-9f25e9a63a91") + ) + (fp_line + (start -2.45 -9.2) + (end 2.5 -9.2) + (stroke + (width 0.1) + (type solid) ) + (layer "B.Fab") + (uuid "937a1ec8-b8b3-42b5-b1dd-273268a7b055") ) - (property "Footprint" "MyLibrary:ZH_3P_Side" - (at 0 0 -90) - (unlocked yes) + (fp_line + (start 6.25 -2.2) + (end 6.25 2.3) + (stroke + (width 0.1) + (type solid) + ) (layer "B.Fab") - (hide yes) - (uuid "aa213386-d43a-4020-98e7-a2079d5dbb8f") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) + (uuid "34b09fa2-cf69-471d-aba3-5232432554bc") + ) + (fp_line + (start 2.5 -2.2) + (end 6.25 -2.2) + (stroke + (width 0.1) + (type solid) ) + (layer "B.Fab") + (uuid "b9ccdd04-d958-47f5-9331-166fda6342e0") ) - (property "Datasheet" "" - (at 0 0 -90) - (unlocked yes) + (fp_line + (start 2.5 -2.2) + (end -1.25 -2.2) + (stroke + (width 0.1) + (type solid) + ) (layer "B.Fab") - (hide yes) - (uuid "9bfdf0d0-ff15-4bd3-a3f6-3a094be5cbe2") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) + (uuid "fa851533-efb7-4b63-8105-06c51d8f25f7") + ) + (fp_line + (start 0.625 -2.2) + (end 0 -1.2) + (stroke + (width 0.1) + (type solid) ) + (layer "B.Fab") + (uuid "4898a2f2-56c9-42d2-b5e6-776070bf13d3") ) - (property "Description" "Generic connector, single row, 01x03, script generated" - (at 0 0 -90) - (unlocked yes) + (fp_line + (start -1.25 -2.2) + (end -1.25 2.3) + (stroke + (width 0.1) + (type solid) + ) (layer "B.Fab") - (hide yes) - (uuid "73b93f5b-5330-4f71-9f09-0deae9342bfc") - (effects - (font - (size 1 1) - (thickness 0.15) - ) - (justify mirror) + (uuid "e7a67ab6-e59c-4649-88c4-148f72824ea8") + ) + (fp_line + (start 0 -1.2) + (end -0.625 -2.2) + (stroke + (width 0.1) + (type solid) ) + (layer "B.Fab") + (uuid "a9a6152a-6374-4daa-9f33-43a0bfa55112") ) - (property ki_fp_filters "Connector*:*_1x??_*") - (path "/f00a3780-4ff0-441c-811d-d6b9ad87d9d6") - (sheetname "ルート") - (sheetfile "Koken-KeyBox.kicad_sch") - (attr through_hole) (fp_line - (start 3 1.6) - (end -3 1.6) + (start 7.45 2.3) + (end 7.45 -9.2) (stroke (width 0.1) - (type default) + (type solid) ) - (layer "B.SilkS") - (uuid "def8e6cc-cc5f-4f94-a998-90ae12eb3be9") + (layer "B.Fab") + (uuid "c63c338d-78fc-4b84-89cc-7009e9a6b7c8") ) (fp_line - (start -1.5 1.6) - (end -3 1.6) + (start 6.25 2.3) + (end 7.45 2.3) (stroke (width 0.1) - (type default) + (type solid) ) - (layer "B.SilkS") - (uuid "c0718652-685c-47ab-abd9-679fcf422503") + (layer "B.Fab") + (uuid "571450e8-91bd-40d6-80e4-ab4b2ae9160d") ) - (fp_rect - (start 3 -3) - (end -3 3) + (fp_line + (start -1.25 2.3) + (end -2.45 2.3) (stroke (width 0.1) - (type default) + (type solid) ) - (fill none) - (layer "B.SilkS") - (uuid "578a3ec8-9b4d-4abb-8b0a-538796e55d08") + (layer "B.Fab") + (uuid "71c4c149-4290-412d-b9aa-0444fbd29570") ) - (fp_rect - (start 3.2 -3.3) - (end -3.2 3.2) + (fp_line + (start -2.45 2.3) + (end -2.45 -9.2) (stroke (width 0.1) - (type default) + (type solid) ) - (fill none) - (layer "B.CrtYd") - (uuid "79d3c257-fddf-44d2-9dd1-1066ccf1c022") + (layer "B.Fab") + (uuid "84e1920c-ebf0-4350-a6c3-eff73d34ce27") ) (fp_text user "${REFERENCE}" - (at 0 -2.5 -90) - (unlocked yes) + (at 2.5 -3.45 90) (layer "B.Fab") - (uuid "0d1a32f3-6826-4873-a8f1-e53bfcb61593") + (uuid "92589a91-8d41-4338-8eaa-bb518b84e786") (effects (font (size 1 1) @@ -4453,38 +3174,50 @@ (justify mirror) ) ) - (pad "1" thru_hole circle - (at -1.5 1.6 90) - (size 1.2 1.2) - (drill 0.6) + (pad "1" thru_hole roundrect + (at 0 0 90) + (size 1.7 1.95) + (drill 0.95) (layers "*.Cu" "*.Mask") (remove_unused_layers no) + (roundrect_rratio 0.147059) (net 5 "Servo_sig") (pinfunction "Pin_1") (pintype "passive") - (uuid "a847c90e-d156-483d-8fcb-ddc032618df6") + (uuid "51eff05f-107c-40fc-822b-f1b4a5ecc2ee") ) - (pad "2" thru_hole circle - (at 0 1.6 90) - (size 1.2 1.2) - (drill 0.6) + (pad "2" thru_hole oval + (at 2.5 0 90) + (size 1.7 1.95) + (drill 0.95) (layers "*.Cu" "*.Mask") (remove_unused_layers no) (net 1 "+5V") (pinfunction "Pin_2") (pintype "passive") - (uuid "50d832fa-9342-4d2b-b7e4-4e9f293d7fd0") + (uuid "226c366c-a92b-4893-b2f6-2bde71bb0f5a") ) - (pad "3" thru_hole circle - (at 1.5 1.6 90) - (size 1.2 1.2) - (drill 0.6) + (pad "3" thru_hole oval + (at 5 0 90) + (size 1.7 1.95) + (drill 0.95) (layers "*.Cu" "*.Mask") (remove_unused_layers no) (net 2 "GND") (pinfunction "Pin_3") (pintype "passive") - (uuid "260ba83e-5a6b-4534-bdcc-ca31742e0703") + (uuid "f868d57d-7532-433a-9149-2fca49436f09") + ) + (model "${KICAD8_3DMODEL_DIR}/Connector_JST.3dshapes/JST_XH_S3B-XH-A_1x03_P2.50mm_Horizontal.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) ) ) (gr_rect @@ -4519,16 +3252,6 @@ (layer "User.1") (uuid "45360337-4dcc-4ddc-a72a-95b7d8362e8b") ) - (gr_line - (start 124.48 82.33) - (end 127.34 82.33) - (stroke - (width 0.1) - (type default) - ) - (layer "User.1") - (uuid "621fcbdb-a64c-4619-b2d2-2f46239799a2") - ) (gr_line (start 128.1 48.37) (end 128.06 62.37) @@ -4549,605 +3272,341 @@ (layer "User.1") (uuid "9d260317-e4dc-4902-ac57-da17ef5805d6") ) - (via - (at 134.65 72.01) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 0) - (uuid "0e2eede6-66fb-4d4a-b959-8e788308da94") - ) - (via - (at 136.12 71.99) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 0) - (uuid "11ffe731-cac6-4b6b-8857-76b5faf53a4d") - ) - (via - (at 134.01 72.01) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 0) - (uuid "33d274d1-486f-4dac-b7ba-02c0c1d70ce1") - ) - (via - (at 133.77 72.01) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 0) - (uuid "61ab2bed-4057-46ba-b99b-ff6b57d523de") - ) - (via - (at 136.03 71.97) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 0) - (uuid "6588161c-a38c-4191-a5e7-b0fba98312da") - ) - (via - (at 135.22 71.97) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 0) - (uuid "6781fcdf-74f1-4cd3-9356-24cb8ec1f1a4") - ) - (via - (at 134.27 72.01) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 0) - (uuid "81f70d9d-d0c7-4b7c-8318-ad0d18cf00dd") - ) - (via - (at 135.46 71.99) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 0) - (uuid "a95d5484-2ac0-4863-85f7-a1aef7228a95") - ) - (via - (at 134.95 71.99) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 0) - (uuid "aec70614-ae36-49a0-9111-30bfabb025aa") - ) - (via - (at 135.72 71.99) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 0) - (uuid "ec29d980-e926-40c4-bdcc-73204513931e") - ) - (via - (at 136.32 71.99) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 0) - (uuid "fd737422-f733-43fb-adad-cf4363411ba1") - ) (segment - (start 144 48) - (end 151 48) + (start 129.27 64.24) + (end 128.84 63.81) (width 1) (layer "F.Cu") (net 1) - (uuid "03abd867-2077-44c4-91b8-195dfe794592") + (uuid "2994518e-f4e3-4d14-8c14-541bc290763a") ) (segment - (start 153.1 50.1) - (end 153.1 52.64) + (start 133.47 61.23) + (end 144.09 50.61) (width 1) (layer "F.Cu") (net 1) - (uuid "218ea6c9-d7b0-4e79-b178-be950ead7ac0") + (uuid "4f9d5ec5-b225-4323-8600-defb0369eea7") ) (segment - (start 135.5 85) - (end 138.01 82.49) + (start 130.98 64.24) + (end 133.06 64.24) (width 1) (layer "F.Cu") (net 1) - (uuid "2452bf60-6d89-4400-bc92-875483e238c8") + (uuid "6b8bec05-1884-4006-9181-eea6d0523e1b") ) (segment - (start 151 48) - (end 153.1 50.1) + (start 130.28 91.25) + (end 130.28 75.12) (width 1) (layer "F.Cu") (net 1) - (uuid "305e54cb-b3cc-4224-813d-0e316c27644f") + (uuid "7550971a-5e7c-4042-b6d1-885488f4431c") ) (segment - (start 129.6 98) - (end 136 98) + (start 133.06 64.24) + (end 135.08 66.26) (width 1) (layer "F.Cu") (net 1) - (uuid "7146734e-52a0-4994-823f-0fbc799246aa") + (uuid "8faebb88-20ee-409a-8d7c-613b0c6d3710") ) (segment - (start 127.13 92.49) - (end 127.13 85.691215) + (start 151.77 50.61) + (end 152.4 51.24) (width 1) (layer "F.Cu") (net 1) - (uuid "753cea75-6ee7-40da-891e-bbe6289a666b") + (uuid "943e3637-72a6-4544-b8af-6247223807ab") ) (segment - (start 136.18 93.18) - (end 127.82 93.18) + (start 128.84 63.81) + (end 128.84 61.67) (width 1) (layer "F.Cu") (net 1) - (uuid "8325b76c-ad6c-432a-a528-9064e296602a") + (uuid "98bf5407-0f46-4132-b3f8-3419152e9786") ) (segment - (start 153.1 52.64) - (end 152.4 53.34) + (start 144.09 50.61) + (end 151.77 50.61) (width 1) (layer "F.Cu") (net 1) - (uuid "99f01ec8-a4ec-4ed5-b378-efbc9606b56b") + (uuid "a4e9d67a-3b14-4352-9037-330d5dfc6d8b") ) (segment - (start 138.01 76.66) - (end 138.01 53.99) + (start 134.24 93.32) + (end 132.35 93.32) (width 1) (layer "F.Cu") (net 1) - (uuid "9bd6cef5-106e-4672-aa31-f023ffaf0097") + (uuid "a8ad67a2-96b6-45a4-8506-147b56648cd5") ) (segment - (start 136 98) - (end 137.53 96.47) + (start 130.98 64.24) + (end 129.27 64.24) (width 1) (layer "F.Cu") (net 1) - (uuid "a65d5622-25c4-498a-87fd-1ed4ac7b664f") + (uuid "adc51a67-2583-4455-b9af-75f46f9fd222") ) (segment - (start 138.01 53.99) - (end 144 48) + (start 132.35 93.32) + (end 130.28 91.25) (width 1) (layer "F.Cu") (net 1) - (uuid "ab0d7962-0e8e-45d5-b61c-4ac4a0b5a83a") + (uuid "b1639954-8d66-4bef-bf1e-ab3f2658c82c") ) (segment - (start 127.82 93.18) - (end 127.13 92.49) + (start 134.24 93.32) + (end 139.47 93.32) (width 1) (layer "F.Cu") (net 1) - (uuid "ac07b025-eff2-428a-9a67-81f9da1708ac") + (uuid "b8ebf5ca-98b8-4def-99cf-ee11910e7a19") ) (segment - (start 137.53 94.53) - (end 136.18 93.18) + (start 139.47 93.32) + (end 139.9 92.89) (width 1) (layer "F.Cu") (net 1) - (uuid "afc76ddc-f80b-4afa-89ee-dd487e091964") + (uuid "b9ad34f6-0c0a-4ad0-9224-5501f15a07b9") ) (segment - (start 137.53 96.47) - (end 137.53 94.53) + (start 135.08 66.26) + (end 135.735 66.26) (width 1) (layer "F.Cu") (net 1) - (uuid "c188e0f5-ce18-41c2-8cea-f74dc3141a5b") + (uuid "bf8144cf-0d59-4635-b807-b80e1a2bfac8") ) (segment - (start 127.821215 85) - (end 135.5 85) + (start 129.28 61.23) + (end 131.01 61.23) (width 1) (layer "F.Cu") (net 1) - (uuid "c78273f4-06e1-473c-99ef-a60f9a7cb65d") + (uuid "c8ac9e3a-ec4f-456a-8a52-fde9bf6e71ef") ) (segment - (start 127.13 85.691215) - (end 127.821215 85) + (start 130.28 75.12) + (end 135.735 69.665) (width 1) (layer "F.Cu") (net 1) - (uuid "d23b81de-2b9a-4068-abd5-5c6484bc8190") + (uuid "dfe56d73-a402-43af-9e3c-e6b548b27226") ) (segment - (start 138.01 82.49) - (end 138.01 76.66) + (start 135.735 69.665) + (end 135.735 66.26) (width 1) (layer "F.Cu") (net 1) - (uuid "fe7f7691-b4ca-4c7c-8a22-3769b6a2c01c") - ) - (via - (at 138.06 77.71) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "1681a57d-dd53-4d7e-bfb9-cefc303cdcb2") - ) - (via - (at 138.06 77.47) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "1cd20c96-fc5f-44c2-9919-2ac60784fdaf") - ) - (via - (at 138.01 76.09) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "4525c3b2-80a4-4d68-b2a4-7ea8a75dd418") - ) - (via - (at 138.04 78.04) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "45487b0c-5f83-4e7f-b8ec-132c9b9bb800") - ) - (via - (at 138.04 75.32) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "613c8578-87e9-4ab3-97bd-f6f5d18b50ea") - ) - (via - (at 138.01 76.22) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "69e47e56-89f4-48b2-b6ec-cac87463afc4") - ) - (via - (at 138.01 76.79) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "72adc0f2-942d-4561-9497-ea18f02cd8a0") - ) - (via - (at 138.01 76.72) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "7d1833ef-0b15-4b93-84e5-dd15b2778455") - ) - (via - (at 138.01 76.33) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "92dcac0b-e0f6-445b-b43a-0d983dbd7001") - ) - (via - (at 138.04 76.94) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "afced4e9-c2d9-4315-acab-520a1b9e46b3") - ) - (via - (at 138.01 75.65) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "b0e75a4f-93ce-43f3-a54f-086458fbb8f5") - ) - (via - (at 138.01 75.49) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "b22eef09-11c1-4fdb-ab39-f8c7aba13a00") - ) - (via - (at 138.04 77.21) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "b9d2a824-de6d-4984-9a2b-7ffa9bfc22b0") - ) - (via - (at 138.01 75.8) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 1) - (uuid "bca4a96b-f8af-46f1-939f-69a56104a512") + (uuid "e9e2683a-fbe0-4bac-989e-6d0a27594ae6") ) - (via - (at 138.04 76.5) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") + (segment + (start 128.84 61.67) + (end 129.28 61.23) + (width 1) + (layer "F.Cu") (net 1) - (uuid "bfcac877-8244-4fb7-bb86-d9f83e6fd7de") + (uuid "f168a414-edc4-4cc1-a96f-c66d9e378250") ) - (via - (at 138.06 77.89) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") + (segment + (start 152.4 51.24) + (end 152.4 53.34) + (width 1) + (layer "F.Cu") (net 1) - (uuid "cd6a576b-b1b0-4f76-972b-3aa429806215") + (uuid "f6c83749-c644-41be-80f4-f2032bb1e1e8") ) - (via - (at 138.06 77.58) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") + (segment + (start 131.01 61.23) + (end 133.47 61.23) + (width 1) + (layer "F.Cu") (net 1) - (uuid "cf919596-ba53-4488-a24f-976bb48507a8") + (uuid "f7114bab-b610-4c54-ae9d-502835b2c1b5") ) - (via - (at 138.01 75.91) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") + (segment + (start 130.98 61.2) + (end 131.01 61.23) + (width 0.2) + (layer "F.Cu") (net 1) - (uuid "e2f1868e-0bb8-43fe-83d1-010ba1541281") - ) - (via - (at 132 76.92) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "00829b79-e9a0-443e-8a37-65119e5313ea") - ) - (via - (at 132.05 75.56) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "068f44f0-455b-4940-8d10-eed76cf71e60") - ) - (via - (at 132.07 75.34) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "06adcd37-b420-4e5e-8f1f-6529770cccad") - ) - (via - (at 132 75.93) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "1cc481fa-ddc2-4502-8f47-dbb7c23c8ebc") - ) - (via - (at 132 76.99) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "1e3f1e63-6443-4f53-928f-711a89652ac3") - ) - (via - (at 132.03 77.47) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "3dadc9ab-513b-4285-b9ea-681775987af1") - ) - (via - (at 132 76.33) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "45476f51-0b91-495f-b549-fbda6b231e58") - ) - (via - (at 132.03 75.67) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "654e5827-b985-496c-8e53-d8cdfc9ddebb") - ) - (via - (at 132.03 77.19) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "689da11a-fb3b-44c1-bf9e-18193227f1e4") - ) - (via - (at 132.03 77.36) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "6f8a5d7d-5382-4f5d-99a8-6c21f5790a07") - ) - (via - (at 132 76.5) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "739cda5e-8711-460e-9c49-f1cdd66a0579") - ) - (via - (at 132.03 77.78) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "81784259-48f2-439e-a9f0-4ba472d5d32e") - ) - (via - (at 132 76.7) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "a6b4c905-72e1-45d7-b2af-493542e7bd41") - ) - (via - (at 132 76.15) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "b900496a-3879-4a7b-8c4f-f69e30df1f03") - ) - (via - (at 132.03 77.67) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "ccd8e2f9-ac17-4409-bb25-5386cbd03dc1") + (uuid "f9c97bc8-b34c-40ff-a9d5-1106e1c95d2d") ) - (via - (at 132 78) - (size 1.1) - (drill 1) - (layers "F.Cu" "B.Cu") - (net 2) - (uuid "f0325583-ce26-4d54-bad7-c221a4a7404c") + (segment + (start 138.63 81.21) + (end 143.08 85.66) + (width 0.2) + (layer "F.Cu") + (net 3) + (uuid "3691d11a-e552-40a5-867b-546595c2377f") ) (segment - (start 129.6 90) - (end 139.69 90) - (width 1) + (start 134.38 81.21) + (end 138.63 81.21) + (width 0.2) (layer "F.Cu") (net 3) - (uuid "704bc4ee-d1bb-4006-b900-2c600674bb9a") + (uuid "c2e86e16-ac5d-49fa-953a-98541621e77c") ) (segment - (start 139.69 90) - (end 146.21 96.52) - (width 1) + (start 143.08 85.66) + (end 143.08 89.74) + (width 0.2) (layer "F.Cu") (net 3) - (uuid "c801f6c4-57a6-463a-b084-3b15a6a492aa") + (uuid "d3d53266-dc1e-4845-a516-95f798313727") ) (segment - (start 146.21 96.52) + (start 143.08 89.74) (end 149.86 96.52) - (width 1) + (width 0.2) (layer "F.Cu") (net 3) - (uuid "f4ff4578-d932-4949-a6f5-d058ae259313") + (uuid "eb188c9e-1f10-4be5-a91f-be4a24b0888a") ) (segment - (start 146.06 99.06) - (end 149.86 99.06) - (width 1) + (start 139.29 83.71) + (end 142.38 86.8) + (width 0.2) (layer "F.Cu") (net 4) - (uuid "42735582-c8ce-4725-ba9c-751ca5c3dcca") + (uuid "243e4486-bcec-4128-88bb-aeafc79b8838") ) (segment - (start 138.5 91.5) - (end 146.06 99.06) - (width 1) + (start 134.38 83.71) + (end 139.29 83.71) + (width 0.2) (layer "F.Cu") (net 4) - (uuid "6981963e-c2df-4b43-a105-9ffc3e0b501d") + (uuid "5e741163-30da-4f78-b27b-b9251e897e03") ) (segment - (start 129.6 91.5) - (end 138.5 91.5) - (width 1) + (start 142.38 86.8) + (end 142.38 91.58) + (width 0.2) (layer "F.Cu") (net 4) - (uuid "ae21779a-570d-4748-ba91-b946a1be196c") + (uuid "965bbd06-7193-427d-83ca-2950daf00e98") ) (segment - (start 142.5 99.5) - (end 129.6 99.5) - (width 1) + (start 142.38 91.58) + (end 149.86 99.06) + (width 0.2) + (layer "F.Cu") + (net 4) + (uuid "d02daa47-d7e1-4af3-b280-357e74644784") + ) + (segment + (start 142.27 103.86) + (end 142.49 104.08) + (width 0.2) (layer "F.Cu") (net 5) - (uuid "02fd1c11-4752-440f-bf27-452a3e8719a7") + (uuid "05ab416d-2184-44da-8eb0-9ab8cb38bc97") ) (segment - (start 152.41 91.43) - (end 154.33 91.43) - (width 1) + (start 141.38 95.82) + (end 142.27 96.71) + (width 0.2) (layer "F.Cu") (net 5) - (uuid "34b09be2-b732-4688-b7fd-534fdaa811e7") + (uuid "2711ccd4-4b83-4c3a-9b54-1487615098cc") ) (segment - (start 152.4 91.44) - (end 152.41 91.43) - (width 1) + (start 134.24 95.82) + (end 141.38 95.82) + (width 0.2) (layer "F.Cu") (net 5) - (uuid "5a82a313-88d8-46e2-9cd6-7603e82d3ce3") + (uuid "28095131-f15f-412e-adde-271e915bba92") ) (segment - (start 147.14 104.14) - (end 142.5 99.5) - (width 1) + (start 154.24 91.87) + (end 153.81 91.44) + (width 0.2) (layer "F.Cu") (net 5) - (uuid "5eca47d6-3bc3-43d9-912a-5eda8850bef5") + (uuid "5b6ab9e4-23eb-4915-bab2-9cd686a90f20") ) (segment - (start 154.54 104.14) - (end 147.14 104.14) - (width 1) + (start 142.27 96.71) + (end 142.27 103.86) + (width 0.2) (layer "F.Cu") (net 5) - (uuid "8a16de96-a4c9-4599-b4fe-d694687c467e") + (uuid "954564ae-9d42-4587-931d-d610b71ed9f8") ) (segment - (start 154.33 91.43) - (end 154.54 91.64) - (width 1) + (start 154.24 103.45) + (end 154.24 91.87) + (width 0.2) (layer "F.Cu") (net 5) - (uuid "bb6e864e-914a-48d5-ba2f-6b4d09c7e2c5") + (uuid "b0930f52-caf8-4ab9-a378-10a698cf1a68") ) (segment - (start 154.54 91.64) - (end 154.54 104.14) - (width 1) + (start 142.49 104.08) + (end 153.61 104.08) + (width 0.2) + (layer "F.Cu") + (net 5) + (uuid "c628d772-6b85-493a-b9b7-a491c151ff5e") + ) + (segment + (start 153.61 104.08) + (end 154.24 103.45) + (width 0.2) (layer "F.Cu") (net 5) - (uuid "f02adf67-e0ed-40bf-b18e-e4eac774b6b2") + (uuid "f7a6c225-13a8-4e7f-aef8-0974f66c4b06") + ) + (segment + (start 153.81 91.44) + (end 152.4 91.44) + (width 0.2) + (layer "F.Cu") + (net 5) + (uuid "fa53bebe-9039-4292-8507-699eab604d18") + ) + (segment + (start 130.98 63.22) + (end 134.9475 63.22) + (width 0.2) + (layer "F.Cu") + (net 15) + (uuid "31ed4c9e-3b1e-44a2-9a51-658e802b3506") + ) + (segment + (start 134.9475 63.22) + (end 135.6375 63.91) + (width 0.2) + (layer "F.Cu") + (net 15) + (uuid "8cf27e95-1e38-4e52-9cef-6769af5fc1b3") + ) + (segment + (start 135.1175 62.22) + (end 135.6375 61.7) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "395d8540-e05f-48c0-82c4-2be0ede8f358") + ) + (segment + (start 130.98 62.22) + (end 135.1175 62.22) + (width 0.2) + (layer "F.Cu") + (net 27) + (uuid "69d06830-032d-4f84-922c-23f383c3401c") ) (zone (net 2) @@ -5172,66 +3631,72 @@ (filled_polygon (layer "F.Cu") (pts - (xy 154.933039 44.949685) (xy 154.978794 45.002489) (xy 154.99 45.054) (xy 154.99 90.435951) (xy 154.970315 90.50299) - (xy 154.917511 90.548745) (xy 154.848353 90.558689) (xy 154.807549 90.545311) (xy 154.803911 90.543366) - (xy 154.731315 90.513296) (xy 154.675165 90.490038) (xy 154.621836 90.467949) (xy 154.621832 90.467948) - (xy 154.621828 90.467946) (xy 154.525188 90.448724) (xy 154.428544 90.4295) (xy 154.428541 90.4295) - (xy 153.349896 90.4295) (xy 153.282857 90.409815) (xy 153.274852 90.403921) (xy 153.085842 90.271575) + (xy 154.933039 44.949685) (xy 154.978794 45.002489) (xy 154.99 45.054) (xy 154.99 91.505263) (xy 154.970315 91.572302) + (xy 154.917511 91.618057) (xy 154.848353 91.628001) (xy 154.784797 91.598976) (xy 154.758614 91.567265) + (xy 154.743933 91.541838) (xy 154.743931 91.541834) (xy 154.720522 91.501287) (xy 154.720521 91.501286) + (xy 154.72052 91.501284) (xy 154.608716 91.38948) (xy 154.608715 91.389479) (xy 154.604385 91.385149) + (xy 154.604374 91.385139) (xy 154.29759 91.078355) (xy 154.297588 91.078352) (xy 154.178717 90.959481) + (xy 154.178716 90.95948) (xy 154.091904 90.90936) (xy 154.091904 90.909359) (xy 154.0919 90.909358) + (xy 154.041785 90.880423) (xy 153.889057 90.839499) (xy 153.730943 90.839499) (xy 153.723347 90.839499) + (xy 153.723331 90.8395) (xy 153.689091 90.8395) (xy 153.622052 90.819815) (xy 153.576711 90.767909) + (xy 153.574037 90.762175) (xy 153.574034 90.76217) (xy 153.574033 90.762169) (xy 153.438495 90.568599) + (xy 153.438494 90.568597) (xy 153.271402 90.401506) (xy 153.271396 90.401501) (xy 153.085842 90.271575) (xy 153.042217 90.216998) (xy 153.035023 90.1475) (xy 153.066546 90.085145) (xy 153.085842 90.068425) - (xy 153.183564 89.999999) (xy 153.271401 89.938495) (xy 153.438495 89.771401) (xy 153.574035 89.57783) + (xy 153.26848 89.94054) (xy 153.271401 89.938495) (xy 153.438495 89.771401) (xy 153.574035 89.57783) (xy 153.673903 89.363663) (xy 153.735063 89.135408) (xy 153.755659 88.9) (xy 153.735063 88.664592) - (xy 153.688626 88.491285) (xy 153.673905 88.436344) (xy 153.673904 88.436343) (xy 153.673903 88.436337) - (xy 153.574035 88.222171) (xy 153.568425 88.214158) (xy 153.438494 88.028597) (xy 153.271402 87.861506) - (xy 153.271396 87.861501) (xy 153.085842 87.731575) (xy 153.042217 87.676998) (xy 153.035023 87.6075) - (xy 153.066546 87.545145) (xy 153.085842 87.528425) (xy 153.215753 87.43746) (xy 153.271401 87.398495) - (xy 153.438495 87.231401) (xy 153.574035 87.03783) (xy 153.673903 86.823663) (xy 153.735063 86.595408) - (xy 153.755659 86.36) (xy 153.735063 86.124592) (xy 153.673903 85.896337) (xy 153.574035 85.682171) - (xy 153.568425 85.674158) (xy 153.438494 85.488597) (xy 153.271402 85.321506) (xy 153.271396 85.321501) - (xy 153.085842 85.191575) (xy 153.042217 85.136998) (xy 153.035023 85.0675) (xy 153.066546 85.005145) - (xy 153.085842 84.988425) (xy 153.144519 84.947339) (xy 153.271401 84.858495) (xy 153.438495 84.691401) - (xy 153.574035 84.49783) (xy 153.673903 84.283663) (xy 153.735063 84.055408) (xy 153.755659 83.82) - (xy 153.735063 83.584592) (xy 153.673903 83.356337) (xy 153.574035 83.142171) (xy 153.568425 83.134158) - (xy 153.438494 82.948597) (xy 153.271402 82.781506) (xy 153.271396 82.781501) (xy 153.085842 82.651575) - (xy 153.042217 82.596998) (xy 153.035023 82.5275) (xy 153.066546 82.465145) (xy 153.085842 82.448425) - (xy 153.108026 82.432891) (xy 153.271401 82.318495) (xy 153.438495 82.151401) (xy 153.574035 81.95783) - (xy 153.673903 81.743663) (xy 153.735063 81.515408) (xy 153.755659 81.28) (xy 153.735063 81.044592) + (xy 153.673903 88.436337) (xy 153.574035 88.222171) (xy 153.568425 88.214158) (xy 153.438494 88.028597) + (xy 153.271402 87.861506) (xy 153.271396 87.861501) (xy 153.085842 87.731575) (xy 153.042217 87.676998) + (xy 153.035023 87.6075) (xy 153.066546 87.545145) (xy 153.085842 87.528425) (xy 153.108026 87.512891) + (xy 153.271401 87.398495) (xy 153.438495 87.231401) (xy 153.574035 87.03783) (xy 153.673903 86.823663) + (xy 153.735063 86.595408) (xy 153.755659 86.36) (xy 153.735063 86.124592) (xy 153.673903 85.896337) + (xy 153.574035 85.682171) (xy 153.568425 85.674158) (xy 153.438494 85.488597) (xy 153.271402 85.321506) + (xy 153.271396 85.321501) (xy 153.085842 85.191575) (xy 153.042217 85.136998) (xy 153.035023 85.0675) + (xy 153.066546 85.005145) (xy 153.085842 84.988425) (xy 153.124216 84.961555) (xy 153.271401 84.858495) + (xy 153.438495 84.691401) (xy 153.574035 84.49783) (xy 153.673903 84.283663) (xy 153.735063 84.055408) + (xy 153.755659 83.82) (xy 153.735063 83.584592) (xy 153.673903 83.356337) (xy 153.574035 83.142171) + (xy 153.568731 83.134595) (xy 153.438494 82.948597) (xy 153.271402 82.781506) (xy 153.271396 82.781501) + (xy 153.085842 82.651575) (xy 153.042217 82.596998) (xy 153.035023 82.5275) (xy 153.066546 82.465145) + (xy 153.085842 82.448425) (xy 153.133562 82.415011) (xy 153.271401 82.318495) (xy 153.438495 82.151401) + (xy 153.574035 81.95783) (xy 153.673903 81.743663) (xy 153.735063 81.515408) (xy 153.755659 81.28) + (xy 153.735063 81.044592) (xy 153.680588 80.841286) (xy 153.673905 80.816344) (xy 153.673904 80.816343) (xy 153.673903 80.816337) (xy 153.574035 80.602171) (xy 153.568425 80.594158) (xy 153.438494 80.408597) (xy 153.271402 80.241506) (xy 153.271396 80.241501) (xy 153.085842 80.111575) (xy 153.042217 80.056998) - (xy 153.035023 79.9875) (xy 153.066546 79.925145) (xy 153.085842 79.908425) (xy 153.108026 79.892891) + (xy 153.035023 79.9875) (xy 153.066546 79.925145) (xy 153.085842 79.908425) (xy 153.155714 79.8595) (xy 153.271401 79.778495) (xy 153.438495 79.611401) (xy 153.574035 79.41783) (xy 153.673903 79.203663) (xy 153.735063 78.975408) (xy 153.755659 78.74) (xy 153.735063 78.504592) (xy 153.673903 78.276337) - (xy 153.574035 78.062171) (xy 153.572585 78.060099) (xy 153.438494 77.868597) (xy 153.271402 77.701506) - (xy 153.271396 77.701501) (xy 153.085842 77.571575) (xy 153.042217 77.516998) (xy 153.035023 77.4475) - (xy 153.066546 77.385145) (xy 153.085842 77.368425) (xy 153.108026 77.352891) (xy 153.271401 77.238495) - (xy 153.438495 77.071401) (xy 153.574035 76.87783) (xy 153.673903 76.663663) (xy 153.735063 76.435408) - (xy 153.755659 76.2) (xy 153.735063 75.964592) (xy 153.673903 75.736337) (xy 153.574035 75.522171) - (xy 153.568425 75.514158) (xy 153.438494 75.328597) (xy 153.271402 75.161506) (xy 153.271396 75.161501) - (xy 153.085842 75.031575) (xy 153.042217 74.976998) (xy 153.035023 74.9075) (xy 153.066546 74.845145) - (xy 153.085842 74.828425) (xy 153.122844 74.802516) (xy 153.271401 74.698495) (xy 153.438495 74.531401) - (xy 153.574035 74.33783) (xy 153.673903 74.123663) (xy 153.735063 73.895408) (xy 153.755659 73.66) - (xy 153.753487 73.63518) (xy 153.751539 73.612918) (xy 153.735063 73.424592) (xy 153.673903 73.196337) - (xy 153.574035 72.982171) (xy 153.573386 72.981243) (xy 153.438494 72.788597) (xy 153.271402 72.621506) + (xy 153.574035 78.062171) (xy 153.572535 78.060028) (xy 153.438494 77.868597) (xy 153.271402 77.701506) + (xy 153.271401 77.701505) (xy 153.085405 77.571269) (xy 153.041781 77.516692) (xy 153.034588 77.447193) + (xy 153.06611 77.384839) (xy 153.085405 77.368119) (xy 153.271082 77.238105) (xy 153.438105 77.071082) + (xy 153.5736 76.877578) (xy 153.673429 76.663492) (xy 153.673432 76.663486) (xy 153.730636 76.45) + (xy 152.833012 76.45) (xy 152.865925 76.392993) (xy 152.9 76.265826) (xy 152.9 76.134174) (xy 152.865925 76.007007) + (xy 152.833012 75.95) (xy 153.730636 75.95) (xy 153.730635 75.949999) (xy 153.673432 75.736513) + (xy 153.673429 75.736507) (xy 153.5736 75.522422) (xy 153.573599 75.52242) (xy 153.438113 75.328926) + (xy 153.438108 75.32892) (xy 153.271078 75.16189) (xy 153.085405 75.031879) (xy 153.04178 74.977302) + (xy 153.034588 74.907804) (xy 153.06611 74.845449) (xy 153.085406 74.82873) (xy 153.085842 74.828425) + (xy 153.271401 74.698495) (xy 153.438495 74.531401) (xy 153.574035 74.33783) (xy 153.673903 74.123663) + (xy 153.735063 73.895408) (xy 153.755659 73.66) (xy 153.735063 73.424592) (xy 153.673903 73.196337) + (xy 153.574035 72.982171) (xy 153.568425 72.974158) (xy 153.438494 72.788597) (xy 153.271402 72.621506) (xy 153.271396 72.621501) (xy 153.085842 72.491575) (xy 153.042217 72.436998) (xy 153.035023 72.3675) (xy 153.066546 72.305145) (xy 153.085842 72.288425) (xy 153.108026 72.272891) (xy 153.271401 72.158495) (xy 153.438495 71.991401) (xy 153.574035 71.79783) (xy 153.673903 71.583663) (xy 153.735063 71.355408) (xy 153.755659 71.12) (xy 153.735063 70.884592) (xy 153.673903 70.656337) (xy 153.574035 70.442171) (xy 153.568425 70.434158) (xy 153.438494 70.248597) (xy 153.271402 70.081506) (xy 153.271396 70.081501) (xy 153.085842 69.951575) (xy 153.042217 69.896998) (xy 153.035023 69.8275) (xy 153.066546 69.765145) - (xy 153.085842 69.748425) (xy 153.141431 69.709501) (xy 153.271401 69.618495) (xy 153.438495 69.451401) + (xy 153.085842 69.748425) (xy 153.108026 69.732891) (xy 153.271401 69.618495) (xy 153.438495 69.451401) (xy 153.574035 69.25783) (xy 153.673903 69.043663) (xy 153.735063 68.815408) (xy 153.755659 68.58) (xy 153.735063 68.344592) (xy 153.673903 68.116337) (xy 153.574035 67.902171) (xy 153.568425 67.894158) (xy 153.438494 67.708597) (xy 153.271402 67.541506) (xy 153.271396 67.541501) (xy 153.085842 67.411575) (xy 153.042217 67.356998) (xy 153.035023 67.2875) (xy 153.066546 67.225145) (xy 153.085842 67.208425) - (xy 153.108026 67.192891) (xy 153.271401 67.078495) (xy 153.438495 66.911401) (xy 153.574035 66.71783) + (xy 153.140071 67.170453) (xy 153.271401 67.078495) (xy 153.438495 66.911401) (xy 153.574035 66.71783) (xy 153.673903 66.503663) (xy 153.735063 66.275408) (xy 153.755659 66.04) (xy 153.735063 65.804592) (xy 153.673903 65.576337) (xy 153.574035 65.362171) (xy 153.568425 65.354158) (xy 153.438494 65.168597) (xy 153.271402 65.001506) (xy 153.271396 65.001501) (xy 153.085842 64.871575) (xy 153.042217 64.816998) - (xy 153.035023 64.7475) (xy 153.066546 64.685145) (xy 153.085842 64.668425) (xy 153.108026 64.652891) + (xy 153.035023 64.7475) (xy 153.066546 64.685145) (xy 153.085842 64.668425) (xy 153.195732 64.591479) (xy 153.271401 64.538495) (xy 153.438495 64.371401) (xy 153.574035 64.17783) (xy 153.673903 63.963663) (xy 153.735063 63.735408) (xy 153.755659 63.5) (xy 153.735063 63.264592) (xy 153.673903 63.036337) (xy 153.574035 62.822171) (xy 153.568731 62.814595) (xy 153.438494 62.628597) (xy 153.271402 62.461506) (xy 153.271396 62.461501) (xy 153.085842 62.331575) (xy 153.042217 62.276998) (xy 153.035023 62.2075) - (xy 153.066546 62.145145) (xy 153.085842 62.128425) (xy 153.108026 62.112891) (xy 153.271401 61.998495) + (xy 153.066546 62.145145) (xy 153.085842 62.128425) (xy 153.144072 62.087652) (xy 153.271401 61.998495) (xy 153.438495 61.831401) (xy 153.574035 61.63783) (xy 153.673903 61.423663) (xy 153.735063 61.195408) (xy 153.755659 60.96) (xy 153.735063 60.724592) (xy 153.673903 60.496337) (xy 153.574035 60.282171) (xy 153.568425 60.274158) (xy 153.438494 60.088597) (xy 153.271402 59.921506) (xy 153.271401 59.921505) @@ -5247,143 +3712,177 @@ (xy 153.755659 55.88) (xy 153.735063 55.644592) (xy 153.673903 55.416337) (xy 153.574035 55.202171) (xy 153.568425 55.194158) (xy 153.438494 55.008597) (xy 153.271402 54.841506) (xy 153.271396 54.841501) (xy 153.085842 54.711575) (xy 153.042217 54.656998) (xy 153.035023 54.5875) (xy 153.066546 54.525145) - (xy 153.085842 54.508425) (xy 153.161024 54.455782) (xy 153.271401 54.378495) (xy 153.438495 54.211401) - (xy 153.574035 54.01783) (xy 153.673903 53.803663) (xy 153.735063 53.575408) (xy 153.746043 53.449902) - (xy 153.771495 53.384835) (xy 153.781891 53.373029) (xy 153.877136 53.277785) (xy 153.877136 53.277784) - (xy 153.877139 53.277782) (xy 153.986632 53.113914) (xy 154.062051 52.931835) (xy 154.073091 52.876337) - (xy 154.1005 52.738541) (xy 154.1005 52.54146) (xy 154.1005 50.001459) (xy 154.1005 50.001456) (xy 154.062052 49.80817) - (xy 154.062051 49.808169) (xy 154.062051 49.808165) (xy 154.005955 49.672736) (xy 153.986635 49.626092) - (xy 153.986628 49.626079) (xy 153.87714 49.462219) (xy 153.877139 49.462218) (xy 153.737782 49.322861) - (xy 153.737781 49.32286) (xy 151.784208 47.369288) (xy 151.784206 47.369285) (xy 151.784206 47.369286) - (xy 151.777139 47.362219) (xy 151.777139 47.362218) (xy 151.637782 47.222861) (xy 151.637781 47.22286) - (xy 151.63778 47.222859) (xy 151.47392 47.113371) (xy 151.473907 47.113364) (xy 151.334776 47.055735) - (xy 151.334775 47.055735) (xy 151.291836 47.037949) (xy 151.291828 47.037947) (xy 151.195188 47.018724) - (xy 151.098544 46.9995) (xy 151.098541 46.9995) (xy 143.901459 46.9995) (xy 143.901455 46.9995) - (xy 143.804812 47.018724) (xy 143.708171 47.037947) (xy 143.708163 47.037949) (xy 143.665225 47.055735) - (xy 143.665224 47.055735) (xy 143.526092 47.113364) (xy 143.526079 47.113371) (xy 143.362219 47.222859) - (xy 143.29254 47.292538) (xy 143.222861 47.362218) (xy 143.222858 47.362221) (xy 137.372221 53.212858) - (xy 137.372218 53.212861) (xy 137.307298 53.277781) (xy 137.232859 53.352219) (xy 137.123371 53.516079) - (xy 137.123364 53.516092) (xy 137.04795 53.69816) (xy 137.047947 53.69817) (xy 137.0095 53.891456) - (xy 137.0095 69.967202) (xy 136.989815 70.034241) (xy 136.937011 70.079996) (xy 136.867853 70.08994) - (xy 136.805571 70.062004) (xy 136.682131 69.957929) (xy 136.480189 69.839425) (xy 136.383673 69.803002) - (xy 136.261126 69.756755) (xy 136.218055 69.748425) (xy 136.031243 69.712295) (xy 135.978652 69.709501) - (xy 135.978629 69.7095) (xy 135.978622 69.7095) (xy 134.041378 69.7095) (xy 134.04137 69.7095) (xy 134.041347 69.709501) - (xy 133.988756 69.712295) (xy 133.988755 69.712295) (xy 133.758878 69.756754) (xy 133.758876 69.756754) - (xy 133.758874 69.756755) (xy 133.684933 69.784659) (xy 133.53981 69.839425) (xy 133.337868 69.957929) - (xy 133.337861 69.957934) (xy 133.158858 70.108856) (xy 133.158856 70.108858) (xy 133.007934 70.287861) - (xy 133.007929 70.287868) (xy 132.889425 70.48981) (xy 132.834659 70.634933) (xy 132.806755 70.708874) - (xy 132.806754 70.708876) (xy 132.806754 70.708878) (xy 132.762295 70.938755) (xy 132.762295 70.938756) - (xy 132.759501 70.991347) (xy 132.7595 70.991386) (xy 132.7595 71.703915) (xy 132.754161 71.739909) - (xy 132.734699 71.804066) (xy 132.714417 72.01) (xy 132.734699 72.215932) (xy 132.754161 72.280088) - (xy 132.7595 72.316083) (xy 132.7595 72.928613) (xy 132.759501 72.928652) (xy 132.762295 72.981243) - (xy 132.762295 72.981244) (xy 132.802276 73.187967) (xy 132.806755 73.211126) (xy 132.855326 73.339832) - (xy 132.889425 73.430189) (xy 133.007929 73.632131) (xy 133.007934 73.632138) (xy 133.158856 73.811141) - (xy 133.158858 73.811143) (xy 133.337861 73.962065) (xy 133.337868 73.96207) (xy 133.53981 74.080574) - (xy 133.758874 74.163245) (xy 133.988759 74.207705) (xy 134.041378 74.2105) (xy 134.041386 74.2105) - (xy 135.978614 74.2105) (xy 135.978622 74.2105) (xy 135.97863 74.210499) (xy 135.97865 74.210499) - (xy 135.999655 74.209382) (xy 136.015026 74.208566) (xy 136.083014 74.224665) (xy 136.131507 74.274966) - (xy 136.145106 74.3435) (xy 136.119495 74.408506) (xy 136.064939 74.448573) (xy 136.017669 74.466203) - (xy 136.017664 74.466206) (xy 135.902455 74.552452) (xy 135.902452 74.552455) (xy 135.816206 74.667664) - (xy 135.816202 74.667671) (xy 135.765908 74.802517) (xy 135.759501 74.862116) (xy 135.759501 74.862123) - (xy 135.7595 74.862135) (xy 135.7595 78.45787) (xy 135.759501 78.457876) (xy 135.765908 78.517483) - (xy 135.816202 78.652328) (xy 135.816206 78.652335) (xy 135.902452 78.767544) (xy 135.902455 78.767547) - (xy 136.017664 78.853793) (xy 136.017671 78.853797) (xy 136.152517 78.904091) (xy 136.152516 78.904091) - (xy 136.159444 78.904835) (xy 136.212127 78.9105) (xy 136.8855 78.910499) (xy 136.952539 78.930183) - (xy 136.998294 78.982987) (xy 137.0095 79.034499) (xy 137.0095 82.024217) (xy 136.989815 82.091256) - (xy 136.973181 82.111898) (xy 135.421897 83.663181) (xy 135.360574 83.696666) (xy 135.334216 83.6995) - (xy 134.652129 83.6995) (xy 134.652123 83.699501) (xy 134.592516 83.705908) (xy 134.457671 83.756202) - (xy 134.457664 83.756206) (xy 134.342456 83.842452) (xy 134.342455 83.842453) (xy 134.342454 83.842454) - (xy 134.321936 83.869863) (xy 134.262087 83.949811) (xy 134.206153 83.991682) (xy 134.16282 83.9995) - (xy 127.722669 83.9995) (xy 127.690606 84.005876) (xy 127.690607 84.005877) (xy 127.529385 84.037946) - (xy 127.529379 84.037948) (xy 127.347303 84.113366) (xy 127.347294 84.113371) (xy 127.183434 84.222859) - (xy 127.18343 84.222862) (xy 126.6519 84.754394) (xy 126.49222 84.914074) (xy 126.492218 84.914076) - (xy 126.422538 84.983755) (xy 126.352859 85.053434) (xy 126.243371 85.217295) (xy 126.243364 85.217308) - (xy 126.212495 85.291836) (xy 126.191571 85.342349) (xy 126.168549 85.397931) (xy 126.168543 85.397945) - (xy 126.167948 85.399378) (xy 126.1295 85.592671) (xy 126.1295 85.592674) (xy 126.1295 92.588541) - (xy 126.1295 92.588543) (xy 126.129499 92.588543) (xy 126.167947 92.781829) (xy 126.16795 92.781839) - (xy 126.243364 92.963907) (xy 126.243371 92.96392) (xy 126.352859 93.12778) (xy 126.35286 93.127781) - (xy 126.352861 93.127782) (xy 126.492218 93.267139) (xy 126.492219 93.267139) (xy 126.499286 93.274206) - (xy 126.499285 93.274206) (xy 126.499288 93.274208) (xy 127.04286 93.817781) (xy 127.042861 93.817782) - (xy 127.182218 93.957139) (xy 127.346086 94.066632) (xy 127.452745 94.110811) (xy 127.528164 94.142051) - (xy 127.721444 94.180497) (xy 127.721454 94.180499) (xy 127.721457 94.1805) (xy 127.721459 94.1805) - (xy 127.91854 94.1805) (xy 133.76394 94.1805) (xy 133.830979 94.200185) (xy 133.876734 94.252989) - (xy 133.886678 94.322147) (xy 133.857653 94.385703) (xy 133.838252 94.403766) (xy 133.812809 94.422812) - (xy 133.726649 94.537906) (xy 133.726645 94.537913) (xy 133.676403 94.67262) (xy 133.676401 94.672627) - (xy 133.67 94.732155) (xy 133.67 95.33) (xy 134.654314 95.33) (xy 134.64992 95.334394) (xy 134.597259 95.425606) - (xy 134.57 95.527339) (xy 134.57 95.632661) (xy 134.597259 95.734394) (xy 134.64992 95.825606) (xy 134.654314 95.83) - (xy 133.67 95.83) (xy 133.67 96.427844) (xy 133.676401 96.487372) (xy 133.676403 96.487379) (xy 133.726645 96.622086) - (xy 133.726649 96.622093) (xy 133.812809 96.737187) (xy 133.864968 96.776234) (xy 133.906838 96.832168) - (xy 133.911822 96.90186) (xy 133.878336 96.963182) (xy 133.817012 96.996667) (xy 133.790656 96.9995) - (xy 130.765741 96.9995) (xy 130.698702 96.979815) (xy 130.652947 96.927011) (xy 130.643003 96.857853) - (xy 130.646475 96.841566) (xy 130.685902 96.702992) (xy 130.685903 96.702989) (xy 130.704713 96.5) - (xy 130.704713 96.499999) (xy 130.685903 96.29701) (xy 130.685902 96.297007) (xy 130.630116 96.100936) - (xy 130.630113 96.10093) (xy 130.539249 95.918449) (xy 130.539247 95.918447) (xy 130.537465 95.916087) - (xy 129.894855 96.558696) (xy 129.9 96.539496) (xy 129.9 96.460504) (xy 129.879556 96.384204) (xy 129.84006 96.315795) - (xy 129.784205 96.25994) (xy 129.715796 96.220444) (xy 129.639496 96.2) (xy 129.560504 96.2) (xy 129.484204 96.220444) - (xy 129.415795 96.25994) (xy 129.35994 96.315795) (xy 129.320444 96.384204) (xy 129.3 96.460504) - (xy 129.3 96.539496) (xy 129.305145 96.558699) (xy 128.662533 95.916087) (xy 128.660755 95.918442) - (xy 128.660754 95.918443) (xy 128.569886 96.10093) (xy 128.569883 96.100936) (xy 128.514097 96.297007) - (xy 128.514096 96.29701) (xy 128.495287 96.499999) (xy 128.495287 96.5) (xy 128.514096 96.702989) - (xy 128.514097 96.702992) (xy 128.569883 96.899063) (xy 128.569886 96.899069) (xy 128.660754 97.081556) - (xy 128.731212 97.174857) (xy 128.755904 97.240218) (xy 128.741339 97.308553) (xy 128.731212 97.32431) - (xy 128.660328 97.418175) (xy 128.569422 97.600739) (xy 128.569417 97.600752) (xy 128.513602 97.796917) - (xy 128.494785 97.999999) (xy 128.494785 98) (xy 128.513602 98.203082) (xy 128.569417 98.399247) - (xy 128.569422 98.39926) (xy 128.660328 98.581824) (xy 128.730898 98.675274) (xy 128.75559 98.740635) - (xy 128.741025 98.80897) (xy 128.730898 98.824726) (xy 128.660328 98.918175) (xy 128.569422 99.100739) - (xy 128.569417 99.100752) (xy 128.513602 99.296917) (xy 128.494785 99.499999) (xy 128.494785 99.5) - (xy 128.513602 99.703082) (xy 128.569417 99.899247) (xy 128.569422 99.89926) (xy 128.660327 100.081821) - (xy 128.783237 100.244581) (xy 128.933958 100.38198) (xy 128.93396 100.381982) (xy 128.987052 100.414855) - (xy 129.107363 100.489348) (xy 129.297544 100.563024) (xy 129.498024 100.6005) (xy 129.498026 100.6005) - (xy 129.701974 100.6005) (xy 129.701976 100.6005) (xy 129.902456 100.563024) (xy 130.042237 100.508873) - (xy 130.087031 100.5005) (xy 142.034218 100.5005) (xy 142.101257 100.520185) (xy 142.121899 100.536819) - (xy 146.359735 104.774655) (xy 146.359764 104.774686) (xy 146.502214 104.917136) (xy 146.502218 104.917139) - (xy 146.666079 105.026628) (xy 146.666092 105.026635) (xy 146.794833 105.079961) (xy 146.837744 105.097735) - (xy 146.848164 105.102051) (xy 146.944812 105.121275) (xy 146.993135 105.130887) (xy 147.041458 105.1405) - (xy 147.041459 105.1405) (xy 154.638543 105.1405) (xy 154.837809 105.100863) (xy 154.838142 105.102538) - (xy 154.899847 105.101975) (xy 154.958967 105.139211) (xy 154.988572 105.202499) (xy 154.99 105.221266) - (xy 154.99 109.866) (xy 154.970315 109.933039) (xy 154.917511 109.978794) (xy 154.866 109.99) (xy 124.624 109.99) - (xy 124.556961 109.970315) (xy 124.511206 109.917511) (xy 124.5 109.866) (xy 124.5 106.561288) (xy 126.2995 106.561288) - (xy 126.331161 106.801785) (xy 126.393947 107.036104) (xy 126.486773 107.260205) (xy 126.486776 107.260212) - (xy 126.608064 107.470289) (xy 126.608066 107.470292) (xy 126.608067 107.470293) (xy 126.755733 107.662736) - (xy 126.755739 107.662743) (xy 126.927256 107.83426) (xy 126.927262 107.834265) (xy 127.119711 107.981936) - (xy 127.329788 108.103224) (xy 127.5539 108.196054) (xy 127.788211 108.258838) (xy 127.968586 108.282584) - (xy 128.028711 108.2905) (xy 128.028712 108.2905) (xy 128.271289 108.2905) (xy 128.319388 108.284167) - (xy 128.511789 108.258838) (xy 128.7461 108.196054) (xy 128.970212 108.103224) (xy 129.180289 107.981936) - (xy 129.372738 107.834265) (xy 129.544265 107.662738) (xy 129.691936 107.470289) (xy 129.813224 107.260212) - (xy 129.906054 107.0361) (xy 129.968838 106.801789) (xy 130.0005 106.561288) (xy 130.0005 106.318712) - (xy 129.968838 106.078211) (xy 129.906054 105.8439) (xy 129.813224 105.619788) (xy 129.691936 105.409711) - (xy 129.631018 105.330321) (xy 129.544266 105.217263) (xy 129.54426 105.217256) (xy 129.372743 105.045739) - (xy 129.372736 105.045733) (xy 129.180293 104.898067) (xy 129.180292 104.898066) (xy 129.180289 104.898064) - (xy 129.008661 104.798974) (xy 128.970214 104.776777) (xy 128.970205 104.776773) (xy 128.746104 104.683947) + (xy 153.085842 54.508425) (xy 153.108026 54.492891) (xy 153.271401 54.378495) (xy 153.438495 54.211401) + (xy 153.574035 54.01783) (xy 153.673903 53.803663) (xy 153.735063 53.575408) (xy 153.755659 53.34) + (xy 153.735063 53.104592) (xy 153.673903 52.876337) (xy 153.574035 52.662171) (xy 153.438495 52.468599) + (xy 153.438494 52.468597) (xy 153.436819 52.466922) (xy 153.436315 52.466) (xy 153.435014 52.464449) + (xy 153.435325 52.464187) (xy 153.403334 52.405599) (xy 153.4005 52.379241) (xy 153.4005 51.344675) + (xy 153.400501 51.344654) (xy 153.400501 51.141457) (xy 153.4005 51.141455) (xy 153.362053 50.948172) + (xy 153.362052 50.948165) (xy 153.286632 50.766086) (xy 153.286631 50.766085) (xy 153.286628 50.766079) + (xy 153.17714 50.602219) (xy 153.177137 50.602215) (xy 152.554209 49.979289) (xy 152.554206 49.979285) + (xy 152.554206 49.979286) (xy 152.547139 49.972219) (xy 152.547139 49.972218) (xy 152.407782 49.832861) + (xy 152.407781 49.83286) (xy 152.40778 49.832859) (xy 152.24392 49.723371) (xy 152.243911 49.723366) + (xy 152.171315 49.693296) (xy 152.115165 49.670038) (xy 152.061836 49.647949) (xy 152.061832 49.647948) + (xy 152.061828 49.647946) (xy 151.965188 49.628724) (xy 151.868544 49.6095) (xy 151.868541 49.6095) + (xy 143.991459 49.6095) (xy 143.991455 49.6095) (xy 143.894812 49.628724) (xy 143.798167 49.647947) + (xy 143.798161 49.647949) (xy 143.744834 49.670037) (xy 143.744834 49.670038) (xy 143.699315 49.688892) + (xy 143.616089 49.723366) (xy 143.616079 49.723371) (xy 143.452219 49.832859) (xy 143.38254 49.902538) + (xy 143.312861 49.972218) (xy 143.312858 49.972221) (xy 133.091899 60.193181) (xy 133.030576 60.226666) + (xy 133.004218 60.2295) (xy 132.140862 60.2295) (xy 132.108509 60.22) (xy 129.857705 60.22) (xy 129.845497 60.226666) + (xy 129.819139 60.2295) (xy 129.181455 60.2295) (xy 129.084812 60.248724) (xy 128.988167 60.267947) + (xy 128.988161 60.267949) (xy 128.934834 60.290037) (xy 128.934834 60.290038) (xy 128.889315 60.308892) + (xy 128.806089 60.343366) (xy 128.806079 60.343371) (xy 128.642219 60.452859) (xy 128.607112 60.487967) + (xy 128.502861 60.592218) (xy 128.502858 60.592221) (xy 128.202221 60.892858) (xy 128.202218 60.892861) + (xy 128.13508 60.959999) (xy 128.062859 61.032219) (xy 127.953371 61.19608) (xy 127.953364 61.196093) + (xy 127.919001 61.279056) (xy 127.919001 61.279057) (xy 127.877949 61.378164) (xy 127.870955 61.413324) + (xy 127.8395 61.571456) (xy 127.8395 63.908541) (xy 127.847382 63.948163) (xy 127.847382 63.948166) + (xy 127.877947 64.101829) (xy 127.877948 64.101833) (xy 127.877949 64.101836) (xy 127.894362 64.141459) + (xy 127.953364 64.283906) (xy 127.953371 64.283919) (xy 128.06286 64.447782) (xy 128.206537 64.591459) + (xy 128.206559 64.591479) (xy 128.489735 64.874655) (xy 128.489764 64.874686) (xy 128.632214 65.017136) + (xy 128.632218 65.017139) (xy 128.796079 65.126628) (xy 128.796092 65.126635) (xy 128.924833 65.179961) + (xy 128.967744 65.197735) (xy 128.978164 65.202051) (xy 129.074812 65.221275) (xy 129.123135 65.230887) + (xy 129.171458 65.2405) (xy 129.171459 65.2405) (xy 129.17146 65.2405) (xy 129.36854 65.2405) (xy 130.881459 65.2405) + (xy 132.594218 65.2405) (xy 132.661257 65.260185) (xy 132.681898 65.276818) (xy 134.30286 66.897781) + (xy 134.302861 66.897782) (xy 134.405583 67.000504) (xy 134.442219 67.03714) (xy 134.60608 67.146628) + (xy 134.606086 67.146632) (xy 134.657953 67.168115) (xy 134.712355 67.211955) (xy 134.734421 67.278249) + (xy 134.7345 67.282676) (xy 134.7345 69.199217) (xy 134.714815 69.266256) (xy 134.698181 69.286898) + (xy 132.187249 71.79783) (xy 129.642221 74.342858) (xy 129.642218 74.342861) (xy 129.572538 74.41254) + (xy 129.502859 74.482219) (xy 129.393369 74.646084) (xy 129.393368 74.646084) (xy 129.387399 74.660498) + (xy 129.387398 74.6605) (xy 129.317949 74.828163) (xy 129.317947 74.828171) (xy 129.298724 74.924812) + (xy 129.2795 75.021455) (xy 129.2795 75.021459) (xy 129.2795 91.348541) (xy 129.2795 91.348543) + (xy 129.279499 91.348543) (xy 129.317947 91.541829) (xy 129.31795 91.541838) (xy 129.393364 91.723907) + (xy 129.393371 91.72392) (xy 129.50286 91.887781) (xy 129.502863 91.887785) (xy 129.646537 92.031459) + (xy 129.646559 92.031479) (xy 131.569735 93.954655) (xy 131.569764 93.954686) (xy 131.712214 94.097136) + (xy 131.712218 94.097139) (xy 131.876079 94.206628) (xy 131.876092 94.206635) (xy 132.000128 94.258012) + (xy 132.000129 94.258012) (xy 132.058164 94.282051) (xy 132.125777 94.2955) (xy 132.157197 94.30175) + (xy 132.251456 94.3205) (xy 132.251459 94.3205) (xy 132.25146 94.3205) (xy 132.44854 94.3205) (xy 133.106489 94.3205) + (xy 133.173528 94.340185) (xy 133.219283 94.392989) (xy 133.229227 94.462147) (xy 133.200202 94.525703) + (xy 133.171587 94.550037) (xy 133.090745 94.599901) (xy 133.046342 94.627289) (xy 132.922289 94.751342) + (xy 132.830187 94.900663) (xy 132.830186 94.900666) (xy 132.775001 95.067203) (xy 132.775001 95.067204) + (xy 132.775 95.067204) (xy 132.7645 95.169983) (xy 132.7645 96.470001) (xy 132.764501 96.470018) + (xy 132.775 96.572796) (xy 132.775001 96.572799) (xy 132.794269 96.630945) (xy 132.830186 96.739334) + (xy 132.922288 96.888656) (xy 133.046344 97.012712) (xy 133.195666 97.104814) (xy 133.362203 97.159999) + (xy 133.464991 97.1705) (xy 135.015008 97.170499) (xy 135.117797 97.159999) (xy 135.284334 97.104814) + (xy 135.433656 97.012712) (xy 135.557712 96.888656) (xy 135.649814 96.739334) (xy 135.704999 96.572797) + (xy 135.709177 96.531896) (xy 135.735573 96.467207) (xy 135.792753 96.427055) (xy 135.832535 96.4205) + (xy 141.079903 96.4205) (xy 141.146942 96.440185) (xy 141.167584 96.456819) (xy 141.633181 96.922416) + (xy 141.666666 96.983739) (xy 141.6695 97.010097) (xy 141.6695 103.77333) (xy 141.669499 103.773348) + (xy 141.669499 103.939054) (xy 141.669498 103.939054) (xy 141.710423 104.091785) (xy 141.739358 104.1419) + (xy 141.739359 104.141904) (xy 141.73936 104.141904) (xy 141.789479 104.228714) (xy 141.789481 104.228717) + (xy 141.908349 104.347585) (xy 141.908355 104.34759) (xy 142.005139 104.444374) (xy 142.005149 104.444385) + (xy 142.009479 104.448715) (xy 142.00948 104.448716) (xy 142.121284 104.56052) (xy 142.208095 104.610639) + (xy 142.208097 104.610641) (xy 142.246151 104.632611) (xy 142.258215 104.639577) (xy 142.410943 104.680501) + (xy 142.410946 104.680501) (xy 142.576653 104.680501) (xy 142.576669 104.6805) (xy 153.523331 104.6805) + (xy 153.523347 104.680501) (xy 153.530943 104.680501) (xy 153.689054 104.680501) (xy 153.689057 104.680501) + (xy 153.841785 104.639577) (xy 153.891904 104.610639) (xy 153.978716 104.56052) (xy 154.09052 104.448716) + (xy 154.09052 104.448714) (xy 154.100728 104.438507) (xy 154.100729 104.438504) (xy 154.72052 103.818716) + (xy 154.758613 103.752735) (xy 154.809179 103.704521) (xy 154.877786 103.691297) (xy 154.942651 103.717265) + (xy 154.98318 103.774178) (xy 154.99 103.814736) (xy 154.99 109.866) (xy 154.970315 109.933039) + (xy 154.917511 109.978794) (xy 154.866 109.99) (xy 124.624 109.99) (xy 124.556961 109.970315) (xy 124.511206 109.917511) + (xy 124.5 109.866) (xy 124.5 106.561288) (xy 126.2995 106.561288) (xy 126.331161 106.801785) (xy 126.393947 107.036104) + (xy 126.486773 107.260205) (xy 126.486776 107.260212) (xy 126.608064 107.470289) (xy 126.608066 107.470292) + (xy 126.608067 107.470293) (xy 126.755733 107.662736) (xy 126.755739 107.662743) (xy 126.927256 107.83426) + (xy 126.927262 107.834265) (xy 127.119711 107.981936) (xy 127.329788 108.103224) (xy 127.5539 108.196054) + (xy 127.788211 108.258838) (xy 127.968586 108.282584) (xy 128.028711 108.2905) (xy 128.028712 108.2905) + (xy 128.271289 108.2905) (xy 128.319388 108.284167) (xy 128.511789 108.258838) (xy 128.7461 108.196054) + (xy 128.970212 108.103224) (xy 129.180289 107.981936) (xy 129.372738 107.834265) (xy 129.544265 107.662738) + (xy 129.691936 107.470289) (xy 129.813224 107.260212) (xy 129.906054 107.0361) (xy 129.968838 106.801789) + (xy 130.0005 106.561288) (xy 130.0005 106.318712) (xy 129.968838 106.078211) (xy 129.906054 105.8439) + (xy 129.813224 105.619788) (xy 129.691936 105.409711) (xy 129.544265 105.217262) (xy 129.54426 105.217256) + (xy 129.372743 105.045739) (xy 129.372736 105.045733) (xy 129.180293 104.898067) (xy 129.180292 104.898066) + (xy 129.180289 104.898064) (xy 128.970212 104.776776) (xy 128.970205 104.776773) (xy 128.746104 104.683947) (xy 128.511785 104.621161) (xy 128.271289 104.5895) (xy 128.271288 104.5895) (xy 128.028712 104.5895) (xy 128.028711 104.5895) (xy 127.788214 104.621161) (xy 127.553895 104.683947) (xy 127.329794 104.776773) (xy 127.329785 104.776777) (xy 127.119706 104.898067) (xy 126.927263 105.045733) (xy 126.927256 105.045739) (xy 126.755739 105.217256) (xy 126.755733 105.217263) (xy 126.608067 105.409706) (xy 126.486777 105.619785) (xy 126.486773 105.619794) (xy 126.393947 105.843895) (xy 126.331161 106.078214) (xy 126.2995 106.318711) - (xy 126.2995 106.561288) (xy 124.5 106.561288) (xy 124.5 95.565758) (xy 129.019311 95.565758) (xy 129.6 96.146446) - (xy 129.600001 96.146446) (xy 130.180687 95.565758) (xy 130.092413 95.511101) (xy 130.092411 95.5111) - (xy 129.902321 95.43746) (xy 129.701928 95.4) (xy 129.498072 95.4) (xy 129.297678 95.43746) (xy 129.107588 95.5111) - (xy 129.107581 95.511104) (xy 129.019312 95.565757) (xy 129.019311 95.565758) (xy 124.5 95.565758) - (xy 124.5 76.41) (xy 130.01 76.41) (xy 131.51 76.41) (xy 131.51 76.91) (xy 130.010001 76.91) (xy 130.010001 77.724197) - (xy 130.0204 77.856332) (xy 130.075377 78.074519) (xy 130.168428 78.279374) (xy 130.168431 78.27938) - (xy 130.296559 78.464323) (xy 130.296569 78.464335) (xy 130.455664 78.62343) (xy 130.455676 78.62344) - (xy 130.640619 78.751568) (xy 130.640625 78.751571) (xy 130.84548 78.844622) (xy 131.063667 78.899599) - (xy 131.19581 78.909999) (xy 131.759999 78.909999) (xy 131.76 78.909998) (xy 131.76 78.093012) (xy 131.817007 78.125925) - (xy 131.944174 78.16) (xy 132.075826 78.16) (xy 132.202993 78.125925) (xy 132.26 78.093012) (xy 132.26 78.909999) - (xy 132.824182 78.909999) (xy 132.824197 78.909998) (xy 132.956332 78.899599) (xy 133.174519 78.844622) - (xy 133.379374 78.751571) (xy 133.37938 78.751568) (xy 133.564323 78.62344) (xy 133.564335 78.62343) - (xy 133.72343 78.464335) (xy 133.72344 78.464323) (xy 133.851568 78.27938) (xy 133.851571 78.279374) - (xy 133.944622 78.074519) (xy 133.999599 77.856332) (xy 134.009999 77.724196) (xy 134.01 77.724184) - (xy 134.01 76.91) (xy 132.51 76.91) (xy 132.51 76.41) (xy 134.009999 76.41) (xy 134.009999 75.595817) - (xy 134.009998 75.595802) (xy 133.999599 75.463667) (xy 133.944622 75.24548) (xy 133.851571 75.040625) - (xy 133.851568 75.040619) (xy 133.72344 74.855676) (xy 133.72343 74.855664) (xy 133.564335 74.696569) - (xy 133.564323 74.696559) (xy 133.37938 74.568431) (xy 133.379374 74.568428) (xy 133.174519 74.475377) - (xy 132.956332 74.4204) (xy 132.824196 74.41) (xy 132.26 74.41) (xy 132.26 75.226988) (xy 132.202993 75.194075) - (xy 132.075826 75.16) (xy 131.944174 75.16) (xy 131.817007 75.194075) (xy 131.76 75.226988) (xy 131.76 74.41) - (xy 131.195817 74.41) (xy 131.195802 74.410001) (xy 131.063667 74.4204) (xy 130.84548 74.475377) - (xy 130.640625 74.568428) (xy 130.640619 74.568431) (xy 130.455676 74.696559) (xy 130.455664 74.696569) - (xy 130.296569 74.855664) (xy 130.296559 74.855676) (xy 130.168431 75.040619) (xy 130.168428 75.040625) - (xy 130.075377 75.24548) (xy 130.0204 75.463667) (xy 130.01 75.595803) (xy 130.01 76.41) (xy 124.5 76.41) + (xy 126.2995 106.561288) (xy 124.5 106.561288) (xy 124.5 67.29) (xy 125.779157 67.29) (xy 125.79035 67.346274) + (xy 125.790351 67.346276) (xy 125.8695 67.537358) (xy 125.869505 67.537368) (xy 125.98441 67.709335) + (xy 125.984413 67.709339) (xy 126.13066 67.855586) (xy 126.130664 67.855589) (xy 126.302631 67.970494) + (xy 126.302641 67.970499) (xy 126.493725 68.049649) (xy 126.493733 68.049651) (xy 126.696579 68.089999) + (xy 126.696583 68.09) (xy 126.85 68.09) (xy 126.85 67.34) (xy 127.35 67.34) (xy 127.35 68.09) (xy 127.503417 68.09) + (xy 127.50342 68.089999) (xy 127.706266 68.049651) (xy 127.706274 68.049649) (xy 127.897358 67.970499) + (xy 127.897368 67.970494) (xy 128.069335 67.855589) (xy 128.069339 67.855586) (xy 128.215586 67.709339) + (xy 128.215589 67.709335) (xy 128.330494 67.537368) (xy 128.330499 67.537358) (xy 128.409648 67.346276) + (xy 128.409649 67.346274) (xy 128.420843 67.29) (xy 129.579157 67.29) (xy 129.59035 67.346274) (xy 129.590351 67.346276) + (xy 129.6695 67.537358) (xy 129.669505 67.537368) (xy 129.78441 67.709335) (xy 129.784413 67.709339) + (xy 129.93066 67.855586) (xy 129.930664 67.855589) (xy 130.102631 67.970494) (xy 130.102641 67.970499) + (xy 130.293725 68.049649) (xy 130.293733 68.049651) (xy 130.496579 68.089999) (xy 130.496583 68.09) + (xy 130.65 68.09) (xy 130.65 67.34) (xy 131.15 67.34) (xy 131.15 68.09) (xy 131.303417 68.09) (xy 131.30342 68.089999) + (xy 131.506266 68.049651) (xy 131.506274 68.049649) (xy 131.697358 67.970499) (xy 131.697368 67.970494) + (xy 131.869335 67.855589) (xy 131.869339 67.855586) (xy 132.015586 67.709339) (xy 132.015589 67.709335) + (xy 132.130494 67.537368) (xy 132.130499 67.537358) (xy 132.209648 67.346276) (xy 132.209649 67.346274) + (xy 132.220843 67.29) (xy 131.366988 67.29) (xy 131.384205 67.28006) (xy 131.44006 67.224205) (xy 131.479556 67.155796) + (xy 131.5 67.079496) (xy 131.5 67.000504) (xy 131.479556 66.924204) (xy 131.44006 66.855795) (xy 131.384205 66.79994) + (xy 131.366988 66.79) (xy 132.220843 66.79) (xy 132.209649 66.733725) (xy 132.209648 66.733723) + (xy 132.130499 66.542641) (xy 132.130494 66.542631) (xy 132.015589 66.370664) (xy 132.015586 66.37066) + (xy 131.930118 66.285192) (xy 131.896633 66.223869) (xy 131.901617 66.154177) (xy 131.930126 66.109821) + (xy 131.935075 66.104872) (xy 132.023019 65.959395) (xy 132.07359 65.797106) (xy 132.08 65.726572) + (xy 132.08 65.72) (xy 131.23 65.72) (xy 131.23 66.289) (xy 131.210315 66.356039) (xy 131.18519 66.377809) + (xy 131.15 66.413) (xy 131.15 66.74) (xy 130.65 66.74) (xy 130.65 66.071) (xy 130.669685 66.003961) + (xy 130.694809 65.98219) (xy 130.73 65.947) (xy 130.73 65.72) (xy 129.880001 65.72) (xy 129.880001 65.726582) + (xy 129.886408 65.797102) (xy 129.886409 65.797107) (xy 129.936981 65.959396) (xy 129.987969 66.043741) + (xy 130.005805 66.111296) (xy 129.984287 66.177769) (xy 129.950746 66.210991) (xy 129.930665 66.224409) + (xy 129.93066 66.224413) (xy 129.784413 66.37066) (xy 129.78441 66.370664) (xy 129.669505 66.542631) + (xy 129.6695 66.542641) (xy 129.590351 66.733723) (xy 129.59035 66.733725) (xy 129.579157 66.79) + (xy 130.433012 66.79) (xy 130.415795 66.79994) (xy 130.35994 66.855795) (xy 130.320444 66.924204) + (xy 130.3 67.000504) (xy 130.3 67.079496) (xy 130.320444 67.155796) (xy 130.35994 67.224205) (xy 130.415795 67.28006) + (xy 130.433012 67.29) (xy 129.579157 67.29) (xy 128.420843 67.29) (xy 127.566988 67.29) (xy 127.584205 67.28006) + (xy 127.64006 67.224205) (xy 127.679556 67.155796) (xy 127.7 67.079496) (xy 127.7 67.000504) (xy 127.679556 66.924204) + (xy 127.64006 66.855795) (xy 127.584205 66.79994) (xy 127.566988 66.79) (xy 128.420843 66.79) (xy 128.409649 66.733725) + (xy 128.409648 66.733723) (xy 128.330499 66.542641) (xy 128.330494 66.542631) (xy 128.215589 66.370664) + (xy 128.215586 66.37066) (xy 128.069339 66.224413) (xy 128.069335 66.22441) (xy 127.897368 66.109505) + (xy 127.897358 66.1095) (xy 127.706274 66.03035) (xy 127.706266 66.030348) (xy 127.50342 65.99) + (xy 127.35 65.99) (xy 127.35 66.74) (xy 126.85 66.74) (xy 126.85 65.99) (xy 126.696579 65.99) (xy 126.493733 66.030348) + (xy 126.493725 66.03035) (xy 126.302641 66.1095) (xy 126.302631 66.109505) (xy 126.130664 66.22441) + (xy 126.13066 66.224413) (xy 125.984413 66.37066) (xy 125.98441 66.370664) (xy 125.869505 66.542631) + (xy 125.8695 66.542641) (xy 125.790351 66.733723) (xy 125.79035 66.733725) (xy 125.779157 66.79) + (xy 126.633012 66.79) (xy 126.615795 66.79994) (xy 126.55994 66.855795) (xy 126.520444 66.924204) + (xy 126.5 67.000504) (xy 126.5 67.079496) (xy 126.520444 67.155796) (xy 126.55994 67.224205) (xy 126.615795 67.28006) + (xy 126.633012 67.29) (xy 125.779157 67.29) (xy 124.5 67.29) (xy 124.5 58.65) (xy 125.779157 58.65) + (xy 125.79035 58.706274) (xy 125.790351 58.706276) (xy 125.8695 58.897358) (xy 125.869505 58.897368) + (xy 125.98441 59.069335) (xy 125.984413 59.069339) (xy 126.13066 59.215586) (xy 126.130664 59.215589) + (xy 126.302631 59.330494) (xy 126.302641 59.330499) (xy 126.493725 59.409649) (xy 126.493733 59.409651) + (xy 126.696579 59.449999) (xy 126.696583 59.45) (xy 126.85 59.45) (xy 126.85 58.7) (xy 127.35 58.7) + (xy 127.35 59.45) (xy 127.503417 59.45) (xy 127.50342 59.449999) (xy 127.706266 59.409651) (xy 127.706274 59.409649) + (xy 127.897358 59.330499) (xy 127.897368 59.330494) (xy 128.069335 59.215589) (xy 128.069339 59.215586) + (xy 128.215586 59.069339) (xy 128.215589 59.069335) (xy 128.330494 58.897368) (xy 128.330499 58.897358) + (xy 128.409648 58.706276) (xy 128.409649 58.706274) (xy 128.420843 58.65) (xy 129.579157 58.65) + (xy 129.59035 58.706274) (xy 129.590351 58.706276) (xy 129.6695 58.897358) (xy 129.669505 58.897368) + (xy 129.78441 59.069335) (xy 129.784413 59.069339) (xy 129.930659 59.215585) (xy 129.950741 59.229003) + (xy 129.995547 59.282615) (xy 130.004256 59.35194) (xy 129.987969 59.396256) (xy 129.936982 59.480599) + (xy 129.93698 59.480603) (xy 129.886409 59.642893) (xy 129.88 59.713427) (xy 129.88 59.72) (xy 130.73 59.72) + (xy 130.73 59.493) (xy 130.711709 59.474709) (xy 130.706961 59.473315) (xy 130.661206 59.420511) + (xy 130.65 59.369) (xy 130.65 58.7) (xy 131.15 58.7) (xy 131.15 59.027) (xy 131.16829 59.04529) + (xy 131.173039 59.046685) (xy 131.218794 59.099489) (xy 131.23 59.151) (xy 131.23 59.72) (xy 132.079999 59.72) + (xy 132.079999 59.713417) (xy 132.073591 59.642897) (xy 132.07359 59.642892) (xy 132.023018 59.480603) + (xy 131.935072 59.335122) (xy 131.930118 59.330168) (xy 131.896633 59.268845) (xy 131.901617 59.199153) + (xy 131.930119 59.154805) (xy 132.015586 59.069339) (xy 132.015589 59.069335) (xy 132.130494 58.897368) + (xy 132.130499 58.897358) (xy 132.209648 58.706276) (xy 132.209649 58.706274) (xy 132.220843 58.65) + (xy 131.366988 58.65) (xy 131.384205 58.64006) (xy 131.44006 58.584205) (xy 131.479556 58.515796) + (xy 131.5 58.439496) (xy 131.5 58.360504) (xy 131.479556 58.284204) (xy 131.44006 58.215795) (xy 131.384205 58.15994) + (xy 131.366988 58.15) (xy 132.220843 58.15) (xy 132.209649 58.093725) (xy 132.209648 58.093723) + (xy 132.130499 57.902641) (xy 132.130494 57.902631) (xy 132.015589 57.730664) (xy 132.015586 57.73066) + (xy 131.869339 57.584413) (xy 131.869335 57.58441) (xy 131.697368 57.469505) (xy 131.697358 57.4695) + (xy 131.506274 57.39035) (xy 131.506266 57.390348) (xy 131.30342 57.35) (xy 131.15 57.35) (xy 131.15 58.1) + (xy 130.65 58.1) (xy 130.65 57.35) (xy 130.496579 57.35) (xy 130.293733 57.390348) (xy 130.293725 57.39035) + (xy 130.102641 57.4695) (xy 130.102631 57.469505) (xy 129.930664 57.58441) (xy 129.93066 57.584413) + (xy 129.784413 57.73066) (xy 129.78441 57.730664) (xy 129.669505 57.902631) (xy 129.6695 57.902641) + (xy 129.590351 58.093723) (xy 129.59035 58.093725) (xy 129.579157 58.15) (xy 130.433012 58.15) (xy 130.415795 58.15994) + (xy 130.35994 58.215795) (xy 130.320444 58.284204) (xy 130.3 58.360504) (xy 130.3 58.439496) (xy 130.320444 58.515796) + (xy 130.35994 58.584205) (xy 130.415795 58.64006) (xy 130.433012 58.65) (xy 129.579157 58.65) (xy 128.420843 58.65) + (xy 127.566988 58.65) (xy 127.584205 58.64006) (xy 127.64006 58.584205) (xy 127.679556 58.515796) + (xy 127.7 58.439496) (xy 127.7 58.360504) (xy 127.679556 58.284204) (xy 127.64006 58.215795) (xy 127.584205 58.15994) + (xy 127.566988 58.15) (xy 128.420843 58.15) (xy 128.409649 58.093725) (xy 128.409648 58.093723) + (xy 128.330499 57.902641) (xy 128.330494 57.902631) (xy 128.215589 57.730664) (xy 128.215586 57.73066) + (xy 128.069339 57.584413) (xy 128.069335 57.58441) (xy 127.897368 57.469505) (xy 127.897358 57.4695) + (xy 127.706274 57.39035) (xy 127.706266 57.390348) (xy 127.50342 57.35) (xy 127.35 57.35) (xy 127.35 58.1) + (xy 126.85 58.1) (xy 126.85 57.35) (xy 126.696579 57.35) (xy 126.493733 57.390348) (xy 126.493725 57.39035) + (xy 126.302641 57.4695) (xy 126.302631 57.469505) (xy 126.130664 57.58441) (xy 126.13066 57.584413) + (xy 125.984413 57.73066) (xy 125.98441 57.730664) (xy 125.869505 57.902631) (xy 125.8695 57.902641) + (xy 125.790351 58.093723) (xy 125.79035 58.093725) (xy 125.779157 58.15) (xy 126.633012 58.15) (xy 126.615795 58.15994) + (xy 126.55994 58.215795) (xy 126.520444 58.284204) (xy 126.5 58.360504) (xy 126.5 58.439496) (xy 126.520444 58.515796) + (xy 126.55994 58.584205) (xy 126.615795 58.64006) (xy 126.633012 58.65) (xy 125.779157 58.65) (xy 124.5 58.65) (xy 124.5 48.571288) (xy 126.2895 48.571288) (xy 126.321161 48.811785) (xy 126.383947 49.046104) (xy 126.476773 49.270205) (xy 126.476776 49.270212) (xy 126.598064 49.480289) (xy 126.598066 49.480292) (xy 126.598067 49.480293) (xy 126.745733 49.672736) (xy 126.745739 49.672743) (xy 126.917256 49.84426) @@ -5408,197 +3907,311 @@ (filled_polygon (layer "F.Cu") (pts - (xy 150.601257 49.020185) (xy 150.621899 49.036819) (xy 152.063181 50.478101) (xy 152.096666 50.539424) - (xy 152.0995 50.565782) (xy 152.0995 51.927228) (xy 152.079815 51.994267) (xy 152.027011 52.040022) - (xy 152.007594 52.047003) (xy 151.936342 52.066095) (xy 151.936335 52.066098) (xy 151.722171 52.165964) - (xy 151.722169 52.165965) (xy 151.5286 52.301503) (xy 151.406673 52.42343) (xy 151.34535 52.456914) - (xy 151.275658 52.45193) (xy 151.219725 52.410058) (xy 151.20281 52.379081) (xy 151.153797 52.247671) - (xy 151.153793 52.247664) (xy 151.067547 52.132455) (xy 151.067544 52.132452) (xy 150.952335 52.046206) - (xy 150.952328 52.046202) (xy 150.817482 51.995908) (xy 150.817483 51.995908) (xy 150.757883 51.989501) - (xy 150.757881 51.9895) (xy 150.757873 51.9895) (xy 150.757864 51.9895) (xy 148.962129 51.9895) - (xy 148.962123 51.989501) (xy 148.902516 51.995908) (xy 148.767671 52.046202) (xy 148.767664 52.046206) - (xy 148.652455 52.132452) (xy 148.652452 52.132455) (xy 148.566206 52.247664) (xy 148.566202 52.247671) - (xy 148.515908 52.382517) (xy 148.509501 52.442116) (xy 148.5095 52.442135) (xy 148.5095 54.23787) - (xy 148.509501 54.237876) (xy 148.515908 54.297483) (xy 148.566202 54.432328) (xy 148.566206 54.432335) - (xy 148.652452 54.547544) (xy 148.652455 54.547547) (xy 148.767664 54.633793) (xy 148.767671 54.633797) - (xy 148.899081 54.68281) (xy 148.955015 54.724681) (xy 148.979432 54.790145) (xy 148.96458 54.858418) - (xy 148.94343 54.886673) (xy 148.821503 55.0086) (xy 148.685965 55.202169) (xy 148.685964 55.202171) - (xy 148.586098 55.416335) (xy 148.586094 55.416344) (xy 148.524938 55.644586) (xy 148.524936 55.644596) - (xy 148.504341 55.879999) (xy 148.504341 55.88) (xy 148.524936 56.115403) (xy 148.524938 56.115413) - (xy 148.586094 56.343655) (xy 148.586096 56.343659) (xy 148.586097 56.343663) (xy 148.59 56.352032) - (xy 148.685965 56.55783) (xy 148.685967 56.557834) (xy 148.794281 56.712521) (xy 148.821501 56.751396) - (xy 148.821506 56.751402) (xy 148.988597 56.918493) (xy 148.988603 56.918498) (xy 149.174158 57.048425) - (xy 149.217783 57.103002) (xy 149.224977 57.1725) (xy 149.193454 57.234855) (xy 149.174158 57.251575) - (xy 148.988597 57.381505) (xy 148.821505 57.548597) (xy 148.685965 57.742169) (xy 148.685964 57.742171) - (xy 148.586098 57.956335) (xy 148.586094 57.956344) (xy 148.524938 58.184586) (xy 148.524936 58.184596) - (xy 148.504341 58.419999) (xy 148.504341 58.42) (xy 148.524936 58.655403) (xy 148.524938 58.655413) - (xy 148.586094 58.883655) (xy 148.586096 58.883659) (xy 148.586097 58.883663) (xy 148.669155 59.061781) - (xy 148.685965 59.09783) (xy 148.685967 59.097834) (xy 148.794281 59.252521) (xy 148.821501 59.291396) - (xy 148.821506 59.291402) (xy 148.988597 59.458493) (xy 148.988603 59.458498) (xy 149.174158 59.588425) - (xy 149.217783 59.643002) (xy 149.224977 59.7125) (xy 149.193454 59.774855) (xy 149.174158 59.791575) - (xy 148.988597 59.921505) (xy 148.821505 60.088597) (xy 148.685965 60.282169) (xy 148.685964 60.282171) - (xy 148.586098 60.496335) (xy 148.586094 60.496344) (xy 148.524938 60.724586) (xy 148.524936 60.724596) - (xy 148.504341 60.959999) (xy 148.504341 60.96) (xy 148.524936 61.195403) (xy 148.524938 61.195413) - (xy 148.586094 61.423655) (xy 148.586096 61.423659) (xy 148.586097 61.423663) (xy 148.59 61.432032) - (xy 148.685965 61.63783) (xy 148.685967 61.637834) (xy 148.794281 61.792521) (xy 148.821501 61.831396) - (xy 148.821506 61.831402) (xy 148.988597 61.998493) (xy 148.988603 61.998498) (xy 149.174594 62.12873) - (xy 149.218219 62.183307) (xy 149.225413 62.252805) (xy 149.19389 62.31516) (xy 149.174595 62.33188) - (xy 148.988922 62.46189) (xy 148.98892 62.461891) (xy 148.821891 62.62892) (xy 148.821886 62.628926) - (xy 148.6864 62.82242) (xy 148.686399 62.822422) (xy 148.58657 63.036507) (xy 148.586567 63.036513) - (xy 148.529364 63.249999) (xy 148.529364 63.25) (xy 149.426988 63.25) (xy 149.394075 63.307007) - (xy 149.36 63.434174) (xy 149.36 63.565826) (xy 149.394075 63.692993) (xy 149.426988 63.75) (xy 148.529364 63.75) - (xy 148.586567 63.963486) (xy 148.58657 63.963492) (xy 148.686399 64.177578) (xy 148.821894 64.371082) - (xy 148.988917 64.538105) (xy 149.174595 64.668119) (xy 149.218219 64.722696) (xy 149.225412 64.792195) - (xy 149.19389 64.854549) (xy 149.174595 64.871269) (xy 148.988594 65.001508) (xy 148.821505 65.168597) - (xy 148.685965 65.362169) (xy 148.685964 65.362171) (xy 148.586098 65.576335) (xy 148.586094 65.576344) - (xy 148.524938 65.804586) (xy 148.524936 65.804596) (xy 148.504341 66.039999) (xy 148.504341 66.04) - (xy 148.524936 66.275403) (xy 148.524938 66.275413) (xy 148.586094 66.503655) (xy 148.586096 66.503659) - (xy 148.586097 66.503663) (xy 148.59 66.512032) (xy 148.685965 66.71783) (xy 148.685967 66.717834) - (xy 148.794281 66.872521) (xy 148.821501 66.911396) (xy 148.821506 66.911402) (xy 148.988597 67.078493) - (xy 148.988603 67.078498) (xy 149.174158 67.208425) (xy 149.217783 67.263002) (xy 149.224977 67.3325) - (xy 149.193454 67.394855) (xy 149.174158 67.411575) (xy 148.988597 67.541505) (xy 148.821505 67.708597) - (xy 148.685965 67.902169) (xy 148.685964 67.902171) (xy 148.586098 68.116335) (xy 148.586094 68.116344) - (xy 148.524938 68.344586) (xy 148.524936 68.344596) (xy 148.504341 68.579999) (xy 148.504341 68.58) - (xy 148.524936 68.815403) (xy 148.524938 68.815413) (xy 148.586094 69.043655) (xy 148.586096 69.043659) - (xy 148.586097 69.043663) (xy 148.59 69.052032) (xy 148.685965 69.25783) (xy 148.685967 69.257834) - (xy 148.794281 69.412521) (xy 148.821501 69.451396) (xy 148.821506 69.451402) (xy 148.988597 69.618493) - (xy 148.988603 69.618498) (xy 149.174158 69.748425) (xy 149.217783 69.803002) (xy 149.224977 69.8725) - (xy 149.193454 69.934855) (xy 149.174158 69.951575) (xy 148.988597 70.081505) (xy 148.821505 70.248597) - (xy 148.685965 70.442169) (xy 148.685964 70.442171) (xy 148.586098 70.656335) (xy 148.586094 70.656344) - (xy 148.524938 70.884586) (xy 148.524936 70.884596) (xy 148.504341 71.119999) (xy 148.504341 71.12) - (xy 148.524936 71.355403) (xy 148.524938 71.355413) (xy 148.586094 71.583655) (xy 148.586096 71.583659) - (xy 148.586097 71.583663) (xy 148.658956 71.739909) (xy 148.685965 71.79783) (xy 148.685967 71.797834) - (xy 148.794281 71.952521) (xy 148.821501 71.991396) (xy 148.821506 71.991402) (xy 148.988597 72.158493) - (xy 148.988603 72.158498) (xy 149.174158 72.288425) (xy 149.217783 72.343002) (xy 149.224977 72.4125) - (xy 149.193454 72.474855) (xy 149.174158 72.491575) (xy 148.988597 72.621505) (xy 148.821505 72.788597) - (xy 148.685965 72.982169) (xy 148.685964 72.982171) (xy 148.586098 73.196335) (xy 148.586094 73.196344) - (xy 148.524938 73.424586) (xy 148.524936 73.424596) (xy 148.504341 73.659999) (xy 148.504341 73.66) - (xy 148.524936 73.895403) (xy 148.524938 73.895413) (xy 148.586094 74.123655) (xy 148.586096 74.123659) - (xy 148.586097 74.123663) (xy 148.62659 74.2105) (xy 148.685965 74.33783) (xy 148.685967 74.337834) - (xy 148.794281 74.492521) (xy 148.821501 74.531396) (xy 148.821506 74.531402) (xy 148.988597 74.698493) - (xy 148.988603 74.698498) (xy 149.174158 74.828425) (xy 149.217783 74.883002) (xy 149.224977 74.9525) - (xy 149.193454 75.014855) (xy 149.174158 75.031575) (xy 148.988597 75.161505) (xy 148.821505 75.328597) - (xy 148.685965 75.522169) (xy 148.685964 75.522171) (xy 148.586098 75.736335) (xy 148.586094 75.736344) - (xy 148.524938 75.964586) (xy 148.524936 75.964596) (xy 148.504341 76.199999) (xy 148.504341 76.2) - (xy 148.524936 76.435403) (xy 148.524938 76.435413) (xy 148.586094 76.663655) (xy 148.586096 76.663659) - (xy 148.586097 76.663663) (xy 148.59 76.672032) (xy 148.685965 76.87783) (xy 148.685967 76.877834) - (xy 148.794281 77.032521) (xy 148.821501 77.071396) (xy 148.821506 77.071402) (xy 148.988597 77.238493) - (xy 148.988603 77.238498) (xy 149.174158 77.368425) (xy 149.217783 77.423002) (xy 149.224977 77.4925) - (xy 149.193454 77.554855) (xy 149.174158 77.571575) (xy 148.988597 77.701505) (xy 148.821505 77.868597) - (xy 148.685965 78.062169) (xy 148.685964 78.062171) (xy 148.586098 78.276335) (xy 148.586094 78.276344) - (xy 148.524938 78.504586) (xy 148.524936 78.504596) (xy 148.504341 78.739999) (xy 148.504341 78.74) - (xy 148.524936 78.975403) (xy 148.524938 78.975413) (xy 148.586094 79.203655) (xy 148.586096 79.203659) - (xy 148.586097 79.203663) (xy 148.59 79.212032) (xy 148.685965 79.41783) (xy 148.685967 79.417834) - (xy 148.794281 79.572521) (xy 148.821501 79.611396) (xy 148.821506 79.611402) (xy 148.988597 79.778493) - (xy 148.988603 79.778498) (xy 149.174158 79.908425) (xy 149.217783 79.963002) (xy 149.224977 80.0325) - (xy 149.193454 80.094855) (xy 149.174158 80.111575) (xy 148.988597 80.241505) (xy 148.821505 80.408597) - (xy 148.685965 80.602169) (xy 148.685964 80.602171) (xy 148.586098 80.816335) (xy 148.586094 80.816344) - (xy 148.524938 81.044586) (xy 148.524936 81.044596) (xy 148.504341 81.279999) (xy 148.504341 81.28) - (xy 148.524936 81.515403) (xy 148.524938 81.515413) (xy 148.586094 81.743655) (xy 148.586096 81.743659) - (xy 148.586097 81.743663) (xy 148.59 81.752032) (xy 148.685965 81.95783) (xy 148.685967 81.957834) - (xy 148.779391 82.091256) (xy 148.821501 82.151396) (xy 148.821506 82.151402) (xy 148.988597 82.318493) - (xy 148.988603 82.318498) (xy 149.174158 82.448425) (xy 149.217783 82.503002) (xy 149.224977 82.5725) - (xy 149.193454 82.634855) (xy 149.174158 82.651575) (xy 148.988597 82.781505) (xy 148.821505 82.948597) - (xy 148.685965 83.142169) (xy 148.685964 83.142171) (xy 148.586098 83.356335) (xy 148.586094 83.356344) - (xy 148.524938 83.584586) (xy 148.524936 83.584596) (xy 148.504341 83.819999) (xy 148.504341 83.82) - (xy 148.524936 84.055403) (xy 148.524938 84.055413) (xy 148.586094 84.283655) (xy 148.586096 84.283659) - (xy 148.586097 84.283663) (xy 148.59 84.292032) (xy 148.685965 84.49783) (xy 148.685967 84.497834) - (xy 148.725063 84.553668) (xy 148.821501 84.691396) (xy 148.821506 84.691402) (xy 148.988597 84.858493) - (xy 148.988603 84.858498) (xy 149.174158 84.988425) (xy 149.217783 85.043002) (xy 149.224977 85.1125) - (xy 149.193454 85.174855) (xy 149.174158 85.191575) (xy 148.988597 85.321505) (xy 148.821505 85.488597) - (xy 148.685965 85.682169) (xy 148.685964 85.682171) (xy 148.586098 85.896335) (xy 148.586094 85.896344) - (xy 148.524938 86.124586) (xy 148.524936 86.124596) (xy 148.504341 86.359999) (xy 148.504341 86.36) - (xy 148.524936 86.595403) (xy 148.524938 86.595413) (xy 148.586094 86.823655) (xy 148.586096 86.823659) - (xy 148.586097 86.823663) (xy 148.59 86.832032) (xy 148.685965 87.03783) (xy 148.685967 87.037834) - (xy 148.794281 87.192521) (xy 148.821501 87.231396) (xy 148.821506 87.231402) (xy 148.988597 87.398493) - (xy 148.988603 87.398498) (xy 149.174158 87.528425) (xy 149.217783 87.583002) (xy 149.224977 87.6525) - (xy 149.193454 87.714855) (xy 149.174158 87.731575) (xy 148.988597 87.861505) (xy 148.821505 88.028597) - (xy 148.685965 88.222169) (xy 148.685964 88.222171) (xy 148.586098 88.436335) (xy 148.586094 88.436344) - (xy 148.524938 88.664586) (xy 148.524936 88.664596) (xy 148.504341 88.899999) (xy 148.504341 88.9) - (xy 148.524936 89.135403) (xy 148.524938 89.135413) (xy 148.586094 89.363655) (xy 148.586096 89.363659) - (xy 148.586097 89.363663) (xy 148.666004 89.535023) (xy 148.685965 89.57783) (xy 148.685967 89.577834) - (xy 148.794281 89.732521) (xy 148.821501 89.771396) (xy 148.821506 89.771402) (xy 148.988597 89.938493) - (xy 148.988603 89.938498) (xy 149.174158 90.068425) (xy 149.217783 90.123002) (xy 149.224977 90.1925) - (xy 149.193454 90.254855) (xy 149.174158 90.271575) (xy 148.988597 90.401505) (xy 148.821505 90.568597) - (xy 148.685965 90.762169) (xy 148.685964 90.762171) (xy 148.586098 90.976335) (xy 148.586094 90.976344) - (xy 148.524938 91.204586) (xy 148.524936 91.204596) (xy 148.504341 91.439999) (xy 148.504341 91.44) - (xy 148.524936 91.675403) (xy 148.524938 91.675413) (xy 148.586094 91.903655) (xy 148.586096 91.903659) - (xy 148.586097 91.903663) (xy 148.663201 92.069013) (xy 148.685965 92.11783) (xy 148.685967 92.117834) - (xy 148.794281 92.272521) (xy 148.821501 92.311396) (xy 148.821506 92.311402) (xy 148.988597 92.478493) - (xy 148.988603 92.478498) (xy 149.174158 92.608425) (xy 149.217783 92.663002) (xy 149.224977 92.7325) - (xy 149.193454 92.794855) (xy 149.174158 92.811575) (xy 148.988597 92.941505) (xy 148.821505 93.108597) - (xy 148.685965 93.302169) (xy 148.685964 93.302171) (xy 148.586098 93.516335) (xy 148.586094 93.516344) - (xy 148.524938 93.744586) (xy 148.524936 93.744596) (xy 148.504341 93.979999) (xy 148.504341 93.98) - (xy 148.524936 94.215403) (xy 148.524938 94.215413) (xy 148.586094 94.443655) (xy 148.586096 94.443659) - (xy 148.586097 94.443663) (xy 148.630047 94.537913) (xy 148.685965 94.65783) (xy 148.685967 94.657834) - (xy 148.738008 94.732155) (xy 148.821501 94.851396) (xy 148.821506 94.851402) (xy 148.988597 95.018493) - (xy 148.988603 95.018498) (xy 149.174158 95.148425) (xy 149.217783 95.203002) (xy 149.224977 95.2725) - (xy 149.193454 95.334855) (xy 149.174158 95.351575) (xy 148.988597 95.481505) (xy 148.986922 95.483181) - (xy 148.986 95.483684) (xy 148.984449 95.484986) (xy 148.984187 95.484674) (xy 148.925599 95.516666) - (xy 148.899241 95.5195) (xy 146.675783 95.5195) (xy 146.608744 95.499815) (xy 146.588102 95.483181) - (xy 140.474209 89.369289) (xy 140.474206 89.369285) (xy 140.474206 89.369286) (xy 140.467139 89.362219) - (xy 140.467139 89.362218) (xy 140.327782 89.222861) (xy 140.327781 89.22286) (xy 140.32778 89.222859) - (xy 140.16392 89.113371) (xy 140.163911 89.113366) (xy 140.080683 89.078892) (xy 140.035165 89.060038) - (xy 140.0085 89.048993) (xy 139.981837 89.037949) (xy 139.981833 89.037948) (xy 139.844605 89.010652) - (xy 139.788543 88.9995) (xy 139.788541 88.9995) (xy 130.765741 88.9995) (xy 130.698702 88.979815) - (xy 130.652947 88.927011) (xy 130.643003 88.857853) (xy 130.646475 88.841566) (xy 130.685902 88.702992) - (xy 130.685903 88.702989) (xy 130.704713 88.5) (xy 130.704713 88.499999) (xy 130.685903 88.29701) - (xy 130.685902 88.297007) (xy 130.630116 88.100936) (xy 130.630113 88.10093) (xy 130.539249 87.918449) - (xy 130.539247 87.918447) (xy 130.537465 87.916087) (xy 129.894855 88.558696) (xy 129.9 88.539496) - (xy 129.9 88.460504) (xy 129.879556 88.384204) (xy 129.84006 88.315795) (xy 129.784205 88.25994) - (xy 129.715796 88.220444) (xy 129.639496 88.2) (xy 129.560504 88.2) (xy 129.484204 88.220444) (xy 129.415795 88.25994) - (xy 129.35994 88.315795) (xy 129.320444 88.384204) (xy 129.3 88.460504) (xy 129.3 88.539496) (xy 129.305145 88.558699) - (xy 128.662533 87.916087) (xy 128.660755 87.918442) (xy 128.660754 87.918443) (xy 128.569886 88.10093) - (xy 128.569883 88.100936) (xy 128.514097 88.297007) (xy 128.514096 88.29701) (xy 128.495287 88.499999) - (xy 128.495287 88.5) (xy 128.514096 88.702989) (xy 128.514097 88.702992) (xy 128.569883 88.899063) - (xy 128.569886 88.899069) (xy 128.660754 89.081556) (xy 128.731212 89.174857) (xy 128.755904 89.240218) - (xy 128.741339 89.308553) (xy 128.731212 89.32431) (xy 128.660328 89.418175) (xy 128.569422 89.600739) - (xy 128.569417 89.600752) (xy 128.513602 89.796917) (xy 128.494785 89.999999) (xy 128.494785 90) - (xy 128.513602 90.203082) (xy 128.569417 90.399247) (xy 128.569422 90.39926) (xy 128.660328 90.581824) - (xy 128.730898 90.675274) (xy 128.75559 90.740635) (xy 128.741025 90.80897) (xy 128.730898 90.824726) - (xy 128.660328 90.918175) (xy 128.569422 91.100739) (xy 128.569417 91.100752) (xy 128.513602 91.296917) - (xy 128.494785 91.499999) (xy 128.494785 91.5) (xy 128.513602 91.703082) (xy 128.569417 91.899247) - (xy 128.569422 91.89926) (xy 128.619699 92.000228) (xy 128.63196 92.069013) (xy 128.605087 92.133508) - (xy 128.547611 92.173236) (xy 128.508699 92.1795) (xy 128.285783 92.1795) (xy 128.218744 92.159815) - (xy 128.198102 92.143181) (xy 128.166819 92.111898) (xy 128.133334 92.050575) (xy 128.1305 92.024217) - (xy 128.1305 87.565758) (xy 129.019311 87.565758) (xy 129.6 88.146446) (xy 129.600001 88.146446) - (xy 130.180687 87.565758) (xy 130.092413 87.511101) (xy 130.092411 87.5111) (xy 129.902321 87.43746) - (xy 129.701928 87.4) (xy 129.498072 87.4) (xy 129.297678 87.43746) (xy 129.107588 87.5111) (xy 129.107581 87.511104) - (xy 129.019312 87.565757) (xy 129.019311 87.565758) (xy 128.1305 87.565758) (xy 128.1305 86.156998) - (xy 128.150185 86.089959) (xy 128.16682 86.069315) (xy 128.199319 86.036817) (xy 128.260643 86.003333) - (xy 128.286999 86.0005) (xy 134.16282 86.0005) (xy 134.229859 86.020185) (xy 134.262085 86.050187) - (xy 134.342454 86.157546) (xy 134.388643 86.192123) (xy 134.457664 86.243793) (xy 134.457671 86.243797) - (xy 134.592517 86.294091) (xy 134.592516 86.294091) (xy 134.599444 86.294835) (xy 134.652127 86.3005) - (xy 136.347872 86.300499) (xy 136.407483 86.294091) (xy 136.542331 86.243796) (xy 136.657546 86.157546) - (xy 136.743796 86.042331) (xy 136.794091 85.907483) (xy 136.8005 85.847873) (xy 136.800499 85.847845) - (xy 136.800678 85.844547) (xy 136.802183 85.844627) (xy 136.820112 85.783326) (xy 136.872868 85.737514) - (xy 136.916465 85.729981) (xy 137.6 85.046446) (xy 137.6 85.052661) (xy 137.627259 85.154394) (xy 137.67992 85.245606) - (xy 137.754394 85.32008) (xy 137.845606 85.372741) (xy 137.947339 85.4) (xy 137.953553 85.4) (xy 137.274526 86.079025) - (xy 137.347513 86.130132) (xy 137.347521 86.130136) (xy 137.553668 86.226264) (xy 137.553682 86.226269) - (xy 137.773389 86.285139) (xy 137.7734 86.285141) (xy 137.999998 86.304966) (xy 138.000002 86.304966) - (xy 138.226599 86.285141) (xy 138.22661 86.285139) (xy 138.446317 86.226269) (xy 138.446331 86.226264) - (xy 138.652478 86.130136) (xy 138.725471 86.079024) (xy 138.046447 85.4) (xy 138.052661 85.4) (xy 138.154394 85.372741) - (xy 138.245606 85.32008) (xy 138.32008 85.245606) (xy 138.372741 85.154394) (xy 138.4 85.052661) - (xy 138.4 85.046447) (xy 139.079024 85.725471) (xy 139.130136 85.652478) (xy 139.226264 85.446331) - (xy 139.226269 85.446317) (xy 139.285139 85.22661) (xy 139.285141 85.226599) (xy 139.304966 85.000002) - (xy 139.304966 84.999997) (xy 139.285141 84.7734) (xy 139.285139 84.773389) (xy 139.226269 84.553682) - (xy 139.226264 84.553668) (xy 139.130136 84.347521) (xy 139.130132 84.347513) (xy 139.079025 84.274526) - (xy 138.4 84.953551) (xy 138.4 84.947339) (xy 138.372741 84.845606) (xy 138.32008 84.754394) (xy 138.245606 84.67992) - (xy 138.154394 84.627259) (xy 138.052661 84.6) (xy 138.046446 84.6) (xy 138.725472 83.920974) (xy 138.652478 83.869863) - (xy 138.446331 83.773735) (xy 138.446314 83.773729) (xy 138.413122 83.764835) (xy 138.353463 83.728469) - (xy 138.322935 83.665622) (xy 138.331231 83.596246) (xy 138.357532 83.557386) (xy 138.647778 83.267141) - (xy 138.647782 83.267139) (xy 138.787139 83.127782) (xy 138.896632 82.963914) (xy 138.902977 82.948597) - (xy 138.972049 82.781839) (xy 138.972051 82.781835) (xy 138.999078 82.645965) (xy 139.0105 82.588543) - (xy 139.0105 79.034499) (xy 139.030185 78.96746) (xy 139.082989 78.921705) (xy 139.1345 78.910499) - (xy 139.807871 78.910499) (xy 139.807872 78.910499) (xy 139.867483 78.904091) (xy 140.002331 78.853796) - (xy 140.117546 78.767546) (xy 140.203796 78.652331) (xy 140.254091 78.517483) (xy 140.2605 78.457873) - (xy 140.260499 74.862128) (xy 140.254091 74.802517) (xy 140.215294 74.698498) (xy 140.203797 74.667671) - (xy 140.203793 74.667664) (xy 140.117547 74.552455) (xy 140.117544 74.552452) (xy 140.002335 74.466206) - (xy 140.002328 74.466202) (xy 139.867482 74.415908) (xy 139.867483 74.415908) (xy 139.807883 74.409501) - (xy 139.807881 74.4095) (xy 139.807873 74.4095) (xy 139.807865 74.4095) (xy 139.1345 74.4095) (xy 139.067461 74.389815) - (xy 139.021706 74.337011) (xy 139.0105 74.2855) (xy 139.0105 54.455782) (xy 139.030185 54.388743) - (xy 139.046819 54.368101) (xy 144.378101 49.036819) (xy 144.439424 49.003334) (xy 144.465782 49.0005) - (xy 150.534218 49.0005) + (xy 151.342539 51.630185) (xy 151.388294 51.682989) (xy 151.3995 51.7345) (xy 151.3995 52.21914) + (xy 151.379815 52.286179) (xy 151.327011 52.331934) (xy 151.257853 52.341878) (xy 151.194297 52.312853) + (xy 151.159318 52.262473) (xy 151.153797 52.247671) (xy 151.153793 52.247664) (xy 151.067547 52.132455) + (xy 151.067544 52.132452) (xy 150.952335 52.046206) (xy 150.952328 52.046202) (xy 150.817482 51.995908) + (xy 150.817483 51.995908) (xy 150.757883 51.989501) (xy 150.757881 51.9895) (xy 150.757873 51.9895) + (xy 150.757864 51.9895) (xy 148.962129 51.9895) (xy 148.962123 51.989501) (xy 148.902516 51.995908) + (xy 148.767671 52.046202) (xy 148.767664 52.046206) (xy 148.652455 52.132452) (xy 148.652452 52.132455) + (xy 148.566206 52.247664) (xy 148.566202 52.247671) (xy 148.515908 52.382517) (xy 148.509501 52.442116) + (xy 148.5095 52.442135) (xy 148.5095 54.23787) (xy 148.509501 54.237876) (xy 148.515908 54.297483) + (xy 148.566202 54.432328) (xy 148.566206 54.432335) (xy 148.652452 54.547544) (xy 148.652455 54.547547) + (xy 148.767664 54.633793) (xy 148.767671 54.633797) (xy 148.899081 54.68281) (xy 148.955015 54.724681) + (xy 148.979432 54.790145) (xy 148.96458 54.858418) (xy 148.94343 54.886673) (xy 148.821503 55.0086) + (xy 148.685965 55.202169) (xy 148.685964 55.202171) (xy 148.586098 55.416335) (xy 148.586094 55.416344) + (xy 148.524938 55.644586) (xy 148.524936 55.644596) (xy 148.504341 55.879999) (xy 148.504341 55.88) + (xy 148.524936 56.115403) (xy 148.524938 56.115413) (xy 148.586094 56.343655) (xy 148.586096 56.343659) + (xy 148.586097 56.343663) (xy 148.59 56.352032) (xy 148.685965 56.55783) (xy 148.685967 56.557834) + (xy 148.794281 56.712521) (xy 148.821501 56.751396) (xy 148.821506 56.751402) (xy 148.988597 56.918493) + (xy 148.988603 56.918498) (xy 149.174158 57.048425) (xy 149.217783 57.103002) (xy 149.224977 57.1725) + (xy 149.193454 57.234855) (xy 149.174158 57.251575) (xy 148.988597 57.381505) (xy 148.821505 57.548597) + (xy 148.685965 57.742169) (xy 148.685964 57.742171) (xy 148.586098 57.956335) (xy 148.586094 57.956344) + (xy 148.524938 58.184586) (xy 148.524936 58.184596) (xy 148.504341 58.419999) (xy 148.504341 58.42) + (xy 148.524936 58.655403) (xy 148.524938 58.655413) (xy 148.586094 58.883655) (xy 148.586096 58.883659) + (xy 148.586097 58.883663) (xy 148.669155 59.061781) (xy 148.685965 59.09783) (xy 148.685967 59.097834) + (xy 148.723195 59.151) (xy 148.821501 59.291396) (xy 148.821506 59.291402) (xy 148.988597 59.458493) + (xy 148.988603 59.458498) (xy 149.174158 59.588425) (xy 149.217783 59.643002) (xy 149.224977 59.7125) + (xy 149.193454 59.774855) (xy 149.174158 59.791575) (xy 148.988597 59.921505) (xy 148.821505 60.088597) + (xy 148.685965 60.282169) (xy 148.685964 60.282171) (xy 148.586098 60.496335) (xy 148.586094 60.496344) + (xy 148.524938 60.724586) (xy 148.524936 60.724596) (xy 148.504341 60.959999) (xy 148.504341 60.96) + (xy 148.524936 61.195403) (xy 148.524938 61.195413) (xy 148.586094 61.423655) (xy 148.586096 61.423659) + (xy 148.586097 61.423663) (xy 148.655014 61.571456) (xy 148.685965 61.63783) (xy 148.685967 61.637834) + (xy 148.794281 61.792521) (xy 148.821501 61.831396) (xy 148.821506 61.831402) (xy 148.988597 61.998493) + (xy 148.988603 61.998498) (xy 149.174594 62.12873) (xy 149.218219 62.183307) (xy 149.225413 62.252805) + (xy 149.19389 62.31516) (xy 149.174595 62.33188) (xy 148.988922 62.46189) (xy 148.98892 62.461891) + (xy 148.821891 62.62892) (xy 148.821886 62.628926) (xy 148.6864 62.82242) (xy 148.686399 62.822422) + (xy 148.58657 63.036507) (xy 148.586567 63.036513) (xy 148.529364 63.249999) (xy 148.529364 63.25) + (xy 149.426988 63.25) (xy 149.394075 63.307007) (xy 149.36 63.434174) (xy 149.36 63.565826) (xy 149.394075 63.692993) + (xy 149.426988 63.75) (xy 148.529364 63.75) (xy 148.586567 63.963486) (xy 148.58657 63.963492) (xy 148.686399 64.177578) + (xy 148.821894 64.371082) (xy 148.988917 64.538105) (xy 149.174595 64.668119) (xy 149.218219 64.722696) + (xy 149.225412 64.792195) (xy 149.19389 64.854549) (xy 149.174595 64.871269) (xy 148.988594 65.001508) + (xy 148.821505 65.168597) (xy 148.685965 65.362169) (xy 148.685964 65.362171) (xy 148.586098 65.576335) + (xy 148.586094 65.576344) (xy 148.524938 65.804586) (xy 148.524936 65.804596) (xy 148.504341 66.039999) + (xy 148.504341 66.04) (xy 148.524936 66.275403) (xy 148.524938 66.275413) (xy 148.586094 66.503655) + (xy 148.586096 66.503659) (xy 148.586097 66.503663) (xy 148.666004 66.675023) (xy 148.685965 66.71783) + (xy 148.685967 66.717834) (xy 148.736499 66.79) (xy 148.821501 66.911396) (xy 148.821506 66.911402) + (xy 148.988597 67.078493) (xy 148.988603 67.078498) (xy 149.174158 67.208425) (xy 149.217783 67.263002) + (xy 149.224977 67.3325) (xy 149.193454 67.394855) (xy 149.174158 67.411575) (xy 148.988597 67.541505) + (xy 148.821505 67.708597) (xy 148.685965 67.902169) (xy 148.685964 67.902171) (xy 148.586098 68.116335) + (xy 148.586094 68.116344) (xy 148.524938 68.344586) (xy 148.524936 68.344596) (xy 148.504341 68.579999) + (xy 148.504341 68.58) (xy 148.524936 68.815403) (xy 148.524938 68.815413) (xy 148.586094 69.043655) + (xy 148.586096 69.043659) (xy 148.586097 69.043663) (xy 148.59 69.052032) (xy 148.685965 69.25783) + (xy 148.685967 69.257834) (xy 148.794281 69.412521) (xy 148.821501 69.451396) (xy 148.821506 69.451402) + (xy 148.988597 69.618493) (xy 148.988603 69.618498) (xy 149.174158 69.748425) (xy 149.217783 69.803002) + (xy 149.224977 69.8725) (xy 149.193454 69.934855) (xy 149.174158 69.951575) (xy 148.988597 70.081505) + (xy 148.821505 70.248597) (xy 148.685965 70.442169) (xy 148.685964 70.442171) (xy 148.586098 70.656335) + (xy 148.586094 70.656344) (xy 148.524938 70.884586) (xy 148.524936 70.884596) (xy 148.504341 71.119999) + (xy 148.504341 71.12) (xy 148.524936 71.355403) (xy 148.524938 71.355413) (xy 148.586094 71.583655) + (xy 148.586096 71.583659) (xy 148.586097 71.583663) (xy 148.59 71.592032) (xy 148.685965 71.79783) + (xy 148.685967 71.797834) (xy 148.794281 71.952521) (xy 148.821501 71.991396) (xy 148.821506 71.991402) + (xy 148.988597 72.158493) (xy 148.988603 72.158498) (xy 149.174158 72.288425) (xy 149.217783 72.343002) + (xy 149.224977 72.4125) (xy 149.193454 72.474855) (xy 149.174158 72.491575) (xy 148.988597 72.621505) + (xy 148.821505 72.788597) (xy 148.685965 72.982169) (xy 148.685964 72.982171) (xy 148.586098 73.196335) + (xy 148.586094 73.196344) (xy 148.524938 73.424586) (xy 148.524936 73.424596) (xy 148.504341 73.659999) + (xy 148.504341 73.66) (xy 148.524936 73.895403) (xy 148.524938 73.895413) (xy 148.586094 74.123655) + (xy 148.586096 74.123659) (xy 148.586097 74.123663) (xy 148.59 74.132032) (xy 148.685965 74.33783) + (xy 148.685967 74.337834) (xy 148.787067 74.482218) (xy 148.821501 74.531396) (xy 148.821506 74.531402) + (xy 148.988597 74.698493) (xy 148.988603 74.698498) (xy 149.174158 74.828425) (xy 149.217783 74.883002) + (xy 149.224977 74.9525) (xy 149.193454 75.014855) (xy 149.174158 75.031575) (xy 148.988597 75.161505) + (xy 148.821505 75.328597) (xy 148.685965 75.522169) (xy 148.685964 75.522171) (xy 148.586098 75.736335) + (xy 148.586094 75.736344) (xy 148.524938 75.964586) (xy 148.524936 75.964596) (xy 148.504341 76.199999) + (xy 148.504341 76.2) (xy 148.524936 76.435403) (xy 148.524938 76.435413) (xy 148.586094 76.663655) + (xy 148.586096 76.663659) (xy 148.586097 76.663663) (xy 148.669155 76.841781) (xy 148.685965 76.87783) + (xy 148.685967 76.877834) (xy 148.794281 77.032521) (xy 148.821501 77.071396) (xy 148.821506 77.071402) + (xy 148.988597 77.238493) (xy 148.988603 77.238498) (xy 149.174158 77.368425) (xy 149.217783 77.423002) + (xy 149.224977 77.4925) (xy 149.193454 77.554855) (xy 149.174158 77.571575) (xy 148.988597 77.701505) + (xy 148.821505 77.868597) (xy 148.685965 78.062169) (xy 148.685964 78.062171) (xy 148.586098 78.276335) + (xy 148.586094 78.276344) (xy 148.524938 78.504586) (xy 148.524936 78.504596) (xy 148.504341 78.739999) + (xy 148.504341 78.74) (xy 148.524936 78.975403) (xy 148.524938 78.975413) (xy 148.586094 79.203655) + (xy 148.586096 79.203659) (xy 148.586097 79.203663) (xy 148.59 79.212032) (xy 148.685965 79.41783) + (xy 148.685967 79.417834) (xy 148.717376 79.46269) (xy 148.821501 79.611396) (xy 148.821506 79.611402) + (xy 148.988597 79.778493) (xy 148.988603 79.778498) (xy 149.174158 79.908425) (xy 149.217783 79.963002) + (xy 149.224977 80.0325) (xy 149.193454 80.094855) (xy 149.174158 80.111575) (xy 148.988597 80.241505) + (xy 148.821505 80.408597) (xy 148.685965 80.602169) (xy 148.685964 80.602171) (xy 148.586098 80.816335) + (xy 148.586094 80.816344) (xy 148.524938 81.044586) (xy 148.524936 81.044596) (xy 148.504341 81.279999) + (xy 148.504341 81.28) (xy 148.524936 81.515403) (xy 148.524938 81.515413) (xy 148.586094 81.743655) + (xy 148.586096 81.743659) (xy 148.586097 81.743663) (xy 148.59 81.752032) (xy 148.685965 81.95783) + (xy 148.685967 81.957834) (xy 148.778362 82.089786) (xy 148.821501 82.151396) (xy 148.821506 82.151402) + (xy 148.988597 82.318493) (xy 148.988603 82.318498) (xy 149.174594 82.44873) (xy 149.218219 82.503307) + (xy 149.225413 82.572805) (xy 149.19389 82.63516) (xy 149.174595 82.65188) (xy 148.988922 82.78189) + (xy 148.98892 82.781891) (xy 148.821891 82.94892) (xy 148.821886 82.948926) (xy 148.6864 83.14242) + (xy 148.686399 83.142422) (xy 148.58657 83.356507) (xy 148.586567 83.356513) (xy 148.529364 83.569999) + (xy 148.529364 83.57) (xy 149.426988 83.57) (xy 149.394075 83.627007) (xy 149.36 83.754174) (xy 149.36 83.885826) + (xy 149.394075 84.012993) (xy 149.426988 84.07) (xy 148.529364 84.07) (xy 148.586567 84.283486) + (xy 148.58657 84.283492) (xy 148.686399 84.497578) (xy 148.821894 84.691082) (xy 148.988917 84.858105) + (xy 149.174595 84.988119) (xy 149.218219 85.042696) (xy 149.225412 85.112195) (xy 149.19389 85.174549) + (xy 149.174595 85.191269) (xy 148.988594 85.321508) (xy 148.821505 85.488597) (xy 148.685965 85.682169) + (xy 148.685964 85.682171) (xy 148.586098 85.896335) (xy 148.586094 85.896344) (xy 148.524938 86.124586) + (xy 148.524936 86.124596) (xy 148.504341 86.359999) (xy 148.504341 86.36) (xy 148.524936 86.595403) + (xy 148.524938 86.595413) (xy 148.586094 86.823655) (xy 148.586096 86.823659) (xy 148.586097 86.823663) + (xy 148.59 86.832032) (xy 148.685965 87.03783) (xy 148.685967 87.037834) (xy 148.794281 87.192521) + (xy 148.821501 87.231396) (xy 148.821506 87.231402) (xy 148.988597 87.398493) (xy 148.988603 87.398498) + (xy 149.174158 87.528425) (xy 149.217783 87.583002) (xy 149.224977 87.6525) (xy 149.193454 87.714855) + (xy 149.174158 87.731575) (xy 148.988597 87.861505) (xy 148.821505 88.028597) (xy 148.685965 88.222169) + (xy 148.685964 88.222171) (xy 148.586098 88.436335) (xy 148.586094 88.436344) (xy 148.524938 88.664586) + (xy 148.524936 88.664596) (xy 148.504341 88.899999) (xy 148.504341 88.9) (xy 148.524936 89.135403) + (xy 148.524938 89.135413) (xy 148.586094 89.363655) (xy 148.586096 89.363659) (xy 148.586097 89.363663) + (xy 148.645599 89.491265) (xy 148.685965 89.57783) (xy 148.685967 89.577834) (xy 148.794281 89.732521) + (xy 148.821501 89.771396) (xy 148.821506 89.771402) (xy 148.988597 89.938493) (xy 148.988603 89.938498) + (xy 149.174158 90.068425) (xy 149.217783 90.123002) (xy 149.224977 90.1925) (xy 149.193454 90.254855) + (xy 149.174158 90.271575) (xy 148.988597 90.401505) (xy 148.821505 90.568597) (xy 148.685965 90.762169) + (xy 148.685964 90.762171) (xy 148.586098 90.976335) (xy 148.586094 90.976344) (xy 148.524938 91.204586) + (xy 148.524936 91.204596) (xy 148.504341 91.439999) (xy 148.504341 91.44) (xy 148.524936 91.675403) + (xy 148.524938 91.675413) (xy 148.586094 91.903655) (xy 148.586096 91.903659) (xy 148.586097 91.903663) + (xy 148.663885 92.07048) (xy 148.685965 92.11783) (xy 148.685967 92.117834) (xy 148.718958 92.164949) + (xy 148.821501 92.311396) (xy 148.821506 92.311402) (xy 148.988597 92.478493) (xy 148.988603 92.478498) + (xy 149.174158 92.608425) (xy 149.217783 92.663002) (xy 149.224977 92.7325) (xy 149.193454 92.794855) + (xy 149.174158 92.811575) (xy 148.988597 92.941505) (xy 148.821505 93.108597) (xy 148.685965 93.302169) + (xy 148.685964 93.302171) (xy 148.586098 93.516335) (xy 148.586094 93.516344) (xy 148.524938 93.744586) + (xy 148.524936 93.744596) (xy 148.504341 93.979999) (xy 148.504341 93.98) (xy 148.506777 94.007844) + (xy 148.49301 94.076344) (xy 148.444395 94.126528) (xy 148.376367 94.142461) (xy 148.310523 94.119086) + (xy 148.295568 94.106333) (xy 143.716819 89.527584) (xy 143.683334 89.466261) (xy 143.6805 89.439903) + (xy 143.6805 85.580945) (xy 143.6805 85.580943) (xy 143.639577 85.428216) (xy 143.577966 85.321501) + (xy 143.560524 85.29129) (xy 143.560521 85.291286) (xy 143.56052 85.291284) (xy 143.448716 85.17948) + (xy 143.448715 85.179479) (xy 143.444385 85.175149) (xy 143.444374 85.175139) (xy 139.11759 80.848355) + (xy 139.117588 80.848352) (xy 138.998717 80.729481) (xy 138.998716 80.72948) (xy 138.911904 80.67936) + (xy 138.911904 80.679359) (xy 138.9119 80.679358) (xy 138.861785 80.650423) (xy 138.709057 80.609499) + (xy 138.550943 80.609499) (xy 138.543347 80.609499) (xy 138.543331 80.6095) (xy 135.790719 80.6095) + (xy 135.72368 80.589815) (xy 135.680235 80.541795) (xy 135.660052 80.502185) (xy 135.660051 80.502184) + (xy 135.535109 80.330213) (xy 135.395931 80.191035) (xy 135.362446 80.129712) (xy 135.36743 80.06002) + (xy 135.409302 80.004087) (xy 135.418516 79.997815) (xy 135.573343 79.902317) (xy 135.697315 79.778345) + (xy 135.789356 79.629124) (xy 135.789358 79.629119) (xy 135.844505 79.462697) (xy 135.844506 79.46269) + (xy 135.854999 79.359986) (xy 135.855 79.359973) (xy 135.855 78.96) (xy 134.784146 78.96) (xy 134.82263 78.893343) + (xy 134.855 78.772535) (xy 134.855 78.647465) (xy 134.82263 78.526657) (xy 134.784146 78.46) (xy 135.854999 78.46) + (xy 135.854999 78.060028) (xy 135.854998 78.060013) (xy 135.844505 77.957302) (xy 135.789358 77.79088) + (xy 135.789356 77.790875) (xy 135.697315 77.641654) (xy 135.573345 77.517684) (xy 135.424124 77.425643) + (xy 135.424119 77.425641) (xy 135.257697 77.370494) (xy 135.25769 77.370493) (xy 135.154986 77.36) + (xy 134.63 77.36) (xy 134.63 78.305854) (xy 134.563343 78.26737) (xy 134.442535 78.235) (xy 134.317465 78.235) + (xy 134.196657 78.26737) (xy 134.13 78.305854) (xy 134.13 77.36) (xy 133.605028 77.36) (xy 133.605012 77.360001) + (xy 133.502302 77.370494) (xy 133.33588 77.425641) (xy 133.335875 77.425643) (xy 133.186654 77.517684) + (xy 133.062684 77.641654) (xy 132.970643 77.790875) (xy 132.970641 77.79088) (xy 132.915494 77.957302) + (xy 132.915493 77.957309) (xy 132.905 78.060013) (xy 132.905 78.46) (xy 133.975854 78.46) (xy 133.93737 78.526657) + (xy 133.905 78.647465) (xy 133.905 78.772535) (xy 133.93737 78.893343) (xy 133.975854 78.96) (xy 132.905001 78.96) + (xy 132.905001 79.359986) (xy 132.915494 79.462697) (xy 132.970641 79.629119) (xy 132.970643 79.629124) + (xy 133.062684 79.778345) (xy 133.186654 79.902315) (xy 133.341484 79.997815) (xy 133.388208 80.049763) + (xy 133.399431 80.118726) (xy 133.371587 80.182808) (xy 133.364069 80.191035) (xy 133.224889 80.330215) + (xy 133.099951 80.502179) (xy 133.003444 80.691585) (xy 132.937753 80.89376) (xy 132.9045 81.103713) + (xy 132.9045 81.316286) (xy 132.937753 81.526239) (xy 133.003444 81.728414) (xy 133.099951 81.91782) + (xy 133.22489 82.089786) (xy 133.375209 82.240105) (xy 133.375214 82.240109) (xy 133.539793 82.359682) + (xy 133.582459 82.415011) (xy 133.588438 82.484625) (xy 133.555833 82.54642) (xy 133.539793 82.560318) + (xy 133.375214 82.67989) (xy 133.375209 82.679894) (xy 133.22489 82.830213) (xy 133.099951 83.002179) + (xy 133.003444 83.191585) (xy 132.937753 83.39376) (xy 132.9045 83.603713) (xy 132.9045 83.816286) + (xy 132.935662 84.013039) (xy 132.937754 84.026243) (xy 132.970494 84.127007) (xy 133.003444 84.228414) + (xy 133.099951 84.41782) (xy 133.22489 84.589786) (xy 133.375213 84.740109) (xy 133.547179 84.865048) + (xy 133.547181 84.865049) (xy 133.547184 84.865051) (xy 133.736588 84.961557) (xy 133.938757 85.027246) + (xy 134.148713 85.0605) (xy 134.148714 85.0605) (xy 134.611286 85.0605) (xy 134.611287 85.0605) + (xy 134.821243 85.027246) (xy 135.023412 84.961557) (xy 135.212816 84.865051) (xy 135.234789 84.849086) + (xy 135.384786 84.740109) (xy 135.384788 84.740106) (xy 135.384792 84.740104) (xy 135.535104 84.589792) + (xy 135.535106 84.589788) (xy 135.535109 84.589786) (xy 135.610433 84.48611) (xy 135.660051 84.417816) + (xy 135.660349 84.41723) (xy 135.680235 84.378205) (xy 135.728209 84.327409) (xy 135.790719 84.3105) + (xy 138.989903 84.3105) (xy 139.056942 84.330185) (xy 139.077584 84.346819) (xy 141.743181 87.012416) + (xy 141.776666 87.073739) (xy 141.7795 87.100097) (xy 141.7795 91.49333) (xy 141.779499 91.493348) + (xy 141.779499 91.659054) (xy 141.779498 91.659054) (xy 141.820423 91.811785) (xy 141.842326 91.849723) + (xy 141.843642 91.852001) (xy 141.886096 91.925534) (xy 141.899479 91.948714) (xy 141.899481 91.948717) + (xy 142.018349 92.067585) (xy 142.018355 92.06759) (xy 148.527233 98.576468) (xy 148.560718 98.637791) + (xy 148.559327 98.696241) (xy 148.524939 98.824583) (xy 148.524936 98.824596) (xy 148.504341 99.059999) + (xy 148.504341 99.06) (xy 148.524936 99.295403) (xy 148.524938 99.295413) (xy 148.586094 99.523655) + (xy 148.586096 99.523659) (xy 148.586097 99.523663) (xy 148.59 99.532032) (xy 148.685965 99.73783) + (xy 148.685967 99.737834) (xy 148.794281 99.892521) (xy 148.821501 99.931396) (xy 148.821506 99.931402) + (xy 148.988597 100.098493) (xy 148.988603 100.098498) (xy 149.174594 100.22873) (xy 149.218219 100.283307) + (xy 149.225413 100.352805) (xy 149.19389 100.41516) (xy 149.174595 100.43188) (xy 148.988922 100.56189) + (xy 148.98892 100.561891) (xy 148.821891 100.72892) (xy 148.821886 100.728926) (xy 148.6864 100.92242) + (xy 148.686399 100.922422) (xy 148.58657 101.136507) (xy 148.586567 101.136513) (xy 148.529364 101.349999) + (xy 148.529364 101.35) (xy 149.426988 101.35) (xy 149.394075 101.407007) (xy 149.36 101.534174) + (xy 149.36 101.665826) (xy 149.394075 101.792993) (xy 149.426988 101.85) (xy 148.529364 101.85) + (xy 148.586567 102.063486) (xy 148.58657 102.063492) (xy 148.686399 102.277578) (xy 148.821894 102.471082) + (xy 148.988917 102.638105) (xy 149.182421 102.7736) (xy 149.396507 102.873429) (xy 149.396516 102.873433) + (xy 149.61 102.930634) (xy 149.61 102.033012) (xy 149.667007 102.065925) (xy 149.794174 102.1) (xy 149.925826 102.1) + (xy 150.052993 102.065925) (xy 150.11 102.033012) (xy 150.11 102.930633) (xy 150.323483 102.873433) + (xy 150.323492 102.873429) (xy 150.537578 102.7736) (xy 150.731082 102.638105) (xy 150.898105 102.471082) + (xy 151.028119 102.285405) (xy 151.082696 102.241781) (xy 151.152195 102.234588) (xy 151.214549 102.26611) + (xy 151.231269 102.285405) (xy 151.361505 102.471401) (xy 151.528599 102.638495) (xy 151.625384 102.706265) + (xy 151.722165 102.774032) (xy 151.722167 102.774033) (xy 151.72217 102.774035) (xy 151.936337 102.873903) + (xy 152.164592 102.935063) (xy 152.352918 102.951539) (xy 152.399999 102.955659) (xy 152.4 102.955659) + (xy 152.400001 102.955659) (xy 152.439234 102.952226) (xy 152.635408 102.935063) (xy 152.863663 102.873903) + (xy 153.07783 102.774035) (xy 153.271401 102.638495) (xy 153.427819 102.482077) (xy 153.489142 102.448592) + (xy 153.558834 102.453576) (xy 153.614767 102.495448) (xy 153.639184 102.560912) (xy 153.6395 102.569758) + (xy 153.6395 103.149902) (xy 153.619815 103.216941) (xy 153.603181 103.237583) (xy 153.397584 103.443181) + (xy 153.336261 103.476666) (xy 153.309903 103.4795) (xy 142.9945 103.4795) (xy 142.927461 103.459815) + (xy 142.881706 103.407011) (xy 142.8705 103.3555) (xy 142.8705 96.630945) (xy 142.8705 96.630943) + (xy 142.829577 96.478216) (xy 142.829577 96.478215) (xy 142.772628 96.379577) (xy 142.75052 96.341284) + (xy 142.638716 96.22948) (xy 142.638715 96.229479) (xy 142.634385 96.225149) (xy 142.634374 96.225139) + (xy 141.86759 95.458355) (xy 141.867588 95.458352) (xy 141.748717 95.339481) (xy 141.748716 95.33948) + (xy 141.661904 95.28936) (xy 141.661904 95.289359) (xy 141.6619 95.289358) (xy 141.611785 95.260423) + (xy 141.459057 95.219499) (xy 141.300943 95.219499) (xy 141.293347 95.219499) (xy 141.293331 95.2195) + (xy 135.832535 95.2195) (xy 135.765496 95.199815) (xy 135.719741 95.147011) (xy 135.709177 95.108102) + (xy 135.708663 95.103071) (xy 135.704999 95.067203) (xy 135.649814 94.900666) (xy 135.557712 94.751344) + (xy 135.433656 94.627288) (xy 135.308413 94.550038) (xy 135.26169 94.498091) (xy 135.250467 94.429129) + (xy 135.278311 94.365046) (xy 135.336379 94.32619) (xy 135.373511 94.3205) (xy 139.568543 94.3205) + (xy 139.652329 94.303833) (xy 139.694223 94.2955) (xy 139.761836 94.282051) (xy 139.819871 94.258012) + (xy 139.819872 94.258012) (xy 139.943907 94.206635) (xy 139.943907 94.206634) (xy 139.943914 94.206632) + (xy 140.107782 94.097139) (xy 140.247139 93.957782) (xy 140.24714 93.95778) (xy 140.254206 93.950714) + (xy 140.254209 93.95071) (xy 140.266214 93.938704) (xy 140.314885 93.908683) (xy 140.451516 93.863408) + (xy 140.59835 93.77284) (xy 140.72034 93.65085) (xy 140.810908 93.504016) (xy 140.865174 93.340253) + (xy 140.8755 93.239177) (xy 140.875499 93.126436) (xy 140.877882 93.102243) (xy 140.878742 93.097923) + (xy 140.9005 92.98854) (xy 140.9005 92.79146) (xy 140.9005 92.791457) (xy 140.877882 92.677752) + (xy 140.875499 92.65356) (xy 140.875499 92.54083) (xy 140.875498 92.540813) (xy 140.865174 92.439747) + (xy 140.810908 92.275984) (xy 140.72034 92.12915) (xy 140.706017 92.114827) (xy 140.672532 92.053504) + (xy 140.677516 91.983812) (xy 140.706021 91.93946) (xy 140.719947 91.925535) (xy 140.810448 91.778811) + (xy 140.810453 91.7788) (xy 140.86468 91.615152) (xy 140.874999 91.514154) (xy 140.875 91.514141) + (xy 140.875 91.415) (xy 138.925001 91.415) (xy 138.925001 91.514154) (xy 138.935319 91.615152) (xy 138.989546 91.7788) + (xy 138.989551 91.778811) (xy 139.080052 91.925534) (xy 139.080055 91.925538) (xy 139.093982 91.939465) + (xy 139.127467 92.000788) (xy 139.122483 92.07048) (xy 139.093984 92.114825) (xy 139.079661 92.129148) + (xy 138.998583 92.260597) (xy 138.946635 92.307321) (xy 138.893044 92.3195) (xy 135.3252 92.3195) + (xy 135.258161 92.299815) (xy 135.245633 92.290506) (xy 135.079781 92.170008) (xy 135.037115 92.114678) + (xy 135.031136 92.045065) (xy 135.063741 91.98327) (xy 135.079781 91.969371) (xy 135.244466 91.849721) + (xy 135.394723 91.699464) (xy 135.394727 91.699459) (xy 135.51962 91.527557) (xy 135.616095 91.338217) + (xy 135.681757 91.136129) (xy 135.681757 91.136126) (xy 135.692231 91.07) (xy 134.644146 91.07) + (xy 134.68263 91.003343) (xy 134.706301 90.915) (xy 138.925 90.915) (xy 139.65 90.915) (xy 139.65 90.1275) + (xy 140.15 90.1275) (xy 140.15 90.915) (xy 140.874999 90.915) (xy 140.874999 90.81586) (xy 140.874998 90.815845) + (xy 140.86468 90.714847) (xy 140.810453 90.551199) (xy 140.810448 90.551188) (xy 140.719947 90.404465) + (xy 140.719944 90.404461) (xy 140.598038 90.282555) (xy 140.598034 90.282552) (xy 140.451311 90.192051) + (xy 140.4513 90.192046) (xy 140.287652 90.137819) (xy 140.186654 90.1275) (xy 140.15 90.1275) (xy 139.65 90.1275) + (xy 139.613361 90.1275) (xy 139.613343 90.127501) (xy 139.512347 90.137819) (xy 139.348699 90.192046) + (xy 139.348688 90.192051) (xy 139.201965 90.282552) (xy 139.201961 90.282555) (xy 139.080055 90.404461) + (xy 139.080052 90.404465) (xy 138.989551 90.551188) (xy 138.989546 90.551199) (xy 138.935319 90.714847) + (xy 138.925 90.815845) (xy 138.925 90.915) (xy 134.706301 90.915) (xy 134.715 90.882535) (xy 134.715 90.757465) + (xy 134.68263 90.636657) (xy 134.644146 90.57) (xy 135.692231 90.57) (xy 135.681757 90.503873) (xy 135.681757 90.50387) + (xy 135.616095 90.301782) (xy 135.51962 90.112442) (xy 135.394727 89.94054) (xy 135.394723 89.940535) + (xy 135.244464 89.790276) (xy 135.244459 89.790272) (xy 135.072557 89.665379) (xy 134.883217 89.568904) + (xy 134.681128 89.503242) (xy 134.49 89.472969) (xy 134.49 90.415854) (xy 134.423343 90.37737) (xy 134.302535 90.345) + (xy 134.177465 90.345) (xy 134.056657 90.37737) (xy 133.99 90.415854) (xy 133.99 89.472969) (xy 133.798872 89.503242) + (xy 133.798869 89.503242) (xy 133.596782 89.568904) (xy 133.407442 89.665379) (xy 133.23554 89.790272) + (xy 133.235535 89.790276) (xy 133.085276 89.940535) (xy 133.085272 89.94054) (xy 132.960379 90.112442) + (xy 132.863904 90.301782) (xy 132.798242 90.50387) (xy 132.798242 90.503873) (xy 132.787769 90.57) + (xy 133.835854 90.57) (xy 133.79737 90.636657) (xy 133.765 90.757465) (xy 133.765 90.882535) (xy 133.79737 91.003343) + (xy 133.835854 91.07) (xy 132.787769 91.07) (xy 132.798242 91.136126) (xy 132.798242 91.136129) + (xy 132.863904 91.338217) (xy 132.960379 91.527557) (xy 133.085272 91.699459) (xy 133.085276 91.699464) + (xy 133.235535 91.849723) (xy 133.23554 91.849727) (xy 133.400218 91.969372) (xy 133.442884 92.024701) + (xy 133.448863 92.094315) (xy 133.416258 92.15611) (xy 133.400218 92.170008) (xy 133.231266 92.292759) + (xy 133.230635 92.291891) (xy 133.171581 92.318359) (xy 133.1548 92.3195) (xy 132.815782 92.3195) + (xy 132.748743 92.299815) (xy 132.728101 92.283181) (xy 131.316819 90.871899) (xy 131.283334 90.810576) + (xy 131.2805 90.784218) (xy 131.2805 75.585781) (xy 131.300185 75.518742) (xy 131.316814 75.498105) + (xy 136.372778 70.442141) (xy 136.372782 70.442139) (xy 136.512139 70.302782) (xy 136.621632 70.138914) + (xy 136.697051 69.956835) (xy 136.709632 69.893582) (xy 136.7355 69.763543) (xy 136.7355 67.305491) + (xy 136.755185 67.238452) (xy 136.807989 67.192697) (xy 136.877147 67.182753) (xy 136.898504 67.187785) + (xy 137.009848 67.22468) (xy 137.110851 67.234999) (xy 137.21 67.234998) (xy 137.21 66.51) (xy 137.71 66.51) + (xy 137.71 67.234999) (xy 137.80914 67.234999) (xy 137.809154 67.234998) (xy 137.910152 67.22468) + (xy 138.0738 67.170453) (xy 138.073811 67.170448) (xy 138.220534 67.079947) (xy 138.220538 67.079944) + (xy 138.342444 66.958038) (xy 138.342447 66.958034) (xy 138.432948 66.811311) (xy 138.432953 66.8113) + (xy 138.48718 66.647652) (xy 138.497499 66.546654) (xy 138.4975 66.546641) (xy 138.4975 66.51) (xy 137.71 66.51) + (xy 137.21 66.51) (xy 137.21 65.285) (xy 137.71 65.285) (xy 137.71 66.01) (xy 138.497499 66.01) + (xy 138.497499 65.97336) (xy 138.497498 65.973345) (xy 138.48718 65.872347) (xy 138.432953 65.708699) + (xy 138.432948 65.708688) (xy 138.342447 65.561965) (xy 138.342444 65.561961) (xy 138.220538 65.440055) + (xy 138.220534 65.440052) (xy 138.073811 65.349551) (xy 138.0738 65.349546) (xy 137.910152 65.295319) + (xy 137.809154 65.285) (xy 137.71 65.285) (xy 137.21 65.285) (xy 137.21 65.284999) (xy 137.11086 65.285) + (xy 137.110844 65.285001) (xy 137.009847 65.295319) (xy 136.846199 65.349546) (xy 136.846188 65.349551) + (xy 136.699465 65.440052) (xy 136.685532 65.453985) (xy 136.624208 65.487468) (xy 136.554516 65.482482) + (xy 136.510172 65.453982) (xy 136.495851 65.439661) (xy 136.49585 65.43966) (xy 136.388513 65.373454) + (xy 136.349018 65.349093) (xy 136.349013 65.349091) (xy 136.347569 65.348612) (xy 136.185253 65.294826) + (xy 136.185251 65.294825) (xy 136.084184 65.2845) (xy 136.084177 65.2845) (xy 135.971434 65.2845) + (xy 135.947243 65.282117) (xy 135.909551 65.274619) (xy 135.833543 65.2595) (xy 135.833541 65.2595) + (xy 135.545783 65.2595) (xy 135.478744 65.239815) (xy 135.458102 65.223181) (xy 135.332101 65.09718) + (xy 135.298616 65.035857) (xy 135.3036 64.966165) (xy 135.345472 64.910232) (xy 135.410936 64.885815) + (xy 135.419757 64.885499) (xy 135.936676 64.885499) (xy 135.936684 64.885498) (xy 135.936687 64.885498) + (xy 135.99203 64.879844) (xy 136.037753 64.875174) (xy 136.201516 64.820908) (xy 136.34835 64.73034) + (xy 136.462675 64.616014) (xy 136.523994 64.582532) (xy 136.593686 64.587516) (xy 136.638034 64.616017) + (xy 136.751961 64.729944) (xy 136.751965 64.729947) (xy 136.898688 64.820448) (xy 136.898699 64.820453) + (xy 137.062347 64.87468) (xy 137.163351 64.884999) (xy 137.212499 64.884998) (xy 137.2125 64.884998) + (xy 137.2125 64.16) (xy 137.7125 64.16) (xy 137.7125 64.884999) (xy 137.76164 64.884999) (xy 137.761654 64.884998) + (xy 137.862652 64.87468) (xy 138.0263 64.820453) (xy 138.026311 64.820448) (xy 138.173034 64.729947) + (xy 138.173038 64.729944) (xy 138.294944 64.608038) (xy 138.294947 64.608034) (xy 138.385448 64.461311) + (xy 138.385453 64.4613) (xy 138.43968 64.297652) (xy 138.449999 64.196654) (xy 138.45 64.196641) + (xy 138.45 64.16) (xy 137.7125 64.16) (xy 137.2125 64.16) (xy 137.2125 62.935) (xy 137.7125 62.935) + (xy 137.7125 63.66) (xy 138.449999 63.66) (xy 138.449999 63.62336) (xy 138.449998 63.623345) (xy 138.43968 63.522347) + (xy 138.385453 63.358699) (xy 138.385448 63.358688) (xy 138.294947 63.211965) (xy 138.294944 63.211961) + (xy 138.173038 63.090055) (xy 138.173034 63.090052) (xy 138.026311 62.999551) (xy 138.0263 62.999546) + (xy 137.862652 62.945319) (xy 137.761654 62.935) (xy 137.7125 62.935) (xy 137.2125 62.935) (xy 137.212499 62.934999) + (xy 137.163361 62.935) (xy 137.163343 62.935001) (xy 137.062347 62.945319) (xy 136.898699 62.999546) + (xy 136.898688 62.999551) (xy 136.751965 63.090052) (xy 136.638034 63.203983) (xy 136.576711 63.237467) + (xy 136.507019 63.232483) (xy 136.462672 63.203982) (xy 136.348351 63.089661) (xy 136.34835 63.08966) + (xy 136.202988 63) (xy 136.201518 62.999093) (xy 136.201513 62.999091) (xy 136.200069 62.998612) + (xy 136.037753 62.944826) (xy 136.037751 62.944825) (xy 135.936684 62.9345) (xy 135.936677 62.9345) + (xy 135.562597 62.9345) (xy 135.495558 62.914815) (xy 135.474916 62.898181) (xy 135.467961 62.891226) + (xy 135.434476 62.829903) (xy 135.43946 62.760211) (xy 135.480166 62.705161) (xy 135.48544 62.701115) + (xy 135.550612 62.675928) (xy 135.560916 62.675499) (xy 135.93667 62.675499) (xy 135.936676 62.675499) + (xy 136.037753 62.665174) (xy 136.201516 62.610908) (xy 136.34835 62.52034) (xy 136.462675 62.406014) + (xy 136.523994 62.372532) (xy 136.593686 62.377516) (xy 136.638034 62.406017) (xy 136.751961 62.519944) + (xy 136.751965 62.519947) (xy 136.898688 62.610448) (xy 136.898699 62.610453) (xy 137.062347 62.66468) + (xy 137.163351 62.674999) (xy 137.212499 62.674998) (xy 137.2125 62.674998) (xy 137.2125 61.95) + (xy 137.7125 61.95) (xy 137.7125 62.674999) (xy 137.76164 62.674999) (xy 137.761654 62.674998) (xy 137.862652 62.66468) + (xy 138.0263 62.610453) (xy 138.026311 62.610448) (xy 138.173034 62.519947) (xy 138.173038 62.519944) + (xy 138.294944 62.398038) (xy 138.294947 62.398034) (xy 138.385448 62.251311) (xy 138.385453 62.2513) + (xy 138.43968 62.087652) (xy 138.449999 61.986654) (xy 138.45 61.986641) (xy 138.45 61.95) (xy 137.7125 61.95) + (xy 137.2125 61.95) (xy 137.2125 60.725) (xy 137.7125 60.725) (xy 137.7125 61.45) (xy 138.449999 61.45) + (xy 138.449999 61.41336) (xy 138.449998 61.413345) (xy 138.43968 61.312347) (xy 138.385453 61.148699) + (xy 138.385448 61.148688) (xy 138.294947 61.001965) (xy 138.294944 61.001961) (xy 138.173038 60.880055) + (xy 138.173034 60.880052) (xy 138.026311 60.789551) (xy 138.0263 60.789546) (xy 137.862652 60.735319) + (xy 137.761654 60.725) (xy 137.7125 60.725) (xy 137.2125 60.725) (xy 137.212499 60.724999) (xy 137.163361 60.725) + (xy 137.163343 60.725001) (xy 137.062347 60.735319) (xy 136.898699 60.789546) (xy 136.898688 60.789551) + (xy 136.751965 60.880052) (xy 136.638034 60.993983) (xy 136.576711 61.027467) (xy 136.507019 61.022483) + (xy 136.462672 60.993982) (xy 136.348351 60.879661) (xy 136.34835 60.87966) (xy 136.257129 60.823395) + (xy 136.201518 60.789093) (xy 136.201513 60.789091) (xy 136.200069 60.788612) (xy 136.037753 60.734826) + (xy 136.037751 60.734825) (xy 135.936684 60.7245) (xy 135.936677 60.7245) (xy 135.689781 60.7245) + (xy 135.622742 60.704815) (xy 135.576987 60.652011) (xy 135.567043 60.582853) (xy 135.596068 60.519297) + (xy 135.6021 60.512819) (xy 139.999507 56.115413) (xy 144.468101 51.646819) (xy 144.529424 51.613334) + (xy 144.555782 51.6105) (xy 151.2755 51.6105) ) ) ) diff --git a/hardware/kicad/Koken-KeyBox.kicad_pro b/hardware/kicad/Koken-KeyBox.kicad_pro index 7e21b40..648f8d1 100644 --- a/hardware/kicad/Koken-KeyBox.kicad_pro +++ b/hardware/kicad/Koken-KeyBox.kicad_pro @@ -115,7 +115,7 @@ }, "rules": { "max_error": 0.005, - "min_clearance": 0.5, + "min_clearance": 0.2, "min_connection": 0.0, "min_copper_edge_clearance": 0.0, "min_hole_clearance": 0.25, @@ -178,6 +178,7 @@ ], "track_widths": [ 0.0, + 0.2, 1.0 ], "tuning_pattern_settings": { diff --git a/hardware/kicad/Koken-KeyBox.kicad_sch b/hardware/kicad/Koken-KeyBox.kicad_sch index 2ab92a9..639dac4 100644 --- a/hardware/kicad/Koken-KeyBox.kicad_sch +++ b/hardware/kicad/Koken-KeyBox.kicad_sch @@ -206,7 +206,7 @@ ) ) ) - (symbol "Connector:Jack-DC" + (symbol "Connector:USB_C_Receptacle_PowerOnly_6P" (pin_names (offset 1.016) ) @@ -214,23 +214,25 @@ (in_bom yes) (on_board yes) (property "Reference" "J" - (at 0 5.334 0) + (at 0 16.51 0) (effects (font (size 1.27 1.27) ) + (justify bottom) ) ) - (property "Value" "Jack-DC" - (at 0 -5.08 0) + (property "Value" "USB_C_Receptacle_PowerOnly_6P" + (at 0 13.97 0) (effects (font (size 1.27 1.27) ) + (justify bottom) ) ) (property "Footprint" "" - (at 1.27 -1.016 0) + (at 3.81 2.54 0) (effects (font (size 1.27 1.27) @@ -238,8 +240,8 @@ (hide yes) ) ) - (property "Datasheet" "~" - (at 1.27 -1.016 0) + (property "Datasheet" "https://www.usb.org/sites/default/files/documents/usb_type-c.zip" + (at 0 0 0) (effects (font (size 1.27 1.27) @@ -247,7 +249,7 @@ (hide yes) ) ) - (property "Description" "DC Barrel Jack" + (property "Description" "USB Power-Only 6P Type-C Receptacle connector" (at 0 0 0) (effects (font @@ -256,7 +258,7 @@ (hide yes) ) ) - (property "ki_keywords" "DC power barrel jack connector" + (property "ki_keywords" "usb universal serial bus type-C power-only charging-only 6P 6C" (at 0 0 0) (effects (font @@ -265,7 +267,7 @@ (hide yes) ) ) - (property "ki_fp_filters" "BarrelJack*" + (property "ki_fp_filters" "USB*C*Receptacle*" (at 0 0 0) (effects (font @@ -274,10 +276,56 @@ (hide yes) ) ) - (symbol "Jack-DC_0_1" + (symbol "USB_C_Receptacle_PowerOnly_6P_0_0" + (rectangle + (start -0.254 -12.7) + (end 0.254 -11.684) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 10.16 -7.366) + (end 9.144 -7.874) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 10.16 -4.826) + (end 9.144 -5.334) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) (rectangle - (start -5.08 3.81) - (end 5.08 -3.81) + (start 10.16 7.874) + (end 9.144 7.366) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "USB_C_Receptacle_PowerOnly_6P_0_1" + (rectangle + (start -10.16 12.7) + (end 10.16 -12.7) (stroke (width 0.254) (type default) @@ -287,9 +335,21 @@ ) ) (arc - (start -3.302 3.175) - (mid -3.9343 2.54) - (end -3.302 1.905) + (start -8.89 -1.27) + (mid -6.985 -3.1667) + (end -5.08 -1.27) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -7.62 -1.27) + (mid -6.985 -1.9023) + (end -6.35 -1.27) (stroke (width 0.254) (type default) @@ -299,9 +359,9 @@ ) ) (arc - (start -3.302 3.175) - (mid -3.9343 2.54) - (end -3.302 1.905) + (start -7.62 -1.27) + (mid -6.985 -1.9023) + (end -6.35 -1.27) (stroke (width 0.254) (type default) @@ -310,12 +370,81 @@ (type outline) ) ) + (rectangle + (start -7.62 -1.27) + (end -6.35 6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (arc + (start -6.35 6.35) + (mid -6.985 6.9823) + (end -7.62 6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start -6.35 6.35) + (mid -6.985 6.9823) + (end -7.62 6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (arc + (start -5.08 6.35) + (mid -6.985 8.2467) + (end -8.89 6.35) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center -2.54 3.683) + (radius 0.635) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (circle + (center 0 -3.302) + (radius 1.27) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) (polyline (pts - (xy 5.08 2.54) (xy 3.81 2.54) + (xy -8.89 -1.27) (xy -8.89 6.35) ) (stroke - (width 0.254) + (width 0.508) (type default) ) (fill @@ -324,19 +453,67 @@ ) (polyline (pts - (xy -3.81 -2.54) (xy -2.54 -2.54) (xy -1.27 -1.27) (xy 0 -2.54) (xy 2.54 -2.54) (xy 5.08 -2.54) + (xy -5.08 6.35) (xy -5.08 -1.27) ) (stroke - (width 0.254) + (width 0.508) (type default) ) (fill (type none) ) ) + (polyline + (pts + (xy 0 -3.302) (xy 0 6.858) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -0.762) (xy -2.54 1.778) (xy -2.54 3.048) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 0.508) (xy 2.54 3.048) (xy 2.54 4.318) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 6.858) (xy 0 9.398) (xy 1.27 6.858) (xy -1.27 6.858) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) (rectangle - (start 3.683 3.175) - (end -3.302 1.905) + (start 1.905 4.318) + (end 3.175 5.588) (stroke (width 0.254) (type default) @@ -346,18 +523,36 @@ ) ) ) - (symbol "Jack-DC_1_1" + (symbol "USB_C_Receptacle_PowerOnly_6P_1_1" (pin passive line - (at 7.62 2.54 180) - (length 2.54) - (name "~" + (at 0 -17.78 90) + (length 5.08) + (name "GND" (effects (font (size 1.27 1.27) ) ) ) - (number "1" + (number "A12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 -5.08 180) + (length 5.08) + (name "CC1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "A5" (effects (font (size 1.27 1.27) @@ -366,16 +561,88 @@ ) ) (pin passive line - (at 7.62 -2.54 180) - (length 2.54) - (name "~" + (at 15.24 7.62 180) + (length 5.08) + (name "VBUS" (effects (font (size 1.27 1.27) ) ) ) - (number "2" + (number "A9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -17.78 90) + (length 5.08) hide + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "B12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 -7.62 180) + (length 5.08) + (name "CC2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "B5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 15.24 7.62 180) + (length 5.08) hide + (name "VBUS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "B9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -7.62 -17.78 90) + (length 5.08) + (name "SHIELD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "S1" (effects (font (size 1.27 1.27) @@ -521,6 +788,127 @@ ) ) ) + (symbol "Device:R" + (pin_numbers hide) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "R" + (at 2.032 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "R" + (at 0 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at -1.778 0 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Resistor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "R res resistor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "R_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "R_0_1" + (rectangle + (start -1.016 -2.54) + (end 1.016 2.54) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "R_1_1" + (pin passive line + (at 0 3.81 270) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -3.81 90) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) (symbol "Mechanical:MountingHole" (pin_names (offset 1.016) @@ -1576,22 +1964,34 @@ ) ) (junction - (at 120.65 50.8) + (at 119.38 83.82) (diameter 0) (color 0 0 0 0) - (uuid "0204e082-97d1-453e-bf78-6e5613137762") + (uuid "1e959861-49d0-4f8d-9667-96d726e54059") ) (junction - (at 120.65 58.42) + (at 152.4 77.47) (diameter 0) (color 0 0 0 0) - (uuid "0353dce8-09cb-439c-abb3-1e89cfdccf2c") + (uuid "4f6a8459-4a7f-47dd-90fd-a5b4e3b4fdf6") ) (junction - (at 119.38 83.82) + (at 176.53 77.47) (diameter 0) (color 0 0 0 0) - (uuid "1e959861-49d0-4f8d-9667-96d726e54059") + (uuid "7d74957d-54e9-4619-8de0-3a051feb1ec5") + ) + (junction + (at 184.15 77.47) + (diameter 0) + (color 0 0 0 0) + (uuid "a0f907b0-5e69-4a98-bd38-9f7635dabe2c") + ) + (junction + (at 167.64 77.47) + (diameter 0) + (color 0 0 0 0) + (uuid "a2d9d67e-42a2-4a59-9550-17295cfa08e7") ) (junction (at 119.38 76.2) @@ -1599,9 +1999,55 @@ (color 0 0 0 0) (uuid "b35566e0-f75b-450a-a0c6-40d3fb9e247d") ) + (junction + (at 184.15 48.26) + (diameter 0) + (color 0 0 0 0) + (uuid "bd32a00f-16e7-4a16-9822-e2b91fe6ede8") + ) + (wire + (pts + (xy 176.53 77.47) (xy 184.15 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "079c3a80-4608-420f-9f52-741b32ce617a") + ) (wire (pts - (xy 118.11 50.8) (xy 120.65 50.8) + (xy 184.15 77.47) (xy 184.15 67.31) + ) + (stroke + (width 0) + (type default) + ) + (uuid "2d138cca-0f8e-4418-b659-2e9d612baf53") + ) + (wire + (pts + (xy 167.64 73.66) (xy 167.64 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3a200db6-523e-47c6-85d7-f7d60f7be845") + ) + (wire + (pts + (xy 167.64 63.5) (xy 167.64 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "44323767-9b42-4d41-886d-224b32234357") + ) + (wire + (pts + (xy 187.96 77.47) (xy 184.15 77.47) ) (stroke (width 0) @@ -1609,6 +2055,26 @@ ) (uuid "54bdcd9c-3cc6-4408-8e9a-d4641c7ac91c") ) + (wire + (pts + (xy 184.15 48.26) (xy 184.15 59.69) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6de0048f-32b0-4f5c-b7ba-bce50dd9e06b") + ) + (wire + (pts + (xy 176.53 73.66) (xy 176.53 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6ee0ee55-ff79-4634-9688-81aff9ee6c1a") + ) (wire (pts (xy 116.84 83.82) (xy 119.38 83.82) @@ -1619,6 +2085,36 @@ ) (uuid "71d0cab2-0b64-495b-9b1f-a9eec011dd95") ) + (wire + (pts + (xy 167.64 60.96) (xy 176.53 60.96) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7500d410-9f8d-4714-a839-0f45ffc7cca1") + ) + (wire + (pts + (xy 152.4 77.47) (xy 152.4 73.66) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7956db0e-44f3-4fbe-a216-41bc9d218606") + ) + (wire + (pts + (xy 176.53 60.96) (xy 176.53 66.04) + ) + (stroke + (width 0) + (type default) + ) + (uuid "84c0261e-005c-4a1b-a82f-58886f630e35") + ) (wire (pts (xy 119.38 83.82) (xy 124.46 83.82) @@ -1631,13 +2127,13 @@ ) (wire (pts - (xy 120.65 58.42) (xy 123.19 58.42) + (xy 167.64 77.47) (xy 176.53 77.47) ) (stroke (width 0) (type default) ) - (uuid "91ac7a5a-2d19-40fe-bc8f-c4e1064bdd89") + (uuid "92f66932-b3a4-4db5-9107-fd5d12bcfa4a") ) (wire (pts @@ -1661,13 +2157,23 @@ ) (wire (pts - (xy 120.65 50.8) (xy 123.19 50.8) + (xy 152.4 77.47) (xy 144.78 77.47) ) (stroke (width 0) (type default) ) - (uuid "b4ffca00-3f37-488a-bc75-4be5ead4b0ff") + (uuid "a8cf8f29-19fe-416d-bde3-ac7a1cccc9f9") + ) + (wire + (pts + (xy 167.64 48.26) (xy 184.15 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bf4c72f6-485e-4d9f-bc18-1af138e447e0") ) (wire (pts @@ -1681,23 +2187,33 @@ ) (wire (pts - (xy 118.11 58.42) (xy 120.65 58.42) + (xy 184.15 48.26) (xy 186.69 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ef119244-9c55-4378-8c5f-7bc68deeaf34") + ) + (wire + (pts + (xy 152.4 77.47) (xy 167.64 77.47) ) (stroke (width 0) (type default) ) - (uuid "e603ed91-ac72-4a59-a620-662a6cf8a8c3") + (uuid "f04a80a7-669f-4a40-b5dd-3fd6cc35a43d") ) (wire (pts - (xy 123.19 58.42) (xy 123.19 55.88) + (xy 144.78 77.47) (xy 144.78 73.66) ) (stroke (width 0) (type default) ) - (uuid "e779592b-ab3b-4d25-802c-04642450c85b") + (uuid "f5bb0b61-502f-4793-ad61-caef0520c25e") ) (global_label "LED_Failure" (shape input) @@ -1804,32 +2320,99 @@ (font (size 1.27 1.27) ) - (justify right) + (justify right) + (hide yes) + ) + ) + ) + (global_label "LED_Failure" + (shape input) + (at 124.46 92.71 180) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + (uuid "fac1890f-098f-455e-8b50-48f439f3cbe4") + (property "Intersheetrefs" "${INTERSHEET_REFS}" + (at 110.5287 92.71 0) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + (hide yes) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 78.74 95.25 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "0c37debe-72c8-48b2-8d39-8c0001586790") + (property "Reference" "#PWR010" + (at 72.39 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 74.93 95.2499 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "" + (at 78.74 95.25 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 78.74 95.25 0) + (effects + (font + (size 1.27 1.27) + ) (hide yes) ) ) - ) - (global_label "LED_Failure" - (shape input) - (at 124.46 87.63 180) - (fields_autoplaced yes) - (effects - (font - (size 1.27 1.27) - ) - (justify right) - ) - (uuid "fac1890f-098f-455e-8b50-48f439f3cbe4") - (property "Intersheetrefs" "${INTERSHEET_REFS}" - (at 110.5287 87.63 0) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 78.74 95.25 0) (effects (font (size 1.27 1.27) ) - (justify right) (hide yes) ) ) + (pin "1" + (uuid "a02ff147-363e-46e8-a5e9-8c0ee3e59a37") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "#PWR010") + (unit 1) + ) + ) + ) ) (symbol (lib_id "Device:C") @@ -1858,7 +2441,7 @@ (justify left) ) ) - (property "Footprint" "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" + (property "Footprint" "Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder" (at 120.3452 83.82 0) (effects (font @@ -1902,7 +2485,7 @@ ) (symbol (lib_id "Device:C") - (at 120.65 54.61 0) + (at 184.15 63.5 180) (unit 1) (exclude_from_sim no) (in_bom yes) @@ -1910,7 +2493,7 @@ (dnp no) (uuid "1debcd2c-4001-4ed6-99eb-e9dad0b2ecd3") (property "Reference" "C2" - (at 122.428 52.324 0) + (at 182.372 65.786 0) (effects (font (size 1.27 1.27) @@ -1919,7 +2502,7 @@ ) ) (property "Value" "2.2u" - (at 114.046 54.61 0) + (at 190.754 63.5 0) (effects (font (size 1.27 1.27) @@ -1927,8 +2510,8 @@ (justify left) ) ) - (property "Footprint" "Capacitor_THT:CP_Radial_D5.0mm_P2.50mm" - (at 121.6152 58.42 0) + (property "Footprint" "Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder" + (at 183.1848 59.69 0) (effects (font (size 1.27 1.27) @@ -1937,7 +2520,7 @@ ) ) (property "Datasheet" "~" - (at 120.65 54.61 0) + (at 184.15 63.5 0) (effects (font (size 1.27 1.27) @@ -1946,7 +2529,7 @@ ) ) (property "Description" "Unpolarized capacitor" - (at 120.65 54.61 0) + (at 184.15 63.5 0) (effects (font (size 1.27 1.27) @@ -1969,6 +2552,76 @@ ) ) ) + (symbol + (lib_id "Device:R") + (at 176.53 69.85 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "30ba7f9f-a410-42a3-bcab-e8ee2b2deb37") + (property "Reference" "R2" + (at 179.07 68.5799 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "5.1k" + (at 179.07 71.1199 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder" + (at 174.752 69.85 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 176.53 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Resistor" + (at 176.53 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "207aad4b-0575-4c64-b242-59c0c2ea78e7") + ) + (pin "1" + (uuid "29f83f66-e4e9-4554-a8fe-962acb2bbd9b") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "R2") + (unit 1) + ) + ) + ) + ) (symbol (lib_id "power:GND") (at 78.74 74.93 270) @@ -2261,7 +2914,7 @@ (justify right) ) ) - (property "Footprint" "MyLibrary:ZH_3P_Side" + (property "Footprint" "Connector_JST:JST_XH_S3B-XH-A_1x03_P2.50mm_Horizontal" (at 129.54 90.17 0) (effects (font @@ -2372,7 +3025,7 @@ ) (symbol (lib_id "power:GND") - (at 118.11 50.8 270) + (at 187.96 77.47 90) (unit 1) (exclude_from_sim no) (in_bom yes) @@ -2381,7 +3034,7 @@ (fields_autoplaced yes) (uuid "88852c1a-1a0b-48bf-bf27-d6a87240c1eb") (property "Reference" "#PWR02" - (at 111.76 50.8 0) + (at 194.31 77.47 0) (effects (font (size 1.27 1.27) @@ -2390,7 +3043,7 @@ ) ) (property "Value" "GND" - (at 114.3 50.7999 90) + (at 191.77 77.4701 90) (effects (font (size 1.27 1.27) @@ -2399,7 +3052,7 @@ ) ) (property "Footprint" "" - (at 118.11 50.8 0) + (at 187.96 77.47 0) (effects (font (size 1.27 1.27) @@ -2408,7 +3061,7 @@ ) ) (property "Datasheet" "" - (at 118.11 50.8 0) + (at 187.96 77.47 0) (effects (font (size 1.27 1.27) @@ -2417,7 +3070,7 @@ ) ) (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 118.11 50.8 0) + (at 187.96 77.47 0) (effects (font (size 1.27 1.27) @@ -2574,7 +3227,74 @@ ) (symbol (lib_id "power:GND") - (at 124.46 92.71 270) + (at 101.6 87.63 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "cd954d4b-cea5-4cfe-b4ee-7c12ab54145d") + (property "Reference" "#PWR011" + (at 107.95 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 105.41 87.6299 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "" + (at 101.6 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 101.6 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 101.6 87.63 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "ec3f2d3a-2fcd-44bc-b334-2e26a4c64ffc") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "#PWR011") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 124.46 87.63 270) (mirror x) (unit 1) (exclude_from_sim no) @@ -2584,7 +3304,7 @@ (fields_autoplaced yes) (uuid "cf9443ef-64ba-4b2d-9078-5abb8b9c25c5") (property "Reference" "#PWR07" - (at 118.11 92.71 0) + (at 118.11 87.63 0) (effects (font (size 1.27 1.27) @@ -2593,7 +3313,7 @@ ) ) (property "Value" "GND" - (at 120.65 92.7101 90) + (at 120.65 87.6301 90) (effects (font (size 1.27 1.27) @@ -2602,7 +3322,7 @@ ) ) (property "Footprint" "" - (at 124.46 92.71 0) + (at 124.46 87.63 0) (effects (font (size 1.27 1.27) @@ -2611,7 +3331,7 @@ ) ) (property "Datasheet" "" - (at 124.46 92.71 0) + (at 124.46 87.63 0) (effects (font (size 1.27 1.27) @@ -2620,7 +3340,7 @@ ) ) (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 124.46 92.71 0) + (at 124.46 87.63 0) (effects (font (size 1.27 1.27) @@ -2881,35 +3601,33 @@ ) ) (symbol - (lib_id "Connector:Jack-DC") - (at 130.81 53.34 180) + (lib_id "Connector:USB_C_Receptacle_PowerOnly_6P") + (at 152.4 55.88 0) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced yes) - (uuid "e07d5664-1123-4e43-a5be-f46dbb258563") - (property "Reference" "J1" - (at 137.16 52.0699 0) + (uuid "e4d914fc-dd43-44b7-a08f-f346d72fe537") + (property "Reference" "J4" + (at 152.4 38.1 0) (effects (font (size 1.27 1.27) ) - (justify right) ) ) - (property "Value" "Jack-DC" - (at 137.16 54.6099 0) + (property "Value" "USB_C_Receptacle_PowerOnly_6P" + (at 152.4 40.64 0) (effects (font (size 1.27 1.27) ) - (justify right) ) ) - (property "Footprint" "Connector_BarrelJack:BarrelJack_Horizontal" - (at 129.54 52.324 0) + (property "Footprint" "Connector_USB:USB_C_Receptacle_GCT_USB4125-xx-x_6P_TopMnt_Horizontal" + (at 156.21 53.34 0) (effects (font (size 1.27 1.27) @@ -2917,8 +3635,8 @@ (hide yes) ) ) - (property "Datasheet" "~" - (at 129.54 52.324 0) + (property "Datasheet" "https://www.usb.org/sites/default/files/documents/usb_type-c.zip" + (at 152.4 55.88 0) (effects (font (size 1.27 1.27) @@ -2926,8 +3644,8 @@ (hide yes) ) ) - (property "Description" "DC Barrel Jack" - (at 130.81 53.34 0) + (property "Description" "USB Power-Only 6P Type-C Receptacle connector" + (at 152.4 55.88 0) (effects (font (size 1.27 1.27) @@ -2935,16 +3653,98 @@ (hide yes) ) ) - (pin "2" - (uuid "78e87ec5-11ea-4d6c-be42-a74211a54d4b") + (pin "B5" + (uuid "5155b751-4062-4a19-9973-a960c72f0882") + ) + (pin "S1" + (uuid "0e999e95-1e0e-49ff-a37e-2148a0385c80") + ) + (pin "A5" + (uuid "94473aec-4407-4a56-8993-ac815b90675f") + ) + (pin "A12" + (uuid "57ea42dc-3fcd-4b7b-8e32-8e9a27721be5") + ) + (pin "B12" + (uuid "8e132153-f0d1-4b54-89d9-3b8e39ea0caf") + ) + (pin "A9" + (uuid "7728dd98-11be-4e56-89c2-da9593d4911c") + ) + (pin "B9" + (uuid "5a2f97d9-b4d7-47db-8a02-f7e966b682b5") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "J4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:GND") + (at 78.74 113.03 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "e9de2668-24ae-44f1-9c51-933ed901d4b5") + (property "Reference" "#PWR09" + (at 72.39 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 74.93 113.0299 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "" + (at 78.74 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 78.74 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 78.74 113.03 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) ) (pin "1" - (uuid "a780bdd7-1822-4cc8-99bf-82008d4d1ac5") + (uuid "b34749c8-18c4-4486-b973-e1d1d0108261") ) (instances (project "Koken-KeyBox" (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" - (reference "J1") + (reference "#PWR09") (unit 1) ) ) @@ -2979,7 +3779,7 @@ (justify right) ) ) - (property "Footprint" "MyLibrary:ZH_3P_Side" + (property "Footprint" "Connector_JST:JST_XH_S3B-XH-A_1x03_P2.50mm_Horizontal" (at 129.54 76.2 0) (effects (font @@ -3093,7 +3893,7 @@ ) (symbol (lib_id "power:+5V") - (at 118.11 58.42 90) + (at 186.69 48.26 270) (unit 1) (exclude_from_sim no) (in_bom yes) @@ -3102,7 +3902,7 @@ (fields_autoplaced yes) (uuid "f9191a64-d16d-435a-b618-fb8cb5ad0344") (property "Reference" "#PWR03" - (at 121.92 58.42 0) + (at 182.88 48.26 0) (effects (font (size 1.27 1.27) @@ -3111,7 +3911,7 @@ ) ) (property "Value" "+5V" - (at 114.3 58.4199 90) + (at 190.5 48.2601 90) (effects (font (size 1.27 1.27) @@ -3120,7 +3920,7 @@ ) ) (property "Footprint" "" - (at 118.11 58.42 0) + (at 186.69 48.26 0) (effects (font (size 1.27 1.27) @@ -3129,7 +3929,7 @@ ) ) (property "Datasheet" "" - (at 118.11 58.42 0) + (at 186.69 48.26 0) (effects (font (size 1.27 1.27) @@ -3138,7 +3938,7 @@ ) ) (property "Description" "Power symbol creates a global label with name \"+5V\"" - (at 118.11 58.42 0) + (at 186.69 48.26 0) (effects (font (size 1.27 1.27) @@ -3158,6 +3958,76 @@ ) ) ) + (symbol + (lib_id "Device:R") + (at 167.64 69.85 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "f990c2da-7cc8-4f42-a962-02e8738a3e68") + (property "Reference" "R1" + (at 170.18 68.5799 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "5.1k" + (at 170.18 71.1199 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder" + (at 165.862 69.85 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 167.64 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Resistor" + (at 167.64 69.85 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "82fde4ce-c191-4776-a0c6-37dd948333be") + ) + (pin "1" + (uuid "c1c48fd7-7d25-423b-bc35-76c19d97187c") + ) + (instances + (project "Koken-KeyBox" + (path "/701e1df7-6d5c-4f74-9c32-94939907fe91" + (reference "R1") + (unit 1) + ) + ) + ) + ) (sheet_instances (path "/" (page "1")