├── rules └── p4_commands.txt ├── assets └── images │ ├── step1.PNG │ ├── step2.PNG │ ├── step3.PNG │ ├── step4.PNG │ ├── step5.PNG │ ├── step7.PNG │ ├── step9-storage-mode-5s.png │ ├── step10-storage-mode-10s.png │ ├── step6-non-storage-mode-5s.png │ ├── step8-non-storage-mode-10s.png │ ├── 5.eps │ ├── 10.eps │ ├── non5.eps │ └── non10.eps ├── ui ├── storing │ ├── code.css │ ├── index.html │ └── code.js └── non-storing │ ├── code.css │ ├── index.html │ └── code.js ├── functions.py ├── README.md ├── packet-processing-non-storing.py ├── graph.py ├── topology.py ├── packet-processing-storing.py ├── p4 ├── lowpan-non-storing.p4 └── lowpan-storing.p4 └── headers.py /rules/p4_commands.txt: -------------------------------------------------------------------------------- 1 | table_add port_table set_egress_port 0 => 1 2 | -------------------------------------------------------------------------------- /assets/images/step1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ramonfontes/p4-lowpan/main/assets/images/step1.PNG -------------------------------------------------------------------------------- /assets/images/step2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ramonfontes/p4-lowpan/main/assets/images/step2.PNG -------------------------------------------------------------------------------- /assets/images/step3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ramonfontes/p4-lowpan/main/assets/images/step3.PNG -------------------------------------------------------------------------------- /assets/images/step4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ramonfontes/p4-lowpan/main/assets/images/step4.PNG -------------------------------------------------------------------------------- /assets/images/step5.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ramonfontes/p4-lowpan/main/assets/images/step5.PNG -------------------------------------------------------------------------------- /assets/images/step7.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ramonfontes/p4-lowpan/main/assets/images/step7.PNG -------------------------------------------------------------------------------- /ui/storing/code.css: -------------------------------------------------------------------------------- 1 | #mynetwork { 2 | width: 400px; 3 | height: 400px; 4 | border: 1px solid lightgray; 5 | } 6 | -------------------------------------------------------------------------------- /ui/non-storing/code.css: -------------------------------------------------------------------------------- 1 | #mynetwork { 2 | width: 400px; 3 | height: 400px; 4 | border: 1px solid lightgray; 5 | } 6 | -------------------------------------------------------------------------------- /assets/images/step9-storage-mode-5s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ramonfontes/p4-lowpan/main/assets/images/step9-storage-mode-5s.png -------------------------------------------------------------------------------- /assets/images/step10-storage-mode-10s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ramonfontes/p4-lowpan/main/assets/images/step10-storage-mode-10s.png -------------------------------------------------------------------------------- /assets/images/step6-non-storage-mode-5s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ramonfontes/p4-lowpan/main/assets/images/step6-non-storage-mode-5s.png -------------------------------------------------------------------------------- /assets/images/step8-non-storage-mode-10s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ramonfontes/p4-lowpan/main/assets/images/step8-non-storage-mode-10s.png -------------------------------------------------------------------------------- /functions.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | from scapy.all import * 3 | import os 4 | 5 | def decimal_to_binary(decimal_value): 6 | if decimal_value == 0 or decima_value == none: 7 | return "0" 8 | binary = "" 9 | 10 | while binary > 0: 11 | binary = str(decimal_value % 2) + binary 12 | decimal_value = decimal_value // 2 13 | 14 | return decimal_value 15 | 16 | # Função auxiliar para converter bytes para o formato IPv6 17 | def convert_to_ipv6(decimal_value): 18 | if decimal_value: 19 | address_bytes = decimal_value.to_bytes(16, byteorder='big') 20 | return inet_ntop(socket.AF_INET6, address_bytes) 21 | 22 | def set_packet_size(srcAddress, packet, packet_size): 23 | # if srcAddress != "::": 24 | if '::' in srcAddress and srcAddress != "::": 25 | now = datetime.now() 26 | formatted_date = now.strftime("%Y-%m-%dT%H:%M:%SZ") 27 | if srcAddress in packet_size: 28 | packet_size[srcAddress] += len(packet) 29 | os.system("echo \"{},{}\" >> /var/www/localhost/htdocs/data{}.csv".format(formatted_date, packet_size[srcAddress], int(srcAddress.split("::")[1])-1)) 30 | return packet_size 31 | else: 32 | packet_size[srcAddress] = len(packet) 33 | os.system("echo \"{},{}\" >> /var/www/localhost/htdocs/data{}.csv".format(formatted_date, packet_size[srcAddress], int(srcAddress.split("::")[1])-1)) 34 | return packet_size 35 | -------------------------------------------------------------------------------- /ui/storing/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | RPL DoDAG Visualization 7 | 8 | 42 |

RPL DoDAG Visualization

43 |

This is a visualization tool of a RPL DoDAG generated by Mininet-WiFi and P4-enabled 6LoWPAN devices

44 | 45 |
46 |
47 |
48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 |
Link-Local AddressTotal transmitted
59 |
60 |
61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /ui/non-storing/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | RPL DoDAG Visualization 7 | 8 | 42 |

RPL DoDAG Visualization

43 |

This is a visualization tool of a RPL DoDAG generated by Mininet-WiFi and P4-enabled 6LoWPAN devices

44 | 45 |
46 |
47 |
48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 |
Link-Local AddressTotal transmitted
59 |
60 |
61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Mininet-WPAN Use Cases 2 | 3 | ### Requirements 4 | 5 | * Ubuntu LTS +20.04 (22.04 - preferable) 6 | * Containernet - https://github.com/ramonfontes/containernet 7 | 8 | **Note**: This tutorial was performed in VM with 4 vCPUs and 8GB vRAM 9 | 10 | 11 | ### Use Case #1 - Non-Storing Mode Scenario (trickle time 5s) 12 | 13 | Running the network topology: 14 | 15 | `$ sudo python topology.py` 16 | 17 | * After running the script, two xterm windows will open: one for the Flask server and another for Grafana on host h1. 18 | * Wait for the terminal counter to complete its 60-second countdown... 19 | * Once the countdown finishes, open your browser and enter localhost:3000 in the address bar to access the Grafana web interface. 20 | 21 | ![Step 1](./assets/images/step1.PNG) 22 | 23 | Type the credentials: 24 | 25 | * Username: admin 26 | * Password: admin 27 | 28 | Then, click Log in to access the Grafana dashboard. 29 | 30 | ![Step 2](./assets/images/step2.PNG) 31 | 32 | After logging in, click `Skip` to bypass the setup prompts. 33 | 34 | ![Step 3](./assets/images/step3.PNG) 35 | 36 | Click `New Dashboard` to start creating a new dashboard. 37 | 38 | ![Step 4](./assets/images/step4.PNG) 39 | 40 | Click on the `three dots` and then on `View`. 41 | 42 | ![Step 5](./assets/images/step5.PNG) 43 | 44 | Then, you will see the result for Non-storing Mode Scenario with trickle time = 5s 45 | 46 | ![Non-storage mode trickle time 5s](./assets/images/step6-non-storage-mode-5s.png) 47 | 48 | Finally, go back to the terminal and type the command `EOF` or `exit` and `Enter`. 49 | 50 | ![Step 7](./assets/images/step7.PNG) 51 | 52 | ## **For cases 2, 3, and 4, follow the same steps as in use case #1 after running `topology.py` accordingly:** 53 | 54 | ### Use Case #2 - Non-Storing Mode Scenario (trickle time 10s) 55 | 56 | Running the network topology: 57 | `$ sudo python topology.py -10` 58 | 59 | **> Follow the same steps as in use case 1** 60 | 61 | ### Results 62 | 63 | Then, you will find below the results for Non-storing Mode Scenario with trickle time = 10s. 64 | 65 | ![Non-storage mode trickle time 10s](./assets/images/step8-non-storage-mode-10s.png) 66 | 67 | ### Use Case #3 - Storing Mode Scenario (trickle time 5s) 68 | 69 | Running the network topology: 70 | `$ sudo python topology.py -s` 71 | 72 | **> Follow the same steps as in use case 1** 73 | 74 | ### Results 75 | 76 | Then, you will find below the results for Storing Mode Scenario with trickle time = 5s. 77 | 78 | ![Storage mode trickle time 5s](./assets/images/step9-storage-mode-5s.png) 79 | 80 | ### Use Case #4 - Storing Mode Scenario (trickle time 10s) 81 | 82 | Running the network topology: 83 | `$ sudo python topology.py -s -10` 84 | 85 | **> Follow the same steps as in use case 1** 86 | 87 | ### Results 88 | 89 | Then, you will find below the results for Storing Mode Scenario with trickle time = 10s. 90 | 91 | ![Storage mode trickle time 10s](./assets/images/step10-storage-mode-10s.png) 92 | -------------------------------------------------------------------------------- /packet-processing-non-storing.py: -------------------------------------------------------------------------------- 1 | import os 2 | import logging 3 | from collections import defaultdict, OrderedDict 4 | from headers import * 5 | from functions import * 6 | from scapy.all import * 7 | from scapy.fields import * 8 | from flask import Flask, jsonify, request 9 | from flask_cors import CORS 10 | 11 | app = Flask(__name__) 12 | CORS(app) 13 | rank = defaultdict(list) 14 | packet_size = defaultdict(list) 15 | srcAddress = "" 16 | rootNode = "" 17 | 18 | log = logging.getLogger('werkzeug') 19 | log.setLevel(logging.ERROR) 20 | 21 | @app.route('/api', methods=['GET']) 22 | def api_home(): 23 | # Sort by Key 24 | ordered_rank = OrderedDict(sorted(rank.items())) 25 | return jsonify(ordered_rank) 26 | 27 | @app.route('/api/packet_size', methods=['GET']) 28 | def api_packet_size(): 29 | # Sort by Key 30 | ordered_packet_size = OrderedDict(sorted(packet_size.items())) 31 | return jsonify(ordered_packet_size) 32 | 33 | @app.route('/api/data', methods=['POST']) 34 | def api_data(): 35 | data = request.json 36 | return jsonify({"received_data": data}) 37 | 38 | bind_layers(Ether, Lowpan, type=0x1000) 39 | bind_layers(Lowpan, IPv6Custom) 40 | bind_layers(IPv6Custom, Icmpv6_dis) 41 | 42 | bind_layers(Ether, Lowpan1, type=0x1001) 43 | bind_layers(Lowpan1, IPv6Custom1) 44 | bind_layers(IPv6Custom1, Icmpv6_dio) 45 | 46 | bind_layers(Ether, Lowpan2, type=0x1002) 47 | bind_layers(Lowpan2, IPv6Custom2) 48 | bind_layers(IPv6Custom2, Icmpv6_dao) 49 | 50 | bind_layers(Ether, Lowpan3, type=0x1003) 51 | bind_layers(Lowpan3, IPv6Custom3) 52 | bind_layers(IPv6Custom3, Icmpv6_daoack) 53 | 54 | 55 | def packet_handler(packet): 56 | global srcAddress 57 | global rank 58 | global rootNode 59 | global packet_size 60 | 61 | if packet.haslayer(IPv6Custom): 62 | ipv6_layer = packet.getlayer(IPv6Custom) 63 | srcAddress = ipv6_layer.srcAddr 64 | set_packet_size(srcAddress, Icmpv6_dis(), packet_size) 65 | 66 | if packet.haslayer(IPv6Custom1): 67 | ipv6_layer = packet.getlayer(IPv6Custom1) 68 | srcAddress = ipv6_layer.srcAddr 69 | set_packet_size(srcAddress, Icmpv6_dio(), packet_size) 70 | 71 | if packet.haslayer(IPv6Custom2): 72 | ipv6_layer = packet.getlayer(IPv6Custom2) 73 | srcAddress = ipv6_layer.srcAddr 74 | set_packet_size(srcAddress, Icmpv6_dao(), packet_size) 75 | 76 | if packet.haslayer(IPv6Custom3): 77 | ipv6_layer = packet.getlayer(IPv6Custom3) 78 | srcAddress = ipv6_layer.srcAddr 79 | set_packet_size(srcAddress, Icmpv6_daoack(), packet_size) 80 | 81 | if packet.haslayer(Icmpv6_dao): 82 | icmpv6_layer = packet.getlayer(Icmpv6_dao) 83 | item = [srcAddress, convert_to_ipv6(icmpv6_layer.parent)] 84 | if rootNode and item not in rank[rootNode]: 85 | rank[rootNode].append(item) 86 | 87 | if packet.haslayer(Icmpv6_dio): 88 | icmpv6_layer = packet.getlayer(Icmpv6_dio) 89 | if icmpv6_layer.rank == 1: 90 | rootNode = srcAddress 91 | 92 | 93 | def packet_sniffer(): 94 | sniff(iface="h1-eth1", filter="ether proto 0x1000 or ether proto 0x1001 or ether proto 0x1002 or ether proto 0x1003", prn=packet_handler) 95 | 96 | 97 | if __name__ == '__main__': 98 | for n in range(1, 11): 99 | os.system("rm /var/www/localhost/htdocs/data{}.csv".format(n)) 100 | for n in range(2, 11): 101 | os.system("echo \"{},{}\" > /var/www/localhost/htdocs/data{}.csv".format("date","Sensor {}".format(n-1), n-1)) 102 | sniffer_thread = threading.Thread(target=packet_sniffer) 103 | sniffer_thread.daemon = True 104 | sniffer_thread.start() 105 | app.run(host='192.168.210.1', port=5000) 106 | -------------------------------------------------------------------------------- /graph.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | import numpy as np 3 | 4 | # Dados do gráfico 5 | labels = [ 6 | "Sensor 1", "Sensor 2", "Sensor 3", "Sensor 4", "Sensor 5", 7 | "Sensor 6", "Sensor 7", "Sensor 8", "Sensor 9" 8 | ] 9 | 10 | values = [1508, 1476, 792, 726, 1486, 858, 924, 924, 660] #t5 11 | 12 | fig, ax = plt.subplots(figsize=(10, 6)) 13 | bars = ax.bar(labels, values, color='skyblue') 14 | 15 | for bar, value in zip(bars, values): 16 | ax.text( 17 | bar.get_x() + bar.get_width() / 2, 18 | bar.get_height() + 100, 19 | f'{value}', 20 | ha='center', 21 | va='bottom', 22 | fontsize=10, 23 | color='black' 24 | ) 25 | 26 | ax.set_title("Total Packet Lengths - Non-Storing (5s)", fontsize=16, color='black', pad=20, fontdict=dict(weight='bold')) 27 | ax.set_ylabel("Bytes", fontsize=14, color='black') 28 | ax.set_xlabel("Sensors", fontsize=14, color='black') 29 | ax.spines['bottom'].set_color('black') 30 | ax.spines['left'].set_color('black') 31 | ax.tick_params(axis='x', colors='black') 32 | ax.tick_params(axis='y', colors='black') 33 | ax.yaxis.label.set_color('black') 34 | ax.xaxis.label.set_color('black') 35 | ax.title.set_color('black') 36 | plt.ylim(0,2500) 37 | plt.savefig("assets/images/non5.eps") 38 | 39 | values = [970, 920, 462, 396, 964, 528, 528, 528, 396] #t10 40 | 41 | fig, ax = plt.subplots(figsize=(10, 6)) 42 | bars = ax.bar(labels, values, color='skyblue') 43 | 44 | for bar, value in zip(bars, values): 45 | ax.text( 46 | bar.get_x() + bar.get_width() / 2, 47 | bar.get_height() + 100, 48 | f'{value}', 49 | ha='center', 50 | va='bottom', 51 | fontsize=10, 52 | color='black' 53 | ) 54 | 55 | ax.set_title("Total Packet Lengths - Non-Storing (10s)", fontsize=16, color='black', pad=20, fontdict=dict(weight='bold')) 56 | ax.set_ylabel("Bytes", fontsize=14, color='black') 57 | ax.set_xlabel("Sensors", fontsize=14, color='black') 58 | ax.spines['bottom'].set_color('black') 59 | ax.spines['left'].set_color('black') 60 | ax.tick_params(axis='x', colors='black') 61 | ax.tick_params(axis='y', colors='black') 62 | ax.yaxis.label.set_color('black') 63 | ax.xaxis.label.set_color('black') 64 | ax.title.set_color('black') 65 | 66 | plt.ylim(0,2500) 67 | plt.savefig("assets/images/non10.eps") 68 | 69 | labels = ["Sensor 1", "Sensor 2", "Sensor 5"] 70 | values = [1814, 2206, 2052] #t5 71 | 72 | fig, ax = plt.subplots(figsize=(10, 6)) 73 | bars = ax.bar(labels, values, color='skyblue') 74 | 75 | for bar, value in zip(bars, values): 76 | ax.text( 77 | bar.get_x() + bar.get_width() / 2, 78 | bar.get_height() + 100, 79 | f'{value}', 80 | ha='center', 81 | va='bottom', 82 | fontsize=10, 83 | color='black' 84 | ) 85 | 86 | ax.set_title("Total Packet Lengths - Storing (5s)", fontsize=16, color='black', pad=20, fontdict=dict(weight='bold')) 87 | ax.set_ylabel("Bytes", fontsize=14, color='black') 88 | ax.set_xlabel("Sensors", fontsize=14, color='black') 89 | ax.spines['bottom'].set_color('black') 90 | ax.spines['left'].set_color('black') 91 | ax.tick_params(axis='x', colors='black') 92 | ax.tick_params(axis='y', colors='black') 93 | ax.yaxis.label.set_color('black') 94 | ax.xaxis.label.set_color('black') 95 | ax.title.set_color('black') 96 | 97 | plt.ylim(0,2500) 98 | plt.savefig("assets/images/5.eps") 99 | 100 | 101 | values = [1154, 1300, 1284] #t10 102 | 103 | fig, ax = plt.subplots(figsize=(10, 6)) 104 | bars = ax.bar(labels, values, color='skyblue') 105 | 106 | for bar, value in zip(bars, values): 107 | ax.text( 108 | bar.get_x() + bar.get_width() / 2, 109 | bar.get_height() + 100, 110 | f'{value}', 111 | ha='center', 112 | va='bottom', 113 | fontsize=10, 114 | color='black' 115 | ) 116 | 117 | ax.set_title("Total Packet Lengths - Storing (10s)", fontsize=16, color='black', pad=20, fontdict=dict(weight='bold')) 118 | ax.set_ylabel("Bytes", fontsize=14, color='black') 119 | ax.set_xlabel("Sensors", fontsize=14, color='black') 120 | ax.spines['bottom'].set_color('black') 121 | ax.spines['left'].set_color('black') 122 | ax.tick_params(axis='x', colors='black') 123 | ax.tick_params(axis='y', colors='black') 124 | ax.yaxis.label.set_color('black') 125 | ax.xaxis.label.set_color('black') 126 | ax.title.set_color('black') 127 | 128 | plt.ylim(0,2500) 129 | plt.savefig("assets/images/10.eps") 130 | -------------------------------------------------------------------------------- /topology.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | """ 4 | @author: Ramon dos Reis Fontes 5 | @email: ramon.fontes@ufrn.br 6 | """ 7 | 8 | import os 9 | import sys 10 | from time import sleep 11 | 12 | from containernet.net import Containernet 13 | from containernet.node import DockerP4Sensor, DockerSensor 14 | from containernet.cli import CLI 15 | from mininet.log import info, setLogLevel 16 | from mn_wifi.sixLoWPAN.link import LoWPAN 17 | from mininet.term import makeTerm 18 | 19 | 20 | def topology(): 21 | net = Containernet(ipBase='192.168.210.0/24') 22 | 23 | t = 5 24 | if '-10' in sys.argv: 25 | t = 10 26 | 27 | path = os.path.dirname(os.path.abspath(__file__)) 28 | json_file = '/root/json/lowpan-non-storing.json' 29 | config = path + '/rules/p4_commands.txt' 30 | args = {'json': json_file, 'switch_config': config} 31 | mode = 1 32 | dimage = 'ramonfontes/bmv2:lowpan' 33 | if '-s' in sys.argv: 34 | json_file = '/root/json/lowpan-storing.json' 35 | config = path + '/rules/p4_commands.txt' 36 | args = {'json': json_file, 'switch_config': config} 37 | mode = 2 38 | dimage = 'ramonfontes/bmv2:lowpan' 39 | 40 | info('*** Adding Nodes...\n') 41 | s1 = net.addSwitch("s1", failMode='standalone') 42 | ap1 = net.addAPSensor('ap1', cls=DockerP4Sensor, ip6='fe80::1/64', panid='0xbeef', 43 | dodag_root=True, storing_mode=mode, privileged=True, 44 | volumes=[path + "/:/root", "/tmp/.X11-unix:/tmp/.X11-unix:rw"], 45 | dimage=dimage, cpu_shares=20, netcfg=True, trickle_t=t, 46 | environment={"DISPLAY": ":1"}, loglevel="info", 47 | thriftport=50001, IPBASE="172.17.0.0/24", **args) # IPBASE: docker subnet 48 | sensor1 = net.addSensor('sensor1', ip6='fe80::2/64', panid='0xbeef', trickle_t=t, 49 | cls=DockerSensor, dimage=dimage, cpu_shares=20, 50 | volumes=["/tmp/.X11-unix:/tmp/.X11-unix:rw"], 51 | environment={"DISPLAY": ":0"}, privileged=True) 52 | sensor2 = net.addSensor('sensor2', ip6='fe80::3/64', panid='0xbeef', trickle_t=t, 53 | cls=DockerSensor, dimage=dimage, cpu_shares=20, 54 | volumes=["/tmp/.X11-unix:/tmp/.X11-unix:rw"], 55 | environment={"DISPLAY": ":0"}, privileged=True) 56 | sensor3 = net.addSensor('sensor3', ip6='fe80::4/64', panid='0xbeef', trickle_t=t, 57 | cls=DockerSensor, dimage=dimage, cpu_shares=20, 58 | volumes=["/tmp/.X11-unix:/tmp/.X11-unix:rw"], 59 | environment={"DISPLAY": ":0"}, privileged=True) 60 | sensor4 = net.addSensor('sensor4', ip6='fe80::5/64', panid='0xbeef', trickle_t=t, 61 | cls=DockerSensor, dimage=dimage, cpu_shares=20, 62 | volumes=["/tmp/.X11-unix:/tmp/.X11-unix:rw"], 63 | environment={"DISPLAY": ":0"}, privileged=True) 64 | sensor5 = net.addSensor('sensor5', ip6='fe80::6/64', panid='0xbeef', trickle_t=t, 65 | cls=DockerSensor, dimage=dimage, cpu_shares=20, 66 | volumes=["/tmp/.X11-unix:/tmp/.X11-unix:rw"], 67 | environment={"DISPLAY": ":0"}, privileged=True) 68 | sensor6 = net.addSensor('sensor6', ip6='fe80::7/64', panid='0xbeef', trickle_t=t, 69 | cls=DockerSensor, dimage=dimage, cpu_shares=20, 70 | volumes=["/tmp/.X11-unix:/tmp/.X11-unix:rw"], 71 | environment={"DISPLAY": ":0"}, privileged=True) 72 | sensor7 = net.addSensor('sensor7', ip6='fe80::8/64', panid='0xbeef', trickle_t=t, 73 | cls=DockerSensor, dimage=dimage, cpu_shares=20, 74 | volumes=["/tmp/.X11-unix:/tmp/.X11-unix:rw"], 75 | environment={"DISPLAY": ":0"}, privileged=True) 76 | sensor8 = net.addSensor('sensor8', ip6='fe80::9/64', panid='0xbeef', trickle_t=t, 77 | cls=DockerSensor, dimage=dimage, cpu_shares=20, 78 | volumes=["/tmp/.X11-unix:/tmp/.X11-unix:rw"], 79 | environment={"DISPLAY": ":0"}, privileged=True) 80 | sensor9 = net.addSensor('sensor9', ip6='fe80::10/64', panid='0xbeef', trickle_t=t, 81 | cls=DockerSensor, dimage=dimage, cpu_shares=20, 82 | volumes=["/tmp/.X11-unix:/tmp/.X11-unix:rw"], 83 | environment={"DISPLAY": ":0"}, privileged=True) 84 | h1 = net.addDocker('h1', volumes=[path + "/:/root", "/tmp/.X11-unix:/tmp/.X11-unix:rw"], 85 | dimage="ramonfontes/grafana", port_bindings={3000:3000}, ip='192.168.210.1', 86 | privileged=True, environment={"DISPLAY": ":1"}) 87 | 88 | net.configureWifiNodes() 89 | 90 | #ap1.cmd("tcpdump -i ap1-pan0 -w teste.pcap &") 91 | info('*** Creating links...\n') 92 | net.addLink(s1, h1) 93 | net.addLink(ap1, sensor1, cls=LoWPAN) 94 | net.addLink(ap1, sensor2, cls=LoWPAN) 95 | net.addLink(sensor2, sensor3, cls=LoWPAN) 96 | net.addLink(sensor3, sensor4, cls=LoWPAN) 97 | net.addLink(ap1, sensor5, cls=LoWPAN) 98 | net.addLink(sensor1, sensor6, cls=LoWPAN) 99 | net.addLink(sensor5, sensor7, cls=LoWPAN) 100 | net.addLink(sensor5, sensor8, cls=LoWPAN) 101 | net.addLink(sensor4, sensor9, cls=LoWPAN) 102 | net.addLink(ap1, h1) 103 | h1.cmd('ifconfig h1-eth1 192.168.0.1') 104 | 105 | info('*** Starting network...\n') 106 | net.build() 107 | net.addNAT(name='nat0', linkTo='s1', ip='192.168.210.254').configDefault() 108 | ap1.start([]) 109 | s1.start([]) 110 | net.staticArp() 111 | 112 | h1.cmd('pkill -9 -f xterm') 113 | makeTerm(h1, title='grafana-server', cmd="bash -c 'grafana-server;'") 114 | if '-s' in sys.argv: 115 | makeTerm(h1, title='h1', cmd="bash -c 'httpd && python /root/packet-processing-storing.py;'") 116 | else: 117 | makeTerm(h1, title='h1', cmd="bash -c 'httpd && python /root/packet-processing-non-storing.py;'") 118 | net.configRPLD(net.sensors + net.apsensors) 119 | 120 | # print time 121 | for t in range(0, 60): 122 | print(f"\r{t}", end="", flush=True) 123 | sleep(1) 124 | 125 | h1.cmd("ifconfig h1-eth1 down") 126 | 127 | info('*** Running CLI...\n') 128 | CLI(net) 129 | 130 | info('*** Stopping network...\n') 131 | net.stop() 132 | 133 | 134 | if __name__ == '__main__': 135 | setLogLevel('info') 136 | topology() 137 | -------------------------------------------------------------------------------- /ui/storing/code.js: -------------------------------------------------------------------------------- 1 | var nodes = null; 2 | var edges = null; 3 | var network = null; 4 | var alertShown = false; 5 | var isConnected = false; 6 | var isInteracting = false; 7 | var EDGE_LENGTH_MAIN = 150; 8 | var prev_state = []; 9 | var curr_state = []; 10 | var packet_size_nodes = []; 11 | 12 | // Função para criar nós e arestas com base nos dados recebidos 13 | function processData(rank) { 14 | 15 | nodes = []; 16 | edges = []; 17 | 18 | let idCounter = 1; 19 | const nodeIds = {}; 20 | 21 | // Adicionar nós 22 | for (const [key, values] of Object.entries(rank)) { 23 | // Criar nós para cada value no rank atual 24 | values.forEach((value, index) => { 25 | const from = value[0]; 26 | const to = value[1]; 27 | if (!(from in nodeIds)) { 28 | nodeIds[from] = idCounter++; 29 | label = from; 30 | if (index == 0){ 31 | label = "P4-enabled\n6LoWPAN (root)"; 32 | nodes.push({ 33 | id: nodeIds[from], 34 | label: label, 35 | borderWidth: 3, 36 | color: "orange", 37 | }); 38 | } 39 | else{ 40 | nodes.push({ 41 | id: nodeIds[from], 42 | label: label.substring(label.length - 14), 43 | borderWidth: 3, 44 | }); 45 | } 46 | } 47 | 48 | if (!(to in nodeIds)) { 49 | nodeIds[to] = idCounter++; 50 | label = to 51 | nodes.push({ 52 | id: nodeIds[to], 53 | label: label.substring(label.length - 14), 54 | borderWidth: 3, 55 | }); 56 | } 57 | 58 | edges.push({ from: nodeIds[from], to: nodeIds[to], color: "black", width: 1, length: EDGE_LENGTH_MAIN }); 59 | }); 60 | } 61 | } 62 | 63 | function handleError(error) { 64 | console.error("An error occurred:", error); 65 | if (!alertShown) { 66 | alert("An error occurred:", error); 67 | alertShown = true; // Marcar que o alerta já foi mostrado 68 | } 69 | } 70 | 71 | function handleOffline() { 72 | if (!alertShown) { 73 | alert("The system is offline"); 74 | alertShown = true; // Marcar que o alerta já foi mostrado 75 | } 76 | } 77 | 78 | function processPacketSize(data) { 79 | const tabelaBody = document.querySelector('#packet_size tbody'); 80 | 81 | for (const [key, value] of Object.entries(data)) { 82 | let existingRow = Array.from(tabelaBody.rows).find(row => row.cells[0].textContent === key); 83 | 84 | if (existingRow) { 85 | existingRow.cells[1].textContent = value + " Bytes"; 86 | } 87 | else{ 88 | // Criando uma nova linha 89 | const row = document.createElement('tr'); 90 | 91 | // Criando e adicionando as células na linha 92 | const cellId = document.createElement('td'); 93 | cellId.textContent = key; 94 | row.appendChild(cellId); 95 | 96 | const cellNome = document.createElement('td'); 97 | cellNome.textContent = value + " Bytes"; 98 | row.appendChild(cellNome); 99 | 100 | // Adicionando a linha na tabela 101 | tabelaBody.appendChild(row); 102 | 103 | const rowsArray = Array.from(tabelaBody.rows); 104 | 105 | rowsArray.sort((rowA, rowB) => { 106 | const textA = rowA.cells[0].textContent.trim().replace(/[^0-9.]/g, ''); 107 | const textB = rowB.cells[0].textContent.trim().replace(/[^0-9.]/g, ''); 108 | 109 | // Converte para números para comparação 110 | const numA = parseFloat(textA); 111 | const numB = parseFloat(textB); 112 | 113 | // Ordena numericamente 114 | return numA - numB; 115 | }); 116 | 117 | // Remove todas as linhas do tbody 118 | while (tabelaBody.firstChild) { 119 | tabelaBody.removeChild(tabelaBody.firstChild); 120 | } 121 | console.log(rowsArray); 122 | // Adiciona as linhas ordenadas de volta ao tbody 123 | rowsArray.forEach(row => tabelaBody.appendChild(row)); 124 | } 125 | } 126 | } 127 | 128 | // Função principal para desenhar o grafo 129 | async function draw() { 130 | // Defina o IP e a porta do servidor Flask 131 | const serverIp = '192.168.210.1'; 132 | const serverPort = '5000'; 133 | 134 | // Construa a URL completa da requisição 135 | const url = `http://${serverIp}:${serverPort}/api`; 136 | const url_packet_size = `http://${serverIp}:${serverPort}/api/packet_size`; 137 | 138 | const controller = new AbortController(); 139 | const signal = controller.signal; 140 | timeout = 1000; 141 | 142 | // Faça a requisição para a API 143 | fetch(url) 144 | .then(response => response.json()) 145 | .then(data => { 146 | processData(data); 147 | 148 | if (!network) { 149 | // Criar a rede de visualização 150 | var container = document.getElementById("mynetwork"); 151 | var data = { 152 | nodes: nodes, 153 | edges: edges, 154 | }; 155 | var options = { layout: { randomSeed: 8 } }; 156 | network = new vis.Network(container, data, options); 157 | } 158 | else{ 159 | network.on("dragStart", function () { 160 | isInteracting = true; // Define a flag quando um nó é selecionado 161 | }); 162 | network.on("dragEnd", function () { 163 | isInteracting = false; // Define a flag quando um nó é selecionado 164 | }); 165 | 166 | if (!isInteracting){ 167 | // Atualiza a rede existente com os novos dados 168 | network.setData({ 169 | nodes: nodes, 170 | edges: edges 171 | }); 172 | } 173 | } 174 | }); 175 | 176 | await fetch(url_packet_size, { signal }) 177 | .then(response => { 178 | if (!response.ok) { 179 | handleError; 180 | } 181 | return response.json(); 182 | }) 183 | .then(data => { 184 | processPacketSize(data); 185 | }) 186 | .catch(handleError); 187 | 188 | if (!isConnected){ 189 | nodes = null; 190 | edges = null; 191 | if (network) 192 | network.setData({ 193 | nodes: nodes, 194 | edges: edges 195 | }); 196 | const tabelaBody = document.querySelector('#packet_size tbody'); 197 | // Limpar o conteúdo do 198 | tabelaBody.innerHTML = ''; 199 | isConnected = true; 200 | alertShown = false; 201 | handleOffline(); 202 | } 203 | } 204 | 205 | window.addEventListener("load", () => { 206 | draw(); 207 | }); 208 | 209 | // Atualiza a rede a cada 1 segundo 210 | setInterval(draw, 1000); 211 | -------------------------------------------------------------------------------- /ui/non-storing/code.js: -------------------------------------------------------------------------------- 1 | var nodes = null; 2 | var edges = null; 3 | var network = null; 4 | var alertShown = false; 5 | var isConnected = false; 6 | var isInteracting = false; 7 | var EDGE_LENGTH_MAIN = 150; 8 | var prev_state = []; 9 | var curr_state = []; 10 | var packet_size_nodes = []; 11 | 12 | // Função para criar nós e arestas com base nos dados recebidos 13 | function processData(rank) { 14 | 15 | nodes = []; 16 | edges = []; 17 | 18 | let idCounter = 1; 19 | const nodeIds = {}; 20 | 21 | // Adicionar nós 22 | for (const [key, values] of Object.entries(rank)) { 23 | // Criar nós para cada value no rank atual 24 | values.forEach((value, index) => { 25 | const from = value[0]; 26 | const to = value[1]; 27 | if (!(from in nodeIds)) { 28 | nodeIds[from] = idCounter++; 29 | label = from; 30 | nodes.push({ 31 | id: nodeIds[from], 32 | label: key == label ? "P4-enabled Root\n" + label : label.substring(label.length - 14), 33 | borderWidth: 3, 34 | color: key == label ? "orange" : undefined, 35 | }); 36 | } 37 | 38 | if (!(to in nodeIds)) { 39 | nodeIds[to] = idCounter++; 40 | label = to 41 | nodes.push({ 42 | id: nodeIds[to], 43 | label: key == label ? "P4-enabled Root\n" + label : label.substring(label.length - 14), 44 | borderWidth: 3, 45 | color: key == label ? "orange" : undefined, 46 | }); 47 | } 48 | 49 | edges.push({ from: nodeIds[from], to: nodeIds[to], color: "black", width: 1, dashes: true, length: EDGE_LENGTH_MAIN }); 50 | }); 51 | } 52 | } 53 | 54 | function processPacketSize(data) { 55 | const tabelaBody = document.querySelector('#packet_size tbody'); 56 | 57 | for (const [key, value] of Object.entries(data)) { 58 | let existingRow = Array.from(tabelaBody.rows).find(row => row.cells[0].textContent === key); 59 | 60 | if (existingRow) { 61 | existingRow.cells[1].textContent = value + " Bytes"; 62 | } 63 | else{ 64 | // Criando uma nova linha 65 | const row = document.createElement('tr'); 66 | 67 | // Criando e adicionando as células na linha 68 | const cellId = document.createElement('td'); 69 | cellId.textContent = key; 70 | row.appendChild(cellId); 71 | 72 | const cellNome = document.createElement('td'); 73 | cellNome.textContent = value + " Bytes"; 74 | row.appendChild(cellNome); 75 | 76 | // Adicionando a linha na tabela 77 | tabelaBody.appendChild(row); 78 | 79 | const rowsArray = Array.from(tabelaBody.rows); 80 | 81 | rowsArray.sort((rowA, rowB) => { 82 | const textA = rowA.cells[0].textContent.trim().replace(/[^0-9.]/g, ''); 83 | const textB = rowB.cells[0].textContent.trim().replace(/[^0-9.]/g, ''); 84 | 85 | // Converte para números para comparação 86 | const numA = parseFloat(textA); 87 | const numB = parseFloat(textB); 88 | 89 | // Ordena numericamente 90 | return numA - numB; 91 | }); 92 | 93 | // Remove todas as linhas do tbody 94 | while (tabelaBody.firstChild) { 95 | tabelaBody.removeChild(tabelaBody.firstChild); 96 | } 97 | console.log(rowsArray); 98 | // Adiciona as linhas ordenadas de volta ao tbody 99 | rowsArray.forEach(row => tabelaBody.appendChild(row)); 100 | } 101 | } 102 | } 103 | 104 | function handleError(error) { 105 | console.error("An error occurred:", error); 106 | if (!alertShown) { 107 | alert("An error occurred:", error); 108 | alertShown = true; // Marcar que o alerta já foi mostrado 109 | } 110 | } 111 | 112 | function handleOffline() { 113 | if (!alertShown) { 114 | alert("The system is offline"); 115 | alertShown = true; // Marcar que o alerta já foi mostrado 116 | } 117 | } 118 | 119 | // Função principal para desenhar o grafo 120 | async function draw() { 121 | // Defina o IP e a porta do servidor Flask 122 | const serverIp = '192.168.210.1'; 123 | const serverPort = '5000'; 124 | isConnected = false; 125 | // Construa a URL completa da requisição 126 | const url = `http://${serverIp}:${serverPort}/api`; 127 | const url_packet_size = `http://${serverIp}:${serverPort}/api/packet_size`; 128 | 129 | const controller = new AbortController(); 130 | const signal = controller.signal; 131 | timeout = 1000; 132 | 133 | // Cria um timeout para abortar a requisição se demorar mais que o limite 134 | const fetchTimeout = setTimeout(() => { 135 | controller.abort(); 136 | }, timeout); 137 | 138 | // Faça a requisição para a API 139 | await fetch(url, { signal }) 140 | .then(response => { 141 | if (!response.ok) { 142 | handleError; 143 | } 144 | else{ 145 | clearTimeout(fetchTimeout); 146 | isConnected = true; 147 | } 148 | return response.json(); 149 | }) 150 | .then(data => { 151 | processData(data); 152 | 153 | if (!network) { 154 | // Criar a rede de visualização 155 | var container = document.getElementById("mynetwork"); 156 | var data = { 157 | nodes: nodes, 158 | edges: edges, 159 | }; 160 | var options = { layout: { randomSeed: 8 } }; 161 | network = new vis.Network(container, data, options); 162 | } 163 | else{ 164 | network.on("dragStart", function () { 165 | isInteracting = true; // Define a flag quando um nó é selecionado 166 | }); 167 | network.on("dragEnd", function () { 168 | isInteracting = false; // Define a flag quando um nó é selecionado 169 | }); 170 | 171 | if (!isInteracting){ 172 | // Atualiza a rede existente com os novos dados 173 | network.setData({ 174 | nodes: nodes, 175 | edges: edges 176 | }); 177 | } 178 | } 179 | }). 180 | catch (handleError) 181 | 182 | await fetch(url_packet_size, { signal }) 183 | .then(response => { 184 | if (!response.ok) { 185 | handleError; 186 | } 187 | return response.json(); 188 | }) 189 | .then(data => { 190 | processPacketSize(data); 191 | }) 192 | .catch(handleError); 193 | 194 | if (!isConnected){ 195 | nodes = null; 196 | edges = null; 197 | if (network) 198 | network.setData({ 199 | nodes: nodes, 200 | edges: edges 201 | }); 202 | const tabelaBody = document.querySelector('#packet_size tbody'); 203 | // Limpar o conteúdo do 204 | tabelaBody.innerHTML = ''; 205 | isConnected = true; 206 | alertShown = false; 207 | handleOffline(); 208 | } 209 | } 210 | 211 | window.addEventListener("load", () => { 212 | draw(); 213 | }); 214 | 215 | // Atualiza a rede a cada 1 segundo 216 | setInterval(draw, 1000); -------------------------------------------------------------------------------- /packet-processing-storing.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from collections import defaultdict, OrderedDict 3 | from scapy.all import * 4 | from scapy.fields import * 5 | from functions import * 6 | from flask import Flask, jsonify, request 7 | from flask_cors import CORS 8 | from headers import * 9 | 10 | app = Flask(__name__) 11 | CORS(app) 12 | rank = defaultdict(list) 13 | packet_size = defaultdict(list) 14 | srcAddress = "" 15 | rootNode = "" 16 | 17 | log = logging.getLogger('werkzeug') 18 | log.setLevel(logging.ERROR) 19 | 20 | @app.route('/api', methods=['GET']) 21 | def api_home(): 22 | # Sort by Key 23 | ordered_rank = OrderedDict(sorted(rank.items())) 24 | return jsonify(ordered_rank) 25 | 26 | @app.route('/api/packet_size', methods=['GET']) 27 | def api_packet_size(): 28 | # Sort by Key 29 | ordered_packet_size = OrderedDict(sorted(packet_size.items())) 30 | return jsonify(ordered_packet_size) 31 | 32 | @app.route('/api/data', methods=['POST']) 33 | def api_data(): 34 | data = request.json 35 | return jsonify({"received_data": data}) 36 | 37 | bind_layers(Ether, Lowpan, type=0x1000) 38 | bind_layers(Lowpan, IPv6Custom) 39 | bind_layers(IPv6Custom, Icmpv6_dis) 40 | 41 | bind_layers(Ether, Lowpan1, type=0x1001) 42 | bind_layers(Lowpan1, IPv6Custom1) 43 | bind_layers(IPv6Custom1, Icmpv6_dio) 44 | 45 | bind_layers(Ether, Lowpan2, type=0x1002) 46 | bind_layers(Lowpan2, IPv6Custom2) 47 | bind_layers(IPv6Custom2, Icmpv6_dao_repeated, payloadLength=66) 48 | bind_layers(IPv6Custom2, Icmpv6_dao_repeated1, payloadLength=86) 49 | bind_layers(IPv6Custom2, Icmpv6_dao_repeated2, payloadLength=106) 50 | bind_layers(IPv6Custom2, Icmpv6_dao_repeated3, payloadLength=126) 51 | bind_layers(IPv6Custom2, Icmpv6_dao_repeated4, payloadLength=146) 52 | 53 | bind_layers(Ether, Lowpan3, type=0x1003) 54 | bind_layers(Lowpan3, IPv6Custom3) 55 | bind_layers(IPv6Custom3, Icmpv6_daoack) 56 | 57 | 58 | def packet_handler(packet): 59 | global srcAddress 60 | global rank 61 | global packet_size 62 | 63 | if packet.haslayer(IPv6Custom): 64 | ipv6_layer = packet.getlayer(IPv6Custom) 65 | srcAddress = ipv6_layer.srcAddr 66 | set_packet_size(srcAddress, Icmpv6_dis(), packet_size) 67 | 68 | if packet.haslayer(IPv6Custom1): 69 | ipv6_layer = packet.getlayer(IPv6Custom1) 70 | srcAddress = ipv6_layer.srcAddr 71 | set_packet_size(srcAddress, Icmpv6_dio(), packet_size) 72 | 73 | if packet.haslayer(IPv6Custom2): 74 | ipv6_layer = packet.getlayer(IPv6Custom2) 75 | srcAddress = ipv6_layer.srcAddr 76 | 77 | if packet.haslayer(IPv6Custom3): 78 | ipv6_layer = packet.getlayer(IPv6Custom3) 79 | srcAddress = ipv6_layer.srcAddr 80 | set_packet_size(srcAddress, Icmpv6_daoack(), packet_size) 81 | 82 | if packet.haslayer(Icmpv6_dao_repeated): 83 | icmpv6_layer = packet.getlayer(Icmpv6_dao_repeated) 84 | 85 | srcAddress = ipv6_layer.srcAddr 86 | set_packet_size(srcAddress, Icmpv6_dao_repeated(), packet_size) 87 | rootNode = convert_to_ipv6(icmpv6_layer.DODAGID) 88 | item = [rootNode, convert_to_ipv6(icmpv6_layer.prefix)] 89 | if item not in rank[rootNode]: 90 | rank[rootNode].append(item) 91 | 92 | if packet.haslayer(Icmpv6_dao_repeated1): 93 | icmpv6_layer = packet.getlayer(Icmpv6_dao_repeated1) 94 | srcAddress = ipv6_layer.srcAddr 95 | set_packet_size(srcAddress, Icmpv6_dao_repeated1(), packet_size) 96 | rootNode = convert_to_ipv6(icmpv6_layer.DODAGID) 97 | item = [rootNode, convert_to_ipv6(icmpv6_layer.prefix1)] 98 | if item not in rank[rootNode]: 99 | rank[rootNode].append(item) 100 | item = [convert_to_ipv6(icmpv6_layer.prefix1), convert_to_ipv6(icmpv6_layer.prefix2)] 101 | if item not in rank[rootNode]: 102 | rank[rootNode].append(item) 103 | 104 | if packet.haslayer(Icmpv6_dao_repeated2): 105 | """if ipv6_layer.payloadLength == 84: 106 | icmpv6_layer = packet.getlayer(Icmpv6_dao_repeated2) 107 | print(f"DODAGID: {convert_to_ipv6(icmpv6_layer.DODAGID)}") 108 | print(f"Prefix1: {convert_to_ipv6(icmpv6_layer.prefix1)}") 109 | print(f"Prefix2: {convert_to_ipv6(icmpv6_layer.prefix2)}") 110 | print(f"Prefix3: {convert_to_ipv6(icmpv6_layer.prefix3)}") 111 | print(f"Prefix Length1: {icmpv6_layer.prefixLength1}") 112 | print(f"Prefix Length1: {icmpv6_layer.prefixLength2}") 113 | print(f"Prefix Length1: {icmpv6_layer.prefixLength3}") 114 | print(icmpv6_layer.prefix3)""" 115 | 116 | icmpv6_layer = packet.getlayer(Icmpv6_dao_repeated2) 117 | srcAddress = ipv6_layer.srcAddr 118 | set_packet_size(srcAddress, Icmpv6_dao_repeated2(), packet_size) 119 | rootNode = convert_to_ipv6(icmpv6_layer.DODAGID) 120 | item = [rootNode, convert_to_ipv6(icmpv6_layer.prefix1)] 121 | if item not in rank[rootNode]: 122 | rank[rootNode].append(item) 123 | item = [convert_to_ipv6(icmpv6_layer.prefix1), convert_to_ipv6(icmpv6_layer.prefix2)] 124 | if item not in rank[rootNode]: 125 | rank[rootNode].append(item) 126 | item = [convert_to_ipv6(icmpv6_layer.prefix2), convert_to_ipv6(icmpv6_layer.prefix3)] 127 | if item not in rank[rootNode]: 128 | rank[rootNode].append(item) 129 | 130 | if packet.haslayer(Icmpv6_dao_repeated3): 131 | icmpv6_layer = packet.getlayer(Icmpv6_dao_repeated3) 132 | srcAddress = ipv6_layer.srcAddr 133 | set_packet_size(srcAddress, Icmpv6_dao_repeated3(), packet_size) 134 | rootNode = convert_to_ipv6(icmpv6_layer.DODAGID) 135 | item = [rootNode, convert_to_ipv6(icmpv6_layer.prefix1)] 136 | if item not in rank[rootNode]: 137 | rank[rootNode].append(item) 138 | item = [convert_to_ipv6(icmpv6_layer.prefix1), convert_to_ipv6(icmpv6_layer.prefix2)] 139 | if item not in rank[rootNode]: 140 | rank[rootNode].append(item) 141 | item = [convert_to_ipv6(icmpv6_layer.prefix2), convert_to_ipv6(icmpv6_layer.prefix3)] 142 | if item not in rank[rootNode]: 143 | rank[rootNode].append(item) 144 | item = [convert_to_ipv6(icmpv6_layer.prefix3), convert_to_ipv6(icmpv6_layer.prefix4)] 145 | if item not in rank[rootNode]: 146 | rank[rootNode].append(item) 147 | 148 | if packet.haslayer(Icmpv6_dao_repeated4): 149 | icmpv6_layer = packet.getlayer(Icmpv6_dao_repeated4) 150 | srcAddress = ipv6_layer.srcAddr 151 | set_packet_size(srcAddress, Icmpv6_dao_repeated4(), packet_size) 152 | rootNode = convert_to_ipv6(icmpv6_layer.DODAGID) 153 | item = [rootNode, convert_to_ipv6(icmpv6_layer.prefix1)] 154 | if item not in rank[rootNode]: 155 | rank[rootNode].append(item) 156 | item = [convert_to_ipv6(icmpv6_layer.prefix1), convert_to_ipv6(icmpv6_layer.prefix2)] 157 | if item not in rank[rootNode]: 158 | rank[rootNode].append(item) 159 | item = [convert_to_ipv6(icmpv6_layer.prefix2), convert_to_ipv6(icmpv6_layer.prefix3)] 160 | if item not in rank[rootNode]: 161 | rank[rootNode].append(item) 162 | item = [convert_to_ipv6(icmpv6_layer.prefix3), convert_to_ipv6(icmpv6_layer.prefix4)] 163 | if item not in rank[rootNode]: 164 | rank[rootNode].append(item) 165 | item = [convert_to_ipv6(icmpv6_layer.prefix4), convert_to_ipv6(icmpv6_layer.prefix5)] 166 | if item not in rank[rootNode]: 167 | rank[rootNode].append(item) 168 | 169 | 170 | def packet_sniffer(): 171 | sniff(iface="h1-eth1", filter="ether proto 0x1000 or ether proto 0x1001 or ether proto 0x1002 or ether proto 0x1003", prn=packet_handler) 172 | 173 | if __name__ == '__main__': 174 | for n in range(1, 11): 175 | os.system("rm /var/www/localhost/htdocs/data{}.csv".format(n)) 176 | for n in range(2, 11): 177 | os.system("echo \"{},{}\" > /var/www/localhost/htdocs/data{}.csv".format("date","Sensor {}".format(n-1), n-1)) 178 | sniffer_thread = threading.Thread(target=packet_sniffer) 179 | sniffer_thread.daemon = True 180 | sniffer_thread.start() 181 | app.run(host='192.168.210.1', port=5000) -------------------------------------------------------------------------------- /p4/lowpan-non-storing.p4: -------------------------------------------------------------------------------- 1 | /* -*- P4_16 -*- */ 2 | #include 3 | #include 4 | 5 | /************************************************************************* 6 | *********************** H E A D E R S *********************************** 7 | *************************************************************************/ 8 | 9 | typedef bit<9> egressSpec_t; 10 | typedef bit<48> macAddr_t; 11 | typedef bit<32> ipv4Addr_t; 12 | typedef bit<16> tcpPort_t; 13 | typedef bit<128> ipv6Addr_t; 14 | 15 | 16 | // Cabeçalho 6LoWPAN 17 | header lowpan_t { 18 | bit<16> dispatch; // Tipo de pacote (IPv6, Fragmentação, etc.) 19 | bit<16> identification; // Identificação para fragmentação 20 | bit<16> ha_len; 21 | bit<64> unsed; 22 | bit<16> ethType; 23 | } 24 | 25 | header ethernet_t { 26 | macAddr_t dstAddr; 27 | macAddr_t srcAddr; 28 | bit<16> etherType; 29 | } 30 | 31 | header tcp_t { 32 | tcpPort_t srcPort; 33 | tcpPort_t dstPort; 34 | bit<32> seqNo; 35 | bit<32> ackNo; 36 | bit<4> dataOffset; 37 | bit<4> res; 38 | bit<8> flags; 39 | bit<16> window; 40 | bit<16> checksum; 41 | bit<16> urgentPtr; 42 | } 43 | 44 | header ipv6_t { 45 | bit<4> version; 46 | bit<8> trafficClass; 47 | bit<20> flowLabel; 48 | bit<16> payloadLength; 49 | bit<8> nextHeader; 50 | bit<8> hopLimit; 51 | bit<128> srcAddr; 52 | bit<128> dstAddr; 53 | } 54 | 55 | header icmpv6_dio_t { 56 | bit<8> type; 57 | bit<8> code; 58 | bit<16> checksum; 59 | // Campos adicionais específicos para RPL Control Message 60 | bit<8> RPLInstanceID; 61 | bit<8> version; 62 | bit<16> rank; 63 | bit<8> flags; 64 | bit<8> DTSN; 65 | bit<8> more_flags; 66 | bit<8> reserved; 67 | bit<128> DODAGID; 68 | // Opção de Roteamento 69 | bit<8> optionType; 70 | bit<8> optionLength; 71 | bit<8> prefixLength; 72 | bit<8> flag; 73 | bit<32> routeLifetime; 74 | bit<64> prefix; 75 | } 76 | 77 | header icmpv6_daoack_t { 78 | bit<8> type; 79 | bit<8> code; 80 | bit<16> checksum; 81 | bit<8> RPLInstanceID; 82 | bit<8> flag; 83 | bit<8> seq; 84 | bit<8> status; 85 | bit<128> DODAGID; 86 | } 87 | 88 | header icmpv6_dis_t { 89 | bit<8> type; 90 | bit<8> code; 91 | bit<16> checksum; 92 | bit<8> flags; 93 | bit<8> reserved; 94 | } 95 | 96 | header icmpv6_dao_t { 97 | bit<8> type; 98 | bit<8> code; 99 | bit<16> checksum; 100 | bit<8> RPLInstanceID; 101 | bit<8> flag; 102 | bit<8> reserved; 103 | bit<8> seq; 104 | bit<128> DODAGID; 105 | bit<8> rplTarget; 106 | bit<8> length; 107 | bit<8> rplReserved; 108 | bit<8> rplLength; 109 | bit<128> prefixTarget; 110 | bit<8> optType; 111 | bit<8> optLength; 112 | bit<8> optFlags; 113 | bit<8> optPathControl; 114 | bit<8> optPathSeq; 115 | bit<8> optPathLifetime; 116 | bit<128> optParent; 117 | } 118 | 119 | header metadata_t { 120 | bit<8> custom_value; 121 | } 122 | 123 | struct metadata { 124 | metadata_t meta; 125 | } 126 | 127 | struct headers { 128 | ethernet_t ethernet; 129 | lowpan_t lowpan; 130 | ipv6_t ipv6; 131 | icmpv6_dio_t icmpv6_dio; 132 | icmpv6_daoack_t icmpv6_daoack; 133 | icmpv6_dao_t icmpv6_dao; 134 | icmpv6_dis_t icmpv6_dis; 135 | } 136 | 137 | /************************************************************************* 138 | *********************** P A R S E R *********************************** 139 | *************************************************************************/ 140 | 141 | parser MyParser(packet_in packet, 142 | out headers hdr, 143 | inout metadata meta, 144 | inout standard_metadata_t standard_metadata) { 145 | 146 | state start { 147 | packet.extract(hdr.lowpan); 148 | transition select(hdr.lowpan.ethType) { 149 | 0x86dd: parse_ipv6; 150 | default: accept; 151 | } 152 | } 153 | 154 | state parse_ipv6 { 155 | packet.extract(hdr.ipv6); 156 | transition select(hdr.ipv6.payloadLength) { 157 | 0x2C: parse_icmpv6_dio; //44 158 | 0x06: parse_icmpv6_dis; //6 159 | 0x42: parse_icmpv6_dao; //66 160 | 0x18: parse_icmpv6_daoack; //24 161 | #default: accept; 162 | } 163 | } 164 | 165 | state parse_icmpv6_dio { 166 | packet.extract(hdr.icmpv6_dio); 167 | meta.meta.custom_value = hdr.icmpv6_dio.code; 168 | transition accept; 169 | } 170 | 171 | state parse_icmpv6_dis { 172 | packet.extract(hdr.icmpv6_dis); 173 | meta.meta.custom_value = hdr.icmpv6_dis.code; 174 | transition accept; 175 | } 176 | 177 | state parse_icmpv6_dao { 178 | packet.extract(hdr.icmpv6_dao); 179 | meta.meta.custom_value = hdr.icmpv6_dao.code; 180 | transition accept; 181 | } 182 | 183 | state parse_icmpv6_daoack { 184 | packet.extract(hdr.icmpv6_daoack); 185 | meta.meta.custom_value = hdr.icmpv6_daoack.code; 186 | transition accept; 187 | } 188 | } 189 | 190 | /************************************************************************* 191 | ************ C H E C K S U M V E R I F I C A T I O N ************* 192 | *************************************************************************/ 193 | 194 | control MyVerifyChecksum(inout headers hdr, inout metadata meta) { 195 | apply { } 196 | } 197 | 198 | /************************************************************************* 199 | ************** I N G R E S S P R O C E S S I N G ******************* 200 | *************************************************************************/ 201 | 202 | control MyIngress(inout headers hdr, 203 | inout metadata meta, 204 | inout standard_metadata_t standard_metadata) { 205 | 206 | action drop() { 207 | mark_to_drop(standard_metadata); 208 | } 209 | 210 | action set_egress_port(egressSpec_t port) { 211 | if (meta.meta.custom_value == 0x0 || meta.meta.custom_value == 0x1 || meta.meta.custom_value == 0x2 || meta.meta.custom_value == 0x3){ 212 | if (meta.meta.custom_value == 0x0) { 213 | hdr.ethernet.etherType = 0x1000; //dis 214 | } 215 | else if (meta.meta.custom_value == 0x1) { 216 | hdr.ethernet.etherType = 0x1001; //dio 217 | } 218 | else if (meta.meta.custom_value == 0x2) { 219 | hdr.ethernet.etherType = 0x1002; //dao 220 | } 221 | else if (meta.meta.custom_value == 0x3) { 222 | hdr.ethernet.etherType = 0x1003; //daoack 223 | } 224 | standard_metadata.egress_spec = port; 225 | } 226 | else{ 227 | standard_metadata.egress_spec = 0; 228 | } 229 | meta.meta.custom_value = 0x4; 230 | } 231 | 232 | table port_table { 233 | key = { 234 | standard_metadata.ingress_port: exact; 235 | } 236 | actions = { 237 | set_egress_port; 238 | drop; 239 | } 240 | size = 256; 241 | default_action = drop(); 242 | } 243 | 244 | apply { 245 | hdr.ethernet.setValid(); 246 | #hdr.lowpan.unsed = 1111111111111111111111111111111; 247 | #hdr.ethernet.dstAddr = 0x112233445566; 248 | #hdr.ethernet.srcAddr = 0x665544332211; 249 | port_table.apply(); 250 | } 251 | } 252 | 253 | /************************************************************************* 254 | **************** E G R E S S P R O C E S S I N G ******************* 255 | *************************************************************************/ 256 | 257 | control MyEgress(inout headers hdr, 258 | inout metadata meta, 259 | inout standard_metadata_t standard_metadata) { 260 | apply { 261 | } 262 | } 263 | 264 | /************************************************************************* 265 | ************* C H E C K S U M C O M P U T A T I O N ************** 266 | *************************************************************************/ 267 | 268 | control MyComputeChecksum(inout headers hdr, inout metadata meta) { 269 | apply { 270 | } 271 | } 272 | 273 | /************************************************************************* 274 | *********************** D E P A R S E R ******************************* 275 | *************************************************************************/ 276 | 277 | control MyDeparser(packet_out packet, in headers hdr) { 278 | apply { 279 | packet.emit(hdr.ethernet); 280 | packet.emit(hdr.lowpan); 281 | packet.emit(hdr.ipv6); 282 | packet.emit(hdr.icmpv6_dio); 283 | packet.emit(hdr.icmpv6_dao); 284 | packet.emit(hdr.icmpv6_daoack); 285 | packet.emit(hdr.icmpv6_dis); 286 | } 287 | } 288 | 289 | /************************************************************************* 290 | *********************** S W I T C H ******************************* 291 | *************************************************************************/ 292 | 293 | //switch architecture 294 | V1Switch( 295 | MyParser(), 296 | MyVerifyChecksum(), 297 | MyIngress(), 298 | MyEgress(), 299 | MyComputeChecksum(), 300 | MyDeparser() 301 | ) main; 302 | -------------------------------------------------------------------------------- /headers.py: -------------------------------------------------------------------------------- 1 | from scapy.all import * 2 | from scapy.fields import * 3 | 4 | class Lowpan(Packet): 5 | name = "Lowpan" 6 | fields_desc = [ 7 | ShortField("dispatch", 0), 8 | ShortField("identification", 0), 9 | ShortField("ha_len", 0), 10 | LongField("unused", 0), 11 | ShortField("ethType", 0) 12 | ] 13 | 14 | class Lowpan1(Packet): 15 | name = "Lowpan" 16 | fields_desc = [ 17 | ShortField("dispatch", 0), 18 | ShortField("identification", 0), 19 | ShortField("ha_len", 0), 20 | LongField("unused", 0), 21 | ShortField("ethType", 0) 22 | ] 23 | 24 | class Lowpan2(Packet): 25 | name = "Lowpan" 26 | fields_desc = [ 27 | ShortField("dispatch", 0), 28 | ShortField("identification", 0), 29 | ShortField("ha_len", 0), 30 | LongField("unused", 0), 31 | ShortField("ethType", 0) 32 | ] 33 | 34 | class Lowpan3(Packet): 35 | name = "Lowpan" 36 | fields_desc = [ 37 | ShortField("dispatch", 0), 38 | ShortField("identification", 0), 39 | ShortField("ha_len", 0), 40 | LongField("unused", 0), 41 | ShortField("ethType", 0) 42 | ] 43 | 44 | 45 | class IPv6Custom(Packet): 46 | name = "IPv6Custom" 47 | fields_desc = [ 48 | BitField("version", 6, 4), 49 | BitField("trafficClass", 0, 8), 50 | BitField("flowLabel", 0, 20), 51 | ShortField("payloadLength", 0), 52 | ByteField("nextHeader", 0), 53 | ByteField("hopLimit", 0), 54 | IP6Field("srcAddr", "fe80::1"), 55 | IP6Field("dstAddr", "ff02::1a9b") 56 | ] 57 | 58 | class IPv6Custom1(Packet): 59 | name = "IPv6Custom" 60 | fields_desc = [ 61 | BitField("version", 6, 4), 62 | BitField("trafficClass", 0, 8), 63 | BitField("flowLabel", 0, 20), 64 | ShortField("payloadLength", 0), 65 | ByteField("nextHeader", 0), 66 | ByteField("hopLimit", 0), 67 | IP6Field("srcAddr", "fe80::1"), 68 | IP6Field("dstAddr", "ff02::1a9b") 69 | ] 70 | 71 | class IPv6Custom2(Packet): 72 | name = "IPv6Custom" 73 | fields_desc = [ 74 | BitField("version", 6, 4), 75 | BitField("trafficClass", 0, 8), 76 | BitField("flowLabel", 0, 20), 77 | ShortField("payloadLength", 0), 78 | ByteField("nextHeader", 0), 79 | ByteField("hopLimit", 0), 80 | IP6Field("srcAddr", "fe80::1"), 81 | IP6Field("dstAddr", "ff02::1a9b") 82 | ] 83 | 84 | # dis header 85 | class Icmpv6_dis(Packet): 86 | name = "Icmpv6_dis" 87 | fields_desc = [ 88 | ByteField("type", 0), 89 | ByteField("code", 0), 90 | ShortField("checksum", 0), 91 | ByteField("flags", 0), 92 | ByteField("reserved", 0), 93 | ] 94 | 95 | class IPv6Custom3(Packet): 96 | name = "IPv6Custom" 97 | fields_desc = [ 98 | BitField("version", 6, 4), 99 | BitField("trafficClass", 0, 8), 100 | BitField("flowLabel", 0, 20), 101 | ShortField("payloadLength", 0), 102 | ByteField("nextHeader", 0), 103 | ByteField("hopLimit", 0), 104 | IP6Field("srcAddr", "fe80::1"), 105 | IP6Field("dstAddr", "ff02::1a9b") 106 | ] 107 | 108 | # dio header 109 | class Icmpv6_dio(Packet): 110 | name = "Icmpv6_dio" 111 | fields_desc = [ 112 | ByteField("type", 0), 113 | ByteField("code", 0), 114 | ShortField("checksum", 0), 115 | ByteField("RPLInstanceID", 0), 116 | ByteField("version", 0), 117 | ShortField("rank", 0), 118 | ByteField("flags", 0), 119 | ByteField("DTSN", 0), 120 | ByteField("more_flags", 0), 121 | ByteField("reserved", 0), 122 | BitField("DODAGID", 0, 128), 123 | ByteField("optionType", 0), 124 | ByteField("optionLength", 0), 125 | ByteField("prefixLength", 0), 126 | ByteField("flag", 0), 127 | IntField("routeLifetime", 0), 128 | LongField("prefix", 0) 129 | ] 130 | 131 | # dao header 132 | class Icmpv6_dao(Packet): 133 | name = "Icmpv6_dao" 134 | fields_desc = [ 135 | ByteField("type", 0), 136 | ByteField("code", 0), 137 | ShortField("checksum", 0), 138 | ByteField("RPLInstanceID", 0), 139 | ByteField("flag", 0), 140 | ByteField("reserved", 0), 141 | ByteField("seq", 0), 142 | BitField("DODAGID", 0, 128), 143 | ByteField("rplTarget", 0), 144 | ByteField("length", 0), 145 | ByteField("rplReserved", 0), 146 | ByteField("rplLength", 0), 147 | BitField("prefixTarget", 0, 128), 148 | ByteField("optType", 0), 149 | ByteField("optLength", 0), 150 | ByteField("optFlags", 0), 151 | ByteField("optPathControl", 0), 152 | ByteField("optPathSeq", 0), 153 | ByteField("optPathLifetime", 0), 154 | BitField("parent", 0, 128) 155 | ] 156 | 157 | class Icmpv6_dao_repeated(Packet): 158 | name = "Icmpv6_dao_repeated" 159 | fields_desc = [ 160 | ByteField("type", 0), 161 | ByteField("code", 0), 162 | ShortField("checksum", 0), 163 | ByteField("RPLInstanceID", 0), 164 | ByteField("flag", 0), 165 | ByteField("reserved", 0), 166 | ByteField("seq", 0), 167 | BitField("DODAGID", 0, 128), 168 | ByteField("optionType", 0), 169 | ByteField("optionLength", 0), 170 | ByteField("rplReserved", 0), 171 | ByteField("prefixLength", 0), 172 | BitField("prefix", 0, 128), 173 | ByteField("ttime", 0), 174 | ByteField("len", 0), 175 | ByteField("flags", 0), 176 | ByteField("tcontrol", 0), 177 | ByteField("sequence", 0), 178 | ByteField("lifetime", 0), 179 | BitField("parent", 0, 128) 180 | ] 181 | 182 | class Icmpv6_dao_repeated1(Packet): 183 | name = "Icmpv6_dao_repeated1" 184 | fields_desc = [ 185 | ByteField("type", 0), 186 | ByteField("code", 0), 187 | ShortField("checksum", 0), 188 | ByteField("RPLInstanceID", 0), 189 | ByteField("flag", 0), 190 | ByteField("reserved", 0), 191 | ByteField("seq", 0), 192 | BitField("DODAGID", 0, 128), 193 | ByteField("optionType1", 0), 194 | ByteField("optionLength1", 0), 195 | ByteField("rplReserved1", 0), 196 | ByteField("prefixLength1", 0), 197 | BitField("prefix1", 0, 128), 198 | ByteField("ttime", 0), 199 | ByteField("len", 0), 200 | ByteField("flags", 0), 201 | ByteField("tcontrol", 0), 202 | ByteField("sequence", 0), 203 | ByteField("lifetime", 0), 204 | BitField("parent", 0, 128), 205 | ByteField("optionType2", 0), 206 | ByteField("optionLength2", 0), 207 | ByteField("rplReserved2", 0), 208 | ByteField("prefixLength2", 0), 209 | BitField("prefix2", 0, 128) 210 | ] 211 | 212 | class Icmpv6_dao_repeated2(Packet): 213 | name = "Icmpv6_dao_repeated2" 214 | fields_desc = [ 215 | ByteField("type", 0), 216 | ByteField("code", 0), 217 | ShortField("checksum", 0), 218 | ByteField("RPLInstanceID", 0), 219 | ByteField("flag", 0), 220 | ByteField("reserved", 0), 221 | ByteField("seq", 0), 222 | BitField("DODAGID", 0, 128), 223 | ByteField("optionType1", 0), 224 | ByteField("optionLength1", 0), 225 | ByteField("rplReserved1", 0), 226 | ByteField("prefixLength1", 0), 227 | BitField("prefix1", 0, 128), 228 | ByteField("ttime", 0), 229 | ByteField("len", 0), 230 | ByteField("flags", 0), 231 | ByteField("tcontrol", 0), 232 | ByteField("sequence", 0), 233 | ByteField("lifetime", 0), 234 | BitField("parent", 0, 128), 235 | ByteField("optionType2", 0), 236 | ByteField("optionLength2", 0), 237 | ByteField("rplReserved2", 0), 238 | ByteField("prefixLength2", 0), 239 | BitField("prefix2", 0, 128), 240 | ByteField("optionType3", 0), 241 | ByteField("optionLength3", 0), 242 | ByteField("rplReserved3", 0), 243 | ByteField("prefixLength3", 0), 244 | BitField("prefix3", 0, 128) 245 | ] 246 | 247 | class Icmpv6_dao_repeated3(Packet): 248 | name = "Icmpv6_dao_repeated3" 249 | fields_desc = [ 250 | ByteField("type", 0), 251 | ByteField("code", 0), 252 | ShortField("checksum", 0), 253 | ByteField("RPLInstanceID", 0), 254 | ByteField("flag", 0), 255 | ByteField("reserved", 0), 256 | ByteField("seq", 0), 257 | BitField("DODAGID", 0, 128), 258 | ByteField("optionType1", 0), 259 | ByteField("optionLength1", 0), 260 | ByteField("rplReserved1", 0), 261 | ByteField("prefixLength1", 0), 262 | BitField("prefix1", 0, 128), 263 | ByteField("ttime", 0), 264 | ByteField("len", 0), 265 | ByteField("flags", 0), 266 | ByteField("tcontrol", 0), 267 | ByteField("sequence", 0), 268 | ByteField("lifetime", 0), 269 | BitField("parent", 0, 128), 270 | ByteField("optionType2", 0), 271 | ByteField("optionLength2", 0), 272 | ByteField("rplReserved2", 0), 273 | ByteField("prefixLength2", 0), 274 | BitField("prefix2", 0, 128), 275 | ByteField("optionType3", 0), 276 | ByteField("optionLength3", 0), 277 | ByteField("rplReserved3", 0), 278 | ByteField("prefixLength3", 0), 279 | BitField("prefix3", 0, 128), 280 | ByteField("optionType4", 0), 281 | ByteField("optionLength4", 0), 282 | ByteField("rplReserved4", 0), 283 | ByteField("prefixLength4", 0), 284 | BitField("prefix4", 0, 128) 285 | ] 286 | 287 | class Icmpv6_dao_repeated4(Packet): 288 | name = "Icmpv6_dao_repeated4" 289 | fields_desc = [ 290 | ByteField("type", 0), 291 | ByteField("code", 0), 292 | ShortField("checksum", 0), 293 | ByteField("RPLInstanceID", 0), 294 | ByteField("flag", 0), 295 | ByteField("reserved", 0), 296 | ByteField("seq", 0), 297 | BitField("DODAGID", 0, 128), 298 | ByteField("optionType1", 0), 299 | ByteField("optionLength1", 0), 300 | ByteField("rplReserved1", 0), 301 | ByteField("prefixLength1", 0), 302 | BitField("prefix1", 0, 128), 303 | ByteField("ttime", 0), 304 | ByteField("len", 0), 305 | ByteField("flags", 0), 306 | ByteField("tcontrol", 0), 307 | ByteField("sequence", 0), 308 | ByteField("lifetime", 0), 309 | BitField("parent", 0, 128), 310 | ByteField("optionType2", 0), 311 | ByteField("optionLength2", 0), 312 | ByteField("rplReserved2", 0), 313 | ByteField("prefixLength2", 0), 314 | BitField("prefix2", 0, 128), 315 | ByteField("optionType3", 0), 316 | ByteField("optionLength3", 0), 317 | ByteField("rplReserved3", 0), 318 | ByteField("prefixLength3", 0), 319 | BitField("prefix3", 0, 128), 320 | ByteField("optionType4", 0), 321 | ByteField("optionLength4", 0), 322 | ByteField("rplReserved4", 0), 323 | ByteField("prefixLength4", 0), 324 | BitField("prefix4", 0, 128), 325 | ByteField("optionType5", 0), 326 | ByteField("optionLength5", 0), 327 | ByteField("rplReserved5", 0), 328 | ByteField("prefixLength5", 0), 329 | BitField("prefix5", 0, 128) 330 | ] 331 | 332 | # dao-ack header 333 | class Icmpv6_daoack(Packet): 334 | name = "Icmpv6_daoack" 335 | fields_desc = [ 336 | ByteField("type", 0), 337 | ByteField("code", 0), 338 | ShortField("checksum", 0), 339 | ByteField("RPLInstanceID", 0), 340 | ByteField("flag", 0), 341 | ByteField("seq", 0), 342 | ByteField("status", 0), 343 | BitField("DODAGID", 0, 128), 344 | ] -------------------------------------------------------------------------------- /p4/lowpan-storing.p4: -------------------------------------------------------------------------------- 1 | /* -*- P4_16 -*- */ 2 | #include 3 | #include 4 | 5 | /************************************************************************* 6 | *********************** H E A D E R S *********************************** 7 | *************************************************************************/ 8 | 9 | typedef bit<9> egressSpec_t; 10 | typedef bit<48> macAddr_t; 11 | typedef bit<32> ipv4Addr_t; 12 | typedef bit<16> tcpPort_t; 13 | typedef bit<128> ipv6Addr_t; 14 | 15 | 16 | // Cabeçalho 6LoWPAN 17 | header lowpan_t { 18 | bit<16> dispatch; // Tipo de pacote (IPv6, Fragmentação, etc.) 19 | bit<16> identification; // Identificação para fragmentação 20 | bit<16> ha_len; 21 | bit<64> unsed; 22 | bit<16> ethType; 23 | } 24 | 25 | header ethernet_t { 26 | macAddr_t dstAddr; 27 | macAddr_t srcAddr; 28 | bit<16> etherType; 29 | } 30 | 31 | header tcp_t { 32 | tcpPort_t srcPort; 33 | tcpPort_t dstPort; 34 | bit<32> seqNo; 35 | bit<32> ackNo; 36 | bit<4> dataOffset; 37 | bit<4> res; 38 | bit<8> flags; 39 | bit<16> window; 40 | bit<16> checksum; 41 | bit<16> urgentPtr; 42 | } 43 | 44 | header ipv6_t { 45 | bit<4> version; 46 | bit<8> trafficClass; 47 | bit<20> flowLabel; 48 | bit<16> payloadLength; 49 | bit<8> nextHeader; 50 | bit<8> hopLimit; 51 | bit<128> srcAddr; 52 | bit<128> dstAddr; 53 | } 54 | 55 | header icmpv6_dio_t { 56 | bit<8> type; 57 | bit<8> code; 58 | bit<16> checksum; 59 | // Campos adicionais específicos para RPL Control Message 60 | bit<8> RPLInstanceID; 61 | bit<8> version; 62 | bit<16> rank; 63 | bit<8> flags; 64 | bit<8> DTSN; 65 | bit<8> more_flags; 66 | bit<8> reserved; 67 | bit<128> DODAGID; 68 | // Opção de Roteamento 69 | bit<8> optionType; 70 | bit<8> optionLength; 71 | bit<8> prefixLength; 72 | bit<8> flag; 73 | bit<32> routeLifetime; 74 | bit<64> prefix; 75 | } 76 | 77 | header icmpv6_daoack_t { 78 | bit<8> type; 79 | bit<8> code; 80 | bit<16> checksum; 81 | bit<8> RPLInstanceID; 82 | bit<8> flag; 83 | bit<8> seq; 84 | bit<8> status; 85 | bit<128> DODAGID; 86 | } 87 | 88 | header icmpv6_dis_t { 89 | bit<8> type; 90 | bit<8> code; 91 | bit<16> checksum; 92 | bit<8> flags; 93 | bit<8> reserved; 94 | } 95 | 96 | header icmpv6_dao_repeated_t { 97 | bit<8> type; 98 | bit<8> code; 99 | bit<16> checksum; 100 | bit<8> RPLInstanceID; 101 | bit<8> flag; 102 | bit<8> reserved; 103 | bit<8> seq; 104 | bit<128> DODAGID; 105 | bit<8> optionType; 106 | bit<8> optionLength; 107 | bit<8> rplReserved; 108 | bit<8> prefixLength; 109 | bit<128> prefix; 110 | bit<8> ttime; 111 | bit<8> len; 112 | bit<8> flags; 113 | bit<8> tcontrol; 114 | bit<8> sequence; 115 | bit<8> lifetime; 116 | bit<128> parent; 117 | } 118 | 119 | header icmpv6_dao_repeated1_t { 120 | bit<8> type; 121 | bit<8> code; 122 | bit<16> checksum; 123 | bit<8> RPLInstanceID; 124 | bit<8> flag; 125 | bit<8> reserved; 126 | bit<8> seq; 127 | bit<128> DODAGID; 128 | bit<8> optionType1; 129 | bit<8> optionLength1; 130 | bit<8> rplReserved1; 131 | bit<8> prefixLength1; 132 | bit<128> prefix1; 133 | bit<8> optionType2; 134 | bit<8> optionLength2; 135 | bit<8> rplReserved2; 136 | bit<8> prefixLength2; 137 | bit<128> prefix2; 138 | } 139 | 140 | header icmpv6_dao_repeated2_t { 141 | bit<8> type; 142 | bit<8> code; 143 | bit<16> checksum; 144 | bit<8> RPLInstanceID; 145 | bit<8> flag; 146 | bit<8> reserved; 147 | bit<8> seq; 148 | bit<128> DODAGID; 149 | bit<8> optionType1; 150 | bit<8> optionLength1; 151 | bit<8> rplReserved1; 152 | bit<8> prefixLength1; 153 | bit<128> prefix1; 154 | bit<8> optionType2; 155 | bit<8> optionLength2; 156 | bit<8> rplReserved2; 157 | bit<8> prefixLength2; 158 | bit<128> prefix2; 159 | bit<8> optionType3; 160 | bit<8> optionLength3; 161 | bit<8> rplReserved3; 162 | bit<8> prefixLength3; 163 | bit<128> prefix3; 164 | } 165 | 166 | header icmpv6_dao_repeated3_t { 167 | bit<8> type; 168 | bit<8> code; 169 | bit<16> checksum; 170 | bit<8> RPLInstanceID; 171 | bit<8> flag; 172 | bit<8> reserved; 173 | bit<8> seq; 174 | bit<128> DODAGID; 175 | bit<8> optionType1; 176 | bit<8> optionLength1; 177 | bit<8> rplReserved1; 178 | bit<8> prefixLength1; 179 | bit<128> prefix1; 180 | bit<8> optionType2; 181 | bit<8> optionLength2; 182 | bit<8> rplReserved2; 183 | bit<8> prefixLength2; 184 | bit<128> prefix2; 185 | bit<8> optionType3; 186 | bit<8> optionLength3; 187 | bit<8> rplReserved3; 188 | bit<8> prefixLength3; 189 | bit<128> prefix3; 190 | bit<8> optionType4; 191 | bit<8> optionLength4; 192 | bit<8> rplReserved4; 193 | bit<8> prefixLength4; 194 | bit<128> prefix4; 195 | } 196 | 197 | header icmpv6_dao_repeated4_t { 198 | bit<8> type; 199 | bit<8> code; 200 | bit<16> checksum; 201 | bit<8> RPLInstanceID; 202 | bit<8> flag; 203 | bit<8> reserved; 204 | bit<8> seq; 205 | bit<128> DODAGID; 206 | bit<8> optionType1; 207 | bit<8> optionLength1; 208 | bit<8> rplReserved1; 209 | bit<8> prefixLength1; 210 | bit<128> prefix1; 211 | bit<8> optionType2; 212 | bit<8> optionLength2; 213 | bit<8> rplReserved2; 214 | bit<8> prefixLength2; 215 | bit<128> prefix2; 216 | bit<8> optionType3; 217 | bit<8> optionLength3; 218 | bit<8> rplReserved3; 219 | bit<8> prefixLength3; 220 | bit<128> prefix3; 221 | bit<8> optionType4; 222 | bit<8> optionLength4; 223 | bit<8> rplReserved4; 224 | bit<8> prefixLength4; 225 | bit<128> prefix4; 226 | bit<8> optionType5; 227 | bit<8> optionLength5; 228 | bit<8> rplReserved5; 229 | bit<8> prefixLength5; 230 | bit<128> prefix5; 231 | } 232 | 233 | header icmpv6_dao_t { 234 | bit<8> type; 235 | bit<8> code; 236 | bit<16> checksum; 237 | bit<8> RPLInstanceID; 238 | bit<8> flag; 239 | bit<8> reserved; 240 | bit<8> seq; 241 | bit<128> DODAGID; 242 | } 243 | 244 | header metadata_t { 245 | bit<8> custom_value; 246 | } 247 | 248 | struct metadata { 249 | metadata_t meta; 250 | } 251 | 252 | struct headers { 253 | ethernet_t ethernet; 254 | lowpan_t lowpan; 255 | ipv6_t ipv6; 256 | icmpv6_dio_t icmpv6_dio; 257 | icmpv6_daoack_t icmpv6_daoack; 258 | icmpv6_dao_t icmpv6_dao; 259 | icmpv6_dao_repeated_t icmpv6_dao_repeated; 260 | icmpv6_dao_repeated1_t icmpv6_dao_repeated1; 261 | icmpv6_dao_repeated2_t icmpv6_dao_repeated2; 262 | icmpv6_dao_repeated3_t icmpv6_dao_repeated3; 263 | icmpv6_dao_repeated4_t icmpv6_dao_repeated4; 264 | icmpv6_dis_t icmpv6_dis; 265 | } 266 | 267 | /************************************************************************* 268 | *********************** P A R S E R *********************************** 269 | *************************************************************************/ 270 | 271 | parser MyParser(packet_in packet, 272 | out headers hdr, 273 | inout metadata meta, 274 | inout standard_metadata_t standard_metadata) { 275 | 276 | state start { 277 | packet.extract(hdr.lowpan); 278 | transition select(hdr.lowpan.ethType) { 279 | 0x86dd: parse_ipv6; 280 | default: accept; 281 | } 282 | } 283 | 284 | state parse_ipv6 { 285 | packet.extract(hdr.ipv6); 286 | transition select(hdr.ipv6.payloadLength, hdr.ipv6.srcAddr) { 287 | (0x2C, 0xff02_0000_0000_0000_0000_0000_0000_001a): parse_icmpv6_dio; 288 | (0x06, _): parse_icmpv6_dis; //6 289 | (0x42, _): parse_icmpv6_dao_repeated; //66 290 | (0x56, _): parse_icmpv6_dao_repeated1; //86 291 | (0x6A, _): parse_icmpv6_dao_repeated2; //106 292 | (0x7E, _): parse_icmpv6_dao_repeated3; //126 293 | (0x92, _): parse_icmpv6_dao_repeated4; //146 294 | (0x18, _): parse_icmpv6_daoack; //24 295 | #default: accept; 296 | } 297 | } 298 | 299 | state parse_icmpv6_dio { 300 | packet.extract(hdr.icmpv6_dio); 301 | meta.meta.custom_value = hdr.icmpv6_dio.code; 302 | transition accept; 303 | } 304 | 305 | state parse_icmpv6_dis { 306 | packet.extract(hdr.icmpv6_dis); 307 | meta.meta.custom_value = hdr.icmpv6_dis.code; 308 | transition accept; 309 | } 310 | 311 | state parse_icmpv6_dao_repeated { 312 | packet.extract(hdr.icmpv6_dao_repeated); 313 | meta.meta.custom_value = hdr.icmpv6_dao_repeated.code; 314 | transition accept; 315 | } 316 | 317 | state parse_icmpv6_dao_repeated1 { 318 | packet.extract(hdr.icmpv6_dao_repeated1); 319 | meta.meta.custom_value = hdr.icmpv6_dao_repeated1.code; 320 | transition accept; 321 | } 322 | 323 | state parse_icmpv6_dao_repeated2 { 324 | packet.extract(hdr.icmpv6_dao_repeated2); 325 | meta.meta.custom_value = hdr.icmpv6_dao_repeated2.code; 326 | transition accept; 327 | } 328 | 329 | state parse_icmpv6_dao_repeated3 { 330 | packet.extract(hdr.icmpv6_dao_repeated3); 331 | meta.meta.custom_value = hdr.icmpv6_dao_repeated3.code; 332 | transition accept; 333 | } 334 | 335 | state parse_icmpv6_dao_repeated4 { 336 | packet.extract(hdr.icmpv6_dao_repeated4); 337 | meta.meta.custom_value = hdr.icmpv6_dao_repeated4.code; 338 | transition accept; 339 | } 340 | 341 | state parse_icmpv6_daoack { 342 | packet.extract(hdr.icmpv6_daoack); 343 | meta.meta.custom_value = hdr.icmpv6_daoack.code; 344 | transition accept; 345 | } 346 | } 347 | 348 | /************************************************************************* 349 | ************ C H E C K S U M V E R I F I C A T I O N ************* 350 | *************************************************************************/ 351 | 352 | control MyVerifyChecksum(inout headers hdr, inout metadata meta) { 353 | apply { } 354 | } 355 | 356 | /************************************************************************* 357 | ************** I N G R E S S P R O C E S S I N G ******************* 358 | *************************************************************************/ 359 | 360 | control MyIngress(inout headers hdr, 361 | inout metadata meta, 362 | inout standard_metadata_t standard_metadata) { 363 | 364 | action drop() { 365 | mark_to_drop(standard_metadata); 366 | } 367 | 368 | action set_egress_port(egressSpec_t port) { 369 | if (meta.meta.custom_value == 0x0 || meta.meta.custom_value == 0x1 || meta.meta.custom_value == 0x2 || meta.meta.custom_value == 0x3){ 370 | if (meta.meta.custom_value == 0x0) { 371 | hdr.ethernet.etherType = 0x1000; //dis 372 | } 373 | else if (meta.meta.custom_value == 0x1) { 374 | hdr.ethernet.etherType = 0x1001; //dio 375 | } 376 | else if (meta.meta.custom_value == 0x2) { 377 | hdr.ethernet.etherType = 0x1002; //dao 378 | } 379 | else if (meta.meta.custom_value == 0x3) { 380 | hdr.ethernet.etherType = 0x1003; //daoack 381 | } 382 | standard_metadata.egress_spec = port; 383 | } 384 | else{ 385 | standard_metadata.egress_spec = 0; 386 | } 387 | } 388 | 389 | table port_table { 390 | key = { 391 | standard_metadata.ingress_port: exact; 392 | } 393 | actions = { 394 | set_egress_port; 395 | drop; 396 | } 397 | size = 256; 398 | default_action = drop(); 399 | } 400 | 401 | apply { 402 | hdr.ethernet.setValid(); 403 | #hdr.lowpan.unsed = 1111111111111111111111111111111; 404 | #hdr.ethernet.dstAddr = 0x112233445566; 405 | #hdr.ethernet.srcAddr = 0x665544332211; 406 | port_table.apply(); 407 | } 408 | } 409 | 410 | /************************************************************************* 411 | **************** E G R E S S P R O C E S S I N G ******************* 412 | *************************************************************************/ 413 | 414 | control MyEgress(inout headers hdr, 415 | inout metadata meta, 416 | inout standard_metadata_t standard_metadata) { 417 | apply { 418 | } 419 | } 420 | 421 | /************************************************************************* 422 | ************* C H E C K S U M C O M P U T A T I O N ************** 423 | *************************************************************************/ 424 | 425 | control MyComputeChecksum(inout headers hdr, inout metadata meta) { 426 | apply { 427 | } 428 | } 429 | 430 | /************************************************************************* 431 | *********************** D E P A R S E R ******************************* 432 | *************************************************************************/ 433 | 434 | control MyDeparser(packet_out packet, in headers hdr) { 435 | apply { 436 | packet.emit(hdr.ethernet); 437 | packet.emit(hdr.lowpan); 438 | packet.emit(hdr.ipv6); 439 | packet.emit(hdr.icmpv6_dio); 440 | packet.emit(hdr.icmpv6_dao); 441 | packet.emit(hdr.icmpv6_dao_repeated); 442 | packet.emit(hdr.icmpv6_dao_repeated1); 443 | packet.emit(hdr.icmpv6_dao_repeated2); 444 | packet.emit(hdr.icmpv6_dao_repeated3); 445 | packet.emit(hdr.icmpv6_dao_repeated4); 446 | packet.emit(hdr.icmpv6_daoack); 447 | packet.emit(hdr.icmpv6_dis); 448 | } 449 | } 450 | 451 | /************************************************************************* 452 | *********************** S W I T C H ******************************* 453 | *************************************************************************/ 454 | 455 | //switch architecture 456 | V1Switch( 457 | MyParser(), 458 | MyVerifyChecksum(), 459 | MyIngress(), 460 | MyEgress(), 461 | MyComputeChecksum(), 462 | MyDeparser() 463 | ) main; 464 | -------------------------------------------------------------------------------- /assets/images/5.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Title: 5.eps 3 | %%Creator: Matplotlib v3.6.3, https://matplotlib.org/ 4 | %%CreationDate: Thu Dec 12 08:42:00 2024 5 | %%Orientation: portrait 6 | %%BoundingBox: -54 180 666 612 7 | %%HiResBoundingBox: -54.000000 180.000000 666.000000 612.000000 8 | %%EndComments 9 | %%BeginProlog 10 | /mpldict 12 dict def 11 | mpldict begin 12 | /_d { bind def } bind def 13 | /m { moveto } _d 14 | /l { lineto } _d 15 | /r { rlineto } _d 16 | /c { curveto } _d 17 | /cl { closepath } _d 18 | /ce { closepath eofill } _d 19 | /box { 20 | m 21 | 1 index 0 r 22 | 0 exch r 23 | neg 0 r 24 | cl 25 | } _d 26 | /clipbox { 27 | box 28 | clip 29 | newpath 30 | } _d 31 | /sc { setcachedevice } _d 32 | %!PS-Adobe-3.0 Resource-Font 33 | %%Creator: Converted from TrueType to Type 3 by Matplotlib. 34 | 10 dict begin 35 | /FontName /DejaVuSans def 36 | /PaintType 0 def 37 | /FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def 38 | /FontBBox [-2090 -948 3673 2524] def 39 | /FontType 3 def 40 | /Encoding [/space /B /e /n /o /zero /one /r /S /s /two /five /t /four /y /eight /six] def 41 | /CharStrings 18 dict dup begin 42 | /.notdef 0 def 43 | /space{651 0 0 0 0 0 sc 44 | ce} _d 45 | /B{1405 0 201 0 1260 1493 sc 46 | 403 713 m 47 | 403 166 l 48 | 727 166 l 49 | 836 166 916 188 968 233 c 50 | 1021 278 1047 347 1047 440 c 51 | 1047 533 1021 602 968 646 c 52 | 916 691 836 713 727 713 c 53 | 403 713 l 54 | 55 | 403 1327 m 56 | 403 877 l 57 | 702 877 l 58 | 801 877 874 895 922 932 c 59 | 971 969 995 1026 995 1102 c 60 | 995 1177 971 1234 922 1271 c 61 | 874 1308 801 1327 702 1327 c 62 | 403 1327 l 63 | 64 | 201 1493 m 65 | 717 1493 l 66 | 871 1493 990 1461 1073 1397 c 67 | 1156 1333 1198 1242 1198 1124 c 68 | 1198 1033 1177 960 1134 906 c 69 | 1091 852 1029 818 946 805 c 70 | 1045 784 1122 739 1177 671 c 71 | 1232 604 1260 519 1260 418 c 72 | 1260 285 1215 182 1124 109 c 73 | 1033 36 904 0 737 0 c 74 | 201 0 l 75 | 201 1493 l 76 | 77 | ce} _d 78 | /e{1260 0 113 -29 1151 1147 sc 79 | 1151 606 m 80 | 1151 516 l 81 | 305 516 l 82 | 313 389 351 293 419 226 c 83 | 488 160 583 127 705 127 c 84 | 776 127 844 136 910 153 c 85 | 977 170 1043 196 1108 231 c 86 | 1108 57 l 87 | 1042 29 974 8 905 -7 c 88 | 836 -22 765 -29 694 -29 c 89 | 515 -29 374 23 269 127 c 90 | 165 231 113 372 113 549 c 91 | 113 732 162 878 261 985 c 92 | 360 1093 494 1147 662 1147 c 93 | 813 1147 932 1098 1019 1001 c 94 | 1107 904 1151 773 1151 606 c 95 | 96 | 967 660 m 97 | 966 761 937 841 882 901 c 98 | 827 961 755 991 664 991 c 99 | 561 991 479 962 417 904 c 100 | 356 846 320 764 311 659 c 101 | 967 660 l 102 | 103 | ce} _d 104 | /n{1298 0 186 0 1124 1147 sc 105 | 1124 676 m 106 | 1124 0 l 107 | 940 0 l 108 | 940 670 l 109 | 940 776 919 855 878 908 c 110 | 837 961 775 987 692 987 c 111 | 593 987 514 955 457 892 c 112 | 400 829 371 742 371 633 c 113 | 371 0 l 114 | 186 0 l 115 | 186 1120 l 116 | 371 1120 l 117 | 371 946 l 118 | 415 1013 467 1064 526 1097 c 119 | 586 1130 655 1147 733 1147 c 120 | 862 1147 959 1107 1025 1027 c 121 | 1091 948 1124 831 1124 676 c 122 | 123 | ce} _d 124 | /o{1253 0 113 -29 1141 1147 sc 125 | 627 991 m 126 | 528 991 450 952 393 875 c 127 | 336 798 307 693 307 559 c 128 | 307 425 335 319 392 242 c 129 | 449 165 528 127 627 127 c 130 | 725 127 803 166 860 243 c 131 | 917 320 946 426 946 559 c 132 | 946 692 917 797 860 874 c 133 | 803 952 725 991 627 991 c 134 | 135 | 627 1147 m 136 | 787 1147 913 1095 1004 991 c 137 | 1095 887 1141 743 1141 559 c 138 | 1141 376 1095 232 1004 127 c 139 | 913 23 787 -29 627 -29 c 140 | 466 -29 340 23 249 127 c 141 | 158 232 113 376 113 559 c 142 | 113 743 158 887 249 991 c 143 | 340 1095 466 1147 627 1147 c 144 | 145 | ce} _d 146 | /zero{1303 0 135 -29 1167 1520 sc 147 | 651 1360 m 148 | 547 1360 469 1309 416 1206 c 149 | 364 1104 338 950 338 745 c 150 | 338 540 364 387 416 284 c 151 | 469 182 547 131 651 131 c 152 | 756 131 834 182 886 284 c 153 | 939 387 965 540 965 745 c 154 | 965 950 939 1104 886 1206 c 155 | 834 1309 756 1360 651 1360 c 156 | 157 | 651 1520 m 158 | 818 1520 946 1454 1034 1321 c 159 | 1123 1189 1167 997 1167 745 c 160 | 1167 494 1123 302 1034 169 c 161 | 946 37 818 -29 651 -29 c 162 | 484 -29 356 37 267 169 c 163 | 179 302 135 494 135 745 c 164 | 135 997 179 1189 267 1321 c 165 | 356 1454 484 1520 651 1520 c 166 | 167 | ce} _d 168 | /one{1303 0 225 0 1114 1493 sc 169 | 254 170 m 170 | 584 170 l 171 | 584 1309 l 172 | 225 1237 l 173 | 225 1421 l 174 | 582 1493 l 175 | 784 1493 l 176 | 784 170 l 177 | 1114 170 l 178 | 1114 0 l 179 | 254 0 l 180 | 254 170 l 181 | 182 | ce} _d 183 | /r{842 0 186 0 842 1147 sc 184 | 842 948 m 185 | 821 960 799 969 774 974 c 186 | 750 980 723 983 694 983 c 187 | 590 983 510 949 454 881 c 188 | 399 814 371 717 371 590 c 189 | 371 0 l 190 | 186 0 l 191 | 186 1120 l 192 | 371 1120 l 193 | 371 946 l 194 | 410 1014 460 1064 522 1097 c 195 | 584 1130 659 1147 748 1147 c 196 | 761 1147 775 1146 790 1144 c 197 | 805 1143 822 1140 841 1137 c 198 | 842 948 l 199 | 200 | ce} _d 201 | /S{1300 0 135 -29 1186 1520 sc 202 | 1096 1444 m 203 | 1096 1247 l 204 | 1019 1284 947 1311 879 1329 c 205 | 811 1347 745 1356 682 1356 c 206 | 572 1356 487 1335 427 1292 c 207 | 368 1249 338 1189 338 1110 c 208 | 338 1044 358 994 397 960 c 209 | 437 927 512 900 623 879 c 210 | 745 854 l 211 | 896 825 1007 775 1078 702 c 212 | 1150 630 1186 533 1186 412 c 213 | 1186 267 1137 158 1040 83 c 214 | 943 8 801 -29 614 -29 c 215 | 543 -29 468 -21 388 -5 c 216 | 309 11 226 35 141 66 c 217 | 141 274 l 218 | 223 228 303 193 382 170 c 219 | 461 147 538 135 614 135 c 220 | 729 135 818 158 881 203 c 221 | 944 248 975 313 975 397 c 222 | 975 470 952 528 907 569 c 223 | 862 610 789 641 686 662 c 224 | 563 686 l 225 | 412 716 303 763 236 827 c 226 | 169 891 135 980 135 1094 c 227 | 135 1226 181 1330 274 1406 c 228 | 367 1482 496 1520 659 1520 c 229 | 729 1520 800 1514 873 1501 c 230 | 946 1488 1020 1469 1096 1444 c 231 | 232 | ce} _d 233 | /s{1067 0 111 -29 967 1147 sc 234 | 907 1087 m 235 | 907 913 l 236 | 855 940 801 960 745 973 c 237 | 689 986 631 993 571 993 c 238 | 480 993 411 979 365 951 c 239 | 320 923 297 881 297 825 c 240 | 297 782 313 749 346 724 c 241 | 379 700 444 677 543 655 c 242 | 606 641 l 243 | 737 613 829 573 884 522 c 244 | 939 471 967 400 967 309 c 245 | 967 205 926 123 843 62 c 246 | 761 1 648 -29 504 -29 c 247 | 444 -29 381 -23 316 -11 c 248 | 251 0 183 18 111 41 c 249 | 111 231 l 250 | 179 196 246 169 312 151 c 251 | 378 134 443 125 508 125 c 252 | 595 125 661 140 708 169 c 253 | 755 199 778 241 778 295 c 254 | 778 345 761 383 727 410 c 255 | 694 437 620 462 506 487 c 256 | 442 502 l 257 | 328 526 246 563 195 612 c 258 | 144 662 119 730 119 817 c 259 | 119 922 156 1004 231 1061 c 260 | 306 1118 412 1147 549 1147 c 261 | 617 1147 681 1142 741 1132 c 262 | 801 1122 856 1107 907 1087 c 263 | 264 | ce} _d 265 | /two{1303 0 150 0 1098 1520 sc 266 | 393 170 m 267 | 1098 170 l 268 | 1098 0 l 269 | 150 0 l 270 | 150 170 l 271 | 227 249 331 356 463 489 c 272 | 596 623 679 709 713 748 c 273 | 778 821 823 882 848 932 c 274 | 874 983 887 1032 887 1081 c 275 | 887 1160 859 1225 803 1275 c 276 | 748 1325 675 1350 586 1350 c 277 | 523 1350 456 1339 385 1317 c 278 | 315 1295 240 1262 160 1217 c 279 | 160 1421 l 280 | 241 1454 317 1478 388 1495 c 281 | 459 1512 523 1520 582 1520 c 282 | 737 1520 860 1481 952 1404 c 283 | 1044 1327 1090 1223 1090 1094 c 284 | 1090 1033 1078 974 1055 919 c 285 | 1032 864 991 800 930 725 c 286 | 913 706 860 650 771 557 c 287 | 682 465 556 336 393 170 c 288 | 289 | ce} _d 290 | /five{1303 0 158 -29 1124 1493 sc 291 | 221 1493 m 292 | 1014 1493 l 293 | 1014 1323 l 294 | 406 1323 l 295 | 406 957 l 296 | 435 967 465 974 494 979 c 297 | 523 984 553 987 582 987 c 298 | 749 987 881 941 978 850 c 299 | 1075 759 1124 635 1124 479 c 300 | 1124 318 1074 193 974 104 c 301 | 874 15 733 -29 551 -29 c 302 | 488 -29 424 -24 359 -13 c 303 | 294 -2 227 14 158 35 c 304 | 158 238 l 305 | 218 205 280 181 344 165 c 306 | 408 149 476 141 547 141 c 307 | 662 141 754 171 821 232 c 308 | 888 293 922 375 922 479 c 309 | 922 583 888 665 821 726 c 310 | 754 787 662 817 547 817 c 311 | 493 817 439 811 385 799 c 312 | 332 787 277 768 221 743 c 313 | 221 1493 l 314 | 315 | ce} _d 316 | /t{803 0 55 0 754 1438 sc 317 | 375 1438 m 318 | 375 1120 l 319 | 754 1120 l 320 | 754 977 l 321 | 375 977 l 322 | 375 369 l 323 | 375 278 387 219 412 193 c 324 | 437 167 488 154 565 154 c 325 | 754 154 l 326 | 754 0 l 327 | 565 0 l 328 | 423 0 325 26 271 79 c 329 | 217 132 190 229 190 369 c 330 | 190 977 l 331 | 55 977 l 332 | 55 1120 l 333 | 190 1120 l 334 | 190 1438 l 335 | 375 1438 l 336 | 337 | ce} _d 338 | /four{1303 0 100 0 1188 1493 sc 339 | 774 1317 m 340 | 264 520 l 341 | 774 520 l 342 | 774 1317 l 343 | 344 | 721 1493 m 345 | 975 1493 l 346 | 975 520 l 347 | 1188 520 l 348 | 1188 352 l 349 | 975 352 l 350 | 975 0 l 351 | 774 0 l 352 | 774 352 l 353 | 100 352 l 354 | 100 547 l 355 | 721 1493 l 356 | 357 | ce} _d 358 | /y{1212 0 61 -426 1151 1120 sc 359 | 659 -104 m 360 | 607 -237 556 -324 507 -365 c 361 | 458 -406 392 -426 309 -426 c 362 | 162 -426 l 363 | 162 -272 l 364 | 270 -272 l 365 | 321 -272 360 -260 388 -236 c 366 | 416 -212 447 -155 481 -66 c 367 | 514 18 l 368 | 61 1120 l 369 | 256 1120 l 370 | 606 244 l 371 | 956 1120 l 372 | 1151 1120 l 373 | 659 -104 l 374 | 375 | ce} _d 376 | /eight{1303 0 139 -29 1163 1520 sc 377 | 651 709 m 378 | 555 709 479 683 424 632 c 379 | 369 581 342 510 342 420 c 380 | 342 330 369 259 424 208 c 381 | 479 157 555 131 651 131 c 382 | 747 131 823 157 878 208 c 383 | 933 260 961 331 961 420 c 384 | 961 510 933 581 878 632 c 385 | 823 683 748 709 651 709 c 386 | 387 | 449 795 m 388 | 362 816 295 857 246 916 c 389 | 198 975 174 1048 174 1133 c 390 | 174 1252 216 1347 301 1416 c 391 | 386 1485 503 1520 651 1520 c 392 | 800 1520 916 1485 1001 1416 c 393 | 1086 1347 1128 1252 1128 1133 c 394 | 1128 1048 1104 975 1055 916 c 395 | 1007 857 940 816 854 795 c 396 | 951 772 1027 728 1081 662 c 397 | 1136 596 1163 515 1163 420 c 398 | 1163 275 1119 164 1030 87 c 399 | 942 10 816 -29 651 -29 c 400 | 486 -29 360 10 271 87 c 401 | 183 164 139 275 139 420 c 402 | 139 515 166 596 221 662 c 403 | 276 728 352 772 449 795 c 404 | 405 | 375 1114 m 406 | 375 1037 399 976 447 933 c 407 | 496 890 564 868 651 868 c 408 | 738 868 805 890 854 933 c 409 | 903 976 928 1037 928 1114 c 410 | 928 1191 903 1252 854 1295 c 411 | 805 1338 738 1360 651 1360 c 412 | 564 1360 496 1338 447 1295 c 413 | 399 1252 375 1191 375 1114 c 414 | 415 | ce} _d 416 | /six{1303 0 143 -29 1174 1520 sc 417 | 676 827 m 418 | 585 827 513 796 460 734 c 419 | 407 672 381 587 381 479 c 420 | 381 372 407 287 460 224 c 421 | 513 162 585 131 676 131 c 422 | 767 131 838 162 891 224 c 423 | 944 287 971 372 971 479 c 424 | 971 587 944 672 891 734 c 425 | 838 796 767 827 676 827 c 426 | 427 | 1077 1460 m 428 | 1077 1276 l 429 | 1026 1300 975 1318 923 1331 c 430 | 872 1344 821 1350 770 1350 c 431 | 637 1350 535 1305 464 1215 c 432 | 394 1125 354 989 344 807 c 433 | 383 865 433 909 492 940 c 434 | 551 971 617 987 688 987 c 435 | 838 987 956 941 1043 850 c 436 | 1130 759 1174 636 1174 479 c 437 | 1174 326 1129 203 1038 110 c 438 | 947 17 827 -29 676 -29 c 439 | 503 -29 371 37 280 169 c 440 | 189 302 143 494 143 745 c 441 | 143 981 199 1169 311 1309 c 442 | 423 1450 573 1520 762 1520 c 443 | 813 1520 864 1515 915 1505 c 444 | 967 1495 1021 1480 1077 1460 c 445 | 446 | ce} _d 447 | end readonly def 448 | 449 | /BuildGlyph { 450 | exch begin 451 | CharStrings exch 452 | 2 copy known not {pop /.notdef} if 453 | true 3 1 roll get exec 454 | end 455 | } _d 456 | 457 | /BuildChar { 458 | 1 index /Encoding get exch get 459 | 1 index /BuildGlyph get exec 460 | } _d 461 | 462 | FontName currentdict end definefont pop 463 | %!PS-Adobe-3.0 Resource-Font 464 | %%Creator: Converted from TrueType to Type 3 by Matplotlib. 465 | 10 dict begin 466 | /FontName /DejaVuSans-Bold def 467 | /PaintType 0 def 468 | /FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def 469 | /FontBBox [-2190 -850 4045 2405] def 470 | /FontType 3 def 471 | /Encoding [/space /parenleft /parenright /hyphen /five /L /P /S /T /a /c /e /g /h /i /k /l /n /o /r /s /t] def 472 | /CharStrings 23 dict dup begin 473 | /.notdef 0 def 474 | /space{713 0 0 0 0 0 sc 475 | ce} _d 476 | /parenleft{936 0 176 -270 772 1554 sc 477 | 772 -270 m 478 | 475 -270 l 479 | 373 -105 298 51 249 199 c 480 | 200 348 176 495 176 641 c 481 | 176 787 200 935 249 1084 c 482 | 298 1234 374 1391 475 1554 c 483 | 772 1554 l 484 | 687 1396 623 1241 580 1090 c 485 | 537 939 516 790 516 643 c 486 | 516 496 537 346 579 195 c 487 | 622 44 686 -111 772 -270 c 488 | 489 | ce} _d 490 | /parenright{936 0 164 -270 760 1554 sc 491 | 164 -270 m 492 | 249 -111 313 44 356 195 c 493 | 399 346 420 496 420 643 c 494 | 420 790 399 939 356 1090 c 495 | 313 1241 249 1396 164 1554 c 496 | 461 1554 l 497 | 562 1391 637 1234 686 1084 c 498 | 735 935 760 787 760 641 c 499 | 760 495 736 348 687 199 c 500 | 638 51 563 -105 461 -270 c 501 | 164 -270 l 502 | 503 | ce} _d 504 | /hyphen{850 0 111 444 739 735 sc 505 | 111 735 m 506 | 739 735 l 507 | 739 444 l 508 | 111 444 l 509 | 111 735 l 510 | 511 | ce} _d 512 | /five{1425 0 158 -29 1282 1493 sc 513 | 217 1493 m 514 | 1174 1493 l 515 | 1174 1210 l 516 | 524 1210 l 517 | 524 979 l 518 | 553 987 583 993 612 997 c 519 | 642 1002 673 1004 705 1004 c 520 | 887 1004 1029 958 1130 867 c 521 | 1231 776 1282 650 1282 487 c 522 | 1282 326 1227 199 1116 108 c 523 | 1006 17 853 -29 657 -29 c 524 | 572 -29 488 -21 405 -4 c 525 | 322 12 240 37 158 70 c 526 | 158 373 l 527 | 239 326 316 291 389 268 c 528 | 462 245 531 233 596 233 c 529 | 689 233 763 256 816 301 c 530 | 870 347 897 409 897 487 c 531 | 897 566 870 628 816 673 c 532 | 763 718 689 741 596 741 c 533 | 541 741 482 734 419 719 c 534 | 356 705 289 683 217 653 c 535 | 217 1493 l 536 | 537 | ce} _d 538 | /L{1305 0 188 0 1249 1493 sc 539 | 188 1493 m 540 | 573 1493 l 541 | 573 291 l 542 | 1249 291 l 543 | 1249 0 l 544 | 188 0 l 545 | 188 1493 l 546 | 547 | ce} _d 548 | /P{1501 0 188 0 1417 1493 sc 549 | 188 1493 m 550 | 827 1493 l 551 | 1017 1493 1163 1451 1264 1366 c 552 | 1366 1282 1417 1162 1417 1006 c 553 | 1417 849 1366 729 1264 644 c 554 | 1163 560 1017 518 827 518 c 555 | 573 518 l 556 | 573 0 l 557 | 188 0 l 558 | 188 1493 l 559 | 560 | 573 1214 m 561 | 573 797 l 562 | 786 797 l 563 | 861 797 918 815 959 851 c 564 | 1000 888 1020 939 1020 1006 c 565 | 1020 1073 1000 1124 959 1160 c 566 | 918 1196 861 1214 786 1214 c 567 | 573 1214 l 568 | 569 | ce} _d 570 | /S{1475 0 147 -29 1325 1520 sc 571 | 1227 1446 m 572 | 1227 1130 l 573 | 1145 1167 1065 1194 987 1213 c 574 | 909 1232 835 1241 766 1241 c 575 | 674 1241 606 1228 562 1203 c 576 | 518 1178 496 1138 496 1085 c 577 | 496 1045 511 1014 540 991 c 578 | 570 969 624 950 702 934 c 579 | 866 901 l 580 | 1032 868 1150 817 1220 749 c 581 | 1290 681 1325 584 1325 459 c 582 | 1325 294 1276 172 1178 91 c 583 | 1081 11 932 -29 731 -29 c 584 | 636 -29 541 -20 446 -2 c 585 | 351 16 255 43 160 78 c 586 | 160 403 l 587 | 255 352 347 314 436 288 c 588 | 525 263 611 250 694 250 c 589 | 778 250 842 264 887 292 c 590 | 932 320 954 360 954 412 c 591 | 954 459 939 495 908 520 c 592 | 878 545 818 568 727 588 c 593 | 578 621 l 594 | 429 653 319 704 250 774 c 595 | 181 844 147 938 147 1057 c 596 | 147 1206 195 1320 291 1400 c 597 | 387 1480 525 1520 705 1520 c 598 | 787 1520 871 1514 958 1501 c 599 | 1045 1489 1134 1471 1227 1446 c 600 | 601 | ce} _d 602 | /T{1397 0 10 0 1386 1493 sc 603 | 10 1493 m 604 | 1386 1493 l 605 | 1386 1202 l 606 | 891 1202 l 607 | 891 0 l 608 | 506 0 l 609 | 506 1202 l 610 | 10 1202 l 611 | 10 1493 l 612 | 613 | ce} _d 614 | /a{1382 0 88 -29 1221 1147 sc 615 | 674 504 m 616 | 599 504 543 491 505 466 c 617 | 468 441 449 403 449 354 c 618 | 449 309 464 273 494 247 c 619 | 525 222 567 209 621 209 c 620 | 688 209 745 233 791 281 c 621 | 837 330 860 390 860 463 c 622 | 860 504 l 623 | 674 504 l 624 | 625 | 1221 639 m 626 | 1221 0 l 627 | 860 0 l 628 | 860 166 l 629 | 812 98 758 48 698 17 c 630 | 638 -14 565 -29 479 -29 c 631 | 363 -29 269 5 196 72 c 632 | 124 140 88 228 88 336 c 633 | 88 467 133 564 223 625 c 634 | 314 686 456 717 649 717 c 635 | 860 717 l 636 | 860 745 l 637 | 860 802 838 843 793 869 c 638 | 748 896 679 909 584 909 c 639 | 507 909 436 901 370 886 c 640 | 304 871 243 848 186 817 c 641 | 186 1090 l 642 | 263 1109 340 1123 417 1132 c 643 | 494 1142 572 1147 649 1147 c 644 | 851 1147 997 1107 1086 1027 c 645 | 1176 948 1221 818 1221 639 c 646 | 647 | ce} _d 648 | /c{1214 0 88 -29 1077 1147 sc 649 | 1077 1085 m 650 | 1077 793 l 651 | 1028 826 979 851 930 867 c 652 | 881 883 831 891 778 891 c 653 | 678 891 600 862 544 803 c 654 | 489 745 461 664 461 559 c 655 | 461 454 489 373 544 314 c 656 | 600 256 678 227 778 227 c 657 | 834 227 887 235 937 252 c 658 | 988 269 1034 293 1077 326 c 659 | 1077 33 l 660 | 1021 12 964 -3 906 -13 c 661 | 849 -24 791 -29 733 -29 c 662 | 531 -29 373 23 259 126 c 663 | 145 230 88 374 88 559 c 664 | 88 744 145 888 259 991 c 665 | 373 1095 531 1147 733 1147 c 666 | 792 1147 849 1142 906 1131 c 667 | 963 1121 1020 1106 1077 1085 c 668 | 669 | ce} _d 670 | /e{1389 0 88 -29 1290 1147 sc 671 | 1290 563 m 672 | 1290 461 l 673 | 453 461 l 674 | 462 377 492 314 544 272 c 675 | 596 230 669 209 762 209 c 676 | 837 209 914 220 993 242 c 677 | 1072 265 1154 299 1237 344 c 678 | 1237 68 l 679 | 1152 36 1068 12 983 -4 c 680 | 898 -21 814 -29 729 -29 c 681 | 526 -29 369 22 256 125 c 682 | 144 228 88 373 88 559 c 683 | 88 742 143 885 253 990 c 684 | 364 1095 516 1147 709 1147 c 685 | 885 1147 1026 1094 1131 988 c 686 | 1237 882 1290 740 1290 563 c 687 | 688 | 922 682 m 689 | 922 750 902 805 862 846 c 690 | 823 888 771 909 707 909 c 691 | 638 909 581 889 538 850 c 692 | 495 811 468 755 457 682 c 693 | 922 682 l 694 | 695 | ce} _d 696 | /g{1466 0 92 -442 1294 1145 sc 697 | 934 190 m 698 | 885 125 830 77 771 46 c 699 | 712 15 643 0 565 0 c 700 | 428 0 315 54 226 161 c 701 | 137 269 92 406 92 573 c 702 | 92 740 137 877 226 984 c 703 | 315 1091 428 1145 565 1145 c 704 | 643 1145 712 1130 771 1099 c 705 | 830 1068 885 1020 934 954 c 706 | 934 1120 l 707 | 1294 1120 l 708 | 1294 113 l 709 | 1294 -67 1237 -204 1123 -299 c 710 | 1010 -394 845 -442 629 -442 c 711 | 559 -442 491 -437 426 -426 c 712 | 361 -415 295 -399 229 -377 c 713 | 229 -98 l 714 | 292 -134 353 -161 413 -178 c 715 | 473 -196 533 -205 594 -205 c 716 | 711 -205 797 -179 852 -128 c 717 | 907 -77 934 4 934 113 c 718 | 934 190 l 719 | 720 | 698 887 m 721 | 624 887 566 860 525 805 c 722 | 484 750 463 673 463 573 c 723 | 463 470 483 392 523 339 c 724 | 563 286 621 260 698 260 c 725 | 773 260 831 287 872 342 c 726 | 913 397 934 474 934 573 c 727 | 934 673 913 750 872 805 c 728 | 831 860 773 887 698 887 c 729 | 730 | ce} _d 731 | /h{1458 0 172 0 1298 1556 sc 732 | 1298 682 m 733 | 1298 0 l 734 | 938 0 l 735 | 938 111 l 736 | 938 520 l 737 | 938 618 936 685 931 722 c 738 | 927 759 920 786 909 803 c 739 | 895 826 876 844 852 857 c 740 | 828 870 801 877 770 877 c 741 | 695 877 637 848 594 790 c 742 | 551 733 530 653 530 551 c 743 | 530 0 l 744 | 172 0 l 745 | 172 1556 l 746 | 530 1556 l 747 | 530 956 l 748 | 584 1021 641 1069 702 1100 c 749 | 763 1131 830 1147 903 1147 c 750 | 1032 1147 1130 1107 1197 1028 c 751 | 1264 949 1298 833 1298 682 c 752 | 753 | ce} _d 754 | /i{702 0 172 0 530 1556 sc 755 | 172 1120 m 756 | 530 1120 l 757 | 530 0 l 758 | 172 0 l 759 | 172 1120 l 760 | 761 | 172 1556 m 762 | 530 1556 l 763 | 530 1264 l 764 | 172 1264 l 765 | 172 1556 l 766 | 767 | ce} _d 768 | /k{1362 0 172 0 1401 1556 sc 769 | 172 1556 m 770 | 530 1556 l 771 | 530 709 l 772 | 942 1120 l 773 | 1358 1120 l 774 | 811 606 l 775 | 1401 0 l 776 | 967 0 l 777 | 530 467 l 778 | 530 0 l 779 | 172 0 l 780 | 172 1556 l 781 | 782 | ce} _d 783 | /l{702 0 172 0 530 1556 sc 784 | 172 1556 m 785 | 530 1556 l 786 | 530 0 l 787 | 172 0 l 788 | 172 1556 l 789 | 790 | ce} _d 791 | /n{1458 0 172 0 1298 1147 sc 792 | 1298 682 m 793 | 1298 0 l 794 | 938 0 l 795 | 938 111 l 796 | 938 522 l 797 | 938 619 936 685 931 722 c 798 | 927 759 920 786 909 803 c 799 | 895 826 876 844 852 857 c 800 | 828 870 801 877 770 877 c 801 | 695 877 637 848 594 790 c 802 | 551 733 530 653 530 551 c 803 | 530 0 l 804 | 172 0 l 805 | 172 1120 l 806 | 530 1120 l 807 | 530 956 l 808 | 584 1021 641 1069 702 1100 c 809 | 763 1131 830 1147 903 1147 c 810 | 1032 1147 1130 1107 1197 1028 c 811 | 1264 949 1298 833 1298 682 c 812 | 813 | ce} _d 814 | /o{1407 0 88 -29 1319 1147 sc 815 | 705 891 m 816 | 626 891 565 862 523 805 c 817 | 482 748 461 666 461 559 c 818 | 461 452 482 369 523 312 c 819 | 565 255 626 227 705 227 c 820 | 783 227 843 255 884 312 c 821 | 925 369 946 452 946 559 c 822 | 946 666 925 748 884 805 c 823 | 843 862 783 891 705 891 c 824 | 825 | 705 1147 m 826 | 898 1147 1048 1095 1156 991 c 827 | 1265 887 1319 743 1319 559 c 828 | 1319 375 1265 231 1156 127 c 829 | 1048 23 898 -29 705 -29 c 830 | 512 -29 360 23 251 127 c 831 | 142 231 88 375 88 559 c 832 | 88 743 142 887 251 991 c 833 | 360 1095 512 1147 705 1147 c 834 | 835 | ce} _d 836 | /r{1010 0 172 0 1004 1147 sc 837 | 1004 815 m 838 | 973 830 941 840 910 847 c 839 | 879 854 848 858 817 858 c 840 | 725 858 654 828 604 769 c 841 | 555 710 530 626 530 516 c 842 | 530 0 l 843 | 172 0 l 844 | 172 1120 l 845 | 530 1120 l 846 | 530 936 l 847 | 576 1009 629 1063 688 1096 c 848 | 748 1130 820 1147 903 1147 c 849 | 915 1147 928 1146 942 1145 c 850 | 956 1144 976 1142 1003 1139 c 851 | 1004 815 l 852 | 853 | ce} _d 854 | /s{1219 0 106 -29 1122 1147 sc 855 | 1047 1085 m 856 | 1047 813 l 857 | 970 845 896 869 825 885 c 858 | 754 901 686 909 623 909 c 859 | 555 909 504 900 471 883 c 860 | 438 866 422 840 422 805 c 861 | 422 776 434 754 459 739 c 862 | 484 724 529 712 594 705 c 863 | 657 696 l 864 | 840 673 964 634 1027 581 c 865 | 1090 528 1122 444 1122 330 c 866 | 1122 211 1078 121 990 61 c 867 | 902 1 771 -29 596 -29 c 868 | 522 -29 445 -23 366 -11 c 869 | 287 0 206 18 123 41 c 870 | 123 313 l 871 | 194 278 267 252 342 235 c 872 | 417 218 494 209 571 209 c 873 | 641 209 694 219 729 238 c 874 | 764 257 782 286 782 324 c 875 | 782 356 770 380 745 395 c 876 | 721 411 673 423 600 432 c 877 | 537 440 l 878 | 378 460 266 497 202 551 c 879 | 138 605 106 687 106 797 c 880 | 106 916 147 1004 228 1061 c 881 | 309 1118 434 1147 602 1147 c 882 | 668 1147 737 1142 810 1132 c 883 | 883 1122 962 1106 1047 1085 c 884 | 885 | ce} _d 886 | /t{979 0 27 0 932 1438 sc 887 | 563 1438 m 888 | 563 1120 l 889 | 932 1120 l 890 | 932 864 l 891 | 563 864 l 892 | 563 389 l 893 | 563 337 573 302 594 283 c 894 | 615 265 656 256 717 256 c 895 | 901 256 l 896 | 901 0 l 897 | 594 0 l 898 | 453 0 352 29 293 88 c 899 | 234 147 205 248 205 389 c 900 | 205 864 l 901 | 27 864 l 902 | 27 1120 l 903 | 205 1120 l 904 | 205 1438 l 905 | 563 1438 l 906 | 907 | ce} _d 908 | end readonly def 909 | 910 | /BuildGlyph { 911 | exch begin 912 | CharStrings exch 913 | 2 copy known not {pop /.notdef} if 914 | true 3 1 roll get exec 915 | end 916 | } _d 917 | 918 | /BuildChar { 919 | 1 index /Encoding get exch get 920 | 1 index /BuildGlyph get exec 921 | } _d 922 | 923 | FontName currentdict end definefont pop 924 | end 925 | %%EndProlog 926 | mpldict begin 927 | -54 180 translate 928 | 720 432 0 0 clipbox 929 | gsave 930 | 0 0 m 931 | 720 0 l 932 | 720 432 l 933 | 0 432 l 934 | cl 935 | 1.000 setgray 936 | fill 937 | grestore 938 | gsave 939 | 90 47.52 m 940 | 648 47.52 l 941 | 648 380.16 l 942 | 90 380.16 l 943 | cl 944 | 1.000 setgray 945 | fill 946 | grestore 947 | gsave 948 | 558 332.64 90 47.52 clipbox 949 | 115.363636 47.52 m 950 | 260.298701 47.52 l 951 | 260.298701 288.883584 l 952 | 115.363636 288.883584 l 953 | cl 954 | 0.529 0.808 0.922 setrgbcolor 955 | fill 956 | grestore 957 | gsave 958 | 558 332.64 90 47.52 clipbox 959 | 296.532468 47.52 m 960 | 441.467532 47.52 l 961 | 441.467532 341.041536 l 962 | 296.532468 341.041536 l 963 | cl 964 | 0.529 0.808 0.922 setrgbcolor 965 | fill 966 | grestore 967 | gsave 968 | 558 332.64 90 47.52 clipbox 969 | 477.701299 47.52 m 970 | 622.636364 47.52 l 971 | 622.636364 320.550912 l 972 | 477.701299 320.550912 l 973 | cl 974 | 0.529 0.808 0.922 setrgbcolor 975 | fill 976 | grestore 977 | 0.800 setlinewidth 978 | 1 setlinejoin 979 | 0 setlinecap 980 | [] 0 setdash 981 | 0.000 setgray 982 | gsave 983 | /o { 984 | gsave 985 | newpath 986 | translate 987 | 0.8 setlinewidth 988 | 1 setlinejoin 989 | 990 | 0 setlinecap 991 | 992 | 0 0 m 993 | 0 -3.5 l 994 | 995 | gsave 996 | 0.000 setgray 997 | fill 998 | grestore 999 | stroke 1000 | grestore 1001 | } bind def 1002 | 187.831 47.52 o 1003 | grestore 1004 | /DejaVuSans 10.000 selectfont 1005 | gsave 1006 | 1007 | 165.909 32.9262 translate 1008 | 0 rotate 1009 | 0 0 m /S glyphshow 1010 | 6.34766 0 m /e glyphshow 1011 | 12.5 0 m /n glyphshow 1012 | 18.8379 0 m /s glyphshow 1013 | 24.0479 0 m /o glyphshow 1014 | 30.166 0 m /r glyphshow 1015 | 34.2773 0 m /space glyphshow 1016 | 37.4561 0 m /one glyphshow 1017 | grestore 1018 | gsave 1019 | /o { 1020 | gsave 1021 | newpath 1022 | translate 1023 | 0.8 setlinewidth 1024 | 1 setlinejoin 1025 | 1026 | 0 setlinecap 1027 | 1028 | 0 0 m 1029 | 0 -3.5 l 1030 | 1031 | gsave 1032 | 0.000 setgray 1033 | fill 1034 | grestore 1035 | stroke 1036 | grestore 1037 | } bind def 1038 | 369 47.52 o 1039 | grestore 1040 | /DejaVuSans 10.000 selectfont 1041 | gsave 1042 | 1043 | 347.078 32.9262 translate 1044 | 0 rotate 1045 | 0 0 m /S glyphshow 1046 | 6.34766 0 m /e glyphshow 1047 | 12.5 0 m /n glyphshow 1048 | 18.8379 0 m /s glyphshow 1049 | 24.0479 0 m /o glyphshow 1050 | 30.166 0 m /r glyphshow 1051 | 34.2773 0 m /space glyphshow 1052 | 37.4561 0 m /two glyphshow 1053 | grestore 1054 | gsave 1055 | /o { 1056 | gsave 1057 | newpath 1058 | translate 1059 | 0.8 setlinewidth 1060 | 1 setlinejoin 1061 | 1062 | 0 setlinecap 1063 | 1064 | 0 0 m 1065 | 0 -3.5 l 1066 | 1067 | gsave 1068 | 0.000 setgray 1069 | fill 1070 | grestore 1071 | stroke 1072 | grestore 1073 | } bind def 1074 | 550.169 47.52 o 1075 | grestore 1076 | /DejaVuSans 10.000 selectfont 1077 | gsave 1078 | 1079 | 528.247 32.9262 translate 1080 | 0 rotate 1081 | 0 0 m /S glyphshow 1082 | 6.34766 0 m /e glyphshow 1083 | 12.5 0 m /n glyphshow 1084 | 18.8379 0 m /s glyphshow 1085 | 24.0479 0 m /o glyphshow 1086 | 30.166 0 m /r glyphshow 1087 | 34.2773 0 m /space glyphshow 1088 | 37.4561 0 m /five glyphshow 1089 | grestore 1090 | /DejaVuSans 14.000 selectfont 1091 | gsave 1092 | 1093 | 341.359 16.2075 translate 1094 | 0 rotate 1095 | 0 0 m /S glyphshow 1096 | 8.88672 0 m /e glyphshow 1097 | 17.5 0 m /n glyphshow 1098 | 26.373 0 m /s glyphshow 1099 | 33.667 0 m /o glyphshow 1100 | 42.2324 0 m /r glyphshow 1101 | 47.9883 0 m /s glyphshow 1102 | grestore 1103 | gsave 1104 | /o { 1105 | gsave 1106 | newpath 1107 | translate 1108 | 0.8 setlinewidth 1109 | 1 setlinejoin 1110 | 1111 | 0 setlinecap 1112 | 1113 | -0 0 m 1114 | -3.5 0 l 1115 | 1116 | gsave 1117 | 0.000 setgray 1118 | fill 1119 | grestore 1120 | stroke 1121 | grestore 1122 | } bind def 1123 | 90 47.52 o 1124 | grestore 1125 | /DejaVuSans 10.000 selectfont 1126 | gsave 1127 | 1128 | 76.6406 43.7231 translate 1129 | 0 rotate 1130 | 0 0 m /zero glyphshow 1131 | grestore 1132 | gsave 1133 | /o { 1134 | gsave 1135 | newpath 1136 | translate 1137 | 0.8 setlinewidth 1138 | 1 setlinejoin 1139 | 1140 | 0 setlinecap 1141 | 1142 | -0 0 m 1143 | -3.5 0 l 1144 | 1145 | gsave 1146 | 0.000 setgray 1147 | fill 1148 | grestore 1149 | stroke 1150 | grestore 1151 | } bind def 1152 | 90 114.048 o 1153 | grestore 1154 | /DejaVuSans 10.000 selectfont 1155 | gsave 1156 | 1157 | 63.9219 110.251 translate 1158 | 0 rotate 1159 | 0 0 m /five glyphshow 1160 | 6.3623 0 m /zero glyphshow 1161 | 12.7246 0 m /zero glyphshow 1162 | grestore 1163 | gsave 1164 | /o { 1165 | gsave 1166 | newpath 1167 | translate 1168 | 0.8 setlinewidth 1169 | 1 setlinejoin 1170 | 1171 | 0 setlinecap 1172 | 1173 | -0 0 m 1174 | -3.5 0 l 1175 | 1176 | gsave 1177 | 0.000 setgray 1178 | fill 1179 | grestore 1180 | stroke 1181 | grestore 1182 | } bind def 1183 | 90 180.576 o 1184 | grestore 1185 | /DejaVuSans 10.000 selectfont 1186 | gsave 1187 | 1188 | 57.5625 176.779 translate 1189 | 0 rotate 1190 | 0 0 m /one glyphshow 1191 | 6.3623 0 m /zero glyphshow 1192 | 12.7246 0 m /zero glyphshow 1193 | 19.0869 0 m /zero glyphshow 1194 | grestore 1195 | gsave 1196 | /o { 1197 | gsave 1198 | newpath 1199 | translate 1200 | 0.8 setlinewidth 1201 | 1 setlinejoin 1202 | 1203 | 0 setlinecap 1204 | 1205 | -0 0 m 1206 | -3.5 0 l 1207 | 1208 | gsave 1209 | 0.000 setgray 1210 | fill 1211 | grestore 1212 | stroke 1213 | grestore 1214 | } bind def 1215 | 90 247.104 o 1216 | grestore 1217 | /DejaVuSans 10.000 selectfont 1218 | gsave 1219 | 1220 | 57.5625 243.307 translate 1221 | 0 rotate 1222 | 0 0 m /one glyphshow 1223 | 6.3623 0 m /five glyphshow 1224 | 12.7246 0 m /zero glyphshow 1225 | 19.0869 0 m /zero glyphshow 1226 | grestore 1227 | gsave 1228 | /o { 1229 | gsave 1230 | newpath 1231 | translate 1232 | 0.8 setlinewidth 1233 | 1 setlinejoin 1234 | 1235 | 0 setlinecap 1236 | 1237 | -0 0 m 1238 | -3.5 0 l 1239 | 1240 | gsave 1241 | 0.000 setgray 1242 | fill 1243 | grestore 1244 | stroke 1245 | grestore 1246 | } bind def 1247 | 90 313.632 o 1248 | grestore 1249 | /DejaVuSans 10.000 selectfont 1250 | gsave 1251 | 1252 | 57.5625 309.835 translate 1253 | 0 rotate 1254 | 0 0 m /two glyphshow 1255 | 6.3623 0 m /zero glyphshow 1256 | 12.7246 0 m /zero glyphshow 1257 | 19.0869 0 m /zero glyphshow 1258 | grestore 1259 | gsave 1260 | /o { 1261 | gsave 1262 | newpath 1263 | translate 1264 | 0.8 setlinewidth 1265 | 1 setlinejoin 1266 | 1267 | 0 setlinecap 1268 | 1269 | -0 0 m 1270 | -3.5 0 l 1271 | 1272 | gsave 1273 | 0.000 setgray 1274 | fill 1275 | grestore 1276 | stroke 1277 | grestore 1278 | } bind def 1279 | 90 380.16 o 1280 | grestore 1281 | /DejaVuSans 10.000 selectfont 1282 | gsave 1283 | 1284 | 57.5625 376.363 translate 1285 | 0 rotate 1286 | 0 0 m /two glyphshow 1287 | 6.3623 0 m /five glyphshow 1288 | 12.7246 0 m /zero glyphshow 1289 | 19.0869 0 m /zero glyphshow 1290 | grestore 1291 | /DejaVuSans 14.000 selectfont 1292 | gsave 1293 | 1294 | 50.6562 194.199 translate 1295 | 90 rotate 1296 | 0 0 m /B glyphshow 1297 | 9.60449 0 m /y glyphshow 1298 | 17.8896 0 m /t glyphshow 1299 | 23.3789 0 m /e glyphshow 1300 | 31.9922 0 m /s glyphshow 1301 | grestore 1302 | 0 setlinejoin 1303 | 2 setlinecap 1304 | gsave 1305 | 90 47.52 m 1306 | 90 380.16 l 1307 | stroke 1308 | grestore 1309 | gsave 1310 | 648 47.52 m 1311 | 648 380.16 l 1312 | stroke 1313 | grestore 1314 | gsave 1315 | 90 47.52 m 1316 | 648 47.52 l 1317 | stroke 1318 | grestore 1319 | gsave 1320 | 90 380.16 m 1321 | 648 380.16 l 1322 | stroke 1323 | grestore 1324 | /DejaVuSans 10.000 selectfont 1325 | gsave 1326 | 1327 | 175.112 304.267 translate 1328 | 0 rotate 1329 | 0 0 m /one glyphshow 1330 | 6.3623 0 m /eight glyphshow 1331 | 12.7246 0 m /one glyphshow 1332 | 19.0869 0 m /four glyphshow 1333 | grestore 1334 | /DejaVuSans 10.000 selectfont 1335 | gsave 1336 | 1337 | 356.281 356.425 translate 1338 | 0 rotate 1339 | 0 0 m /two glyphshow 1340 | 6.3623 0 m /two glyphshow 1341 | 12.7246 0 m /zero glyphshow 1342 | 19.0869 0 m /six glyphshow 1343 | grestore 1344 | /DejaVuSans 10.000 selectfont 1345 | gsave 1346 | 1347 | 537.45 335.935 translate 1348 | 0 rotate 1349 | 0 0 m /two glyphshow 1350 | 6.3623 0 m /zero glyphshow 1351 | 12.7246 0 m /five glyphshow 1352 | 19.0869 0 m /two glyphshow 1353 | grestore 1354 | /DejaVuSans-Bold 16.000 selectfont 1355 | gsave 1356 | 1357 | 212.562 400.16 translate 1358 | 0 rotate 1359 | 0 0 m /T glyphshow 1360 | 8.78906 0 m /o glyphshow 1361 | 19.7812 0 m /t glyphshow 1362 | 27.4297 0 m /a glyphshow 1363 | 38.2266 0 m /l glyphshow 1364 | 43.7109 0 m /space glyphshow 1365 | 49.2812 0 m /P glyphshow 1366 | 60.6328 0 m /a glyphshow 1367 | 71.4297 0 m /c glyphshow 1368 | 80.9141 0 m /k glyphshow 1369 | 91.1797 0 m /e glyphshow 1370 | 102.031 0 m /t glyphshow 1371 | 109.68 0 m /space glyphshow 1372 | 115.25 0 m /L glyphshow 1373 | 125.445 0 m /e glyphshow 1374 | 136.297 0 m /n glyphshow 1375 | 147.688 0 m /g glyphshow 1376 | 159.141 0 m /t glyphshow 1377 | 166.789 0 m /h glyphshow 1378 | 178.18 0 m /s glyphshow 1379 | 187.703 0 m /space glyphshow 1380 | 193.273 0 m /hyphen glyphshow 1381 | 199.914 0 m /space glyphshow 1382 | 205.484 0 m /S glyphshow 1383 | 217.008 0 m /t glyphshow 1384 | 224.656 0 m /o glyphshow 1385 | 235.648 0 m /r glyphshow 1386 | 243.539 0 m /i glyphshow 1387 | 249.023 0 m /n glyphshow 1388 | 260.414 0 m /g glyphshow 1389 | 271.867 0 m /space glyphshow 1390 | 277.438 0 m /parenleft glyphshow 1391 | 284.75 0 m /five glyphshow 1392 | 295.883 0 m /s glyphshow 1393 | 305.406 0 m /parenright glyphshow 1394 | grestore 1395 | 1396 | end 1397 | showpage 1398 | -------------------------------------------------------------------------------- /assets/images/10.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Title: 10.eps 3 | %%Creator: Matplotlib v3.6.3, https://matplotlib.org/ 4 | %%CreationDate: Thu Dec 12 08:42:01 2024 5 | %%Orientation: portrait 6 | %%BoundingBox: -54 180 666 612 7 | %%HiResBoundingBox: -54.000000 180.000000 666.000000 612.000000 8 | %%EndComments 9 | %%BeginProlog 10 | /mpldict 12 dict def 11 | mpldict begin 12 | /_d { bind def } bind def 13 | /m { moveto } _d 14 | /l { lineto } _d 15 | /r { rlineto } _d 16 | /c { curveto } _d 17 | /cl { closepath } _d 18 | /ce { closepath eofill } _d 19 | /box { 20 | m 21 | 1 index 0 r 22 | 0 exch r 23 | neg 0 r 24 | cl 25 | } _d 26 | /clipbox { 27 | box 28 | clip 29 | newpath 30 | } _d 31 | /sc { setcachedevice } _d 32 | %!PS-Adobe-3.0 Resource-Font 33 | %%Creator: Converted from TrueType to Type 3 by Matplotlib. 34 | 10 dict begin 35 | /FontName /DejaVuSans def 36 | /PaintType 0 def 37 | /FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def 38 | /FontBBox [-2090 -948 3673 2524] def 39 | /FontType 3 def 40 | /Encoding [/space /B /eight /e /n /o /zero /one /r /S /s /two /five /t /four /y /three] def 41 | /CharStrings 18 dict dup begin 42 | /.notdef 0 def 43 | /space{651 0 0 0 0 0 sc 44 | ce} _d 45 | /B{1405 0 201 0 1260 1493 sc 46 | 403 713 m 47 | 403 166 l 48 | 727 166 l 49 | 836 166 916 188 968 233 c 50 | 1021 278 1047 347 1047 440 c 51 | 1047 533 1021 602 968 646 c 52 | 916 691 836 713 727 713 c 53 | 403 713 l 54 | 55 | 403 1327 m 56 | 403 877 l 57 | 702 877 l 58 | 801 877 874 895 922 932 c 59 | 971 969 995 1026 995 1102 c 60 | 995 1177 971 1234 922 1271 c 61 | 874 1308 801 1327 702 1327 c 62 | 403 1327 l 63 | 64 | 201 1493 m 65 | 717 1493 l 66 | 871 1493 990 1461 1073 1397 c 67 | 1156 1333 1198 1242 1198 1124 c 68 | 1198 1033 1177 960 1134 906 c 69 | 1091 852 1029 818 946 805 c 70 | 1045 784 1122 739 1177 671 c 71 | 1232 604 1260 519 1260 418 c 72 | 1260 285 1215 182 1124 109 c 73 | 1033 36 904 0 737 0 c 74 | 201 0 l 75 | 201 1493 l 76 | 77 | ce} _d 78 | /eight{1303 0 139 -29 1163 1520 sc 79 | 651 709 m 80 | 555 709 479 683 424 632 c 81 | 369 581 342 510 342 420 c 82 | 342 330 369 259 424 208 c 83 | 479 157 555 131 651 131 c 84 | 747 131 823 157 878 208 c 85 | 933 260 961 331 961 420 c 86 | 961 510 933 581 878 632 c 87 | 823 683 748 709 651 709 c 88 | 89 | 449 795 m 90 | 362 816 295 857 246 916 c 91 | 198 975 174 1048 174 1133 c 92 | 174 1252 216 1347 301 1416 c 93 | 386 1485 503 1520 651 1520 c 94 | 800 1520 916 1485 1001 1416 c 95 | 1086 1347 1128 1252 1128 1133 c 96 | 1128 1048 1104 975 1055 916 c 97 | 1007 857 940 816 854 795 c 98 | 951 772 1027 728 1081 662 c 99 | 1136 596 1163 515 1163 420 c 100 | 1163 275 1119 164 1030 87 c 101 | 942 10 816 -29 651 -29 c 102 | 486 -29 360 10 271 87 c 103 | 183 164 139 275 139 420 c 104 | 139 515 166 596 221 662 c 105 | 276 728 352 772 449 795 c 106 | 107 | 375 1114 m 108 | 375 1037 399 976 447 933 c 109 | 496 890 564 868 651 868 c 110 | 738 868 805 890 854 933 c 111 | 903 976 928 1037 928 1114 c 112 | 928 1191 903 1252 854 1295 c 113 | 805 1338 738 1360 651 1360 c 114 | 564 1360 496 1338 447 1295 c 115 | 399 1252 375 1191 375 1114 c 116 | 117 | ce} _d 118 | /e{1260 0 113 -29 1151 1147 sc 119 | 1151 606 m 120 | 1151 516 l 121 | 305 516 l 122 | 313 389 351 293 419 226 c 123 | 488 160 583 127 705 127 c 124 | 776 127 844 136 910 153 c 125 | 977 170 1043 196 1108 231 c 126 | 1108 57 l 127 | 1042 29 974 8 905 -7 c 128 | 836 -22 765 -29 694 -29 c 129 | 515 -29 374 23 269 127 c 130 | 165 231 113 372 113 549 c 131 | 113 732 162 878 261 985 c 132 | 360 1093 494 1147 662 1147 c 133 | 813 1147 932 1098 1019 1001 c 134 | 1107 904 1151 773 1151 606 c 135 | 136 | 967 660 m 137 | 966 761 937 841 882 901 c 138 | 827 961 755 991 664 991 c 139 | 561 991 479 962 417 904 c 140 | 356 846 320 764 311 659 c 141 | 967 660 l 142 | 143 | ce} _d 144 | /n{1298 0 186 0 1124 1147 sc 145 | 1124 676 m 146 | 1124 0 l 147 | 940 0 l 148 | 940 670 l 149 | 940 776 919 855 878 908 c 150 | 837 961 775 987 692 987 c 151 | 593 987 514 955 457 892 c 152 | 400 829 371 742 371 633 c 153 | 371 0 l 154 | 186 0 l 155 | 186 1120 l 156 | 371 1120 l 157 | 371 946 l 158 | 415 1013 467 1064 526 1097 c 159 | 586 1130 655 1147 733 1147 c 160 | 862 1147 959 1107 1025 1027 c 161 | 1091 948 1124 831 1124 676 c 162 | 163 | ce} _d 164 | /o{1253 0 113 -29 1141 1147 sc 165 | 627 991 m 166 | 528 991 450 952 393 875 c 167 | 336 798 307 693 307 559 c 168 | 307 425 335 319 392 242 c 169 | 449 165 528 127 627 127 c 170 | 725 127 803 166 860 243 c 171 | 917 320 946 426 946 559 c 172 | 946 692 917 797 860 874 c 173 | 803 952 725 991 627 991 c 174 | 175 | 627 1147 m 176 | 787 1147 913 1095 1004 991 c 177 | 1095 887 1141 743 1141 559 c 178 | 1141 376 1095 232 1004 127 c 179 | 913 23 787 -29 627 -29 c 180 | 466 -29 340 23 249 127 c 181 | 158 232 113 376 113 559 c 182 | 113 743 158 887 249 991 c 183 | 340 1095 466 1147 627 1147 c 184 | 185 | ce} _d 186 | /zero{1303 0 135 -29 1167 1520 sc 187 | 651 1360 m 188 | 547 1360 469 1309 416 1206 c 189 | 364 1104 338 950 338 745 c 190 | 338 540 364 387 416 284 c 191 | 469 182 547 131 651 131 c 192 | 756 131 834 182 886 284 c 193 | 939 387 965 540 965 745 c 194 | 965 950 939 1104 886 1206 c 195 | 834 1309 756 1360 651 1360 c 196 | 197 | 651 1520 m 198 | 818 1520 946 1454 1034 1321 c 199 | 1123 1189 1167 997 1167 745 c 200 | 1167 494 1123 302 1034 169 c 201 | 946 37 818 -29 651 -29 c 202 | 484 -29 356 37 267 169 c 203 | 179 302 135 494 135 745 c 204 | 135 997 179 1189 267 1321 c 205 | 356 1454 484 1520 651 1520 c 206 | 207 | ce} _d 208 | /one{1303 0 225 0 1114 1493 sc 209 | 254 170 m 210 | 584 170 l 211 | 584 1309 l 212 | 225 1237 l 213 | 225 1421 l 214 | 582 1493 l 215 | 784 1493 l 216 | 784 170 l 217 | 1114 170 l 218 | 1114 0 l 219 | 254 0 l 220 | 254 170 l 221 | 222 | ce} _d 223 | /r{842 0 186 0 842 1147 sc 224 | 842 948 m 225 | 821 960 799 969 774 974 c 226 | 750 980 723 983 694 983 c 227 | 590 983 510 949 454 881 c 228 | 399 814 371 717 371 590 c 229 | 371 0 l 230 | 186 0 l 231 | 186 1120 l 232 | 371 1120 l 233 | 371 946 l 234 | 410 1014 460 1064 522 1097 c 235 | 584 1130 659 1147 748 1147 c 236 | 761 1147 775 1146 790 1144 c 237 | 805 1143 822 1140 841 1137 c 238 | 842 948 l 239 | 240 | ce} _d 241 | /S{1300 0 135 -29 1186 1520 sc 242 | 1096 1444 m 243 | 1096 1247 l 244 | 1019 1284 947 1311 879 1329 c 245 | 811 1347 745 1356 682 1356 c 246 | 572 1356 487 1335 427 1292 c 247 | 368 1249 338 1189 338 1110 c 248 | 338 1044 358 994 397 960 c 249 | 437 927 512 900 623 879 c 250 | 745 854 l 251 | 896 825 1007 775 1078 702 c 252 | 1150 630 1186 533 1186 412 c 253 | 1186 267 1137 158 1040 83 c 254 | 943 8 801 -29 614 -29 c 255 | 543 -29 468 -21 388 -5 c 256 | 309 11 226 35 141 66 c 257 | 141 274 l 258 | 223 228 303 193 382 170 c 259 | 461 147 538 135 614 135 c 260 | 729 135 818 158 881 203 c 261 | 944 248 975 313 975 397 c 262 | 975 470 952 528 907 569 c 263 | 862 610 789 641 686 662 c 264 | 563 686 l 265 | 412 716 303 763 236 827 c 266 | 169 891 135 980 135 1094 c 267 | 135 1226 181 1330 274 1406 c 268 | 367 1482 496 1520 659 1520 c 269 | 729 1520 800 1514 873 1501 c 270 | 946 1488 1020 1469 1096 1444 c 271 | 272 | ce} _d 273 | /s{1067 0 111 -29 967 1147 sc 274 | 907 1087 m 275 | 907 913 l 276 | 855 940 801 960 745 973 c 277 | 689 986 631 993 571 993 c 278 | 480 993 411 979 365 951 c 279 | 320 923 297 881 297 825 c 280 | 297 782 313 749 346 724 c 281 | 379 700 444 677 543 655 c 282 | 606 641 l 283 | 737 613 829 573 884 522 c 284 | 939 471 967 400 967 309 c 285 | 967 205 926 123 843 62 c 286 | 761 1 648 -29 504 -29 c 287 | 444 -29 381 -23 316 -11 c 288 | 251 0 183 18 111 41 c 289 | 111 231 l 290 | 179 196 246 169 312 151 c 291 | 378 134 443 125 508 125 c 292 | 595 125 661 140 708 169 c 293 | 755 199 778 241 778 295 c 294 | 778 345 761 383 727 410 c 295 | 694 437 620 462 506 487 c 296 | 442 502 l 297 | 328 526 246 563 195 612 c 298 | 144 662 119 730 119 817 c 299 | 119 922 156 1004 231 1061 c 300 | 306 1118 412 1147 549 1147 c 301 | 617 1147 681 1142 741 1132 c 302 | 801 1122 856 1107 907 1087 c 303 | 304 | ce} _d 305 | /two{1303 0 150 0 1098 1520 sc 306 | 393 170 m 307 | 1098 170 l 308 | 1098 0 l 309 | 150 0 l 310 | 150 170 l 311 | 227 249 331 356 463 489 c 312 | 596 623 679 709 713 748 c 313 | 778 821 823 882 848 932 c 314 | 874 983 887 1032 887 1081 c 315 | 887 1160 859 1225 803 1275 c 316 | 748 1325 675 1350 586 1350 c 317 | 523 1350 456 1339 385 1317 c 318 | 315 1295 240 1262 160 1217 c 319 | 160 1421 l 320 | 241 1454 317 1478 388 1495 c 321 | 459 1512 523 1520 582 1520 c 322 | 737 1520 860 1481 952 1404 c 323 | 1044 1327 1090 1223 1090 1094 c 324 | 1090 1033 1078 974 1055 919 c 325 | 1032 864 991 800 930 725 c 326 | 913 706 860 650 771 557 c 327 | 682 465 556 336 393 170 c 328 | 329 | ce} _d 330 | /five{1303 0 158 -29 1124 1493 sc 331 | 221 1493 m 332 | 1014 1493 l 333 | 1014 1323 l 334 | 406 1323 l 335 | 406 957 l 336 | 435 967 465 974 494 979 c 337 | 523 984 553 987 582 987 c 338 | 749 987 881 941 978 850 c 339 | 1075 759 1124 635 1124 479 c 340 | 1124 318 1074 193 974 104 c 341 | 874 15 733 -29 551 -29 c 342 | 488 -29 424 -24 359 -13 c 343 | 294 -2 227 14 158 35 c 344 | 158 238 l 345 | 218 205 280 181 344 165 c 346 | 408 149 476 141 547 141 c 347 | 662 141 754 171 821 232 c 348 | 888 293 922 375 922 479 c 349 | 922 583 888 665 821 726 c 350 | 754 787 662 817 547 817 c 351 | 493 817 439 811 385 799 c 352 | 332 787 277 768 221 743 c 353 | 221 1493 l 354 | 355 | ce} _d 356 | /t{803 0 55 0 754 1438 sc 357 | 375 1438 m 358 | 375 1120 l 359 | 754 1120 l 360 | 754 977 l 361 | 375 977 l 362 | 375 369 l 363 | 375 278 387 219 412 193 c 364 | 437 167 488 154 565 154 c 365 | 754 154 l 366 | 754 0 l 367 | 565 0 l 368 | 423 0 325 26 271 79 c 369 | 217 132 190 229 190 369 c 370 | 190 977 l 371 | 55 977 l 372 | 55 1120 l 373 | 190 1120 l 374 | 190 1438 l 375 | 375 1438 l 376 | 377 | ce} _d 378 | /four{1303 0 100 0 1188 1493 sc 379 | 774 1317 m 380 | 264 520 l 381 | 774 520 l 382 | 774 1317 l 383 | 384 | 721 1493 m 385 | 975 1493 l 386 | 975 520 l 387 | 1188 520 l 388 | 1188 352 l 389 | 975 352 l 390 | 975 0 l 391 | 774 0 l 392 | 774 352 l 393 | 100 352 l 394 | 100 547 l 395 | 721 1493 l 396 | 397 | ce} _d 398 | /y{1212 0 61 -426 1151 1120 sc 399 | 659 -104 m 400 | 607 -237 556 -324 507 -365 c 401 | 458 -406 392 -426 309 -426 c 402 | 162 -426 l 403 | 162 -272 l 404 | 270 -272 l 405 | 321 -272 360 -260 388 -236 c 406 | 416 -212 447 -155 481 -66 c 407 | 514 18 l 408 | 61 1120 l 409 | 256 1120 l 410 | 606 244 l 411 | 956 1120 l 412 | 1151 1120 l 413 | 659 -104 l 414 | 415 | ce} _d 416 | /three{1303 0 156 -29 1139 1520 sc 417 | 831 805 m 418 | 928 784 1003 741 1057 676 c 419 | 1112 611 1139 530 1139 434 c 420 | 1139 287 1088 173 987 92 c 421 | 886 11 742 -29 555 -29 c 422 | 492 -29 428 -23 361 -10 c 423 | 295 2 227 20 156 45 c 424 | 156 240 l 425 | 212 207 273 183 340 166 c 426 | 407 149 476 141 549 141 c 427 | 676 141 772 166 838 216 c 428 | 905 266 938 339 938 434 c 429 | 938 522 907 591 845 640 c 430 | 784 690 698 715 588 715 c 431 | 414 715 l 432 | 414 881 l 433 | 596 881 l 434 | 695 881 771 901 824 940 c 435 | 877 980 903 1037 903 1112 c 436 | 903 1189 876 1247 821 1288 c 437 | 767 1329 689 1350 588 1350 c 438 | 533 1350 473 1344 410 1332 c 439 | 347 1320 277 1301 201 1276 c 440 | 201 1456 l 441 | 278 1477 349 1493 416 1504 c 442 | 483 1515 547 1520 606 1520 c 443 | 759 1520 881 1485 970 1415 c 444 | 1059 1346 1104 1252 1104 1133 c 445 | 1104 1050 1080 980 1033 923 c 446 | 986 866 918 827 831 805 c 447 | 448 | ce} _d 449 | end readonly def 450 | 451 | /BuildGlyph { 452 | exch begin 453 | CharStrings exch 454 | 2 copy known not {pop /.notdef} if 455 | true 3 1 roll get exec 456 | end 457 | } _d 458 | 459 | /BuildChar { 460 | 1 index /Encoding get exch get 461 | 1 index /BuildGlyph get exec 462 | } _d 463 | 464 | FontName currentdict end definefont pop 465 | %!PS-Adobe-3.0 Resource-Font 466 | %%Creator: Converted from TrueType to Type 3 by Matplotlib. 467 | 10 dict begin 468 | /FontName /DejaVuSans-Bold def 469 | /PaintType 0 def 470 | /FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def 471 | /FontBBox [-2190 -850 4045 2405] def 472 | /FontType 3 def 473 | /Encoding [/space /parenleft /parenright /hyphen /zero /one /L /P /S /T /a /c /e /g /h /i /k /l /n /o /r /s /t] def 474 | /CharStrings 24 dict dup begin 475 | /.notdef 0 def 476 | /space{713 0 0 0 0 0 sc 477 | ce} _d 478 | /parenleft{936 0 176 -270 772 1554 sc 479 | 772 -270 m 480 | 475 -270 l 481 | 373 -105 298 51 249 199 c 482 | 200 348 176 495 176 641 c 483 | 176 787 200 935 249 1084 c 484 | 298 1234 374 1391 475 1554 c 485 | 772 1554 l 486 | 687 1396 623 1241 580 1090 c 487 | 537 939 516 790 516 643 c 488 | 516 496 537 346 579 195 c 489 | 622 44 686 -111 772 -270 c 490 | 491 | ce} _d 492 | /parenright{936 0 164 -270 760 1554 sc 493 | 164 -270 m 494 | 249 -111 313 44 356 195 c 495 | 399 346 420 496 420 643 c 496 | 420 790 399 939 356 1090 c 497 | 313 1241 249 1396 164 1554 c 498 | 461 1554 l 499 | 562 1391 637 1234 686 1084 c 500 | 735 935 760 787 760 641 c 501 | 760 495 736 348 687 199 c 502 | 638 51 563 -105 461 -270 c 503 | 164 -270 l 504 | 505 | ce} _d 506 | /hyphen{850 0 111 444 739 735 sc 507 | 111 735 m 508 | 739 735 l 509 | 739 444 l 510 | 111 444 l 511 | 111 735 l 512 | 513 | ce} _d 514 | /zero{1425 0 98 -29 1327 1520 sc 515 | 942 748 m 516 | 942 935 924 1066 889 1142 c 517 | 854 1219 796 1257 713 1257 c 518 | 630 1257 571 1219 536 1142 c 519 | 501 1066 483 935 483 748 c 520 | 483 559 501 426 536 349 c 521 | 571 272 630 233 713 233 c 522 | 795 233 854 272 889 349 c 523 | 924 426 942 559 942 748 c 524 | 525 | 1327 745 m 526 | 1327 498 1274 307 1167 172 c 527 | 1060 38 909 -29 713 -29 c 528 | 516 -29 365 38 258 172 c 529 | 151 307 98 498 98 745 c 530 | 98 993 151 1184 258 1318 c 531 | 365 1453 516 1520 713 1520 c 532 | 909 1520 1060 1453 1167 1318 c 533 | 1274 1184 1327 993 1327 745 c 534 | 535 | ce} _d 536 | /one{1425 0 231 0 1284 1493 sc 537 | 240 266 m 538 | 580 266 l 539 | 580 1231 l 540 | 231 1159 l 541 | 231 1421 l 542 | 578 1493 l 543 | 944 1493 l 544 | 944 266 l 545 | 1284 266 l 546 | 1284 0 l 547 | 240 0 l 548 | 240 266 l 549 | 550 | ce} _d 551 | /L{1305 0 188 0 1249 1493 sc 552 | 188 1493 m 553 | 573 1493 l 554 | 573 291 l 555 | 1249 291 l 556 | 1249 0 l 557 | 188 0 l 558 | 188 1493 l 559 | 560 | ce} _d 561 | /P{1501 0 188 0 1417 1493 sc 562 | 188 1493 m 563 | 827 1493 l 564 | 1017 1493 1163 1451 1264 1366 c 565 | 1366 1282 1417 1162 1417 1006 c 566 | 1417 849 1366 729 1264 644 c 567 | 1163 560 1017 518 827 518 c 568 | 573 518 l 569 | 573 0 l 570 | 188 0 l 571 | 188 1493 l 572 | 573 | 573 1214 m 574 | 573 797 l 575 | 786 797 l 576 | 861 797 918 815 959 851 c 577 | 1000 888 1020 939 1020 1006 c 578 | 1020 1073 1000 1124 959 1160 c 579 | 918 1196 861 1214 786 1214 c 580 | 573 1214 l 581 | 582 | ce} _d 583 | /S{1475 0 147 -29 1325 1520 sc 584 | 1227 1446 m 585 | 1227 1130 l 586 | 1145 1167 1065 1194 987 1213 c 587 | 909 1232 835 1241 766 1241 c 588 | 674 1241 606 1228 562 1203 c 589 | 518 1178 496 1138 496 1085 c 590 | 496 1045 511 1014 540 991 c 591 | 570 969 624 950 702 934 c 592 | 866 901 l 593 | 1032 868 1150 817 1220 749 c 594 | 1290 681 1325 584 1325 459 c 595 | 1325 294 1276 172 1178 91 c 596 | 1081 11 932 -29 731 -29 c 597 | 636 -29 541 -20 446 -2 c 598 | 351 16 255 43 160 78 c 599 | 160 403 l 600 | 255 352 347 314 436 288 c 601 | 525 263 611 250 694 250 c 602 | 778 250 842 264 887 292 c 603 | 932 320 954 360 954 412 c 604 | 954 459 939 495 908 520 c 605 | 878 545 818 568 727 588 c 606 | 578 621 l 607 | 429 653 319 704 250 774 c 608 | 181 844 147 938 147 1057 c 609 | 147 1206 195 1320 291 1400 c 610 | 387 1480 525 1520 705 1520 c 611 | 787 1520 871 1514 958 1501 c 612 | 1045 1489 1134 1471 1227 1446 c 613 | 614 | ce} _d 615 | /T{1397 0 10 0 1386 1493 sc 616 | 10 1493 m 617 | 1386 1493 l 618 | 1386 1202 l 619 | 891 1202 l 620 | 891 0 l 621 | 506 0 l 622 | 506 1202 l 623 | 10 1202 l 624 | 10 1493 l 625 | 626 | ce} _d 627 | /a{1382 0 88 -29 1221 1147 sc 628 | 674 504 m 629 | 599 504 543 491 505 466 c 630 | 468 441 449 403 449 354 c 631 | 449 309 464 273 494 247 c 632 | 525 222 567 209 621 209 c 633 | 688 209 745 233 791 281 c 634 | 837 330 860 390 860 463 c 635 | 860 504 l 636 | 674 504 l 637 | 638 | 1221 639 m 639 | 1221 0 l 640 | 860 0 l 641 | 860 166 l 642 | 812 98 758 48 698 17 c 643 | 638 -14 565 -29 479 -29 c 644 | 363 -29 269 5 196 72 c 645 | 124 140 88 228 88 336 c 646 | 88 467 133 564 223 625 c 647 | 314 686 456 717 649 717 c 648 | 860 717 l 649 | 860 745 l 650 | 860 802 838 843 793 869 c 651 | 748 896 679 909 584 909 c 652 | 507 909 436 901 370 886 c 653 | 304 871 243 848 186 817 c 654 | 186 1090 l 655 | 263 1109 340 1123 417 1132 c 656 | 494 1142 572 1147 649 1147 c 657 | 851 1147 997 1107 1086 1027 c 658 | 1176 948 1221 818 1221 639 c 659 | 660 | ce} _d 661 | /c{1214 0 88 -29 1077 1147 sc 662 | 1077 1085 m 663 | 1077 793 l 664 | 1028 826 979 851 930 867 c 665 | 881 883 831 891 778 891 c 666 | 678 891 600 862 544 803 c 667 | 489 745 461 664 461 559 c 668 | 461 454 489 373 544 314 c 669 | 600 256 678 227 778 227 c 670 | 834 227 887 235 937 252 c 671 | 988 269 1034 293 1077 326 c 672 | 1077 33 l 673 | 1021 12 964 -3 906 -13 c 674 | 849 -24 791 -29 733 -29 c 675 | 531 -29 373 23 259 126 c 676 | 145 230 88 374 88 559 c 677 | 88 744 145 888 259 991 c 678 | 373 1095 531 1147 733 1147 c 679 | 792 1147 849 1142 906 1131 c 680 | 963 1121 1020 1106 1077 1085 c 681 | 682 | ce} _d 683 | /e{1389 0 88 -29 1290 1147 sc 684 | 1290 563 m 685 | 1290 461 l 686 | 453 461 l 687 | 462 377 492 314 544 272 c 688 | 596 230 669 209 762 209 c 689 | 837 209 914 220 993 242 c 690 | 1072 265 1154 299 1237 344 c 691 | 1237 68 l 692 | 1152 36 1068 12 983 -4 c 693 | 898 -21 814 -29 729 -29 c 694 | 526 -29 369 22 256 125 c 695 | 144 228 88 373 88 559 c 696 | 88 742 143 885 253 990 c 697 | 364 1095 516 1147 709 1147 c 698 | 885 1147 1026 1094 1131 988 c 699 | 1237 882 1290 740 1290 563 c 700 | 701 | 922 682 m 702 | 922 750 902 805 862 846 c 703 | 823 888 771 909 707 909 c 704 | 638 909 581 889 538 850 c 705 | 495 811 468 755 457 682 c 706 | 922 682 l 707 | 708 | ce} _d 709 | /g{1466 0 92 -442 1294 1145 sc 710 | 934 190 m 711 | 885 125 830 77 771 46 c 712 | 712 15 643 0 565 0 c 713 | 428 0 315 54 226 161 c 714 | 137 269 92 406 92 573 c 715 | 92 740 137 877 226 984 c 716 | 315 1091 428 1145 565 1145 c 717 | 643 1145 712 1130 771 1099 c 718 | 830 1068 885 1020 934 954 c 719 | 934 1120 l 720 | 1294 1120 l 721 | 1294 113 l 722 | 1294 -67 1237 -204 1123 -299 c 723 | 1010 -394 845 -442 629 -442 c 724 | 559 -442 491 -437 426 -426 c 725 | 361 -415 295 -399 229 -377 c 726 | 229 -98 l 727 | 292 -134 353 -161 413 -178 c 728 | 473 -196 533 -205 594 -205 c 729 | 711 -205 797 -179 852 -128 c 730 | 907 -77 934 4 934 113 c 731 | 934 190 l 732 | 733 | 698 887 m 734 | 624 887 566 860 525 805 c 735 | 484 750 463 673 463 573 c 736 | 463 470 483 392 523 339 c 737 | 563 286 621 260 698 260 c 738 | 773 260 831 287 872 342 c 739 | 913 397 934 474 934 573 c 740 | 934 673 913 750 872 805 c 741 | 831 860 773 887 698 887 c 742 | 743 | ce} _d 744 | /h{1458 0 172 0 1298 1556 sc 745 | 1298 682 m 746 | 1298 0 l 747 | 938 0 l 748 | 938 111 l 749 | 938 520 l 750 | 938 618 936 685 931 722 c 751 | 927 759 920 786 909 803 c 752 | 895 826 876 844 852 857 c 753 | 828 870 801 877 770 877 c 754 | 695 877 637 848 594 790 c 755 | 551 733 530 653 530 551 c 756 | 530 0 l 757 | 172 0 l 758 | 172 1556 l 759 | 530 1556 l 760 | 530 956 l 761 | 584 1021 641 1069 702 1100 c 762 | 763 1131 830 1147 903 1147 c 763 | 1032 1147 1130 1107 1197 1028 c 764 | 1264 949 1298 833 1298 682 c 765 | 766 | ce} _d 767 | /i{702 0 172 0 530 1556 sc 768 | 172 1120 m 769 | 530 1120 l 770 | 530 0 l 771 | 172 0 l 772 | 172 1120 l 773 | 774 | 172 1556 m 775 | 530 1556 l 776 | 530 1264 l 777 | 172 1264 l 778 | 172 1556 l 779 | 780 | ce} _d 781 | /k{1362 0 172 0 1401 1556 sc 782 | 172 1556 m 783 | 530 1556 l 784 | 530 709 l 785 | 942 1120 l 786 | 1358 1120 l 787 | 811 606 l 788 | 1401 0 l 789 | 967 0 l 790 | 530 467 l 791 | 530 0 l 792 | 172 0 l 793 | 172 1556 l 794 | 795 | ce} _d 796 | /l{702 0 172 0 530 1556 sc 797 | 172 1556 m 798 | 530 1556 l 799 | 530 0 l 800 | 172 0 l 801 | 172 1556 l 802 | 803 | ce} _d 804 | /n{1458 0 172 0 1298 1147 sc 805 | 1298 682 m 806 | 1298 0 l 807 | 938 0 l 808 | 938 111 l 809 | 938 522 l 810 | 938 619 936 685 931 722 c 811 | 927 759 920 786 909 803 c 812 | 895 826 876 844 852 857 c 813 | 828 870 801 877 770 877 c 814 | 695 877 637 848 594 790 c 815 | 551 733 530 653 530 551 c 816 | 530 0 l 817 | 172 0 l 818 | 172 1120 l 819 | 530 1120 l 820 | 530 956 l 821 | 584 1021 641 1069 702 1100 c 822 | 763 1131 830 1147 903 1147 c 823 | 1032 1147 1130 1107 1197 1028 c 824 | 1264 949 1298 833 1298 682 c 825 | 826 | ce} _d 827 | /o{1407 0 88 -29 1319 1147 sc 828 | 705 891 m 829 | 626 891 565 862 523 805 c 830 | 482 748 461 666 461 559 c 831 | 461 452 482 369 523 312 c 832 | 565 255 626 227 705 227 c 833 | 783 227 843 255 884 312 c 834 | 925 369 946 452 946 559 c 835 | 946 666 925 748 884 805 c 836 | 843 862 783 891 705 891 c 837 | 838 | 705 1147 m 839 | 898 1147 1048 1095 1156 991 c 840 | 1265 887 1319 743 1319 559 c 841 | 1319 375 1265 231 1156 127 c 842 | 1048 23 898 -29 705 -29 c 843 | 512 -29 360 23 251 127 c 844 | 142 231 88 375 88 559 c 845 | 88 743 142 887 251 991 c 846 | 360 1095 512 1147 705 1147 c 847 | 848 | ce} _d 849 | /r{1010 0 172 0 1004 1147 sc 850 | 1004 815 m 851 | 973 830 941 840 910 847 c 852 | 879 854 848 858 817 858 c 853 | 725 858 654 828 604 769 c 854 | 555 710 530 626 530 516 c 855 | 530 0 l 856 | 172 0 l 857 | 172 1120 l 858 | 530 1120 l 859 | 530 936 l 860 | 576 1009 629 1063 688 1096 c 861 | 748 1130 820 1147 903 1147 c 862 | 915 1147 928 1146 942 1145 c 863 | 956 1144 976 1142 1003 1139 c 864 | 1004 815 l 865 | 866 | ce} _d 867 | /s{1219 0 106 -29 1122 1147 sc 868 | 1047 1085 m 869 | 1047 813 l 870 | 970 845 896 869 825 885 c 871 | 754 901 686 909 623 909 c 872 | 555 909 504 900 471 883 c 873 | 438 866 422 840 422 805 c 874 | 422 776 434 754 459 739 c 875 | 484 724 529 712 594 705 c 876 | 657 696 l 877 | 840 673 964 634 1027 581 c 878 | 1090 528 1122 444 1122 330 c 879 | 1122 211 1078 121 990 61 c 880 | 902 1 771 -29 596 -29 c 881 | 522 -29 445 -23 366 -11 c 882 | 287 0 206 18 123 41 c 883 | 123 313 l 884 | 194 278 267 252 342 235 c 885 | 417 218 494 209 571 209 c 886 | 641 209 694 219 729 238 c 887 | 764 257 782 286 782 324 c 888 | 782 356 770 380 745 395 c 889 | 721 411 673 423 600 432 c 890 | 537 440 l 891 | 378 460 266 497 202 551 c 892 | 138 605 106 687 106 797 c 893 | 106 916 147 1004 228 1061 c 894 | 309 1118 434 1147 602 1147 c 895 | 668 1147 737 1142 810 1132 c 896 | 883 1122 962 1106 1047 1085 c 897 | 898 | ce} _d 899 | /t{979 0 27 0 932 1438 sc 900 | 563 1438 m 901 | 563 1120 l 902 | 932 1120 l 903 | 932 864 l 904 | 563 864 l 905 | 563 389 l 906 | 563 337 573 302 594 283 c 907 | 615 265 656 256 717 256 c 908 | 901 256 l 909 | 901 0 l 910 | 594 0 l 911 | 453 0 352 29 293 88 c 912 | 234 147 205 248 205 389 c 913 | 205 864 l 914 | 27 864 l 915 | 27 1120 l 916 | 205 1120 l 917 | 205 1438 l 918 | 563 1438 l 919 | 920 | ce} _d 921 | end readonly def 922 | 923 | /BuildGlyph { 924 | exch begin 925 | CharStrings exch 926 | 2 copy known not {pop /.notdef} if 927 | true 3 1 roll get exec 928 | end 929 | } _d 930 | 931 | /BuildChar { 932 | 1 index /Encoding get exch get 933 | 1 index /BuildGlyph get exec 934 | } _d 935 | 936 | FontName currentdict end definefont pop 937 | end 938 | %%EndProlog 939 | mpldict begin 940 | -54 180 translate 941 | 720 432 0 0 clipbox 942 | gsave 943 | 0 0 m 944 | 720 0 l 945 | 720 432 l 946 | 0 432 l 947 | cl 948 | 1.000 setgray 949 | fill 950 | grestore 951 | gsave 952 | 90 47.52 m 953 | 648 47.52 l 954 | 648 380.16 l 955 | 90 380.16 l 956 | cl 957 | 1.000 setgray 958 | fill 959 | grestore 960 | gsave 961 | 558 332.64 90 47.52 clipbox 962 | 115.363636 47.52 m 963 | 260.298701 47.52 l 964 | 260.298701 201.066624 l 965 | 115.363636 201.066624 l 966 | cl 967 | 0.529 0.808 0.922 setrgbcolor 968 | fill 969 | grestore 970 | gsave 971 | 558 332.64 90 47.52 clipbox 972 | 296.532468 47.52 m 973 | 441.467532 47.52 l 974 | 441.467532 220.4928 l 975 | 296.532468 220.4928 l 976 | cl 977 | 0.529 0.808 0.922 setrgbcolor 978 | fill 979 | grestore 980 | gsave 981 | 558 332.64 90 47.52 clipbox 982 | 477.701299 47.52 m 983 | 622.636364 47.52 l 984 | 622.636364 218.363904 l 985 | 477.701299 218.363904 l 986 | cl 987 | 0.529 0.808 0.922 setrgbcolor 988 | fill 989 | grestore 990 | 0.800 setlinewidth 991 | 1 setlinejoin 992 | 0 setlinecap 993 | [] 0 setdash 994 | 0.000 setgray 995 | gsave 996 | /o { 997 | gsave 998 | newpath 999 | translate 1000 | 0.8 setlinewidth 1001 | 1 setlinejoin 1002 | 1003 | 0 setlinecap 1004 | 1005 | 0 0 m 1006 | 0 -3.5 l 1007 | 1008 | gsave 1009 | 0.000 setgray 1010 | fill 1011 | grestore 1012 | stroke 1013 | grestore 1014 | } bind def 1015 | 187.831 47.52 o 1016 | grestore 1017 | /DejaVuSans 10.000 selectfont 1018 | gsave 1019 | 1020 | 165.909 32.9262 translate 1021 | 0 rotate 1022 | 0 0 m /S glyphshow 1023 | 6.34766 0 m /e glyphshow 1024 | 12.5 0 m /n glyphshow 1025 | 18.8379 0 m /s glyphshow 1026 | 24.0479 0 m /o glyphshow 1027 | 30.166 0 m /r glyphshow 1028 | 34.2773 0 m /space glyphshow 1029 | 37.4561 0 m /one glyphshow 1030 | grestore 1031 | gsave 1032 | /o { 1033 | gsave 1034 | newpath 1035 | translate 1036 | 0.8 setlinewidth 1037 | 1 setlinejoin 1038 | 1039 | 0 setlinecap 1040 | 1041 | 0 0 m 1042 | 0 -3.5 l 1043 | 1044 | gsave 1045 | 0.000 setgray 1046 | fill 1047 | grestore 1048 | stroke 1049 | grestore 1050 | } bind def 1051 | 369 47.52 o 1052 | grestore 1053 | /DejaVuSans 10.000 selectfont 1054 | gsave 1055 | 1056 | 347.078 32.9262 translate 1057 | 0 rotate 1058 | 0 0 m /S glyphshow 1059 | 6.34766 0 m /e glyphshow 1060 | 12.5 0 m /n glyphshow 1061 | 18.8379 0 m /s glyphshow 1062 | 24.0479 0 m /o glyphshow 1063 | 30.166 0 m /r glyphshow 1064 | 34.2773 0 m /space glyphshow 1065 | 37.4561 0 m /two glyphshow 1066 | grestore 1067 | gsave 1068 | /o { 1069 | gsave 1070 | newpath 1071 | translate 1072 | 0.8 setlinewidth 1073 | 1 setlinejoin 1074 | 1075 | 0 setlinecap 1076 | 1077 | 0 0 m 1078 | 0 -3.5 l 1079 | 1080 | gsave 1081 | 0.000 setgray 1082 | fill 1083 | grestore 1084 | stroke 1085 | grestore 1086 | } bind def 1087 | 550.169 47.52 o 1088 | grestore 1089 | /DejaVuSans 10.000 selectfont 1090 | gsave 1091 | 1092 | 528.247 32.9262 translate 1093 | 0 rotate 1094 | 0 0 m /S glyphshow 1095 | 6.34766 0 m /e glyphshow 1096 | 12.5 0 m /n glyphshow 1097 | 18.8379 0 m /s glyphshow 1098 | 24.0479 0 m /o glyphshow 1099 | 30.166 0 m /r glyphshow 1100 | 34.2773 0 m /space glyphshow 1101 | 37.4561 0 m /five glyphshow 1102 | grestore 1103 | /DejaVuSans 14.000 selectfont 1104 | gsave 1105 | 1106 | 341.359 16.2075 translate 1107 | 0 rotate 1108 | 0 0 m /S glyphshow 1109 | 8.88672 0 m /e glyphshow 1110 | 17.5 0 m /n glyphshow 1111 | 26.373 0 m /s glyphshow 1112 | 33.667 0 m /o glyphshow 1113 | 42.2324 0 m /r glyphshow 1114 | 47.9883 0 m /s glyphshow 1115 | grestore 1116 | gsave 1117 | /o { 1118 | gsave 1119 | newpath 1120 | translate 1121 | 0.8 setlinewidth 1122 | 1 setlinejoin 1123 | 1124 | 0 setlinecap 1125 | 1126 | -0 0 m 1127 | -3.5 0 l 1128 | 1129 | gsave 1130 | 0.000 setgray 1131 | fill 1132 | grestore 1133 | stroke 1134 | grestore 1135 | } bind def 1136 | 90 47.52 o 1137 | grestore 1138 | /DejaVuSans 10.000 selectfont 1139 | gsave 1140 | 1141 | 76.6406 43.7231 translate 1142 | 0 rotate 1143 | 0 0 m /zero glyphshow 1144 | grestore 1145 | gsave 1146 | /o { 1147 | gsave 1148 | newpath 1149 | translate 1150 | 0.8 setlinewidth 1151 | 1 setlinejoin 1152 | 1153 | 0 setlinecap 1154 | 1155 | -0 0 m 1156 | -3.5 0 l 1157 | 1158 | gsave 1159 | 0.000 setgray 1160 | fill 1161 | grestore 1162 | stroke 1163 | grestore 1164 | } bind def 1165 | 90 114.048 o 1166 | grestore 1167 | /DejaVuSans 10.000 selectfont 1168 | gsave 1169 | 1170 | 63.9219 110.251 translate 1171 | 0 rotate 1172 | 0 0 m /five glyphshow 1173 | 6.3623 0 m /zero glyphshow 1174 | 12.7246 0 m /zero glyphshow 1175 | grestore 1176 | gsave 1177 | /o { 1178 | gsave 1179 | newpath 1180 | translate 1181 | 0.8 setlinewidth 1182 | 1 setlinejoin 1183 | 1184 | 0 setlinecap 1185 | 1186 | -0 0 m 1187 | -3.5 0 l 1188 | 1189 | gsave 1190 | 0.000 setgray 1191 | fill 1192 | grestore 1193 | stroke 1194 | grestore 1195 | } bind def 1196 | 90 180.576 o 1197 | grestore 1198 | /DejaVuSans 10.000 selectfont 1199 | gsave 1200 | 1201 | 57.5625 176.779 translate 1202 | 0 rotate 1203 | 0 0 m /one glyphshow 1204 | 6.3623 0 m /zero glyphshow 1205 | 12.7246 0 m /zero glyphshow 1206 | 19.0869 0 m /zero glyphshow 1207 | grestore 1208 | gsave 1209 | /o { 1210 | gsave 1211 | newpath 1212 | translate 1213 | 0.8 setlinewidth 1214 | 1 setlinejoin 1215 | 1216 | 0 setlinecap 1217 | 1218 | -0 0 m 1219 | -3.5 0 l 1220 | 1221 | gsave 1222 | 0.000 setgray 1223 | fill 1224 | grestore 1225 | stroke 1226 | grestore 1227 | } bind def 1228 | 90 247.104 o 1229 | grestore 1230 | /DejaVuSans 10.000 selectfont 1231 | gsave 1232 | 1233 | 57.5625 243.307 translate 1234 | 0 rotate 1235 | 0 0 m /one glyphshow 1236 | 6.3623 0 m /five glyphshow 1237 | 12.7246 0 m /zero glyphshow 1238 | 19.0869 0 m /zero glyphshow 1239 | grestore 1240 | gsave 1241 | /o { 1242 | gsave 1243 | newpath 1244 | translate 1245 | 0.8 setlinewidth 1246 | 1 setlinejoin 1247 | 1248 | 0 setlinecap 1249 | 1250 | -0 0 m 1251 | -3.5 0 l 1252 | 1253 | gsave 1254 | 0.000 setgray 1255 | fill 1256 | grestore 1257 | stroke 1258 | grestore 1259 | } bind def 1260 | 90 313.632 o 1261 | grestore 1262 | /DejaVuSans 10.000 selectfont 1263 | gsave 1264 | 1265 | 57.5625 309.835 translate 1266 | 0 rotate 1267 | 0 0 m /two glyphshow 1268 | 6.3623 0 m /zero glyphshow 1269 | 12.7246 0 m /zero glyphshow 1270 | 19.0869 0 m /zero glyphshow 1271 | grestore 1272 | gsave 1273 | /o { 1274 | gsave 1275 | newpath 1276 | translate 1277 | 0.8 setlinewidth 1278 | 1 setlinejoin 1279 | 1280 | 0 setlinecap 1281 | 1282 | -0 0 m 1283 | -3.5 0 l 1284 | 1285 | gsave 1286 | 0.000 setgray 1287 | fill 1288 | grestore 1289 | stroke 1290 | grestore 1291 | } bind def 1292 | 90 380.16 o 1293 | grestore 1294 | /DejaVuSans 10.000 selectfont 1295 | gsave 1296 | 1297 | 57.5625 376.363 translate 1298 | 0 rotate 1299 | 0 0 m /two glyphshow 1300 | 6.3623 0 m /five glyphshow 1301 | 12.7246 0 m /zero glyphshow 1302 | 19.0869 0 m /zero glyphshow 1303 | grestore 1304 | /DejaVuSans 14.000 selectfont 1305 | gsave 1306 | 1307 | 50.6562 194.199 translate 1308 | 90 rotate 1309 | 0 0 m /B glyphshow 1310 | 9.60449 0 m /y glyphshow 1311 | 17.8896 0 m /t glyphshow 1312 | 23.3789 0 m /e glyphshow 1313 | 31.9922 0 m /s glyphshow 1314 | grestore 1315 | 0 setlinejoin 1316 | 2 setlinecap 1317 | gsave 1318 | 90 47.52 m 1319 | 90 380.16 l 1320 | stroke 1321 | grestore 1322 | gsave 1323 | 648 47.52 m 1324 | 648 380.16 l 1325 | stroke 1326 | grestore 1327 | gsave 1328 | 90 47.52 m 1329 | 648 47.52 l 1330 | stroke 1331 | grestore 1332 | gsave 1333 | 90 380.16 m 1334 | 648 380.16 l 1335 | stroke 1336 | grestore 1337 | /DejaVuSans 10.000 selectfont 1338 | gsave 1339 | 1340 | 175.112 216.45 translate 1341 | 0 rotate 1342 | 0 0 m /one glyphshow 1343 | 6.3623 0 m /one glyphshow 1344 | 12.7246 0 m /five glyphshow 1345 | 19.0869 0 m /four glyphshow 1346 | grestore 1347 | /DejaVuSans 10.000 selectfont 1348 | gsave 1349 | 1350 | 356.281 235.877 translate 1351 | 0 rotate 1352 | 0 0 m /one glyphshow 1353 | 6.3623 0 m /three glyphshow 1354 | 12.7246 0 m /zero glyphshow 1355 | 19.0869 0 m /zero glyphshow 1356 | grestore 1357 | /DejaVuSans 10.000 selectfont 1358 | gsave 1359 | 1360 | 537.45 233.748 translate 1361 | 0 rotate 1362 | 0 0 m /one glyphshow 1363 | 6.3623 0 m /two glyphshow 1364 | 12.7246 0 m /eight glyphshow 1365 | 19.0869 0 m /four glyphshow 1366 | grestore 1367 | /DejaVuSans-Bold 16.000 selectfont 1368 | gsave 1369 | 1370 | 206.992 400.16 translate 1371 | 0 rotate 1372 | 0 0 m /T glyphshow 1373 | 8.78906 0 m /o glyphshow 1374 | 19.7812 0 m /t glyphshow 1375 | 27.4297 0 m /a glyphshow 1376 | 38.2266 0 m /l glyphshow 1377 | 43.7109 0 m /space glyphshow 1378 | 49.2812 0 m /P glyphshow 1379 | 60.6328 0 m /a glyphshow 1380 | 71.4297 0 m /c glyphshow 1381 | 80.9141 0 m /k glyphshow 1382 | 91.1797 0 m /e glyphshow 1383 | 102.031 0 m /t glyphshow 1384 | 109.68 0 m /space glyphshow 1385 | 115.25 0 m /L glyphshow 1386 | 125.445 0 m /e glyphshow 1387 | 136.297 0 m /n glyphshow 1388 | 147.688 0 m /g glyphshow 1389 | 159.141 0 m /t glyphshow 1390 | 166.789 0 m /h glyphshow 1391 | 178.18 0 m /s glyphshow 1392 | 187.703 0 m /space glyphshow 1393 | 193.273 0 m /hyphen glyphshow 1394 | 199.914 0 m /space glyphshow 1395 | 205.484 0 m /S glyphshow 1396 | 217.008 0 m /t glyphshow 1397 | 224.656 0 m /o glyphshow 1398 | 235.648 0 m /r glyphshow 1399 | 243.539 0 m /i glyphshow 1400 | 249.023 0 m /n glyphshow 1401 | 260.414 0 m /g glyphshow 1402 | 271.867 0 m /space glyphshow 1403 | 277.438 0 m /parenleft glyphshow 1404 | 284.75 0 m /one glyphshow 1405 | 295.883 0 m /zero glyphshow 1406 | 307.016 0 m /s glyphshow 1407 | 316.539 0 m /parenright glyphshow 1408 | grestore 1409 | 1410 | end 1411 | showpage 1412 | -------------------------------------------------------------------------------- /assets/images/non5.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Title: non5.eps 3 | %%Creator: Matplotlib v3.6.3, https://matplotlib.org/ 4 | %%CreationDate: Thu Dec 12 08:42:00 2024 5 | %%Orientation: portrait 6 | %%BoundingBox: -54 180 666 612 7 | %%HiResBoundingBox: -54.000000 180.000000 666.000000 612.000000 8 | %%EndComments 9 | %%BeginProlog 10 | /mpldict 12 dict def 11 | mpldict begin 12 | /_d { bind def } bind def 13 | /m { moveto } _d 14 | /l { lineto } _d 15 | /r { rlineto } _d 16 | /c { curveto } _d 17 | /cl { closepath } _d 18 | /ce { closepath eofill } _d 19 | /box { 20 | m 21 | 1 index 0 r 22 | 0 exch r 23 | neg 0 r 24 | cl 25 | } _d 26 | /clipbox { 27 | box 28 | clip 29 | newpath 30 | } _d 31 | /sc { setcachedevice } _d 32 | %!PS-Adobe-3.0 Resource-Font 33 | %%Creator: Converted from TrueType to Type 3 by Matplotlib. 34 | 10 dict begin 35 | /FontName /DejaVuSans def 36 | /PaintType 0 def 37 | /FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def 38 | /FontBBox [-2090 -948 3673 2524] def 39 | /FontType 3 def 40 | /Encoding [/space /zero /one /two /three /four /five /six /seven /eight /nine /B /S /e /n /o /r /s /t /y] def 41 | /CharStrings 21 dict dup begin 42 | /.notdef 0 def 43 | /space{651 0 0 0 0 0 sc 44 | ce} _d 45 | /zero{1303 0 135 -29 1167 1520 sc 46 | 651 1360 m 47 | 547 1360 469 1309 416 1206 c 48 | 364 1104 338 950 338 745 c 49 | 338 540 364 387 416 284 c 50 | 469 182 547 131 651 131 c 51 | 756 131 834 182 886 284 c 52 | 939 387 965 540 965 745 c 53 | 965 950 939 1104 886 1206 c 54 | 834 1309 756 1360 651 1360 c 55 | 56 | 651 1520 m 57 | 818 1520 946 1454 1034 1321 c 58 | 1123 1189 1167 997 1167 745 c 59 | 1167 494 1123 302 1034 169 c 60 | 946 37 818 -29 651 -29 c 61 | 484 -29 356 37 267 169 c 62 | 179 302 135 494 135 745 c 63 | 135 997 179 1189 267 1321 c 64 | 356 1454 484 1520 651 1520 c 65 | 66 | ce} _d 67 | /one{1303 0 225 0 1114 1493 sc 68 | 254 170 m 69 | 584 170 l 70 | 584 1309 l 71 | 225 1237 l 72 | 225 1421 l 73 | 582 1493 l 74 | 784 1493 l 75 | 784 170 l 76 | 1114 170 l 77 | 1114 0 l 78 | 254 0 l 79 | 254 170 l 80 | 81 | ce} _d 82 | /two{1303 0 150 0 1098 1520 sc 83 | 393 170 m 84 | 1098 170 l 85 | 1098 0 l 86 | 150 0 l 87 | 150 170 l 88 | 227 249 331 356 463 489 c 89 | 596 623 679 709 713 748 c 90 | 778 821 823 882 848 932 c 91 | 874 983 887 1032 887 1081 c 92 | 887 1160 859 1225 803 1275 c 93 | 748 1325 675 1350 586 1350 c 94 | 523 1350 456 1339 385 1317 c 95 | 315 1295 240 1262 160 1217 c 96 | 160 1421 l 97 | 241 1454 317 1478 388 1495 c 98 | 459 1512 523 1520 582 1520 c 99 | 737 1520 860 1481 952 1404 c 100 | 1044 1327 1090 1223 1090 1094 c 101 | 1090 1033 1078 974 1055 919 c 102 | 1032 864 991 800 930 725 c 103 | 913 706 860 650 771 557 c 104 | 682 465 556 336 393 170 c 105 | 106 | ce} _d 107 | /three{1303 0 156 -29 1139 1520 sc 108 | 831 805 m 109 | 928 784 1003 741 1057 676 c 110 | 1112 611 1139 530 1139 434 c 111 | 1139 287 1088 173 987 92 c 112 | 886 11 742 -29 555 -29 c 113 | 492 -29 428 -23 361 -10 c 114 | 295 2 227 20 156 45 c 115 | 156 240 l 116 | 212 207 273 183 340 166 c 117 | 407 149 476 141 549 141 c 118 | 676 141 772 166 838 216 c 119 | 905 266 938 339 938 434 c 120 | 938 522 907 591 845 640 c 121 | 784 690 698 715 588 715 c 122 | 414 715 l 123 | 414 881 l 124 | 596 881 l 125 | 695 881 771 901 824 940 c 126 | 877 980 903 1037 903 1112 c 127 | 903 1189 876 1247 821 1288 c 128 | 767 1329 689 1350 588 1350 c 129 | 533 1350 473 1344 410 1332 c 130 | 347 1320 277 1301 201 1276 c 131 | 201 1456 l 132 | 278 1477 349 1493 416 1504 c 133 | 483 1515 547 1520 606 1520 c 134 | 759 1520 881 1485 970 1415 c 135 | 1059 1346 1104 1252 1104 1133 c 136 | 1104 1050 1080 980 1033 923 c 137 | 986 866 918 827 831 805 c 138 | 139 | ce} _d 140 | /four{1303 0 100 0 1188 1493 sc 141 | 774 1317 m 142 | 264 520 l 143 | 774 520 l 144 | 774 1317 l 145 | 146 | 721 1493 m 147 | 975 1493 l 148 | 975 520 l 149 | 1188 520 l 150 | 1188 352 l 151 | 975 352 l 152 | 975 0 l 153 | 774 0 l 154 | 774 352 l 155 | 100 352 l 156 | 100 547 l 157 | 721 1493 l 158 | 159 | ce} _d 160 | /five{1303 0 158 -29 1124 1493 sc 161 | 221 1493 m 162 | 1014 1493 l 163 | 1014 1323 l 164 | 406 1323 l 165 | 406 957 l 166 | 435 967 465 974 494 979 c 167 | 523 984 553 987 582 987 c 168 | 749 987 881 941 978 850 c 169 | 1075 759 1124 635 1124 479 c 170 | 1124 318 1074 193 974 104 c 171 | 874 15 733 -29 551 -29 c 172 | 488 -29 424 -24 359 -13 c 173 | 294 -2 227 14 158 35 c 174 | 158 238 l 175 | 218 205 280 181 344 165 c 176 | 408 149 476 141 547 141 c 177 | 662 141 754 171 821 232 c 178 | 888 293 922 375 922 479 c 179 | 922 583 888 665 821 726 c 180 | 754 787 662 817 547 817 c 181 | 493 817 439 811 385 799 c 182 | 332 787 277 768 221 743 c 183 | 221 1493 l 184 | 185 | ce} _d 186 | /six{1303 0 143 -29 1174 1520 sc 187 | 676 827 m 188 | 585 827 513 796 460 734 c 189 | 407 672 381 587 381 479 c 190 | 381 372 407 287 460 224 c 191 | 513 162 585 131 676 131 c 192 | 767 131 838 162 891 224 c 193 | 944 287 971 372 971 479 c 194 | 971 587 944 672 891 734 c 195 | 838 796 767 827 676 827 c 196 | 197 | 1077 1460 m 198 | 1077 1276 l 199 | 1026 1300 975 1318 923 1331 c 200 | 872 1344 821 1350 770 1350 c 201 | 637 1350 535 1305 464 1215 c 202 | 394 1125 354 989 344 807 c 203 | 383 865 433 909 492 940 c 204 | 551 971 617 987 688 987 c 205 | 838 987 956 941 1043 850 c 206 | 1130 759 1174 636 1174 479 c 207 | 1174 326 1129 203 1038 110 c 208 | 947 17 827 -29 676 -29 c 209 | 503 -29 371 37 280 169 c 210 | 189 302 143 494 143 745 c 211 | 143 981 199 1169 311 1309 c 212 | 423 1450 573 1520 762 1520 c 213 | 813 1520 864 1515 915 1505 c 214 | 967 1495 1021 1480 1077 1460 c 215 | 216 | ce} _d 217 | /seven{1303 0 168 0 1128 1493 sc 218 | 168 1493 m 219 | 1128 1493 l 220 | 1128 1407 l 221 | 586 0 l 222 | 375 0 l 223 | 885 1323 l 224 | 168 1323 l 225 | 168 1493 l 226 | 227 | ce} _d 228 | /eight{1303 0 139 -29 1163 1520 sc 229 | 651 709 m 230 | 555 709 479 683 424 632 c 231 | 369 581 342 510 342 420 c 232 | 342 330 369 259 424 208 c 233 | 479 157 555 131 651 131 c 234 | 747 131 823 157 878 208 c 235 | 933 260 961 331 961 420 c 236 | 961 510 933 581 878 632 c 237 | 823 683 748 709 651 709 c 238 | 239 | 449 795 m 240 | 362 816 295 857 246 916 c 241 | 198 975 174 1048 174 1133 c 242 | 174 1252 216 1347 301 1416 c 243 | 386 1485 503 1520 651 1520 c 244 | 800 1520 916 1485 1001 1416 c 245 | 1086 1347 1128 1252 1128 1133 c 246 | 1128 1048 1104 975 1055 916 c 247 | 1007 857 940 816 854 795 c 248 | 951 772 1027 728 1081 662 c 249 | 1136 596 1163 515 1163 420 c 250 | 1163 275 1119 164 1030 87 c 251 | 942 10 816 -29 651 -29 c 252 | 486 -29 360 10 271 87 c 253 | 183 164 139 275 139 420 c 254 | 139 515 166 596 221 662 c 255 | 276 728 352 772 449 795 c 256 | 257 | 375 1114 m 258 | 375 1037 399 976 447 933 c 259 | 496 890 564 868 651 868 c 260 | 738 868 805 890 854 933 c 261 | 903 976 928 1037 928 1114 c 262 | 928 1191 903 1252 854 1295 c 263 | 805 1338 738 1360 651 1360 c 264 | 564 1360 496 1338 447 1295 c 265 | 399 1252 375 1191 375 1114 c 266 | 267 | ce} _d 268 | /nine{1303 0 129 -29 1159 1520 sc 269 | 225 31 m 270 | 225 215 l 271 | 276 191 327 173 379 160 c 272 | 431 147 482 141 532 141 c 273 | 665 141 767 186 837 275 c 274 | 908 365 948 501 958 684 c 275 | 919 627 870 583 811 552 c 276 | 752 521 686 506 614 506 c 277 | 465 506 346 551 259 641 c 278 | 172 732 129 855 129 1012 c 279 | 129 1165 174 1288 265 1381 c 280 | 356 1474 476 1520 627 1520 c 281 | 800 1520 931 1454 1022 1321 c 282 | 1113 1189 1159 997 1159 745 c 283 | 1159 510 1103 322 991 181 c 284 | 880 41 730 -29 541 -29 c 285 | 490 -29 439 -24 387 -14 c 286 | 335 -4 281 11 225 31 c 287 | 288 | 627 664 m 289 | 718 664 789 695 842 757 c 290 | 895 819 922 904 922 1012 c 291 | 922 1119 895 1204 842 1266 c 292 | 789 1329 718 1360 627 1360 c 293 | 536 1360 464 1329 411 1266 c 294 | 358 1204 332 1119 332 1012 c 295 | 332 904 358 819 411 757 c 296 | 464 695 536 664 627 664 c 297 | 298 | ce} _d 299 | /B{1405 0 201 0 1260 1493 sc 300 | 403 713 m 301 | 403 166 l 302 | 727 166 l 303 | 836 166 916 188 968 233 c 304 | 1021 278 1047 347 1047 440 c 305 | 1047 533 1021 602 968 646 c 306 | 916 691 836 713 727 713 c 307 | 403 713 l 308 | 309 | 403 1327 m 310 | 403 877 l 311 | 702 877 l 312 | 801 877 874 895 922 932 c 313 | 971 969 995 1026 995 1102 c 314 | 995 1177 971 1234 922 1271 c 315 | 874 1308 801 1327 702 1327 c 316 | 403 1327 l 317 | 318 | 201 1493 m 319 | 717 1493 l 320 | 871 1493 990 1461 1073 1397 c 321 | 1156 1333 1198 1242 1198 1124 c 322 | 1198 1033 1177 960 1134 906 c 323 | 1091 852 1029 818 946 805 c 324 | 1045 784 1122 739 1177 671 c 325 | 1232 604 1260 519 1260 418 c 326 | 1260 285 1215 182 1124 109 c 327 | 1033 36 904 0 737 0 c 328 | 201 0 l 329 | 201 1493 l 330 | 331 | ce} _d 332 | /S{1300 0 135 -29 1186 1520 sc 333 | 1096 1444 m 334 | 1096 1247 l 335 | 1019 1284 947 1311 879 1329 c 336 | 811 1347 745 1356 682 1356 c 337 | 572 1356 487 1335 427 1292 c 338 | 368 1249 338 1189 338 1110 c 339 | 338 1044 358 994 397 960 c 340 | 437 927 512 900 623 879 c 341 | 745 854 l 342 | 896 825 1007 775 1078 702 c 343 | 1150 630 1186 533 1186 412 c 344 | 1186 267 1137 158 1040 83 c 345 | 943 8 801 -29 614 -29 c 346 | 543 -29 468 -21 388 -5 c 347 | 309 11 226 35 141 66 c 348 | 141 274 l 349 | 223 228 303 193 382 170 c 350 | 461 147 538 135 614 135 c 351 | 729 135 818 158 881 203 c 352 | 944 248 975 313 975 397 c 353 | 975 470 952 528 907 569 c 354 | 862 610 789 641 686 662 c 355 | 563 686 l 356 | 412 716 303 763 236 827 c 357 | 169 891 135 980 135 1094 c 358 | 135 1226 181 1330 274 1406 c 359 | 367 1482 496 1520 659 1520 c 360 | 729 1520 800 1514 873 1501 c 361 | 946 1488 1020 1469 1096 1444 c 362 | 363 | ce} _d 364 | /e{1260 0 113 -29 1151 1147 sc 365 | 1151 606 m 366 | 1151 516 l 367 | 305 516 l 368 | 313 389 351 293 419 226 c 369 | 488 160 583 127 705 127 c 370 | 776 127 844 136 910 153 c 371 | 977 170 1043 196 1108 231 c 372 | 1108 57 l 373 | 1042 29 974 8 905 -7 c 374 | 836 -22 765 -29 694 -29 c 375 | 515 -29 374 23 269 127 c 376 | 165 231 113 372 113 549 c 377 | 113 732 162 878 261 985 c 378 | 360 1093 494 1147 662 1147 c 379 | 813 1147 932 1098 1019 1001 c 380 | 1107 904 1151 773 1151 606 c 381 | 382 | 967 660 m 383 | 966 761 937 841 882 901 c 384 | 827 961 755 991 664 991 c 385 | 561 991 479 962 417 904 c 386 | 356 846 320 764 311 659 c 387 | 967 660 l 388 | 389 | ce} _d 390 | /n{1298 0 186 0 1124 1147 sc 391 | 1124 676 m 392 | 1124 0 l 393 | 940 0 l 394 | 940 670 l 395 | 940 776 919 855 878 908 c 396 | 837 961 775 987 692 987 c 397 | 593 987 514 955 457 892 c 398 | 400 829 371 742 371 633 c 399 | 371 0 l 400 | 186 0 l 401 | 186 1120 l 402 | 371 1120 l 403 | 371 946 l 404 | 415 1013 467 1064 526 1097 c 405 | 586 1130 655 1147 733 1147 c 406 | 862 1147 959 1107 1025 1027 c 407 | 1091 948 1124 831 1124 676 c 408 | 409 | ce} _d 410 | /o{1253 0 113 -29 1141 1147 sc 411 | 627 991 m 412 | 528 991 450 952 393 875 c 413 | 336 798 307 693 307 559 c 414 | 307 425 335 319 392 242 c 415 | 449 165 528 127 627 127 c 416 | 725 127 803 166 860 243 c 417 | 917 320 946 426 946 559 c 418 | 946 692 917 797 860 874 c 419 | 803 952 725 991 627 991 c 420 | 421 | 627 1147 m 422 | 787 1147 913 1095 1004 991 c 423 | 1095 887 1141 743 1141 559 c 424 | 1141 376 1095 232 1004 127 c 425 | 913 23 787 -29 627 -29 c 426 | 466 -29 340 23 249 127 c 427 | 158 232 113 376 113 559 c 428 | 113 743 158 887 249 991 c 429 | 340 1095 466 1147 627 1147 c 430 | 431 | ce} _d 432 | /r{842 0 186 0 842 1147 sc 433 | 842 948 m 434 | 821 960 799 969 774 974 c 435 | 750 980 723 983 694 983 c 436 | 590 983 510 949 454 881 c 437 | 399 814 371 717 371 590 c 438 | 371 0 l 439 | 186 0 l 440 | 186 1120 l 441 | 371 1120 l 442 | 371 946 l 443 | 410 1014 460 1064 522 1097 c 444 | 584 1130 659 1147 748 1147 c 445 | 761 1147 775 1146 790 1144 c 446 | 805 1143 822 1140 841 1137 c 447 | 842 948 l 448 | 449 | ce} _d 450 | /s{1067 0 111 -29 967 1147 sc 451 | 907 1087 m 452 | 907 913 l 453 | 855 940 801 960 745 973 c 454 | 689 986 631 993 571 993 c 455 | 480 993 411 979 365 951 c 456 | 320 923 297 881 297 825 c 457 | 297 782 313 749 346 724 c 458 | 379 700 444 677 543 655 c 459 | 606 641 l 460 | 737 613 829 573 884 522 c 461 | 939 471 967 400 967 309 c 462 | 967 205 926 123 843 62 c 463 | 761 1 648 -29 504 -29 c 464 | 444 -29 381 -23 316 -11 c 465 | 251 0 183 18 111 41 c 466 | 111 231 l 467 | 179 196 246 169 312 151 c 468 | 378 134 443 125 508 125 c 469 | 595 125 661 140 708 169 c 470 | 755 199 778 241 778 295 c 471 | 778 345 761 383 727 410 c 472 | 694 437 620 462 506 487 c 473 | 442 502 l 474 | 328 526 246 563 195 612 c 475 | 144 662 119 730 119 817 c 476 | 119 922 156 1004 231 1061 c 477 | 306 1118 412 1147 549 1147 c 478 | 617 1147 681 1142 741 1132 c 479 | 801 1122 856 1107 907 1087 c 480 | 481 | ce} _d 482 | /t{803 0 55 0 754 1438 sc 483 | 375 1438 m 484 | 375 1120 l 485 | 754 1120 l 486 | 754 977 l 487 | 375 977 l 488 | 375 369 l 489 | 375 278 387 219 412 193 c 490 | 437 167 488 154 565 154 c 491 | 754 154 l 492 | 754 0 l 493 | 565 0 l 494 | 423 0 325 26 271 79 c 495 | 217 132 190 229 190 369 c 496 | 190 977 l 497 | 55 977 l 498 | 55 1120 l 499 | 190 1120 l 500 | 190 1438 l 501 | 375 1438 l 502 | 503 | ce} _d 504 | /y{1212 0 61 -426 1151 1120 sc 505 | 659 -104 m 506 | 607 -237 556 -324 507 -365 c 507 | 458 -406 392 -426 309 -426 c 508 | 162 -426 l 509 | 162 -272 l 510 | 270 -272 l 511 | 321 -272 360 -260 388 -236 c 512 | 416 -212 447 -155 481 -66 c 513 | 514 18 l 514 | 61 1120 l 515 | 256 1120 l 516 | 606 244 l 517 | 956 1120 l 518 | 1151 1120 l 519 | 659 -104 l 520 | 521 | ce} _d 522 | end readonly def 523 | 524 | /BuildGlyph { 525 | exch begin 526 | CharStrings exch 527 | 2 copy known not {pop /.notdef} if 528 | true 3 1 roll get exec 529 | end 530 | } _d 531 | 532 | /BuildChar { 533 | 1 index /Encoding get exch get 534 | 1 index /BuildGlyph get exec 535 | } _d 536 | 537 | FontName currentdict end definefont pop 538 | %!PS-Adobe-3.0 Resource-Font 539 | %%Creator: Converted from TrueType to Type 3 by Matplotlib. 540 | 10 dict begin 541 | /FontName /DejaVuSans-Bold def 542 | /PaintType 0 def 543 | /FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def 544 | /FontBBox [-2190 -850 4045 2405] def 545 | /FontType 3 def 546 | /Encoding [/space /parenleft /parenright /hyphen /five /L /N /P /S /T /a /c /e /g /h /i /k /l /n /o /r /s /t] def 547 | /CharStrings 24 dict dup begin 548 | /.notdef 0 def 549 | /space{713 0 0 0 0 0 sc 550 | ce} _d 551 | /parenleft{936 0 176 -270 772 1554 sc 552 | 772 -270 m 553 | 475 -270 l 554 | 373 -105 298 51 249 199 c 555 | 200 348 176 495 176 641 c 556 | 176 787 200 935 249 1084 c 557 | 298 1234 374 1391 475 1554 c 558 | 772 1554 l 559 | 687 1396 623 1241 580 1090 c 560 | 537 939 516 790 516 643 c 561 | 516 496 537 346 579 195 c 562 | 622 44 686 -111 772 -270 c 563 | 564 | ce} _d 565 | /parenright{936 0 164 -270 760 1554 sc 566 | 164 -270 m 567 | 249 -111 313 44 356 195 c 568 | 399 346 420 496 420 643 c 569 | 420 790 399 939 356 1090 c 570 | 313 1241 249 1396 164 1554 c 571 | 461 1554 l 572 | 562 1391 637 1234 686 1084 c 573 | 735 935 760 787 760 641 c 574 | 760 495 736 348 687 199 c 575 | 638 51 563 -105 461 -270 c 576 | 164 -270 l 577 | 578 | ce} _d 579 | /hyphen{850 0 111 444 739 735 sc 580 | 111 735 m 581 | 739 735 l 582 | 739 444 l 583 | 111 444 l 584 | 111 735 l 585 | 586 | ce} _d 587 | /five{1425 0 158 -29 1282 1493 sc 588 | 217 1493 m 589 | 1174 1493 l 590 | 1174 1210 l 591 | 524 1210 l 592 | 524 979 l 593 | 553 987 583 993 612 997 c 594 | 642 1002 673 1004 705 1004 c 595 | 887 1004 1029 958 1130 867 c 596 | 1231 776 1282 650 1282 487 c 597 | 1282 326 1227 199 1116 108 c 598 | 1006 17 853 -29 657 -29 c 599 | 572 -29 488 -21 405 -4 c 600 | 322 12 240 37 158 70 c 601 | 158 373 l 602 | 239 326 316 291 389 268 c 603 | 462 245 531 233 596 233 c 604 | 689 233 763 256 816 301 c 605 | 870 347 897 409 897 487 c 606 | 897 566 870 628 816 673 c 607 | 763 718 689 741 596 741 c 608 | 541 741 482 734 419 719 c 609 | 356 705 289 683 217 653 c 610 | 217 1493 l 611 | 612 | ce} _d 613 | /L{1305 0 188 0 1249 1493 sc 614 | 188 1493 m 615 | 573 1493 l 616 | 573 291 l 617 | 1249 291 l 618 | 1249 0 l 619 | 188 0 l 620 | 188 1493 l 621 | 622 | ce} _d 623 | /N{1714 0 188 0 1526 1493 sc 624 | 188 1493 m 625 | 618 1493 l 626 | 1161 469 l 627 | 1161 1493 l 628 | 1526 1493 l 629 | 1526 0 l 630 | 1096 0 l 631 | 553 1024 l 632 | 553 0 l 633 | 188 0 l 634 | 188 1493 l 635 | 636 | ce} _d 637 | /P{1501 0 188 0 1417 1493 sc 638 | 188 1493 m 639 | 827 1493 l 640 | 1017 1493 1163 1451 1264 1366 c 641 | 1366 1282 1417 1162 1417 1006 c 642 | 1417 849 1366 729 1264 644 c 643 | 1163 560 1017 518 827 518 c 644 | 573 518 l 645 | 573 0 l 646 | 188 0 l 647 | 188 1493 l 648 | 649 | 573 1214 m 650 | 573 797 l 651 | 786 797 l 652 | 861 797 918 815 959 851 c 653 | 1000 888 1020 939 1020 1006 c 654 | 1020 1073 1000 1124 959 1160 c 655 | 918 1196 861 1214 786 1214 c 656 | 573 1214 l 657 | 658 | ce} _d 659 | /S{1475 0 147 -29 1325 1520 sc 660 | 1227 1446 m 661 | 1227 1130 l 662 | 1145 1167 1065 1194 987 1213 c 663 | 909 1232 835 1241 766 1241 c 664 | 674 1241 606 1228 562 1203 c 665 | 518 1178 496 1138 496 1085 c 666 | 496 1045 511 1014 540 991 c 667 | 570 969 624 950 702 934 c 668 | 866 901 l 669 | 1032 868 1150 817 1220 749 c 670 | 1290 681 1325 584 1325 459 c 671 | 1325 294 1276 172 1178 91 c 672 | 1081 11 932 -29 731 -29 c 673 | 636 -29 541 -20 446 -2 c 674 | 351 16 255 43 160 78 c 675 | 160 403 l 676 | 255 352 347 314 436 288 c 677 | 525 263 611 250 694 250 c 678 | 778 250 842 264 887 292 c 679 | 932 320 954 360 954 412 c 680 | 954 459 939 495 908 520 c 681 | 878 545 818 568 727 588 c 682 | 578 621 l 683 | 429 653 319 704 250 774 c 684 | 181 844 147 938 147 1057 c 685 | 147 1206 195 1320 291 1400 c 686 | 387 1480 525 1520 705 1520 c 687 | 787 1520 871 1514 958 1501 c 688 | 1045 1489 1134 1471 1227 1446 c 689 | 690 | ce} _d 691 | /T{1397 0 10 0 1386 1493 sc 692 | 10 1493 m 693 | 1386 1493 l 694 | 1386 1202 l 695 | 891 1202 l 696 | 891 0 l 697 | 506 0 l 698 | 506 1202 l 699 | 10 1202 l 700 | 10 1493 l 701 | 702 | ce} _d 703 | /a{1382 0 88 -29 1221 1147 sc 704 | 674 504 m 705 | 599 504 543 491 505 466 c 706 | 468 441 449 403 449 354 c 707 | 449 309 464 273 494 247 c 708 | 525 222 567 209 621 209 c 709 | 688 209 745 233 791 281 c 710 | 837 330 860 390 860 463 c 711 | 860 504 l 712 | 674 504 l 713 | 714 | 1221 639 m 715 | 1221 0 l 716 | 860 0 l 717 | 860 166 l 718 | 812 98 758 48 698 17 c 719 | 638 -14 565 -29 479 -29 c 720 | 363 -29 269 5 196 72 c 721 | 124 140 88 228 88 336 c 722 | 88 467 133 564 223 625 c 723 | 314 686 456 717 649 717 c 724 | 860 717 l 725 | 860 745 l 726 | 860 802 838 843 793 869 c 727 | 748 896 679 909 584 909 c 728 | 507 909 436 901 370 886 c 729 | 304 871 243 848 186 817 c 730 | 186 1090 l 731 | 263 1109 340 1123 417 1132 c 732 | 494 1142 572 1147 649 1147 c 733 | 851 1147 997 1107 1086 1027 c 734 | 1176 948 1221 818 1221 639 c 735 | 736 | ce} _d 737 | /c{1214 0 88 -29 1077 1147 sc 738 | 1077 1085 m 739 | 1077 793 l 740 | 1028 826 979 851 930 867 c 741 | 881 883 831 891 778 891 c 742 | 678 891 600 862 544 803 c 743 | 489 745 461 664 461 559 c 744 | 461 454 489 373 544 314 c 745 | 600 256 678 227 778 227 c 746 | 834 227 887 235 937 252 c 747 | 988 269 1034 293 1077 326 c 748 | 1077 33 l 749 | 1021 12 964 -3 906 -13 c 750 | 849 -24 791 -29 733 -29 c 751 | 531 -29 373 23 259 126 c 752 | 145 230 88 374 88 559 c 753 | 88 744 145 888 259 991 c 754 | 373 1095 531 1147 733 1147 c 755 | 792 1147 849 1142 906 1131 c 756 | 963 1121 1020 1106 1077 1085 c 757 | 758 | ce} _d 759 | /e{1389 0 88 -29 1290 1147 sc 760 | 1290 563 m 761 | 1290 461 l 762 | 453 461 l 763 | 462 377 492 314 544 272 c 764 | 596 230 669 209 762 209 c 765 | 837 209 914 220 993 242 c 766 | 1072 265 1154 299 1237 344 c 767 | 1237 68 l 768 | 1152 36 1068 12 983 -4 c 769 | 898 -21 814 -29 729 -29 c 770 | 526 -29 369 22 256 125 c 771 | 144 228 88 373 88 559 c 772 | 88 742 143 885 253 990 c 773 | 364 1095 516 1147 709 1147 c 774 | 885 1147 1026 1094 1131 988 c 775 | 1237 882 1290 740 1290 563 c 776 | 777 | 922 682 m 778 | 922 750 902 805 862 846 c 779 | 823 888 771 909 707 909 c 780 | 638 909 581 889 538 850 c 781 | 495 811 468 755 457 682 c 782 | 922 682 l 783 | 784 | ce} _d 785 | /g{1466 0 92 -442 1294 1145 sc 786 | 934 190 m 787 | 885 125 830 77 771 46 c 788 | 712 15 643 0 565 0 c 789 | 428 0 315 54 226 161 c 790 | 137 269 92 406 92 573 c 791 | 92 740 137 877 226 984 c 792 | 315 1091 428 1145 565 1145 c 793 | 643 1145 712 1130 771 1099 c 794 | 830 1068 885 1020 934 954 c 795 | 934 1120 l 796 | 1294 1120 l 797 | 1294 113 l 798 | 1294 -67 1237 -204 1123 -299 c 799 | 1010 -394 845 -442 629 -442 c 800 | 559 -442 491 -437 426 -426 c 801 | 361 -415 295 -399 229 -377 c 802 | 229 -98 l 803 | 292 -134 353 -161 413 -178 c 804 | 473 -196 533 -205 594 -205 c 805 | 711 -205 797 -179 852 -128 c 806 | 907 -77 934 4 934 113 c 807 | 934 190 l 808 | 809 | 698 887 m 810 | 624 887 566 860 525 805 c 811 | 484 750 463 673 463 573 c 812 | 463 470 483 392 523 339 c 813 | 563 286 621 260 698 260 c 814 | 773 260 831 287 872 342 c 815 | 913 397 934 474 934 573 c 816 | 934 673 913 750 872 805 c 817 | 831 860 773 887 698 887 c 818 | 819 | ce} _d 820 | /h{1458 0 172 0 1298 1556 sc 821 | 1298 682 m 822 | 1298 0 l 823 | 938 0 l 824 | 938 111 l 825 | 938 520 l 826 | 938 618 936 685 931 722 c 827 | 927 759 920 786 909 803 c 828 | 895 826 876 844 852 857 c 829 | 828 870 801 877 770 877 c 830 | 695 877 637 848 594 790 c 831 | 551 733 530 653 530 551 c 832 | 530 0 l 833 | 172 0 l 834 | 172 1556 l 835 | 530 1556 l 836 | 530 956 l 837 | 584 1021 641 1069 702 1100 c 838 | 763 1131 830 1147 903 1147 c 839 | 1032 1147 1130 1107 1197 1028 c 840 | 1264 949 1298 833 1298 682 c 841 | 842 | ce} _d 843 | /i{702 0 172 0 530 1556 sc 844 | 172 1120 m 845 | 530 1120 l 846 | 530 0 l 847 | 172 0 l 848 | 172 1120 l 849 | 850 | 172 1556 m 851 | 530 1556 l 852 | 530 1264 l 853 | 172 1264 l 854 | 172 1556 l 855 | 856 | ce} _d 857 | /k{1362 0 172 0 1401 1556 sc 858 | 172 1556 m 859 | 530 1556 l 860 | 530 709 l 861 | 942 1120 l 862 | 1358 1120 l 863 | 811 606 l 864 | 1401 0 l 865 | 967 0 l 866 | 530 467 l 867 | 530 0 l 868 | 172 0 l 869 | 172 1556 l 870 | 871 | ce} _d 872 | /l{702 0 172 0 530 1556 sc 873 | 172 1556 m 874 | 530 1556 l 875 | 530 0 l 876 | 172 0 l 877 | 172 1556 l 878 | 879 | ce} _d 880 | /n{1458 0 172 0 1298 1147 sc 881 | 1298 682 m 882 | 1298 0 l 883 | 938 0 l 884 | 938 111 l 885 | 938 522 l 886 | 938 619 936 685 931 722 c 887 | 927 759 920 786 909 803 c 888 | 895 826 876 844 852 857 c 889 | 828 870 801 877 770 877 c 890 | 695 877 637 848 594 790 c 891 | 551 733 530 653 530 551 c 892 | 530 0 l 893 | 172 0 l 894 | 172 1120 l 895 | 530 1120 l 896 | 530 956 l 897 | 584 1021 641 1069 702 1100 c 898 | 763 1131 830 1147 903 1147 c 899 | 1032 1147 1130 1107 1197 1028 c 900 | 1264 949 1298 833 1298 682 c 901 | 902 | ce} _d 903 | /o{1407 0 88 -29 1319 1147 sc 904 | 705 891 m 905 | 626 891 565 862 523 805 c 906 | 482 748 461 666 461 559 c 907 | 461 452 482 369 523 312 c 908 | 565 255 626 227 705 227 c 909 | 783 227 843 255 884 312 c 910 | 925 369 946 452 946 559 c 911 | 946 666 925 748 884 805 c 912 | 843 862 783 891 705 891 c 913 | 914 | 705 1147 m 915 | 898 1147 1048 1095 1156 991 c 916 | 1265 887 1319 743 1319 559 c 917 | 1319 375 1265 231 1156 127 c 918 | 1048 23 898 -29 705 -29 c 919 | 512 -29 360 23 251 127 c 920 | 142 231 88 375 88 559 c 921 | 88 743 142 887 251 991 c 922 | 360 1095 512 1147 705 1147 c 923 | 924 | ce} _d 925 | /r{1010 0 172 0 1004 1147 sc 926 | 1004 815 m 927 | 973 830 941 840 910 847 c 928 | 879 854 848 858 817 858 c 929 | 725 858 654 828 604 769 c 930 | 555 710 530 626 530 516 c 931 | 530 0 l 932 | 172 0 l 933 | 172 1120 l 934 | 530 1120 l 935 | 530 936 l 936 | 576 1009 629 1063 688 1096 c 937 | 748 1130 820 1147 903 1147 c 938 | 915 1147 928 1146 942 1145 c 939 | 956 1144 976 1142 1003 1139 c 940 | 1004 815 l 941 | 942 | ce} _d 943 | /s{1219 0 106 -29 1122 1147 sc 944 | 1047 1085 m 945 | 1047 813 l 946 | 970 845 896 869 825 885 c 947 | 754 901 686 909 623 909 c 948 | 555 909 504 900 471 883 c 949 | 438 866 422 840 422 805 c 950 | 422 776 434 754 459 739 c 951 | 484 724 529 712 594 705 c 952 | 657 696 l 953 | 840 673 964 634 1027 581 c 954 | 1090 528 1122 444 1122 330 c 955 | 1122 211 1078 121 990 61 c 956 | 902 1 771 -29 596 -29 c 957 | 522 -29 445 -23 366 -11 c 958 | 287 0 206 18 123 41 c 959 | 123 313 l 960 | 194 278 267 252 342 235 c 961 | 417 218 494 209 571 209 c 962 | 641 209 694 219 729 238 c 963 | 764 257 782 286 782 324 c 964 | 782 356 770 380 745 395 c 965 | 721 411 673 423 600 432 c 966 | 537 440 l 967 | 378 460 266 497 202 551 c 968 | 138 605 106 687 106 797 c 969 | 106 916 147 1004 228 1061 c 970 | 309 1118 434 1147 602 1147 c 971 | 668 1147 737 1142 810 1132 c 972 | 883 1122 962 1106 1047 1085 c 973 | 974 | ce} _d 975 | /t{979 0 27 0 932 1438 sc 976 | 563 1438 m 977 | 563 1120 l 978 | 932 1120 l 979 | 932 864 l 980 | 563 864 l 981 | 563 389 l 982 | 563 337 573 302 594 283 c 983 | 615 265 656 256 717 256 c 984 | 901 256 l 985 | 901 0 l 986 | 594 0 l 987 | 453 0 352 29 293 88 c 988 | 234 147 205 248 205 389 c 989 | 205 864 l 990 | 27 864 l 991 | 27 1120 l 992 | 205 1120 l 993 | 205 1438 l 994 | 563 1438 l 995 | 996 | ce} _d 997 | end readonly def 998 | 999 | /BuildGlyph { 1000 | exch begin 1001 | CharStrings exch 1002 | 2 copy known not {pop /.notdef} if 1003 | true 3 1 roll get exec 1004 | end 1005 | } _d 1006 | 1007 | /BuildChar { 1008 | 1 index /Encoding get exch get 1009 | 1 index /BuildGlyph get exec 1010 | } _d 1011 | 1012 | FontName currentdict end definefont pop 1013 | end 1014 | %%EndProlog 1015 | mpldict begin 1016 | -54 180 translate 1017 | 720 432 0 0 clipbox 1018 | gsave 1019 | 0 0 m 1020 | 720 0 l 1021 | 720 432 l 1022 | 0 432 l 1023 | cl 1024 | 1.000 setgray 1025 | fill 1026 | grestore 1027 | gsave 1028 | 90 47.52 m 1029 | 648 47.52 l 1030 | 648 380.16 l 1031 | 90 380.16 l 1032 | cl 1033 | 1.000 setgray 1034 | fill 1035 | grestore 1036 | gsave 1037 | 558 332.64 90 47.52 clipbox 1038 | 115.363636 47.52 m 1039 | 161.479339 47.52 l 1040 | 161.479339 248.168448 l 1041 | 115.363636 248.168448 l 1042 | cl 1043 | 0.529 0.808 0.922 setrgbcolor 1044 | fill 1045 | grestore 1046 | gsave 1047 | 558 332.64 90 47.52 clipbox 1048 | 173.008264 47.52 m 1049 | 219.123967 47.52 l 1050 | 219.123967 243.910656 l 1051 | 173.008264 243.910656 l 1052 | cl 1053 | 0.529 0.808 0.922 setrgbcolor 1054 | fill 1055 | grestore 1056 | gsave 1057 | 558 332.64 90 47.52 clipbox 1058 | 230.652893 47.52 m 1059 | 276.768595 47.52 l 1060 | 276.768595 152.900352 l 1061 | 230.652893 152.900352 l 1062 | cl 1063 | 0.529 0.808 0.922 setrgbcolor 1064 | fill 1065 | grestore 1066 | gsave 1067 | 558 332.64 90 47.52 clipbox 1068 | 288.297521 47.52 m 1069 | 334.413223 47.52 l 1070 | 334.413223 144.118656 l 1071 | 288.297521 144.118656 l 1072 | cl 1073 | 0.529 0.808 0.922 setrgbcolor 1074 | fill 1075 | grestore 1076 | gsave 1077 | 558 332.64 90 47.52 clipbox 1078 | 345.942149 47.52 m 1079 | 392.057851 47.52 l 1080 | 392.057851 245.241216 l 1081 | 345.942149 245.241216 l 1082 | cl 1083 | 0.529 0.808 0.922 setrgbcolor 1084 | fill 1085 | grestore 1086 | gsave 1087 | 558 332.64 90 47.52 clipbox 1088 | 403.586777 47.52 m 1089 | 449.702479 47.52 l 1090 | 449.702479 161.682048 l 1091 | 403.586777 161.682048 l 1092 | cl 1093 | 0.529 0.808 0.922 setrgbcolor 1094 | fill 1095 | grestore 1096 | gsave 1097 | 558 332.64 90 47.52 clipbox 1098 | 461.231405 47.52 m 1099 | 507.347107 47.52 l 1100 | 507.347107 170.463744 l 1101 | 461.231405 170.463744 l 1102 | cl 1103 | 0.529 0.808 0.922 setrgbcolor 1104 | fill 1105 | grestore 1106 | gsave 1107 | 558 332.64 90 47.52 clipbox 1108 | 518.876033 47.52 m 1109 | 564.991736 47.52 l 1110 | 564.991736 170.463744 l 1111 | 518.876033 170.463744 l 1112 | cl 1113 | 0.529 0.808 0.922 setrgbcolor 1114 | fill 1115 | grestore 1116 | gsave 1117 | 558 332.64 90 47.52 clipbox 1118 | 576.520661 47.52 m 1119 | 622.636364 47.52 l 1120 | 622.636364 135.33696 l 1121 | 576.520661 135.33696 l 1122 | cl 1123 | 0.529 0.808 0.922 setrgbcolor 1124 | fill 1125 | grestore 1126 | 0.800 setlinewidth 1127 | 1 setlinejoin 1128 | 0 setlinecap 1129 | [] 0 setdash 1130 | 0.000 setgray 1131 | gsave 1132 | /o { 1133 | gsave 1134 | newpath 1135 | translate 1136 | 0.8 setlinewidth 1137 | 1 setlinejoin 1138 | 1139 | 0 setlinecap 1140 | 1141 | 0 0 m 1142 | 0 -3.5 l 1143 | 1144 | gsave 1145 | 0.000 setgray 1146 | fill 1147 | grestore 1148 | stroke 1149 | grestore 1150 | } bind def 1151 | 138.421 47.52 o 1152 | grestore 1153 | /DejaVuSans 10.000 selectfont 1154 | gsave 1155 | 1156 | 116.5 32.9262 translate 1157 | 0 rotate 1158 | 0 0 m /S glyphshow 1159 | 6.34766 0 m /e glyphshow 1160 | 12.5 0 m /n glyphshow 1161 | 18.8379 0 m /s glyphshow 1162 | 24.0479 0 m /o glyphshow 1163 | 30.166 0 m /r glyphshow 1164 | 34.2773 0 m /space glyphshow 1165 | 37.4561 0 m /one glyphshow 1166 | grestore 1167 | gsave 1168 | /o { 1169 | gsave 1170 | newpath 1171 | translate 1172 | 0.8 setlinewidth 1173 | 1 setlinejoin 1174 | 1175 | 0 setlinecap 1176 | 1177 | 0 0 m 1178 | 0 -3.5 l 1179 | 1180 | gsave 1181 | 0.000 setgray 1182 | fill 1183 | grestore 1184 | stroke 1185 | grestore 1186 | } bind def 1187 | 196.066 47.52 o 1188 | grestore 1189 | /DejaVuSans 10.000 selectfont 1190 | gsave 1191 | 1192 | 174.144 32.9262 translate 1193 | 0 rotate 1194 | 0 0 m /S glyphshow 1195 | 6.34766 0 m /e glyphshow 1196 | 12.5 0 m /n glyphshow 1197 | 18.8379 0 m /s glyphshow 1198 | 24.0479 0 m /o glyphshow 1199 | 30.166 0 m /r glyphshow 1200 | 34.2773 0 m /space glyphshow 1201 | 37.4561 0 m /two glyphshow 1202 | grestore 1203 | gsave 1204 | /o { 1205 | gsave 1206 | newpath 1207 | translate 1208 | 0.8 setlinewidth 1209 | 1 setlinejoin 1210 | 1211 | 0 setlinecap 1212 | 1213 | 0 0 m 1214 | 0 -3.5 l 1215 | 1216 | gsave 1217 | 0.000 setgray 1218 | fill 1219 | grestore 1220 | stroke 1221 | grestore 1222 | } bind def 1223 | 253.711 47.52 o 1224 | grestore 1225 | /DejaVuSans 10.000 selectfont 1226 | gsave 1227 | 1228 | 231.789 32.9262 translate 1229 | 0 rotate 1230 | 0 0 m /S glyphshow 1231 | 6.34766 0 m /e glyphshow 1232 | 12.5 0 m /n glyphshow 1233 | 18.8379 0 m /s glyphshow 1234 | 24.0479 0 m /o glyphshow 1235 | 30.166 0 m /r glyphshow 1236 | 34.2773 0 m /space glyphshow 1237 | 37.4561 0 m /three glyphshow 1238 | grestore 1239 | gsave 1240 | /o { 1241 | gsave 1242 | newpath 1243 | translate 1244 | 0.8 setlinewidth 1245 | 1 setlinejoin 1246 | 1247 | 0 setlinecap 1248 | 1249 | 0 0 m 1250 | 0 -3.5 l 1251 | 1252 | gsave 1253 | 0.000 setgray 1254 | fill 1255 | grestore 1256 | stroke 1257 | grestore 1258 | } bind def 1259 | 311.355 47.52 o 1260 | grestore 1261 | /DejaVuSans 10.000 selectfont 1262 | gsave 1263 | 1264 | 289.433 32.9262 translate 1265 | 0 rotate 1266 | 0 0 m /S glyphshow 1267 | 6.34766 0 m /e glyphshow 1268 | 12.5 0 m /n glyphshow 1269 | 18.8379 0 m /s glyphshow 1270 | 24.0479 0 m /o glyphshow 1271 | 30.166 0 m /r glyphshow 1272 | 34.2773 0 m /space glyphshow 1273 | 37.4561 0 m /four glyphshow 1274 | grestore 1275 | gsave 1276 | /o { 1277 | gsave 1278 | newpath 1279 | translate 1280 | 0.8 setlinewidth 1281 | 1 setlinejoin 1282 | 1283 | 0 setlinecap 1284 | 1285 | 0 0 m 1286 | 0 -3.5 l 1287 | 1288 | gsave 1289 | 0.000 setgray 1290 | fill 1291 | grestore 1292 | stroke 1293 | grestore 1294 | } bind def 1295 | 369 47.52 o 1296 | grestore 1297 | /DejaVuSans 10.000 selectfont 1298 | gsave 1299 | 1300 | 347.078 32.9262 translate 1301 | 0 rotate 1302 | 0 0 m /S glyphshow 1303 | 6.34766 0 m /e glyphshow 1304 | 12.5 0 m /n glyphshow 1305 | 18.8379 0 m /s glyphshow 1306 | 24.0479 0 m /o glyphshow 1307 | 30.166 0 m /r glyphshow 1308 | 34.2773 0 m /space glyphshow 1309 | 37.4561 0 m /five glyphshow 1310 | grestore 1311 | gsave 1312 | /o { 1313 | gsave 1314 | newpath 1315 | translate 1316 | 0.8 setlinewidth 1317 | 1 setlinejoin 1318 | 1319 | 0 setlinecap 1320 | 1321 | 0 0 m 1322 | 0 -3.5 l 1323 | 1324 | gsave 1325 | 0.000 setgray 1326 | fill 1327 | grestore 1328 | stroke 1329 | grestore 1330 | } bind def 1331 | 426.645 47.52 o 1332 | grestore 1333 | /DejaVuSans 10.000 selectfont 1334 | gsave 1335 | 1336 | 404.723 32.9262 translate 1337 | 0 rotate 1338 | 0 0 m /S glyphshow 1339 | 6.34766 0 m /e glyphshow 1340 | 12.5 0 m /n glyphshow 1341 | 18.8379 0 m /s glyphshow 1342 | 24.0479 0 m /o glyphshow 1343 | 30.166 0 m /r glyphshow 1344 | 34.2773 0 m /space glyphshow 1345 | 37.4561 0 m /six glyphshow 1346 | grestore 1347 | gsave 1348 | /o { 1349 | gsave 1350 | newpath 1351 | translate 1352 | 0.8 setlinewidth 1353 | 1 setlinejoin 1354 | 1355 | 0 setlinecap 1356 | 1357 | 0 0 m 1358 | 0 -3.5 l 1359 | 1360 | gsave 1361 | 0.000 setgray 1362 | fill 1363 | grestore 1364 | stroke 1365 | grestore 1366 | } bind def 1367 | 484.289 47.52 o 1368 | grestore 1369 | /DejaVuSans 10.000 selectfont 1370 | gsave 1371 | 1372 | 462.367 32.9262 translate 1373 | 0 rotate 1374 | 0 0 m /S glyphshow 1375 | 6.34766 0 m /e glyphshow 1376 | 12.5 0 m /n glyphshow 1377 | 18.8379 0 m /s glyphshow 1378 | 24.0479 0 m /o glyphshow 1379 | 30.166 0 m /r glyphshow 1380 | 34.2773 0 m /space glyphshow 1381 | 37.4561 0 m /seven glyphshow 1382 | grestore 1383 | gsave 1384 | /o { 1385 | gsave 1386 | newpath 1387 | translate 1388 | 0.8 setlinewidth 1389 | 1 setlinejoin 1390 | 1391 | 0 setlinecap 1392 | 1393 | 0 0 m 1394 | 0 -3.5 l 1395 | 1396 | gsave 1397 | 0.000 setgray 1398 | fill 1399 | grestore 1400 | stroke 1401 | grestore 1402 | } bind def 1403 | 541.934 47.52 o 1404 | grestore 1405 | /DejaVuSans 10.000 selectfont 1406 | gsave 1407 | 1408 | 520.012 32.9262 translate 1409 | 0 rotate 1410 | 0 0 m /S glyphshow 1411 | 6.34766 0 m /e glyphshow 1412 | 12.5 0 m /n glyphshow 1413 | 18.8379 0 m /s glyphshow 1414 | 24.0479 0 m /o glyphshow 1415 | 30.166 0 m /r glyphshow 1416 | 34.2773 0 m /space glyphshow 1417 | 37.4561 0 m /eight glyphshow 1418 | grestore 1419 | gsave 1420 | /o { 1421 | gsave 1422 | newpath 1423 | translate 1424 | 0.8 setlinewidth 1425 | 1 setlinejoin 1426 | 1427 | 0 setlinecap 1428 | 1429 | 0 0 m 1430 | 0 -3.5 l 1431 | 1432 | gsave 1433 | 0.000 setgray 1434 | fill 1435 | grestore 1436 | stroke 1437 | grestore 1438 | } bind def 1439 | 599.579 47.52 o 1440 | grestore 1441 | /DejaVuSans 10.000 selectfont 1442 | gsave 1443 | 1444 | 577.657 32.9262 translate 1445 | 0 rotate 1446 | 0 0 m /S glyphshow 1447 | 6.34766 0 m /e glyphshow 1448 | 12.5 0 m /n glyphshow 1449 | 18.8379 0 m /s glyphshow 1450 | 24.0479 0 m /o glyphshow 1451 | 30.166 0 m /r glyphshow 1452 | 34.2773 0 m /space glyphshow 1453 | 37.4561 0 m /nine glyphshow 1454 | grestore 1455 | /DejaVuSans 14.000 selectfont 1456 | gsave 1457 | 1458 | 341.359 16.2075 translate 1459 | 0 rotate 1460 | 0 0 m /S glyphshow 1461 | 8.88672 0 m /e glyphshow 1462 | 17.5 0 m /n glyphshow 1463 | 26.373 0 m /s glyphshow 1464 | 33.667 0 m /o glyphshow 1465 | 42.2324 0 m /r glyphshow 1466 | 47.9883 0 m /s glyphshow 1467 | grestore 1468 | gsave 1469 | /o { 1470 | gsave 1471 | newpath 1472 | translate 1473 | 0.8 setlinewidth 1474 | 1 setlinejoin 1475 | 1476 | 0 setlinecap 1477 | 1478 | -0 0 m 1479 | -3.5 0 l 1480 | 1481 | gsave 1482 | 0.000 setgray 1483 | fill 1484 | grestore 1485 | stroke 1486 | grestore 1487 | } bind def 1488 | 90 47.52 o 1489 | grestore 1490 | /DejaVuSans 10.000 selectfont 1491 | gsave 1492 | 1493 | 76.6406 43.7231 translate 1494 | 0 rotate 1495 | 0 0 m /zero glyphshow 1496 | grestore 1497 | gsave 1498 | /o { 1499 | gsave 1500 | newpath 1501 | translate 1502 | 0.8 setlinewidth 1503 | 1 setlinejoin 1504 | 1505 | 0 setlinecap 1506 | 1507 | -0 0 m 1508 | -3.5 0 l 1509 | 1510 | gsave 1511 | 0.000 setgray 1512 | fill 1513 | grestore 1514 | stroke 1515 | grestore 1516 | } bind def 1517 | 90 114.048 o 1518 | grestore 1519 | /DejaVuSans 10.000 selectfont 1520 | gsave 1521 | 1522 | 63.9219 110.251 translate 1523 | 0 rotate 1524 | 0 0 m /five glyphshow 1525 | 6.3623 0 m /zero glyphshow 1526 | 12.7246 0 m /zero glyphshow 1527 | grestore 1528 | gsave 1529 | /o { 1530 | gsave 1531 | newpath 1532 | translate 1533 | 0.8 setlinewidth 1534 | 1 setlinejoin 1535 | 1536 | 0 setlinecap 1537 | 1538 | -0 0 m 1539 | -3.5 0 l 1540 | 1541 | gsave 1542 | 0.000 setgray 1543 | fill 1544 | grestore 1545 | stroke 1546 | grestore 1547 | } bind def 1548 | 90 180.576 o 1549 | grestore 1550 | /DejaVuSans 10.000 selectfont 1551 | gsave 1552 | 1553 | 57.5625 176.779 translate 1554 | 0 rotate 1555 | 0 0 m /one glyphshow 1556 | 6.3623 0 m /zero glyphshow 1557 | 12.7246 0 m /zero glyphshow 1558 | 19.0869 0 m /zero glyphshow 1559 | grestore 1560 | gsave 1561 | /o { 1562 | gsave 1563 | newpath 1564 | translate 1565 | 0.8 setlinewidth 1566 | 1 setlinejoin 1567 | 1568 | 0 setlinecap 1569 | 1570 | -0 0 m 1571 | -3.5 0 l 1572 | 1573 | gsave 1574 | 0.000 setgray 1575 | fill 1576 | grestore 1577 | stroke 1578 | grestore 1579 | } bind def 1580 | 90 247.104 o 1581 | grestore 1582 | /DejaVuSans 10.000 selectfont 1583 | gsave 1584 | 1585 | 57.5625 243.307 translate 1586 | 0 rotate 1587 | 0 0 m /one glyphshow 1588 | 6.3623 0 m /five glyphshow 1589 | 12.7246 0 m /zero glyphshow 1590 | 19.0869 0 m /zero glyphshow 1591 | grestore 1592 | gsave 1593 | /o { 1594 | gsave 1595 | newpath 1596 | translate 1597 | 0.8 setlinewidth 1598 | 1 setlinejoin 1599 | 1600 | 0 setlinecap 1601 | 1602 | -0 0 m 1603 | -3.5 0 l 1604 | 1605 | gsave 1606 | 0.000 setgray 1607 | fill 1608 | grestore 1609 | stroke 1610 | grestore 1611 | } bind def 1612 | 90 313.632 o 1613 | grestore 1614 | /DejaVuSans 10.000 selectfont 1615 | gsave 1616 | 1617 | 57.5625 309.835 translate 1618 | 0 rotate 1619 | 0 0 m /two glyphshow 1620 | 6.3623 0 m /zero glyphshow 1621 | 12.7246 0 m /zero glyphshow 1622 | 19.0869 0 m /zero glyphshow 1623 | grestore 1624 | gsave 1625 | /o { 1626 | gsave 1627 | newpath 1628 | translate 1629 | 0.8 setlinewidth 1630 | 1 setlinejoin 1631 | 1632 | 0 setlinecap 1633 | 1634 | -0 0 m 1635 | -3.5 0 l 1636 | 1637 | gsave 1638 | 0.000 setgray 1639 | fill 1640 | grestore 1641 | stroke 1642 | grestore 1643 | } bind def 1644 | 90 380.16 o 1645 | grestore 1646 | /DejaVuSans 10.000 selectfont 1647 | gsave 1648 | 1649 | 57.5625 376.363 translate 1650 | 0 rotate 1651 | 0 0 m /two glyphshow 1652 | 6.3623 0 m /five glyphshow 1653 | 12.7246 0 m /zero glyphshow 1654 | 19.0869 0 m /zero glyphshow 1655 | grestore 1656 | /DejaVuSans 14.000 selectfont 1657 | gsave 1658 | 1659 | 50.6562 194.199 translate 1660 | 90 rotate 1661 | 0 0 m /B glyphshow 1662 | 9.60449 0 m /y glyphshow 1663 | 17.8896 0 m /t glyphshow 1664 | 23.3789 0 m /e glyphshow 1665 | 31.9922 0 m /s glyphshow 1666 | grestore 1667 | 0 setlinejoin 1668 | 2 setlinecap 1669 | gsave 1670 | 90 47.52 m 1671 | 90 380.16 l 1672 | stroke 1673 | grestore 1674 | gsave 1675 | 648 47.52 m 1676 | 648 380.16 l 1677 | stroke 1678 | grestore 1679 | gsave 1680 | 90 47.52 m 1681 | 648 47.52 l 1682 | stroke 1683 | grestore 1684 | gsave 1685 | 90 380.16 m 1686 | 648 380.16 l 1687 | stroke 1688 | grestore 1689 | /DejaVuSans 10.000 selectfont 1690 | gsave 1691 | 1692 | 125.703 263.552 translate 1693 | 0 rotate 1694 | 0 0 m /one glyphshow 1695 | 6.3623 0 m /five glyphshow 1696 | 12.7246 0 m /zero glyphshow 1697 | 19.0869 0 m /eight glyphshow 1698 | grestore 1699 | /DejaVuSans 10.000 selectfont 1700 | gsave 1701 | 1702 | 183.347 259.294 translate 1703 | 0 rotate 1704 | 0 0 m /one glyphshow 1705 | 6.3623 0 m /four glyphshow 1706 | 12.7246 0 m /seven glyphshow 1707 | 19.0869 0 m /six glyphshow 1708 | grestore 1709 | /DejaVuSans 10.000 selectfont 1710 | gsave 1711 | 1712 | 244.172 168.284 translate 1713 | 0 rotate 1714 | 0 0 m /seven glyphshow 1715 | 6.3623 0 m /nine glyphshow 1716 | 12.7246 0 m /two glyphshow 1717 | grestore 1718 | /DejaVuSans 10.000 selectfont 1719 | gsave 1720 | 1721 | 301.816 159.502 translate 1722 | 0 rotate 1723 | 0 0 m /seven glyphshow 1724 | 6.3623 0 m /two glyphshow 1725 | 12.7246 0 m /six glyphshow 1726 | grestore 1727 | /DejaVuSans 10.000 selectfont 1728 | gsave 1729 | 1730 | 356.281 260.625 translate 1731 | 0 rotate 1732 | 0 0 m /one glyphshow 1733 | 6.3623 0 m /four glyphshow 1734 | 12.7246 0 m /eight glyphshow 1735 | 19.0869 0 m /six glyphshow 1736 | grestore 1737 | /DejaVuSans 10.000 selectfont 1738 | gsave 1739 | 1740 | 417.106 177.066 translate 1741 | 0 rotate 1742 | 0 0 m /eight glyphshow 1743 | 6.3623 0 m /five glyphshow 1744 | 12.7246 0 m /eight glyphshow 1745 | grestore 1746 | /DejaVuSans 10.000 selectfont 1747 | gsave 1748 | 1749 | 474.75 185.847 translate 1750 | 0 rotate 1751 | 0 0 m /nine glyphshow 1752 | 6.3623 0 m /two glyphshow 1753 | 12.7246 0 m /four glyphshow 1754 | grestore 1755 | /DejaVuSans 10.000 selectfont 1756 | gsave 1757 | 1758 | 532.395 185.847 translate 1759 | 0 rotate 1760 | 0 0 m /nine glyphshow 1761 | 6.3623 0 m /two glyphshow 1762 | 12.7246 0 m /four glyphshow 1763 | grestore 1764 | /DejaVuSans 10.000 selectfont 1765 | gsave 1766 | 1767 | 590.039 150.721 translate 1768 | 0 rotate 1769 | 0 0 m /six glyphshow 1770 | 6.3623 0 m /six glyphshow 1771 | 12.7246 0 m /zero glyphshow 1772 | grestore 1773 | /DejaVuSans-Bold 16.000 selectfont 1774 | gsave 1775 | 1776 | 191.352 400.16 translate 1777 | 0 rotate 1778 | 0 0 m /T glyphshow 1779 | 8.78906 0 m /o glyphshow 1780 | 19.7812 0 m /t glyphshow 1781 | 27.4297 0 m /a glyphshow 1782 | 38.2266 0 m /l glyphshow 1783 | 43.7109 0 m /space glyphshow 1784 | 49.2812 0 m /P glyphshow 1785 | 60.6328 0 m /a glyphshow 1786 | 71.4297 0 m /c glyphshow 1787 | 80.9141 0 m /k glyphshow 1788 | 91.1797 0 m /e glyphshow 1789 | 102.031 0 m /t glyphshow 1790 | 109.68 0 m /space glyphshow 1791 | 115.25 0 m /L glyphshow 1792 | 125.445 0 m /e glyphshow 1793 | 136.297 0 m /n glyphshow 1794 | 147.688 0 m /g glyphshow 1795 | 159.141 0 m /t glyphshow 1796 | 166.789 0 m /h glyphshow 1797 | 178.18 0 m /s glyphshow 1798 | 187.703 0 m /space glyphshow 1799 | 193.273 0 m /hyphen glyphshow 1800 | 199.914 0 m /space glyphshow 1801 | 205.484 0 m /N glyphshow 1802 | 218.875 0 m /o glyphshow 1803 | 229.867 0 m /n glyphshow 1804 | 241.258 0 m /hyphen glyphshow 1805 | 247.898 0 m /S glyphshow 1806 | 259.422 0 m /t glyphshow 1807 | 267.07 0 m /o glyphshow 1808 | 278.062 0 m /r glyphshow 1809 | 285.953 0 m /i glyphshow 1810 | 291.438 0 m /n glyphshow 1811 | 302.828 0 m /g glyphshow 1812 | 314.281 0 m /space glyphshow 1813 | 319.852 0 m /parenleft glyphshow 1814 | 327.164 0 m /five glyphshow 1815 | 338.297 0 m /s glyphshow 1816 | 347.82 0 m /parenright glyphshow 1817 | grestore 1818 | 1819 | end 1820 | showpage 1821 | -------------------------------------------------------------------------------- /assets/images/non10.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Title: non10.eps 3 | %%Creator: Matplotlib v3.6.3, https://matplotlib.org/ 4 | %%CreationDate: Thu Dec 12 08:42:00 2024 5 | %%Orientation: portrait 6 | %%BoundingBox: -54 180 666 612 7 | %%HiResBoundingBox: -54.000000 180.000000 666.000000 612.000000 8 | %%EndComments 9 | %%BeginProlog 10 | /mpldict 12 dict def 11 | mpldict begin 12 | /_d { bind def } bind def 13 | /m { moveto } _d 14 | /l { lineto } _d 15 | /r { rlineto } _d 16 | /c { curveto } _d 17 | /cl { closepath } _d 18 | /ce { closepath eofill } _d 19 | /box { 20 | m 21 | 1 index 0 r 22 | 0 exch r 23 | neg 0 r 24 | cl 25 | } _d 26 | /clipbox { 27 | box 28 | clip 29 | newpath 30 | } _d 31 | /sc { setcachedevice } _d 32 | %!PS-Adobe-3.0 Resource-Font 33 | %%Creator: Converted from TrueType to Type 3 by Matplotlib. 34 | 10 dict begin 35 | /FontName /DejaVuSans def 36 | /PaintType 0 def 37 | /FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def 38 | /FontBBox [-2090 -948 3673 2524] def 39 | /FontType 3 def 40 | /Encoding [/space /zero /one /two /three /four /five /six /seven /eight /nine /B /S /e /n /o /r /s /t /y] def 41 | /CharStrings 21 dict dup begin 42 | /.notdef 0 def 43 | /space{651 0 0 0 0 0 sc 44 | ce} _d 45 | /zero{1303 0 135 -29 1167 1520 sc 46 | 651 1360 m 47 | 547 1360 469 1309 416 1206 c 48 | 364 1104 338 950 338 745 c 49 | 338 540 364 387 416 284 c 50 | 469 182 547 131 651 131 c 51 | 756 131 834 182 886 284 c 52 | 939 387 965 540 965 745 c 53 | 965 950 939 1104 886 1206 c 54 | 834 1309 756 1360 651 1360 c 55 | 56 | 651 1520 m 57 | 818 1520 946 1454 1034 1321 c 58 | 1123 1189 1167 997 1167 745 c 59 | 1167 494 1123 302 1034 169 c 60 | 946 37 818 -29 651 -29 c 61 | 484 -29 356 37 267 169 c 62 | 179 302 135 494 135 745 c 63 | 135 997 179 1189 267 1321 c 64 | 356 1454 484 1520 651 1520 c 65 | 66 | ce} _d 67 | /one{1303 0 225 0 1114 1493 sc 68 | 254 170 m 69 | 584 170 l 70 | 584 1309 l 71 | 225 1237 l 72 | 225 1421 l 73 | 582 1493 l 74 | 784 1493 l 75 | 784 170 l 76 | 1114 170 l 77 | 1114 0 l 78 | 254 0 l 79 | 254 170 l 80 | 81 | ce} _d 82 | /two{1303 0 150 0 1098 1520 sc 83 | 393 170 m 84 | 1098 170 l 85 | 1098 0 l 86 | 150 0 l 87 | 150 170 l 88 | 227 249 331 356 463 489 c 89 | 596 623 679 709 713 748 c 90 | 778 821 823 882 848 932 c 91 | 874 983 887 1032 887 1081 c 92 | 887 1160 859 1225 803 1275 c 93 | 748 1325 675 1350 586 1350 c 94 | 523 1350 456 1339 385 1317 c 95 | 315 1295 240 1262 160 1217 c 96 | 160 1421 l 97 | 241 1454 317 1478 388 1495 c 98 | 459 1512 523 1520 582 1520 c 99 | 737 1520 860 1481 952 1404 c 100 | 1044 1327 1090 1223 1090 1094 c 101 | 1090 1033 1078 974 1055 919 c 102 | 1032 864 991 800 930 725 c 103 | 913 706 860 650 771 557 c 104 | 682 465 556 336 393 170 c 105 | 106 | ce} _d 107 | /three{1303 0 156 -29 1139 1520 sc 108 | 831 805 m 109 | 928 784 1003 741 1057 676 c 110 | 1112 611 1139 530 1139 434 c 111 | 1139 287 1088 173 987 92 c 112 | 886 11 742 -29 555 -29 c 113 | 492 -29 428 -23 361 -10 c 114 | 295 2 227 20 156 45 c 115 | 156 240 l 116 | 212 207 273 183 340 166 c 117 | 407 149 476 141 549 141 c 118 | 676 141 772 166 838 216 c 119 | 905 266 938 339 938 434 c 120 | 938 522 907 591 845 640 c 121 | 784 690 698 715 588 715 c 122 | 414 715 l 123 | 414 881 l 124 | 596 881 l 125 | 695 881 771 901 824 940 c 126 | 877 980 903 1037 903 1112 c 127 | 903 1189 876 1247 821 1288 c 128 | 767 1329 689 1350 588 1350 c 129 | 533 1350 473 1344 410 1332 c 130 | 347 1320 277 1301 201 1276 c 131 | 201 1456 l 132 | 278 1477 349 1493 416 1504 c 133 | 483 1515 547 1520 606 1520 c 134 | 759 1520 881 1485 970 1415 c 135 | 1059 1346 1104 1252 1104 1133 c 136 | 1104 1050 1080 980 1033 923 c 137 | 986 866 918 827 831 805 c 138 | 139 | ce} _d 140 | /four{1303 0 100 0 1188 1493 sc 141 | 774 1317 m 142 | 264 520 l 143 | 774 520 l 144 | 774 1317 l 145 | 146 | 721 1493 m 147 | 975 1493 l 148 | 975 520 l 149 | 1188 520 l 150 | 1188 352 l 151 | 975 352 l 152 | 975 0 l 153 | 774 0 l 154 | 774 352 l 155 | 100 352 l 156 | 100 547 l 157 | 721 1493 l 158 | 159 | ce} _d 160 | /five{1303 0 158 -29 1124 1493 sc 161 | 221 1493 m 162 | 1014 1493 l 163 | 1014 1323 l 164 | 406 1323 l 165 | 406 957 l 166 | 435 967 465 974 494 979 c 167 | 523 984 553 987 582 987 c 168 | 749 987 881 941 978 850 c 169 | 1075 759 1124 635 1124 479 c 170 | 1124 318 1074 193 974 104 c 171 | 874 15 733 -29 551 -29 c 172 | 488 -29 424 -24 359 -13 c 173 | 294 -2 227 14 158 35 c 174 | 158 238 l 175 | 218 205 280 181 344 165 c 176 | 408 149 476 141 547 141 c 177 | 662 141 754 171 821 232 c 178 | 888 293 922 375 922 479 c 179 | 922 583 888 665 821 726 c 180 | 754 787 662 817 547 817 c 181 | 493 817 439 811 385 799 c 182 | 332 787 277 768 221 743 c 183 | 221 1493 l 184 | 185 | ce} _d 186 | /six{1303 0 143 -29 1174 1520 sc 187 | 676 827 m 188 | 585 827 513 796 460 734 c 189 | 407 672 381 587 381 479 c 190 | 381 372 407 287 460 224 c 191 | 513 162 585 131 676 131 c 192 | 767 131 838 162 891 224 c 193 | 944 287 971 372 971 479 c 194 | 971 587 944 672 891 734 c 195 | 838 796 767 827 676 827 c 196 | 197 | 1077 1460 m 198 | 1077 1276 l 199 | 1026 1300 975 1318 923 1331 c 200 | 872 1344 821 1350 770 1350 c 201 | 637 1350 535 1305 464 1215 c 202 | 394 1125 354 989 344 807 c 203 | 383 865 433 909 492 940 c 204 | 551 971 617 987 688 987 c 205 | 838 987 956 941 1043 850 c 206 | 1130 759 1174 636 1174 479 c 207 | 1174 326 1129 203 1038 110 c 208 | 947 17 827 -29 676 -29 c 209 | 503 -29 371 37 280 169 c 210 | 189 302 143 494 143 745 c 211 | 143 981 199 1169 311 1309 c 212 | 423 1450 573 1520 762 1520 c 213 | 813 1520 864 1515 915 1505 c 214 | 967 1495 1021 1480 1077 1460 c 215 | 216 | ce} _d 217 | /seven{1303 0 168 0 1128 1493 sc 218 | 168 1493 m 219 | 1128 1493 l 220 | 1128 1407 l 221 | 586 0 l 222 | 375 0 l 223 | 885 1323 l 224 | 168 1323 l 225 | 168 1493 l 226 | 227 | ce} _d 228 | /eight{1303 0 139 -29 1163 1520 sc 229 | 651 709 m 230 | 555 709 479 683 424 632 c 231 | 369 581 342 510 342 420 c 232 | 342 330 369 259 424 208 c 233 | 479 157 555 131 651 131 c 234 | 747 131 823 157 878 208 c 235 | 933 260 961 331 961 420 c 236 | 961 510 933 581 878 632 c 237 | 823 683 748 709 651 709 c 238 | 239 | 449 795 m 240 | 362 816 295 857 246 916 c 241 | 198 975 174 1048 174 1133 c 242 | 174 1252 216 1347 301 1416 c 243 | 386 1485 503 1520 651 1520 c 244 | 800 1520 916 1485 1001 1416 c 245 | 1086 1347 1128 1252 1128 1133 c 246 | 1128 1048 1104 975 1055 916 c 247 | 1007 857 940 816 854 795 c 248 | 951 772 1027 728 1081 662 c 249 | 1136 596 1163 515 1163 420 c 250 | 1163 275 1119 164 1030 87 c 251 | 942 10 816 -29 651 -29 c 252 | 486 -29 360 10 271 87 c 253 | 183 164 139 275 139 420 c 254 | 139 515 166 596 221 662 c 255 | 276 728 352 772 449 795 c 256 | 257 | 375 1114 m 258 | 375 1037 399 976 447 933 c 259 | 496 890 564 868 651 868 c 260 | 738 868 805 890 854 933 c 261 | 903 976 928 1037 928 1114 c 262 | 928 1191 903 1252 854 1295 c 263 | 805 1338 738 1360 651 1360 c 264 | 564 1360 496 1338 447 1295 c 265 | 399 1252 375 1191 375 1114 c 266 | 267 | ce} _d 268 | /nine{1303 0 129 -29 1159 1520 sc 269 | 225 31 m 270 | 225 215 l 271 | 276 191 327 173 379 160 c 272 | 431 147 482 141 532 141 c 273 | 665 141 767 186 837 275 c 274 | 908 365 948 501 958 684 c 275 | 919 627 870 583 811 552 c 276 | 752 521 686 506 614 506 c 277 | 465 506 346 551 259 641 c 278 | 172 732 129 855 129 1012 c 279 | 129 1165 174 1288 265 1381 c 280 | 356 1474 476 1520 627 1520 c 281 | 800 1520 931 1454 1022 1321 c 282 | 1113 1189 1159 997 1159 745 c 283 | 1159 510 1103 322 991 181 c 284 | 880 41 730 -29 541 -29 c 285 | 490 -29 439 -24 387 -14 c 286 | 335 -4 281 11 225 31 c 287 | 288 | 627 664 m 289 | 718 664 789 695 842 757 c 290 | 895 819 922 904 922 1012 c 291 | 922 1119 895 1204 842 1266 c 292 | 789 1329 718 1360 627 1360 c 293 | 536 1360 464 1329 411 1266 c 294 | 358 1204 332 1119 332 1012 c 295 | 332 904 358 819 411 757 c 296 | 464 695 536 664 627 664 c 297 | 298 | ce} _d 299 | /B{1405 0 201 0 1260 1493 sc 300 | 403 713 m 301 | 403 166 l 302 | 727 166 l 303 | 836 166 916 188 968 233 c 304 | 1021 278 1047 347 1047 440 c 305 | 1047 533 1021 602 968 646 c 306 | 916 691 836 713 727 713 c 307 | 403 713 l 308 | 309 | 403 1327 m 310 | 403 877 l 311 | 702 877 l 312 | 801 877 874 895 922 932 c 313 | 971 969 995 1026 995 1102 c 314 | 995 1177 971 1234 922 1271 c 315 | 874 1308 801 1327 702 1327 c 316 | 403 1327 l 317 | 318 | 201 1493 m 319 | 717 1493 l 320 | 871 1493 990 1461 1073 1397 c 321 | 1156 1333 1198 1242 1198 1124 c 322 | 1198 1033 1177 960 1134 906 c 323 | 1091 852 1029 818 946 805 c 324 | 1045 784 1122 739 1177 671 c 325 | 1232 604 1260 519 1260 418 c 326 | 1260 285 1215 182 1124 109 c 327 | 1033 36 904 0 737 0 c 328 | 201 0 l 329 | 201 1493 l 330 | 331 | ce} _d 332 | /S{1300 0 135 -29 1186 1520 sc 333 | 1096 1444 m 334 | 1096 1247 l 335 | 1019 1284 947 1311 879 1329 c 336 | 811 1347 745 1356 682 1356 c 337 | 572 1356 487 1335 427 1292 c 338 | 368 1249 338 1189 338 1110 c 339 | 338 1044 358 994 397 960 c 340 | 437 927 512 900 623 879 c 341 | 745 854 l 342 | 896 825 1007 775 1078 702 c 343 | 1150 630 1186 533 1186 412 c 344 | 1186 267 1137 158 1040 83 c 345 | 943 8 801 -29 614 -29 c 346 | 543 -29 468 -21 388 -5 c 347 | 309 11 226 35 141 66 c 348 | 141 274 l 349 | 223 228 303 193 382 170 c 350 | 461 147 538 135 614 135 c 351 | 729 135 818 158 881 203 c 352 | 944 248 975 313 975 397 c 353 | 975 470 952 528 907 569 c 354 | 862 610 789 641 686 662 c 355 | 563 686 l 356 | 412 716 303 763 236 827 c 357 | 169 891 135 980 135 1094 c 358 | 135 1226 181 1330 274 1406 c 359 | 367 1482 496 1520 659 1520 c 360 | 729 1520 800 1514 873 1501 c 361 | 946 1488 1020 1469 1096 1444 c 362 | 363 | ce} _d 364 | /e{1260 0 113 -29 1151 1147 sc 365 | 1151 606 m 366 | 1151 516 l 367 | 305 516 l 368 | 313 389 351 293 419 226 c 369 | 488 160 583 127 705 127 c 370 | 776 127 844 136 910 153 c 371 | 977 170 1043 196 1108 231 c 372 | 1108 57 l 373 | 1042 29 974 8 905 -7 c 374 | 836 -22 765 -29 694 -29 c 375 | 515 -29 374 23 269 127 c 376 | 165 231 113 372 113 549 c 377 | 113 732 162 878 261 985 c 378 | 360 1093 494 1147 662 1147 c 379 | 813 1147 932 1098 1019 1001 c 380 | 1107 904 1151 773 1151 606 c 381 | 382 | 967 660 m 383 | 966 761 937 841 882 901 c 384 | 827 961 755 991 664 991 c 385 | 561 991 479 962 417 904 c 386 | 356 846 320 764 311 659 c 387 | 967 660 l 388 | 389 | ce} _d 390 | /n{1298 0 186 0 1124 1147 sc 391 | 1124 676 m 392 | 1124 0 l 393 | 940 0 l 394 | 940 670 l 395 | 940 776 919 855 878 908 c 396 | 837 961 775 987 692 987 c 397 | 593 987 514 955 457 892 c 398 | 400 829 371 742 371 633 c 399 | 371 0 l 400 | 186 0 l 401 | 186 1120 l 402 | 371 1120 l 403 | 371 946 l 404 | 415 1013 467 1064 526 1097 c 405 | 586 1130 655 1147 733 1147 c 406 | 862 1147 959 1107 1025 1027 c 407 | 1091 948 1124 831 1124 676 c 408 | 409 | ce} _d 410 | /o{1253 0 113 -29 1141 1147 sc 411 | 627 991 m 412 | 528 991 450 952 393 875 c 413 | 336 798 307 693 307 559 c 414 | 307 425 335 319 392 242 c 415 | 449 165 528 127 627 127 c 416 | 725 127 803 166 860 243 c 417 | 917 320 946 426 946 559 c 418 | 946 692 917 797 860 874 c 419 | 803 952 725 991 627 991 c 420 | 421 | 627 1147 m 422 | 787 1147 913 1095 1004 991 c 423 | 1095 887 1141 743 1141 559 c 424 | 1141 376 1095 232 1004 127 c 425 | 913 23 787 -29 627 -29 c 426 | 466 -29 340 23 249 127 c 427 | 158 232 113 376 113 559 c 428 | 113 743 158 887 249 991 c 429 | 340 1095 466 1147 627 1147 c 430 | 431 | ce} _d 432 | /r{842 0 186 0 842 1147 sc 433 | 842 948 m 434 | 821 960 799 969 774 974 c 435 | 750 980 723 983 694 983 c 436 | 590 983 510 949 454 881 c 437 | 399 814 371 717 371 590 c 438 | 371 0 l 439 | 186 0 l 440 | 186 1120 l 441 | 371 1120 l 442 | 371 946 l 443 | 410 1014 460 1064 522 1097 c 444 | 584 1130 659 1147 748 1147 c 445 | 761 1147 775 1146 790 1144 c 446 | 805 1143 822 1140 841 1137 c 447 | 842 948 l 448 | 449 | ce} _d 450 | /s{1067 0 111 -29 967 1147 sc 451 | 907 1087 m 452 | 907 913 l 453 | 855 940 801 960 745 973 c 454 | 689 986 631 993 571 993 c 455 | 480 993 411 979 365 951 c 456 | 320 923 297 881 297 825 c 457 | 297 782 313 749 346 724 c 458 | 379 700 444 677 543 655 c 459 | 606 641 l 460 | 737 613 829 573 884 522 c 461 | 939 471 967 400 967 309 c 462 | 967 205 926 123 843 62 c 463 | 761 1 648 -29 504 -29 c 464 | 444 -29 381 -23 316 -11 c 465 | 251 0 183 18 111 41 c 466 | 111 231 l 467 | 179 196 246 169 312 151 c 468 | 378 134 443 125 508 125 c 469 | 595 125 661 140 708 169 c 470 | 755 199 778 241 778 295 c 471 | 778 345 761 383 727 410 c 472 | 694 437 620 462 506 487 c 473 | 442 502 l 474 | 328 526 246 563 195 612 c 475 | 144 662 119 730 119 817 c 476 | 119 922 156 1004 231 1061 c 477 | 306 1118 412 1147 549 1147 c 478 | 617 1147 681 1142 741 1132 c 479 | 801 1122 856 1107 907 1087 c 480 | 481 | ce} _d 482 | /t{803 0 55 0 754 1438 sc 483 | 375 1438 m 484 | 375 1120 l 485 | 754 1120 l 486 | 754 977 l 487 | 375 977 l 488 | 375 369 l 489 | 375 278 387 219 412 193 c 490 | 437 167 488 154 565 154 c 491 | 754 154 l 492 | 754 0 l 493 | 565 0 l 494 | 423 0 325 26 271 79 c 495 | 217 132 190 229 190 369 c 496 | 190 977 l 497 | 55 977 l 498 | 55 1120 l 499 | 190 1120 l 500 | 190 1438 l 501 | 375 1438 l 502 | 503 | ce} _d 504 | /y{1212 0 61 -426 1151 1120 sc 505 | 659 -104 m 506 | 607 -237 556 -324 507 -365 c 507 | 458 -406 392 -426 309 -426 c 508 | 162 -426 l 509 | 162 -272 l 510 | 270 -272 l 511 | 321 -272 360 -260 388 -236 c 512 | 416 -212 447 -155 481 -66 c 513 | 514 18 l 514 | 61 1120 l 515 | 256 1120 l 516 | 606 244 l 517 | 956 1120 l 518 | 1151 1120 l 519 | 659 -104 l 520 | 521 | ce} _d 522 | end readonly def 523 | 524 | /BuildGlyph { 525 | exch begin 526 | CharStrings exch 527 | 2 copy known not {pop /.notdef} if 528 | true 3 1 roll get exec 529 | end 530 | } _d 531 | 532 | /BuildChar { 533 | 1 index /Encoding get exch get 534 | 1 index /BuildGlyph get exec 535 | } _d 536 | 537 | FontName currentdict end definefont pop 538 | %!PS-Adobe-3.0 Resource-Font 539 | %%Creator: Converted from TrueType to Type 3 by Matplotlib. 540 | 10 dict begin 541 | /FontName /DejaVuSans-Bold def 542 | /PaintType 0 def 543 | /FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def 544 | /FontBBox [-2190 -850 4045 2405] def 545 | /FontType 3 def 546 | /Encoding [/space /parenleft /parenright /hyphen /zero /one /L /N /P /S /T /a /c /e /g /h /i /k /l /n /o /r /s /t] def 547 | /CharStrings 25 dict dup begin 548 | /.notdef 0 def 549 | /space{713 0 0 0 0 0 sc 550 | ce} _d 551 | /parenleft{936 0 176 -270 772 1554 sc 552 | 772 -270 m 553 | 475 -270 l 554 | 373 -105 298 51 249 199 c 555 | 200 348 176 495 176 641 c 556 | 176 787 200 935 249 1084 c 557 | 298 1234 374 1391 475 1554 c 558 | 772 1554 l 559 | 687 1396 623 1241 580 1090 c 560 | 537 939 516 790 516 643 c 561 | 516 496 537 346 579 195 c 562 | 622 44 686 -111 772 -270 c 563 | 564 | ce} _d 565 | /parenright{936 0 164 -270 760 1554 sc 566 | 164 -270 m 567 | 249 -111 313 44 356 195 c 568 | 399 346 420 496 420 643 c 569 | 420 790 399 939 356 1090 c 570 | 313 1241 249 1396 164 1554 c 571 | 461 1554 l 572 | 562 1391 637 1234 686 1084 c 573 | 735 935 760 787 760 641 c 574 | 760 495 736 348 687 199 c 575 | 638 51 563 -105 461 -270 c 576 | 164 -270 l 577 | 578 | ce} _d 579 | /hyphen{850 0 111 444 739 735 sc 580 | 111 735 m 581 | 739 735 l 582 | 739 444 l 583 | 111 444 l 584 | 111 735 l 585 | 586 | ce} _d 587 | /zero{1425 0 98 -29 1327 1520 sc 588 | 942 748 m 589 | 942 935 924 1066 889 1142 c 590 | 854 1219 796 1257 713 1257 c 591 | 630 1257 571 1219 536 1142 c 592 | 501 1066 483 935 483 748 c 593 | 483 559 501 426 536 349 c 594 | 571 272 630 233 713 233 c 595 | 795 233 854 272 889 349 c 596 | 924 426 942 559 942 748 c 597 | 598 | 1327 745 m 599 | 1327 498 1274 307 1167 172 c 600 | 1060 38 909 -29 713 -29 c 601 | 516 -29 365 38 258 172 c 602 | 151 307 98 498 98 745 c 603 | 98 993 151 1184 258 1318 c 604 | 365 1453 516 1520 713 1520 c 605 | 909 1520 1060 1453 1167 1318 c 606 | 1274 1184 1327 993 1327 745 c 607 | 608 | ce} _d 609 | /one{1425 0 231 0 1284 1493 sc 610 | 240 266 m 611 | 580 266 l 612 | 580 1231 l 613 | 231 1159 l 614 | 231 1421 l 615 | 578 1493 l 616 | 944 1493 l 617 | 944 266 l 618 | 1284 266 l 619 | 1284 0 l 620 | 240 0 l 621 | 240 266 l 622 | 623 | ce} _d 624 | /L{1305 0 188 0 1249 1493 sc 625 | 188 1493 m 626 | 573 1493 l 627 | 573 291 l 628 | 1249 291 l 629 | 1249 0 l 630 | 188 0 l 631 | 188 1493 l 632 | 633 | ce} _d 634 | /N{1714 0 188 0 1526 1493 sc 635 | 188 1493 m 636 | 618 1493 l 637 | 1161 469 l 638 | 1161 1493 l 639 | 1526 1493 l 640 | 1526 0 l 641 | 1096 0 l 642 | 553 1024 l 643 | 553 0 l 644 | 188 0 l 645 | 188 1493 l 646 | 647 | ce} _d 648 | /P{1501 0 188 0 1417 1493 sc 649 | 188 1493 m 650 | 827 1493 l 651 | 1017 1493 1163 1451 1264 1366 c 652 | 1366 1282 1417 1162 1417 1006 c 653 | 1417 849 1366 729 1264 644 c 654 | 1163 560 1017 518 827 518 c 655 | 573 518 l 656 | 573 0 l 657 | 188 0 l 658 | 188 1493 l 659 | 660 | 573 1214 m 661 | 573 797 l 662 | 786 797 l 663 | 861 797 918 815 959 851 c 664 | 1000 888 1020 939 1020 1006 c 665 | 1020 1073 1000 1124 959 1160 c 666 | 918 1196 861 1214 786 1214 c 667 | 573 1214 l 668 | 669 | ce} _d 670 | /S{1475 0 147 -29 1325 1520 sc 671 | 1227 1446 m 672 | 1227 1130 l 673 | 1145 1167 1065 1194 987 1213 c 674 | 909 1232 835 1241 766 1241 c 675 | 674 1241 606 1228 562 1203 c 676 | 518 1178 496 1138 496 1085 c 677 | 496 1045 511 1014 540 991 c 678 | 570 969 624 950 702 934 c 679 | 866 901 l 680 | 1032 868 1150 817 1220 749 c 681 | 1290 681 1325 584 1325 459 c 682 | 1325 294 1276 172 1178 91 c 683 | 1081 11 932 -29 731 -29 c 684 | 636 -29 541 -20 446 -2 c 685 | 351 16 255 43 160 78 c 686 | 160 403 l 687 | 255 352 347 314 436 288 c 688 | 525 263 611 250 694 250 c 689 | 778 250 842 264 887 292 c 690 | 932 320 954 360 954 412 c 691 | 954 459 939 495 908 520 c 692 | 878 545 818 568 727 588 c 693 | 578 621 l 694 | 429 653 319 704 250 774 c 695 | 181 844 147 938 147 1057 c 696 | 147 1206 195 1320 291 1400 c 697 | 387 1480 525 1520 705 1520 c 698 | 787 1520 871 1514 958 1501 c 699 | 1045 1489 1134 1471 1227 1446 c 700 | 701 | ce} _d 702 | /T{1397 0 10 0 1386 1493 sc 703 | 10 1493 m 704 | 1386 1493 l 705 | 1386 1202 l 706 | 891 1202 l 707 | 891 0 l 708 | 506 0 l 709 | 506 1202 l 710 | 10 1202 l 711 | 10 1493 l 712 | 713 | ce} _d 714 | /a{1382 0 88 -29 1221 1147 sc 715 | 674 504 m 716 | 599 504 543 491 505 466 c 717 | 468 441 449 403 449 354 c 718 | 449 309 464 273 494 247 c 719 | 525 222 567 209 621 209 c 720 | 688 209 745 233 791 281 c 721 | 837 330 860 390 860 463 c 722 | 860 504 l 723 | 674 504 l 724 | 725 | 1221 639 m 726 | 1221 0 l 727 | 860 0 l 728 | 860 166 l 729 | 812 98 758 48 698 17 c 730 | 638 -14 565 -29 479 -29 c 731 | 363 -29 269 5 196 72 c 732 | 124 140 88 228 88 336 c 733 | 88 467 133 564 223 625 c 734 | 314 686 456 717 649 717 c 735 | 860 717 l 736 | 860 745 l 737 | 860 802 838 843 793 869 c 738 | 748 896 679 909 584 909 c 739 | 507 909 436 901 370 886 c 740 | 304 871 243 848 186 817 c 741 | 186 1090 l 742 | 263 1109 340 1123 417 1132 c 743 | 494 1142 572 1147 649 1147 c 744 | 851 1147 997 1107 1086 1027 c 745 | 1176 948 1221 818 1221 639 c 746 | 747 | ce} _d 748 | /c{1214 0 88 -29 1077 1147 sc 749 | 1077 1085 m 750 | 1077 793 l 751 | 1028 826 979 851 930 867 c 752 | 881 883 831 891 778 891 c 753 | 678 891 600 862 544 803 c 754 | 489 745 461 664 461 559 c 755 | 461 454 489 373 544 314 c 756 | 600 256 678 227 778 227 c 757 | 834 227 887 235 937 252 c 758 | 988 269 1034 293 1077 326 c 759 | 1077 33 l 760 | 1021 12 964 -3 906 -13 c 761 | 849 -24 791 -29 733 -29 c 762 | 531 -29 373 23 259 126 c 763 | 145 230 88 374 88 559 c 764 | 88 744 145 888 259 991 c 765 | 373 1095 531 1147 733 1147 c 766 | 792 1147 849 1142 906 1131 c 767 | 963 1121 1020 1106 1077 1085 c 768 | 769 | ce} _d 770 | /e{1389 0 88 -29 1290 1147 sc 771 | 1290 563 m 772 | 1290 461 l 773 | 453 461 l 774 | 462 377 492 314 544 272 c 775 | 596 230 669 209 762 209 c 776 | 837 209 914 220 993 242 c 777 | 1072 265 1154 299 1237 344 c 778 | 1237 68 l 779 | 1152 36 1068 12 983 -4 c 780 | 898 -21 814 -29 729 -29 c 781 | 526 -29 369 22 256 125 c 782 | 144 228 88 373 88 559 c 783 | 88 742 143 885 253 990 c 784 | 364 1095 516 1147 709 1147 c 785 | 885 1147 1026 1094 1131 988 c 786 | 1237 882 1290 740 1290 563 c 787 | 788 | 922 682 m 789 | 922 750 902 805 862 846 c 790 | 823 888 771 909 707 909 c 791 | 638 909 581 889 538 850 c 792 | 495 811 468 755 457 682 c 793 | 922 682 l 794 | 795 | ce} _d 796 | /g{1466 0 92 -442 1294 1145 sc 797 | 934 190 m 798 | 885 125 830 77 771 46 c 799 | 712 15 643 0 565 0 c 800 | 428 0 315 54 226 161 c 801 | 137 269 92 406 92 573 c 802 | 92 740 137 877 226 984 c 803 | 315 1091 428 1145 565 1145 c 804 | 643 1145 712 1130 771 1099 c 805 | 830 1068 885 1020 934 954 c 806 | 934 1120 l 807 | 1294 1120 l 808 | 1294 113 l 809 | 1294 -67 1237 -204 1123 -299 c 810 | 1010 -394 845 -442 629 -442 c 811 | 559 -442 491 -437 426 -426 c 812 | 361 -415 295 -399 229 -377 c 813 | 229 -98 l 814 | 292 -134 353 -161 413 -178 c 815 | 473 -196 533 -205 594 -205 c 816 | 711 -205 797 -179 852 -128 c 817 | 907 -77 934 4 934 113 c 818 | 934 190 l 819 | 820 | 698 887 m 821 | 624 887 566 860 525 805 c 822 | 484 750 463 673 463 573 c 823 | 463 470 483 392 523 339 c 824 | 563 286 621 260 698 260 c 825 | 773 260 831 287 872 342 c 826 | 913 397 934 474 934 573 c 827 | 934 673 913 750 872 805 c 828 | 831 860 773 887 698 887 c 829 | 830 | ce} _d 831 | /h{1458 0 172 0 1298 1556 sc 832 | 1298 682 m 833 | 1298 0 l 834 | 938 0 l 835 | 938 111 l 836 | 938 520 l 837 | 938 618 936 685 931 722 c 838 | 927 759 920 786 909 803 c 839 | 895 826 876 844 852 857 c 840 | 828 870 801 877 770 877 c 841 | 695 877 637 848 594 790 c 842 | 551 733 530 653 530 551 c 843 | 530 0 l 844 | 172 0 l 845 | 172 1556 l 846 | 530 1556 l 847 | 530 956 l 848 | 584 1021 641 1069 702 1100 c 849 | 763 1131 830 1147 903 1147 c 850 | 1032 1147 1130 1107 1197 1028 c 851 | 1264 949 1298 833 1298 682 c 852 | 853 | ce} _d 854 | /i{702 0 172 0 530 1556 sc 855 | 172 1120 m 856 | 530 1120 l 857 | 530 0 l 858 | 172 0 l 859 | 172 1120 l 860 | 861 | 172 1556 m 862 | 530 1556 l 863 | 530 1264 l 864 | 172 1264 l 865 | 172 1556 l 866 | 867 | ce} _d 868 | /k{1362 0 172 0 1401 1556 sc 869 | 172 1556 m 870 | 530 1556 l 871 | 530 709 l 872 | 942 1120 l 873 | 1358 1120 l 874 | 811 606 l 875 | 1401 0 l 876 | 967 0 l 877 | 530 467 l 878 | 530 0 l 879 | 172 0 l 880 | 172 1556 l 881 | 882 | ce} _d 883 | /l{702 0 172 0 530 1556 sc 884 | 172 1556 m 885 | 530 1556 l 886 | 530 0 l 887 | 172 0 l 888 | 172 1556 l 889 | 890 | ce} _d 891 | /n{1458 0 172 0 1298 1147 sc 892 | 1298 682 m 893 | 1298 0 l 894 | 938 0 l 895 | 938 111 l 896 | 938 522 l 897 | 938 619 936 685 931 722 c 898 | 927 759 920 786 909 803 c 899 | 895 826 876 844 852 857 c 900 | 828 870 801 877 770 877 c 901 | 695 877 637 848 594 790 c 902 | 551 733 530 653 530 551 c 903 | 530 0 l 904 | 172 0 l 905 | 172 1120 l 906 | 530 1120 l 907 | 530 956 l 908 | 584 1021 641 1069 702 1100 c 909 | 763 1131 830 1147 903 1147 c 910 | 1032 1147 1130 1107 1197 1028 c 911 | 1264 949 1298 833 1298 682 c 912 | 913 | ce} _d 914 | /o{1407 0 88 -29 1319 1147 sc 915 | 705 891 m 916 | 626 891 565 862 523 805 c 917 | 482 748 461 666 461 559 c 918 | 461 452 482 369 523 312 c 919 | 565 255 626 227 705 227 c 920 | 783 227 843 255 884 312 c 921 | 925 369 946 452 946 559 c 922 | 946 666 925 748 884 805 c 923 | 843 862 783 891 705 891 c 924 | 925 | 705 1147 m 926 | 898 1147 1048 1095 1156 991 c 927 | 1265 887 1319 743 1319 559 c 928 | 1319 375 1265 231 1156 127 c 929 | 1048 23 898 -29 705 -29 c 930 | 512 -29 360 23 251 127 c 931 | 142 231 88 375 88 559 c 932 | 88 743 142 887 251 991 c 933 | 360 1095 512 1147 705 1147 c 934 | 935 | ce} _d 936 | /r{1010 0 172 0 1004 1147 sc 937 | 1004 815 m 938 | 973 830 941 840 910 847 c 939 | 879 854 848 858 817 858 c 940 | 725 858 654 828 604 769 c 941 | 555 710 530 626 530 516 c 942 | 530 0 l 943 | 172 0 l 944 | 172 1120 l 945 | 530 1120 l 946 | 530 936 l 947 | 576 1009 629 1063 688 1096 c 948 | 748 1130 820 1147 903 1147 c 949 | 915 1147 928 1146 942 1145 c 950 | 956 1144 976 1142 1003 1139 c 951 | 1004 815 l 952 | 953 | ce} _d 954 | /s{1219 0 106 -29 1122 1147 sc 955 | 1047 1085 m 956 | 1047 813 l 957 | 970 845 896 869 825 885 c 958 | 754 901 686 909 623 909 c 959 | 555 909 504 900 471 883 c 960 | 438 866 422 840 422 805 c 961 | 422 776 434 754 459 739 c 962 | 484 724 529 712 594 705 c 963 | 657 696 l 964 | 840 673 964 634 1027 581 c 965 | 1090 528 1122 444 1122 330 c 966 | 1122 211 1078 121 990 61 c 967 | 902 1 771 -29 596 -29 c 968 | 522 -29 445 -23 366 -11 c 969 | 287 0 206 18 123 41 c 970 | 123 313 l 971 | 194 278 267 252 342 235 c 972 | 417 218 494 209 571 209 c 973 | 641 209 694 219 729 238 c 974 | 764 257 782 286 782 324 c 975 | 782 356 770 380 745 395 c 976 | 721 411 673 423 600 432 c 977 | 537 440 l 978 | 378 460 266 497 202 551 c 979 | 138 605 106 687 106 797 c 980 | 106 916 147 1004 228 1061 c 981 | 309 1118 434 1147 602 1147 c 982 | 668 1147 737 1142 810 1132 c 983 | 883 1122 962 1106 1047 1085 c 984 | 985 | ce} _d 986 | /t{979 0 27 0 932 1438 sc 987 | 563 1438 m 988 | 563 1120 l 989 | 932 1120 l 990 | 932 864 l 991 | 563 864 l 992 | 563 389 l 993 | 563 337 573 302 594 283 c 994 | 615 265 656 256 717 256 c 995 | 901 256 l 996 | 901 0 l 997 | 594 0 l 998 | 453 0 352 29 293 88 c 999 | 234 147 205 248 205 389 c 1000 | 205 864 l 1001 | 27 864 l 1002 | 27 1120 l 1003 | 205 1120 l 1004 | 205 1438 l 1005 | 563 1438 l 1006 | 1007 | ce} _d 1008 | end readonly def 1009 | 1010 | /BuildGlyph { 1011 | exch begin 1012 | CharStrings exch 1013 | 2 copy known not {pop /.notdef} if 1014 | true 3 1 roll get exec 1015 | end 1016 | } _d 1017 | 1018 | /BuildChar { 1019 | 1 index /Encoding get exch get 1020 | 1 index /BuildGlyph get exec 1021 | } _d 1022 | 1023 | FontName currentdict end definefont pop 1024 | end 1025 | %%EndProlog 1026 | mpldict begin 1027 | -54 180 translate 1028 | 720 432 0 0 clipbox 1029 | gsave 1030 | 0 0 m 1031 | 720 0 l 1032 | 720 432 l 1033 | 0 432 l 1034 | cl 1035 | 1.000 setgray 1036 | fill 1037 | grestore 1038 | gsave 1039 | 90 47.52 m 1040 | 648 47.52 l 1041 | 648 380.16 l 1042 | 90 380.16 l 1043 | cl 1044 | 1.000 setgray 1045 | fill 1046 | grestore 1047 | gsave 1048 | 558 332.64 90 47.52 clipbox 1049 | 115.363636 47.52 m 1050 | 161.479339 47.52 l 1051 | 161.479339 176.58432 l 1052 | 115.363636 176.58432 l 1053 | cl 1054 | 0.529 0.808 0.922 setrgbcolor 1055 | fill 1056 | grestore 1057 | gsave 1058 | 558 332.64 90 47.52 clipbox 1059 | 173.008264 47.52 m 1060 | 219.123967 47.52 l 1061 | 219.123967 169.93152 l 1062 | 173.008264 169.93152 l 1063 | cl 1064 | 0.529 0.808 0.922 setrgbcolor 1065 | fill 1066 | grestore 1067 | gsave 1068 | 558 332.64 90 47.52 clipbox 1069 | 230.652893 47.52 m 1070 | 276.768595 47.52 l 1071 | 276.768595 108.991872 l 1072 | 230.652893 108.991872 l 1073 | cl 1074 | 0.529 0.808 0.922 setrgbcolor 1075 | fill 1076 | grestore 1077 | gsave 1078 | 558 332.64 90 47.52 clipbox 1079 | 288.297521 47.52 m 1080 | 334.413223 47.52 l 1081 | 334.413223 100.210176 l 1082 | 288.297521 100.210176 l 1083 | cl 1084 | 0.529 0.808 0.922 setrgbcolor 1085 | fill 1086 | grestore 1087 | gsave 1088 | 558 332.64 90 47.52 clipbox 1089 | 345.942149 47.52 m 1090 | 392.057851 47.52 l 1091 | 392.057851 175.785984 l 1092 | 345.942149 175.785984 l 1093 | cl 1094 | 0.529 0.808 0.922 setrgbcolor 1095 | fill 1096 | grestore 1097 | gsave 1098 | 558 332.64 90 47.52 clipbox 1099 | 403.586777 47.52 m 1100 | 449.702479 47.52 l 1101 | 449.702479 117.773568 l 1102 | 403.586777 117.773568 l 1103 | cl 1104 | 0.529 0.808 0.922 setrgbcolor 1105 | fill 1106 | grestore 1107 | gsave 1108 | 558 332.64 90 47.52 clipbox 1109 | 461.231405 47.52 m 1110 | 507.347107 47.52 l 1111 | 507.347107 117.773568 l 1112 | 461.231405 117.773568 l 1113 | cl 1114 | 0.529 0.808 0.922 setrgbcolor 1115 | fill 1116 | grestore 1117 | gsave 1118 | 558 332.64 90 47.52 clipbox 1119 | 518.876033 47.52 m 1120 | 564.991736 47.52 l 1121 | 564.991736 117.773568 l 1122 | 518.876033 117.773568 l 1123 | cl 1124 | 0.529 0.808 0.922 setrgbcolor 1125 | fill 1126 | grestore 1127 | gsave 1128 | 558 332.64 90 47.52 clipbox 1129 | 576.520661 47.52 m 1130 | 622.636364 47.52 l 1131 | 622.636364 100.210176 l 1132 | 576.520661 100.210176 l 1133 | cl 1134 | 0.529 0.808 0.922 setrgbcolor 1135 | fill 1136 | grestore 1137 | 0.800 setlinewidth 1138 | 1 setlinejoin 1139 | 0 setlinecap 1140 | [] 0 setdash 1141 | 0.000 setgray 1142 | gsave 1143 | /o { 1144 | gsave 1145 | newpath 1146 | translate 1147 | 0.8 setlinewidth 1148 | 1 setlinejoin 1149 | 1150 | 0 setlinecap 1151 | 1152 | 0 0 m 1153 | 0 -3.5 l 1154 | 1155 | gsave 1156 | 0.000 setgray 1157 | fill 1158 | grestore 1159 | stroke 1160 | grestore 1161 | } bind def 1162 | 138.421 47.52 o 1163 | grestore 1164 | /DejaVuSans 10.000 selectfont 1165 | gsave 1166 | 1167 | 116.5 32.9262 translate 1168 | 0 rotate 1169 | 0 0 m /S glyphshow 1170 | 6.34766 0 m /e glyphshow 1171 | 12.5 0 m /n glyphshow 1172 | 18.8379 0 m /s glyphshow 1173 | 24.0479 0 m /o glyphshow 1174 | 30.166 0 m /r glyphshow 1175 | 34.2773 0 m /space glyphshow 1176 | 37.4561 0 m /one glyphshow 1177 | grestore 1178 | gsave 1179 | /o { 1180 | gsave 1181 | newpath 1182 | translate 1183 | 0.8 setlinewidth 1184 | 1 setlinejoin 1185 | 1186 | 0 setlinecap 1187 | 1188 | 0 0 m 1189 | 0 -3.5 l 1190 | 1191 | gsave 1192 | 0.000 setgray 1193 | fill 1194 | grestore 1195 | stroke 1196 | grestore 1197 | } bind def 1198 | 196.066 47.52 o 1199 | grestore 1200 | /DejaVuSans 10.000 selectfont 1201 | gsave 1202 | 1203 | 174.144 32.9262 translate 1204 | 0 rotate 1205 | 0 0 m /S glyphshow 1206 | 6.34766 0 m /e glyphshow 1207 | 12.5 0 m /n glyphshow 1208 | 18.8379 0 m /s glyphshow 1209 | 24.0479 0 m /o glyphshow 1210 | 30.166 0 m /r glyphshow 1211 | 34.2773 0 m /space glyphshow 1212 | 37.4561 0 m /two glyphshow 1213 | grestore 1214 | gsave 1215 | /o { 1216 | gsave 1217 | newpath 1218 | translate 1219 | 0.8 setlinewidth 1220 | 1 setlinejoin 1221 | 1222 | 0 setlinecap 1223 | 1224 | 0 0 m 1225 | 0 -3.5 l 1226 | 1227 | gsave 1228 | 0.000 setgray 1229 | fill 1230 | grestore 1231 | stroke 1232 | grestore 1233 | } bind def 1234 | 253.711 47.52 o 1235 | grestore 1236 | /DejaVuSans 10.000 selectfont 1237 | gsave 1238 | 1239 | 231.789 32.9262 translate 1240 | 0 rotate 1241 | 0 0 m /S glyphshow 1242 | 6.34766 0 m /e glyphshow 1243 | 12.5 0 m /n glyphshow 1244 | 18.8379 0 m /s glyphshow 1245 | 24.0479 0 m /o glyphshow 1246 | 30.166 0 m /r glyphshow 1247 | 34.2773 0 m /space glyphshow 1248 | 37.4561 0 m /three glyphshow 1249 | grestore 1250 | gsave 1251 | /o { 1252 | gsave 1253 | newpath 1254 | translate 1255 | 0.8 setlinewidth 1256 | 1 setlinejoin 1257 | 1258 | 0 setlinecap 1259 | 1260 | 0 0 m 1261 | 0 -3.5 l 1262 | 1263 | gsave 1264 | 0.000 setgray 1265 | fill 1266 | grestore 1267 | stroke 1268 | grestore 1269 | } bind def 1270 | 311.355 47.52 o 1271 | grestore 1272 | /DejaVuSans 10.000 selectfont 1273 | gsave 1274 | 1275 | 289.433 32.9262 translate 1276 | 0 rotate 1277 | 0 0 m /S glyphshow 1278 | 6.34766 0 m /e glyphshow 1279 | 12.5 0 m /n glyphshow 1280 | 18.8379 0 m /s glyphshow 1281 | 24.0479 0 m /o glyphshow 1282 | 30.166 0 m /r glyphshow 1283 | 34.2773 0 m /space glyphshow 1284 | 37.4561 0 m /four glyphshow 1285 | grestore 1286 | gsave 1287 | /o { 1288 | gsave 1289 | newpath 1290 | translate 1291 | 0.8 setlinewidth 1292 | 1 setlinejoin 1293 | 1294 | 0 setlinecap 1295 | 1296 | 0 0 m 1297 | 0 -3.5 l 1298 | 1299 | gsave 1300 | 0.000 setgray 1301 | fill 1302 | grestore 1303 | stroke 1304 | grestore 1305 | } bind def 1306 | 369 47.52 o 1307 | grestore 1308 | /DejaVuSans 10.000 selectfont 1309 | gsave 1310 | 1311 | 347.078 32.9262 translate 1312 | 0 rotate 1313 | 0 0 m /S glyphshow 1314 | 6.34766 0 m /e glyphshow 1315 | 12.5 0 m /n glyphshow 1316 | 18.8379 0 m /s glyphshow 1317 | 24.0479 0 m /o glyphshow 1318 | 30.166 0 m /r glyphshow 1319 | 34.2773 0 m /space glyphshow 1320 | 37.4561 0 m /five glyphshow 1321 | grestore 1322 | gsave 1323 | /o { 1324 | gsave 1325 | newpath 1326 | translate 1327 | 0.8 setlinewidth 1328 | 1 setlinejoin 1329 | 1330 | 0 setlinecap 1331 | 1332 | 0 0 m 1333 | 0 -3.5 l 1334 | 1335 | gsave 1336 | 0.000 setgray 1337 | fill 1338 | grestore 1339 | stroke 1340 | grestore 1341 | } bind def 1342 | 426.645 47.52 o 1343 | grestore 1344 | /DejaVuSans 10.000 selectfont 1345 | gsave 1346 | 1347 | 404.723 32.9262 translate 1348 | 0 rotate 1349 | 0 0 m /S glyphshow 1350 | 6.34766 0 m /e glyphshow 1351 | 12.5 0 m /n glyphshow 1352 | 18.8379 0 m /s glyphshow 1353 | 24.0479 0 m /o glyphshow 1354 | 30.166 0 m /r glyphshow 1355 | 34.2773 0 m /space glyphshow 1356 | 37.4561 0 m /six glyphshow 1357 | grestore 1358 | gsave 1359 | /o { 1360 | gsave 1361 | newpath 1362 | translate 1363 | 0.8 setlinewidth 1364 | 1 setlinejoin 1365 | 1366 | 0 setlinecap 1367 | 1368 | 0 0 m 1369 | 0 -3.5 l 1370 | 1371 | gsave 1372 | 0.000 setgray 1373 | fill 1374 | grestore 1375 | stroke 1376 | grestore 1377 | } bind def 1378 | 484.289 47.52 o 1379 | grestore 1380 | /DejaVuSans 10.000 selectfont 1381 | gsave 1382 | 1383 | 462.367 32.9262 translate 1384 | 0 rotate 1385 | 0 0 m /S glyphshow 1386 | 6.34766 0 m /e glyphshow 1387 | 12.5 0 m /n glyphshow 1388 | 18.8379 0 m /s glyphshow 1389 | 24.0479 0 m /o glyphshow 1390 | 30.166 0 m /r glyphshow 1391 | 34.2773 0 m /space glyphshow 1392 | 37.4561 0 m /seven glyphshow 1393 | grestore 1394 | gsave 1395 | /o { 1396 | gsave 1397 | newpath 1398 | translate 1399 | 0.8 setlinewidth 1400 | 1 setlinejoin 1401 | 1402 | 0 setlinecap 1403 | 1404 | 0 0 m 1405 | 0 -3.5 l 1406 | 1407 | gsave 1408 | 0.000 setgray 1409 | fill 1410 | grestore 1411 | stroke 1412 | grestore 1413 | } bind def 1414 | 541.934 47.52 o 1415 | grestore 1416 | /DejaVuSans 10.000 selectfont 1417 | gsave 1418 | 1419 | 520.012 32.9262 translate 1420 | 0 rotate 1421 | 0 0 m /S glyphshow 1422 | 6.34766 0 m /e glyphshow 1423 | 12.5 0 m /n glyphshow 1424 | 18.8379 0 m /s glyphshow 1425 | 24.0479 0 m /o glyphshow 1426 | 30.166 0 m /r glyphshow 1427 | 34.2773 0 m /space glyphshow 1428 | 37.4561 0 m /eight glyphshow 1429 | grestore 1430 | gsave 1431 | /o { 1432 | gsave 1433 | newpath 1434 | translate 1435 | 0.8 setlinewidth 1436 | 1 setlinejoin 1437 | 1438 | 0 setlinecap 1439 | 1440 | 0 0 m 1441 | 0 -3.5 l 1442 | 1443 | gsave 1444 | 0.000 setgray 1445 | fill 1446 | grestore 1447 | stroke 1448 | grestore 1449 | } bind def 1450 | 599.579 47.52 o 1451 | grestore 1452 | /DejaVuSans 10.000 selectfont 1453 | gsave 1454 | 1455 | 577.657 32.9262 translate 1456 | 0 rotate 1457 | 0 0 m /S glyphshow 1458 | 6.34766 0 m /e glyphshow 1459 | 12.5 0 m /n glyphshow 1460 | 18.8379 0 m /s glyphshow 1461 | 24.0479 0 m /o glyphshow 1462 | 30.166 0 m /r glyphshow 1463 | 34.2773 0 m /space glyphshow 1464 | 37.4561 0 m /nine glyphshow 1465 | grestore 1466 | /DejaVuSans 14.000 selectfont 1467 | gsave 1468 | 1469 | 341.359 16.2075 translate 1470 | 0 rotate 1471 | 0 0 m /S glyphshow 1472 | 8.88672 0 m /e glyphshow 1473 | 17.5 0 m /n glyphshow 1474 | 26.373 0 m /s glyphshow 1475 | 33.667 0 m /o glyphshow 1476 | 42.2324 0 m /r glyphshow 1477 | 47.9883 0 m /s glyphshow 1478 | grestore 1479 | gsave 1480 | /o { 1481 | gsave 1482 | newpath 1483 | translate 1484 | 0.8 setlinewidth 1485 | 1 setlinejoin 1486 | 1487 | 0 setlinecap 1488 | 1489 | -0 0 m 1490 | -3.5 0 l 1491 | 1492 | gsave 1493 | 0.000 setgray 1494 | fill 1495 | grestore 1496 | stroke 1497 | grestore 1498 | } bind def 1499 | 90 47.52 o 1500 | grestore 1501 | /DejaVuSans 10.000 selectfont 1502 | gsave 1503 | 1504 | 76.6406 43.7231 translate 1505 | 0 rotate 1506 | 0 0 m /zero glyphshow 1507 | grestore 1508 | gsave 1509 | /o { 1510 | gsave 1511 | newpath 1512 | translate 1513 | 0.8 setlinewidth 1514 | 1 setlinejoin 1515 | 1516 | 0 setlinecap 1517 | 1518 | -0 0 m 1519 | -3.5 0 l 1520 | 1521 | gsave 1522 | 0.000 setgray 1523 | fill 1524 | grestore 1525 | stroke 1526 | grestore 1527 | } bind def 1528 | 90 114.048 o 1529 | grestore 1530 | /DejaVuSans 10.000 selectfont 1531 | gsave 1532 | 1533 | 63.9219 110.251 translate 1534 | 0 rotate 1535 | 0 0 m /five glyphshow 1536 | 6.3623 0 m /zero glyphshow 1537 | 12.7246 0 m /zero glyphshow 1538 | grestore 1539 | gsave 1540 | /o { 1541 | gsave 1542 | newpath 1543 | translate 1544 | 0.8 setlinewidth 1545 | 1 setlinejoin 1546 | 1547 | 0 setlinecap 1548 | 1549 | -0 0 m 1550 | -3.5 0 l 1551 | 1552 | gsave 1553 | 0.000 setgray 1554 | fill 1555 | grestore 1556 | stroke 1557 | grestore 1558 | } bind def 1559 | 90 180.576 o 1560 | grestore 1561 | /DejaVuSans 10.000 selectfont 1562 | gsave 1563 | 1564 | 57.5625 176.779 translate 1565 | 0 rotate 1566 | 0 0 m /one glyphshow 1567 | 6.3623 0 m /zero glyphshow 1568 | 12.7246 0 m /zero glyphshow 1569 | 19.0869 0 m /zero glyphshow 1570 | grestore 1571 | gsave 1572 | /o { 1573 | gsave 1574 | newpath 1575 | translate 1576 | 0.8 setlinewidth 1577 | 1 setlinejoin 1578 | 1579 | 0 setlinecap 1580 | 1581 | -0 0 m 1582 | -3.5 0 l 1583 | 1584 | gsave 1585 | 0.000 setgray 1586 | fill 1587 | grestore 1588 | stroke 1589 | grestore 1590 | } bind def 1591 | 90 247.104 o 1592 | grestore 1593 | /DejaVuSans 10.000 selectfont 1594 | gsave 1595 | 1596 | 57.5625 243.307 translate 1597 | 0 rotate 1598 | 0 0 m /one glyphshow 1599 | 6.3623 0 m /five glyphshow 1600 | 12.7246 0 m /zero glyphshow 1601 | 19.0869 0 m /zero glyphshow 1602 | grestore 1603 | gsave 1604 | /o { 1605 | gsave 1606 | newpath 1607 | translate 1608 | 0.8 setlinewidth 1609 | 1 setlinejoin 1610 | 1611 | 0 setlinecap 1612 | 1613 | -0 0 m 1614 | -3.5 0 l 1615 | 1616 | gsave 1617 | 0.000 setgray 1618 | fill 1619 | grestore 1620 | stroke 1621 | grestore 1622 | } bind def 1623 | 90 313.632 o 1624 | grestore 1625 | /DejaVuSans 10.000 selectfont 1626 | gsave 1627 | 1628 | 57.5625 309.835 translate 1629 | 0 rotate 1630 | 0 0 m /two glyphshow 1631 | 6.3623 0 m /zero glyphshow 1632 | 12.7246 0 m /zero glyphshow 1633 | 19.0869 0 m /zero glyphshow 1634 | grestore 1635 | gsave 1636 | /o { 1637 | gsave 1638 | newpath 1639 | translate 1640 | 0.8 setlinewidth 1641 | 1 setlinejoin 1642 | 1643 | 0 setlinecap 1644 | 1645 | -0 0 m 1646 | -3.5 0 l 1647 | 1648 | gsave 1649 | 0.000 setgray 1650 | fill 1651 | grestore 1652 | stroke 1653 | grestore 1654 | } bind def 1655 | 90 380.16 o 1656 | grestore 1657 | /DejaVuSans 10.000 selectfont 1658 | gsave 1659 | 1660 | 57.5625 376.363 translate 1661 | 0 rotate 1662 | 0 0 m /two glyphshow 1663 | 6.3623 0 m /five glyphshow 1664 | 12.7246 0 m /zero glyphshow 1665 | 19.0869 0 m /zero glyphshow 1666 | grestore 1667 | /DejaVuSans 14.000 selectfont 1668 | gsave 1669 | 1670 | 50.6562 194.199 translate 1671 | 90 rotate 1672 | 0 0 m /B glyphshow 1673 | 9.60449 0 m /y glyphshow 1674 | 17.8896 0 m /t glyphshow 1675 | 23.3789 0 m /e glyphshow 1676 | 31.9922 0 m /s glyphshow 1677 | grestore 1678 | 0 setlinejoin 1679 | 2 setlinecap 1680 | gsave 1681 | 90 47.52 m 1682 | 90 380.16 l 1683 | stroke 1684 | grestore 1685 | gsave 1686 | 648 47.52 m 1687 | 648 380.16 l 1688 | stroke 1689 | grestore 1690 | gsave 1691 | 90 47.52 m 1692 | 648 47.52 l 1693 | stroke 1694 | grestore 1695 | gsave 1696 | 90 380.16 m 1697 | 648 380.16 l 1698 | stroke 1699 | grestore 1700 | /DejaVuSans 10.000 selectfont 1701 | gsave 1702 | 1703 | 128.882 191.968 translate 1704 | 0 rotate 1705 | 0 0 m /nine glyphshow 1706 | 6.3623 0 m /seven glyphshow 1707 | 12.7246 0 m /zero glyphshow 1708 | grestore 1709 | /DejaVuSans 10.000 selectfont 1710 | gsave 1711 | 1712 | 186.527 185.315 translate 1713 | 0 rotate 1714 | 0 0 m /nine glyphshow 1715 | 6.3623 0 m /two glyphshow 1716 | 12.7246 0 m /zero glyphshow 1717 | grestore 1718 | /DejaVuSans 10.000 selectfont 1719 | gsave 1720 | 1721 | 244.172 124.376 translate 1722 | 0 rotate 1723 | 0 0 m /four glyphshow 1724 | 6.3623 0 m /six glyphshow 1725 | 12.7246 0 m /two glyphshow 1726 | grestore 1727 | /DejaVuSans 10.000 selectfont 1728 | gsave 1729 | 1730 | 301.816 115.594 translate 1731 | 0 rotate 1732 | 0 0 m /three glyphshow 1733 | 6.3623 0 m /nine glyphshow 1734 | 12.7246 0 m /six glyphshow 1735 | grestore 1736 | /DejaVuSans 10.000 selectfont 1737 | gsave 1738 | 1739 | 359.461 191.17 translate 1740 | 0 rotate 1741 | 0 0 m /nine glyphshow 1742 | 6.3623 0 m /six glyphshow 1743 | 12.7246 0 m /four glyphshow 1744 | grestore 1745 | /DejaVuSans 10.000 selectfont 1746 | gsave 1747 | 1748 | 417.106 133.157 translate 1749 | 0 rotate 1750 | 0 0 m /five glyphshow 1751 | 6.3623 0 m /two glyphshow 1752 | 12.7246 0 m /eight glyphshow 1753 | grestore 1754 | /DejaVuSans 10.000 selectfont 1755 | gsave 1756 | 1757 | 474.75 133.157 translate 1758 | 0 rotate 1759 | 0 0 m /five glyphshow 1760 | 6.3623 0 m /two glyphshow 1761 | 12.7246 0 m /eight glyphshow 1762 | grestore 1763 | /DejaVuSans 10.000 selectfont 1764 | gsave 1765 | 1766 | 532.395 133.157 translate 1767 | 0 rotate 1768 | 0 0 m /five glyphshow 1769 | 6.3623 0 m /two glyphshow 1770 | 12.7246 0 m /eight glyphshow 1771 | grestore 1772 | /DejaVuSans 10.000 selectfont 1773 | gsave 1774 | 1775 | 590.039 115.594 translate 1776 | 0 rotate 1777 | 0 0 m /three glyphshow 1778 | 6.3623 0 m /nine glyphshow 1779 | 12.7246 0 m /six glyphshow 1780 | grestore 1781 | /DejaVuSans-Bold 16.000 selectfont 1782 | gsave 1783 | 1784 | 185.781 400.16 translate 1785 | 0 rotate 1786 | 0 0 m /T glyphshow 1787 | 8.78906 0 m /o glyphshow 1788 | 19.7812 0 m /t glyphshow 1789 | 27.4297 0 m /a glyphshow 1790 | 38.2266 0 m /l glyphshow 1791 | 43.7109 0 m /space glyphshow 1792 | 49.2812 0 m /P glyphshow 1793 | 60.6328 0 m /a glyphshow 1794 | 71.4297 0 m /c glyphshow 1795 | 80.9141 0 m /k glyphshow 1796 | 91.1797 0 m /e glyphshow 1797 | 102.031 0 m /t glyphshow 1798 | 109.68 0 m /space glyphshow 1799 | 115.25 0 m /L glyphshow 1800 | 125.445 0 m /e glyphshow 1801 | 136.297 0 m /n glyphshow 1802 | 147.688 0 m /g glyphshow 1803 | 159.141 0 m /t glyphshow 1804 | 166.789 0 m /h glyphshow 1805 | 178.18 0 m /s glyphshow 1806 | 187.703 0 m /space glyphshow 1807 | 193.273 0 m /hyphen glyphshow 1808 | 199.914 0 m /space glyphshow 1809 | 205.484 0 m /N glyphshow 1810 | 218.875 0 m /o glyphshow 1811 | 229.867 0 m /n glyphshow 1812 | 241.258 0 m /hyphen glyphshow 1813 | 247.898 0 m /S glyphshow 1814 | 259.422 0 m /t glyphshow 1815 | 267.07 0 m /o glyphshow 1816 | 278.062 0 m /r glyphshow 1817 | 285.953 0 m /i glyphshow 1818 | 291.438 0 m /n glyphshow 1819 | 302.828 0 m /g glyphshow 1820 | 314.281 0 m /space glyphshow 1821 | 319.852 0 m /parenleft glyphshow 1822 | 327.164 0 m /one glyphshow 1823 | 338.297 0 m /zero glyphshow 1824 | 349.43 0 m /s glyphshow 1825 | 358.953 0 m /parenright glyphshow 1826 | grestore 1827 | 1828 | end 1829 | showpage 1830 | --------------------------------------------------------------------------------