2000 %PDF-1.3 %âãÏÓ 1 0 obj << /Creator (Microsoft Word) /CreationDate (D:19990724123050) /Subject () /Title () /Author (Damian Conway) /Producer (Acrobat PDFWriter 4.0 for Power Macintosh) /Keywords () /ModDate (D:19990724123201+10'00') >> endobj 2 0 obj [ /PDF /Text /ImageB ] endobj 3 0 obj << /Pages 216 0 R /Type /Catalog /DefaultGray 217 0 R /DefaultRGB 218 0 R >> endobj 4 0 obj << /Type /Page /Parent 5 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R >> /ProcSet 2 0 R >> /Contents 12 0 R /Annots 220 0 R >> endobj 5 0 obj << /Kids [ 4 0 R 14 0 R 17 0 R 21 0 R 26 0 R 29 0 R ] /Count 6 /Type /Pages /Parent 214 0 R >> endobj 6 0 obj << /Type /FontDescriptor /FontName /Palatino-Bold /Flags 32802 /FontBBox [ -250 -281 1000 813 ] /MissingWidth 250 /StemV 125 /StemH 62 /ItalicAngle 0 /CapHeight 718 /XHeight 468 /Ascent 813 /Descent -281 /Leading 0 /MaxWidth 1000 /AvgWidth 568 >> endobj 7 0 obj << /Type /Font /Subtype /TrueType /Name /F1 /BaseFont /Palatino-Bold /FirstChar 0 /LastChar 255 /Widths [ 0 750 750 750 750 750 750 750 0 250 750 750 750 0 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 0 750 750 250 278 402 606 500 889 833 227 333 333 444 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 667 722 833 611 556 833 833 389 389 778 611 1000 833 833 611 833 722 611 667 778 778 1000 667 667 667 333 606 333 606 500 333 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 500 310 606 310 606 750 778 778 722 611 833 833 778 500 500 500 500 500 500 444 500 500 500 500 333 333 333 333 611 556 556 556 556 556 611 611 611 611 500 400 500 500 500 606 641 611 747 747 998 333 333 549 1000 833 713 549 549 549 500 576 494 713 823 549 274 438 488 768 778 556 444 278 606 549 500 549 612 500 500 1000 250 778 778 833 1000 833 500 1000 500 500 278 278 549 494 556 667 167 606 389 389 611 611 500 250 333 500 1000 778 611 778 611 611 389 389 389 389 833 833 790 833 778 778 778 333 333 333 333 333 333 333 333 333 333 333 ] /Encoding /MacRomanEncoding /FontDescriptor 6 0 R >> endobj 8 0 obj << /Type /FontDescriptor /FontName /Palatino-Italic /Flags 32866 /FontBBox [ -262 -286 1048 833 ] /MissingWidth 250 /StemV 62 /StemH 31 /ItalicAngle -7 /CapHeight 718 /XHeight 468 /Ascent 833 /Descent -286 /Leading 0 /MaxWidth 1048 /AvgWidth 541 >> endobj 9 0 obj << /Type /Font /Subtype /TrueType /Name /F2 /BaseFont /Palatino-Italic /FirstChar 0 /LastChar 255 /Widths [ 0 750 750 750 750 750 750 750 0 250 750 750 750 0 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 0 750 750 250 333 500 606 500 889 778 333 333 333 389 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 500 747 722 611 667 778 611 556 722 778 333 333 667 556 944 778 778 611 778 667 556 611 778 722 944 722 667 667 333 606 333 606 500 333 444 463 407 500 389 278 500 500 278 278 444 278 778 556 444 500 463 389 389 333 556 500 722 500 500 444 333 606 333 606 750 722 722 667 611 778 778 778 444 444 444 444 444 444 407 389 389 389 389 278 278 278 278 556 444 444 444 444 444 556 556 556 556 500 400 500 500 500 500 500 500 747 747 1000 333 333 549 941 778 713 549 549 549 667 576 494 713 823 549 274 333 333 768 638 444 500 333 606 549 500 549 612 500 500 1000 250 722 722 778 1028 669 500 1000 500 500 278 278 549 494 500 667 167 606 333 333 528 545 500 250 278 500 1000 722 611 722 611 611 333 333 333 333 778 778 790 778 778 778 778 278 333 333 333 333 333 333 333 333 333 333 ] /Encoding /MacRomanEncoding /FontDescriptor 8 0 R >> endobj 10 0 obj << /Type /FontDescriptor /FontName /Palatino-Roman /Flags 32802 /FontBBox [ -291 -286 1167 833 ] /MissingWidth 250 /StemV 93 /StemH 31 /ItalicAngle 0 /CapHeight 718 /XHeight 468 /Ascent 833 /Descent -286 /Leading 0 /MaxWidth 1167 /AvgWidth 558 >> endobj 11 0 obj << /Type /Font /Subtype /TrueType /Name /F3 /BaseFont /Palatino-Roman /FirstChar 0 /LastChar 255 /Widths [ 0 750 750 750 750 750 750 750 0 250 750 750 750 0 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 0 750 750 250 278 371 606 500 840 778 208 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 606 333 606 500 333 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 333 606 333 606 750 778 778 709 611 831 786 778 500 500 500 500 500 500 444 479 479 479 479 287 287 287 287 582 546 546 546 546 546 603 603 603 603 500 400 500 500 500 606 628 556 747 747 979 333 333 549 944 833 713 549 549 549 500 576 494 713 823 549 274 333 333 768 758 556 444 278 606 549 500 549 612 500 500 1000 250 778 778 786 998 827 500 1000 500 500 278 278 549 494 556 667 167 606 331 331 605 608 500 250 278 500 1144 778 611 778 611 611 337 337 337 337 786 786 790 786 778 778 778 287 333 333 333 333 250 333 333 380 313 333 ] /Encoding /MacRomanEncoding /FontDescriptor 10 0 R >> endobj 12 0 obj << /Length 13 0 R >> stream 0.24 w 2 J BT /F1 7.68 Tf 273.966 117.843 TD 0 Tc 0 Tw (Page 1)Tj ET BT /F2 10.08 Tf 86.522 762.257 TD 0.721 Tw (This is a series of extracts from )Tj /F3 10.08 Tf 132.633 0 TD (Object Oriented Perl)Tj /F2 10.08 Tf 92.732 0 TD (, a new book from Manning Publications that)Tj ET BT 86.522 748.817 TD 10.243 Tw (will be available in August 1999. For more information on this book, see)Tj ET BT 0 0 1 rg 0 0 1 RG 86.522 735.617 TD 0 Tw (http://www.manning.com/Conway/)Tj 0 g 0 G 145.115 0 TD (.)Tj ET 0 0 1 rg 86.402 734.177 145.203 0.48 re f BT /F2 19.2 Tf 0 g 86.522 698.176 TD (What is object-oriented Perl?)Tj ET BT /F3 10.08 Tf 86.522 672.255 TD 1.952 Tw (Object-oriented Perl is a small amount of additional syntax and semantics, added to the)Tj ET BT 86.522 658.815 TD 0.991 Tw (existing imperative features of the Perl programming language. Those extras allow regular)Tj ET BT 86.522 645.375 TD 0 Tw (Perl packages, variables, and subroutines to behave like classes, objects, and methods.)Tj ET BT 105.722 631.934 TD 0.291 Tw (It's also a small number of special variables, packages and modules, and a large number)Tj ET BT 86.522 618.734 TD 5.417 Tw (of new techniques, that together provide inheritance, data encapsulation, operator)Tj ET BT 86.522 605.294 TD 3.698 Tw (overloading, automated definition of commonly used methods, generic programming,)Tj ET BT 86.522 591.854 TD 0 Tw (multiply-dispatched polymorphism, and persistence.)Tj ET BT 105.722 578.413 TD 9.208 Tw (It's an idiosyncratic, no-nonsense, demystified approach to object-oriented)Tj ET BT 86.522 564.973 TD 2.663 Tw (programming, with a typically Perlish disregard for accepted rules and conventions. It)Tj ET BT 86.522 551.773 TD 0.245 Tw (draws inspiration \(and sometimes syntax\) from many different object-oriented predecessors,)Tj ET BT 86.522 538.332 TD 0.405 Tw (adapting their ideas to its own needs. It reuses and extends the functionality of existing Perl)Tj ET BT 86.522 524.892 TD 0 Tw (features, and in the process throws an entirely new slant on what they mean.)Tj ET BT 105.722 511.452 TD (In other words, it's everything that regular Perl is, only object-oriented.)Tj ET BT 105.722 498.011 TD 3.464 Tw (Using Perl makes object-oriented programming more enjoyable, and using object-)Tj ET BT 86.522 484.811 TD 2.834 Tw (oriented programming makes Perl more enjoyable too. Life is too short to endure the)Tj ET BT 86.522 471.371 TD 0.333 Tw (cultured bondage-and-discipline of Eiffel programming, or to wrestle the alligators that lurk)Tj ET BT 86.522 457.93 TD 2.518 Tw (in the muddy semantics of C++. Object-oriented Perl gives you all the power of those)Tj ET BT 86.522 444.49 TD 0 Tw (languages, with very few of their tribulations. And best of all, like regular Perl, it's fun!)Tj ET BT /F2 10.08 Tf 86.522 404.409 TD (Before we look at object orientation in Perl, let\325s talk about what object orientation is in general...)Tj ET BT /F2 19.2 Tf 86.522 366.968 TD (The esse 2000 ntials of object orientation)Tj ET BT /F3 10.08 Tf 86.522 341.048 TD 1.792 Tw (You really need to remember only five things to understand 90% of the theory of object)Tj ET BT 86.522 327.608 TD 0 Tw (orientation:)Tj ET BT 95.642 311.287 TD (\245)Tj 10.08 0 TD (an )Tj /F2 10.08 Tf 13.427 0 TD (object)Tj /F3 10.08 Tf 23.325 0 TD ( is anything that provides a way to locate, access, modify, and secure data;)Tj ET BT 95.642 292.327 TD (\245)Tj 10.08 0 TD (a )Tj /F2 10.08 Tf 8.16 0 TD (class)Tj /F3 10.08 Tf 19.225 0 TD 0.403 Tw ( is a description of what data is accessible through a particular kind of object, and)Tj ET BT 105.722 278.886 TD 0 Tw (how that data may be accessed;)Tj ET BT 95.642 259.686 TD (\245)Tj 10.08 0 TD (a )Tj /F2 10.08 Tf 7.56 0 TD (method)Tj /F3 10.08 Tf 29.881 0 TD ( is the means by which an object's data is accessed, modified, or processed;)Tj ET BT 95.642 240.486 TD (\245)Tj /F2 10.08 Tf 10.08 0 TD (inheritance)Tj /F3 10.08 Tf 45.558 0 TD 1.756 Tw ( is the way in which existing classes of object can be upgraded to provide)Tj ET BT 105.722 227.045 TD 0 Tw (additional data or methods;)Tj ET BT 95.642 208.085 TD (\245)Tj /F2 10.08 Tf 10.08 0 TD (polymorphism)Tj /F3 10.08 Tf 58.237 0 TD 3.396 Tw ( is the way that distinct objects can respond differently to the same)Tj ET BT 105.722 194.644 TD 0 Tw (message, depending on the class they belong to;)Tj ET BT 105.722 178.324 TD (This section discusses each of these ideas.)Tj ET endstream endobj 13 0 obj 4437 endobj 14 0 obj << /Type /Page /Parent 5 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R >> /ProcSet 2 0 R >> /Contents 15 0 R >> endobj 15 0 obj << /Length 16 0 R >> stream 0.24 w BT /F1 7.68 Tf 273.966 117.843 TD 0 Tc 0 Tw (Page 2)Tj ET BT /F2 15.36 Tf 86.522 760.337 TD (Objects)Tj ET BT /F3 10.08 Tf 86.522 740.177 TD 0.093 Tw (An object is an access mechanism for data. In most object-oriented languages that means that)Tj ET BT 86.522 726.737 TD 0.346 Tw (objects act as containers for data \(or at least, containers for pointers to data\). But in the more)Tj ET BT 86.522 713.536 TD 1.009 Tw (general sense, )Tj /F2 10.08 Tf 66.962 0 TD 0 Tw (anything)Tj /F3 10.08 Tf 36.964 0 TD 1.009 Tw ( that provides access to data \(a variable, a subroutine, a file handle\))Tj ET BT 86.522 700.096 TD 0 Tw (may be thought of as an object.)Tj ET BT 105.722 686.656 TD 0.122 Tw (The various data to which an object provides access are known as its )Tj /F2 10.08 Tf 309.367 0 TD 0 Tw (attribute values)Tj /F3 10.08 Tf 63.871 0 TD (, and)Tj ET BT 86.522 673.215 TD 2.127 Tw (the containers storing those attribute values are called )Tj /F2 10.08 Tf 259.926 0 TD 0 Tw (attributes)Tj /F3 10.08 Tf 39.386 0 TD 2.127 Tw (. Attributes are \(usually\))Tj ET BT 86.522 659.775 TD 1.384 Tw (nothing more than variables that have somehow been exclusively associated with a given)Tj ET BT 86.522 646.575 TD 0 Tw (object.)Tj ET BT 105.722 633.134 TD 1.023 Tw (Objects are more than just collections of variables however. In most languages, objects)Tj ET BT 86.522 619.694 TD 1.336 Tw (have an extra property called )Tj /F2 10.08 Tf 139.633 0 TD 0 Tw (encapsulation)Tj /F3 10.08 Tf 56.189 0 TD 1.336 Tw (. Encapsulation)Tj /F3 6.24 Tf 70.104 3.84 TD (1)Tj /F3 10.08 Tf 3.12 -3.84 TD ( means that the attributes of an)Tj ET BT 86.522 606.254 TD 1.278 Tw (object are not directly accessible to the entire program. Instead, they can only be accessed)Tj ET BT 86.522 592.814 TD 0.452 Tw (through certain subroutines that are associated with the object. Those subroutines are called)Tj ET BT /F2 10.08 Tf 86.522 579.613 TD 0 Tw (methods)Tj /F3 10.08 Tf 33.597 0 TD 1.358 Tw (, and they are \(usually\) universally accessible. This layer of indirection means that)Tj ET BT 86.522 566.173 TD 0.395 Tw (methods can be used to limit the ways in which an object's attribute values may be accessed)Tj ET BT 86.522 552.733 TD 0.513 Tw (or changed. In other words, an object's attribute values can only be retrieved or modified in)Tj ET BT 86.522 539.292 TD 0 Tw (the ways permitted by that object's methods.)Tj ET BT 105.722 525.852 TD 0.175 Tw (Let's take a real-world example of an object: an automated teller machine. An ATM is an)Tj ET BT 86.522 512.652 TD 0 Tw (object because it provides \(controlled\) access to certain attribute values, such as your account)Tj ET BT 86.522 499.211 TD 0.615 Tw (balance, or the bank's supply of cash. Some of those attribute values are stored in attributes)Tj ET BT 86.522 485.771 TD 1.24 Tw (within the machine itself \(i.e. its cash trays\), whilst others are stored elsewhere \(i.e. in the)Tj ET BT 86.522 472.331 TD 1.086 Tw (bank's central accounts computer\). From the client's point of view, it doesn't matter where)Tj ET BT 86.522 458.891 TD 0 Tw (the attribute values actually are, so long as they're accessible via the ATM object.)Tj ET BT 105.722 445.69 TD 0.6 Tw (Access to the ATM's various attributes is restricted by the )Tj /F2 10.08 Tf 264.544 0 TD 0 Tw (interface)Tj /F3 10.08 Tf 34.743 0 TD 0.6 Tw ( of the machine. That)Tj ET BT 86.522 432.25 TD 1.617 Tw (is, the various buttons, screens, and slots of the ATM control how encapsulated attribute)Tj ET BT 86.522 418.81 TD 1.301 Tw (values \(cash, information, etc.\) may be accessed. Those restrictions are designed to ensure)Tj ET BT 86.522 405.369 TD 0.178 Tw (that the object maintains a consistent internal state and that any external interactions with its)Tj ET BT 86.522 391.929 TD 0 Tw (attributes are valid and appropriate.)Tj ET BT 105.722 378.729 TD 0.641 Tw (For example, most banks don't use ATMs consisting of a big basket of loose cash and a)Tj ET BT 86.522 365.288 TD 0.626 Tw (note pad on which you record exactly how much you took. Even if the bank could assume)Tj ET BT 86.522 351.848 TD 1.863 Tw (that everyone was honest, it couldn't assume that everyone was infallible. People would)Tj ET BT 86.522 338.408 TD 0.358 Tw (inevitably end up taking \(or recording\) the wrong amount by mistake, even if no-one did so)Tj ET BT 86.522 324.967 TD 0 Tw (deliberately.)Tj ET BT 105.722 311.767 TD 0.344 Tw (The restrictions on access are in the client's interest too. The machine can provide access)Tj ET BT 86.522 298.327 TD 1.408 Tw (to attribute values that are private to a particular client \(e.g. their account balance\) and it)Tj ET BT 86.522 284.887 TD 0.6 Tw (shouldn't make that information available to just anyone. Even if we are pretending that all)Tj ET BT 86.522 271.446 TD 2.9 Tw (the ATMs clients are entirely honest, the account information shouldn't be universally)Tj ET BT 86.522 235.685 TD 0 Tw ( )Tj 72.002 0 TD ( )Tj ET 86.402 237.845 138.243 0.48 re f BT /F3 5.76 Tf 86.522 221.045 TD (1)Tj /F3 9.6 Tf 2.88 -3.84 TD ( )Tj /F2 9.6 Tf 2.4 0 TD (Encapsulation)Tj /F3 9.6 Tf 55.642 0 TD ( is an awkward term, because it has two distinct meanings: "bundling things)Tj ET BT 93.242 206.645 TD (together" and "isolating things from the outside world". In the literature of object orientation)Tj ET BT 93.242 196.084 TD (both senses of the word have been used at different times. Originally, )Tj /F2 9.6 Tf 296.688 0 TD (encapsulation)Tj /F3 9.6 Tf 53.514 0 TD ( was used in)Tj ET BT 93.242 185.524 TD (the "bundling" sense, as a synonym for )Tj /F2 9.6 Tf 167.169 0 TD (aggregation)Tj /F3 9.6 Tf 45.859 0 TD (. More recently, encapsulation has)Tj ET BT 93.242 174.964 TD (increasingly been used in the "isolation" sense, as a synonym for )Tj /F2 9.6 Tf 274.708 0 TD (data hiding)Tj /F3 9.6 Tf 43.993 0 TD (. It's in that more)Tj ET BT 93.242 164.404 TD (modern sense that the term is used hereafter.)Tj ET endstream endobj 16 0 obj 6000 endobj 17 0 obj << /Type /Page /Parent 5 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 18 0 R >> endobj 18 0 obj << /Length 19 0 R >> stream 0.24 w BT /F1 7.68 Tf 273.966 117.843 TD 0 Tc 0 Tw (Page 3)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD 1.438 Tw (available, because eventually someone will access and modify the wrong account data by)Tj ET BT 86.522 748.817 TD 0 Tw (accident.)Tj ET BT 105.722 735.617 TD 4.15 2000 2 Tw (In object-oriented programming, an object's methods provide the same kinds of)Tj ET BT 86.522 722.177 TD 0 Tw (protection for data. The question is: )Tj /F2 10.08 Tf 160.747 0 TD (how does an object know which methods to trust?)Tj ET BT /F2 15.36 Tf 86.522 693.376 TD (Classes)Tj ET BT /F3 10.08 Tf 86.522 673.215 TD 0.251 Tw (Setting up an association between a particular kind of object and a set of trusted subroutines)Tj ET BT 86.522 659.775 TD 0.582 Tw (\(i.e. methods\) is the job of the object's )Tj /F2 10.08 Tf 172.804 0 TD 0 Tw (class)Tj /F3 10.08 Tf 19.225 0 TD 0.582 Tw (. A class is a formal specification of the attributes)Tj ET BT 86.522 646.335 TD 2.889 Tw (of a particular kind of object, and of the methods that may be called to access those)Tj ET BT 86.522 633.134 TD 0 Tw (attributes.)Tj ET BT 105.722 619.694 TD 0.168 Tw (In other words, a class is a blueprint for a given kind of object. Every object belonging to)Tj ET BT 86.522 606.254 TD 3.058 Tw (a class has an identical interface \(a common set of methods that may be called\) and)Tj ET BT /F2 10.08 Tf 86.522 592.814 TD 0 Tw (implementation)Tj /F3 10.08 Tf 63.843 0 TD 2.848 Tw ( \(the actual code defining those methods and the attributes they access\).)Tj ET BT 86.522 579.373 TD 0 Tw (Objects are said to be )Tj /F2 10.08 Tf 96.771 0 TD (instances)Tj /F3 10.08 Tf 37.717 0 TD ( of the class.)Tj ET BT 105.722 566.173 TD 2.939 Tw (When a program is asked to create an object of a particular kind, it consults the)Tj ET BT 86.522 552.733 TD 0.857 Tw (appropriate class definition \(blueprint\) to determine how to build such an object. Typically)Tj ET BT 86.522 539.292 TD 1.195 Tw (the class definition will specify what attributes the class's objects possess and where those)Tj ET BT 86.522 525.852 TD 0 Tw (attributes are stored \(i.e. inside the object, or remotely through a pointer or reference\).)Tj ET BT 105.722 512.412 TD 0.374 Tw (When a particular method is called on an object, the program again consults the object's)Tj ET BT 86.522 499.211 TD 0.655 Tw (class definition to ensure that the method is "legal" for that object \(i.e. the method is part of)Tj ET BT 86.522 485.771 TD 1.495 Tw (the object's blueprint\), and that the method has been called correctly \(i.e. in line with the)Tj ET BT 86.522 472.331 TD 0 Tw (definition in the class blueprint\).)Tj ET BT 105.722 458.891 TD 0.327 Tw (For example, in software controlling a bank's automated teller network there might be a)Tj ET BT 86.522 445.45 TD 3.72 Tw (class called )Tj /F4 10.08 Tf 59.84 0 TD 0 Tw (ATM)Tj /F3 10.08 Tf 18.147 0 TD 3.72 Tw ( that describes the structure and behaviour of objects that represent)Tj ET BT 86.522 432.25 TD 2.299 Tw (individual ATMs. The )Tj /F4 10.08 Tf 108.242 0 TD 0 Tw (ATM)Tj /F3 10.08 Tf 18.147 0 TD 2.299 Tw ( class might specify that each)Tj /F4 10.08 Tf 140.901 0 TD ( ATM )Tj /F3 10.08 Tf 34.843 0 TD (object has the attributes)Tj ET BT /F4 10.08 Tf 86.522 418.81 TD 0 Tw (cash_remaining)Tj /F3 10.08 Tf 84.688 0 TD 1.972 Tw (, )Tj /F4 10.08 Tf 7.234 0 TD 0 Tw (transaction_list)Tj /F3 10.08 Tf 96.786 0 TD 1.972 Tw (, )Tj /F4 10.08 Tf 7.012 0 TD 0 Tw (cards_swallowed)Tj /F3 10.08 Tf 90.606 0 TD 1.972 Tw (, etc., and methods such as)Tj ET BT /F4 10.08 Tf 86.522 405.369 TD 0 Tw (start_up\(\))Tj /F3 10.08 Tf 60.491 0 TD (, )Tj /F4 10.08 Tf 5.12 0 TD (withdraw_cash\(\))Tj /F3 10.08 Tf 90.737 0 TD (,)Tj /F4 10.08 Tf 2.52 0 TD ( list_transactions\(\))Tj /F3 10.08 Tf 121.189 0 TD (, )Tj /F4 10.08 Tf 5.12 0 TD (restrict_withdrawal\(\))Tj /F3 10.08 Tf 127.032 0 TD (,)Tj ET BT /F4 10.08 Tf 86.522 391.929 TD (chew_cards\(\))Tj /F3 10.08 Tf 72.589 0 TD (, )Tj /F4 10.08 Tf 5.04 0 TD (close_down\(\))Tj /F3 10.08 Tf 72.374 0 TD (.)Tj ET BT 105.722 378.489 TD 4.344 Tw (Thereafter, when an ATM object receives a request to invoke a method called)Tj ET BT /F4 10.08 Tf 86.522 365.288 TD 0 Tw (withdraw_cash_without_debiting_account\(\))Tj /F3 10.08 Tf 241.965 0 TD 1.099 Tw (, it can check the )Tj /F4 10.08 Tf 81.322 0 TD 0 Tw (ATM)Tj /F3 10.08 Tf 18.147 0 TD 1.099 Tw ( class blue-print)Tj ET BT 86.522 351.848 TD 3.876 Tw (and ascertain that the method cannot be called. Alternatively, if the \(valid\) method)Tj ET BT /F4 10.08 Tf 86.522 338.408 TD 0 Tw (close_down\(\))Tj /F3 10.08 Tf 72.589 0 TD ( is defined to increment a \(non-existent\) attribute called )Tj /F4 10.08 Tf 249.738 0 TD (downtime)Tj /F3 10.08 Tf 48.393 0 TD (, then this)Tj ET BT 86.522 324.967 TD (coding error can be detected.)Tj ET BT /F2 15.36 Tf 86.522 296.167 TD (Class attributes and methods)Tj ET BT /F3 10.08 Tf 86.522 276.006 TD 2.775 Tw (So far, we've only considered attributes that are accessed through \(i.e. "belong to"\) an)Tj ET BT 86.522 262.806 TD 2.171 Tw (individual object. Such attributes are more formally known as )Tj /F2 10.08 Tf 297.847 0 TD (object attributes)Tj /F3 10.08 Tf 67.202 0 TD (. Likewise,)Tj ET BT 86.522 249.366 TD 1.368 Tw (we've only talked about methods that were called on a particular object to manipulate its)Tj ET BT 86.522 235.925 TD 0 Tw (object attributes. No prizes for guessing that such methods are called )Tj /F2 10.08 Tf 309.352 0 TD (object methods)Tj /F3 10.08 Tf 59.297 0 TD (.)Tj ET BT 105.722 222.485 TD 3.263 Tw (Unfortunately, object attributes and methods don't always provide an appropriate)Tj ET BT 86.522 209.045 TD 2.667 Tw (mechanism for controlling the data associated with the objects of a particular class. In)Tj ET BT 86.522 195.844 TD 2.85 Tw (particular, the attributes of an individual object of a class are not usually suitable for)Tj ET BT 86.522 182.404 TD 0 Tw (encapsulating data that belongs\321collectively\321to the complete set of objects of that class.)Tj ET BT 105.722 168.964 TD 0.685 Tw (Let's go back to the ATM example for a moment. At the end of each day, the bank will)Tj ET BT 86.522 155.524 TD 1.503 Tw (want to know how much money in total has been dispensed from all its ATM machines.)Tj ET endstream endobj 19 0 obj 6234 endobj 20 0 obj << /Type /Font /Subtype /TrueType /Name /F4 /BaseFont /Courier /Encoding /MacRomanEncoding >> endobj 21 0 obj << /Type /Page /Parent 5 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R >> /ProcSet 2 0 R >> /Contents 22 0 R >> endobj 22 0 obj << /Length 23 0 R >> stream 0.24 w BT /F1 7.68 Tf 273.966 117.843 TD 0 Tc 0 Tw (Page 4)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD (Each of those machines will have a record of how much it has dispensed individually, but no)Tj ET BT 86.522 748.817 TD 4.24 Tw (machine will have a record of how much all the bank's machines have dispensed)Tj ET BT 86.522 735.617 TD 0.804 Tw (collectively. That information is not a property of a particular ATM. Rather, it's a collective)Tj ET BT 86.522 722.177 TD 0 Tw (property of the entire set of ATMs.)Tj ET BT 105.722 708.736 TD 5.916 Tw (The most obvious solution is to design another kind of machine\321an ATM)Tj ET BT 86.522 695.296 TD 1.45 Tw (coordinator\321that gathers and stores the collective data of the set of ATMs \(i.e. total cash)Tj ET BT 86.522 681.856 TD 2.316 Tw (dispensed, average number of transactions, funniest hidden video, etc.\). We then create)Tj ET BT 86.522 668.655 TD 0.565 Tw (exactly one of these coordinator machines and arrange for each of the ATMs to feed data to)Tj ET BT 86.522 655.215 TD 1.014 Tw (it. Now we can access the accumulated ATM data through the interface of the coordinator)Tj ET BT 86.522 641.775 TD 0 Tw (machine.)Tj ET BT 105.722 628.334 TD 2.88 Tw (In object-oriented terms, the design of the coordinator machine is the design of a)Tj ET BT 86.522 614.894 TD 5.719 Tw (separate class \(say )Tj /F4 10.08 Tf 101.324 0 TD 0 Tw (ATM_Coordinator)Tj /F3 10.08 Tf 90.737 0 TD 5.719 Tw (\), and the construction of such a machine)Tj ET BT 86.522 601.694 TD 0.858 Tw (corresponds to the creation of a single )Tj /F4 10.08 Tf 177.58 0 TD 0 Tw (ATM_Coordinator)Tj /F3 10.08 Tf 90.737 0 TD 0.858 Tw ( object. This is certainly a viable)Tj ET BT 86.522 588.253 TD 0 Tw (solution to the problem of collective data, but it is unattractive in several respects.)Tj ET BT 105.722 574.813 TD 0.676 Tw (For a start, this app 2000 roach means that every time a class needs to handle collective data,)Tj ET BT 86.522 561.373 TD 0.085 Tw (we have to define yet another class and then create a single instance of it. Moreover, we have)Tj ET BT 86.522 547.933 TD 1.356 Tw (to be careful not to create )Tj /F2 10.08 Tf 123.038 0 TD 0 Tw (more)Tj /F3 10.08 Tf 20.16 0 TD 1.356 Tw ( than one instance, to ensure that the collective data is not)Tj ET BT 86.522 534.732 TD 0 Tw (somehow duplicated or, worse still, fragmented.)Tj ET BT 105.722 521.292 TD 0.545 Tw (Next, we have to provide some mechanism for connecting the collection of "individual")Tj ET BT 86.522 507.852 TD 1.379 Tw (objects of the original class to the single object of the new "collective" class. That, in turn,)Tj ET BT 86.522 494.411 TD 0.735 Tw (means that the "collective" object has to be accessible anywhere that any "individual" object)Tj ET BT 86.522 480.971 TD 0 Tw (might be created. Hence the "collective" object must be globally accessible, which is generally)Tj ET BT 86.522 467.771 TD (considered a Bad Thing.)Tj ET BT 105.722 454.33 TD 0.215 Tw (For these reasons, most object-oriented languages don't take this "helper class" approach)Tj ET BT 86.522 440.89 TD 0.29 Tw (to regulating collective data. Instead, they allow classes to specify a second kind of attribute,)Tj ET BT 86.522 427.45 TD 0 Tw (one that is "shared" by every object of that class, rather than being "owned" by a single object.)Tj ET BT 86.522 414.009 TD (Such attributes are, unimaginatively, called )Tj /F2 10.08 Tf 195.693 0 TD (class attributes)Tj /F3 10.08 Tf 60.955 0 TD (.)Tj ET BT 105.722 400.809 TD 1.782 Tw (Of course, to maintain the appropriate protection for this kind of class-wide data)Tj /F3 6.24 Tf 380.409 3.84 TD (2)Tj /F3 10.08 Tf 3.12 -3.84 TD (, a)Tj ET BT 86.522 387.369 TD 2.814 Tw (class must also provide )Tj /F2 10.08 Tf 117.603 0 TD (class methods)Tj /F3 10.08 Tf 58.157 0 TD (, through which its class attributes may be safely)Tj ET BT 86.522 373.929 TD 0.886 Tw (accessed. A class method differs from an object method in that it is not called on a specific)Tj ET BT 86.522 360.488 TD 2.128 Tw (object \(because, unlike an object attribute, a class attribute doesn't "belong" to a specific)Tj ET BT 86.522 347.048 TD 0.716 Tw (object\). Instead, a class method is called on the class itself. This usually means that to call a)Tj ET BT 86.522 333.848 TD 1.776 Tw (class method we must specify both the class name and the method name \(e.g. )Tj /F2 10.08 Tf 372.009 0 TD (invoke the)Tj ET BT /F5 10.08 Tf 86.522 320.407 TD 0 Tw (daily_total\(\))Tj /F2 10.08 Tf 78.639 0 TD ( method for the class )Tj /F5 10.08 Tf 85.017 0 TD (ATM)Tj /F3 10.08 Tf 18.268 0 TD (\).)Tj ET BT 105.722 306.967 TD 0.173 Tw (In some object-oriented languages, class methods provide )Tj /F2 10.08 Tf 261.144 0 TD 0 Tw (strong encapsulation)Tj /F3 10.08 Tf 85.205 0 TD ( of a class's)Tj ET BT 86.522 293.527 TD 0.154 Tw (class attributes. In other words, there is no way to access a class attribute, except through the)Tj ET BT 86.522 280.086 TD 0.266 Tw (appropriate class method. Other languages offer only weak encapsulation of class attributes,)Tj ET BT 86.522 266.886 TD 0.633 Tw (by making them directly visible to any method of a class \(i.e. to a class method or an object)Tj ET BT 86.522 253.446 TD 2.007 Tw (method\). This means that class attributes may be accessed through individual objects as)Tj ET BT 86.522 240.005 TD 0 Tw (well. Perl enforces neither of these approaches, but allows us to use either or both.)Tj ET BT 86.522 193.444 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 195.604 138.243 0.48 re f BT /F3 5.76 Tf 86.522 178.804 TD (2)Tj /F3 9.6 Tf 2.88 -3.84 TD ( After all, the bank certainly doesn't want devices outside the ATM network accessing its)Tj ET BT 93.242 164.404 TD (collective ATM records.)Tj ET endstream endobj 23 0 obj 5770 endobj 24 0 obj << /Type /FontDescriptor /FontName /Courier,Italic /Flags 32866 /FontBBox [ -208 -238 833 762 ] /MissingWidth 600 /StemV 62 /StemH 593 /ItalicAngle -12 /CapHeight 593 /XHeight 437 /Ascent 762 /Descent -238 /Leading 0 /MaxWidth 833 /AvgWidth 589 >> endobj 25 0 obj << /Type /Font /Subtype /TrueType /Name /F5 /BaseFont /Courier,Italic /FirstChar 0 /LastChar 255 /Widths [ 0 600 600 600 600 600 600 600 0 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 400 600 600 600 600 600 600 600 600 600 600 600 549 600 600 713 549 549 549 600 576 494 713 823 549 274 600 600 768 600 600 600 600 600 549 600 549 612 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 549 494 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 790 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] /Encoding /MacRomanEncoding /FontDescriptor 24 0 R >> endobj 26 0 obj << /Type /Page /Parent 5 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 27 0 R >> endobj 27 0 obj << /Length 28 0 R >> stream 0.24 w BT /F1 7.68 Tf 273.966 117.843 TD 0 Tc 0 Tw (Page 5)Tj ET BT /F2 15.36 Tf 86.522 760.337 TD (Inheritance)Tj ET BT /F3 10.08 Tf 86.522 740.177 TD 2.18 Tw (If you're building an extension to your house, or customizing a car, or upgrading your)Tj ET BT 86.522 726.737 TD 0.356 Tw (computer, you normally start with an existing blueprint and add on \(or replace\) certain bits.)Tj ET BT 86.522 713.536 TD 0.608 Tw (If your original blueprints are good, it's a waste of time and resources to start from nothing)Tj ET BT 86.522 700.096 TD 0 Tw (and separately reconstruct nearly the same thing as you already have.)Tj ET BT 105.722 686.656 TD 2.042 Tw (The same thing happens in object-oriented programming. Often you have a class of)Tj ET BT 86.522 673.215 TD 0.747 Tw (objects that partially meets your requirements \(say a class that represents a truck\), and you)Tj ET BT 86.522 659.775 TD 0.905 Tw (want to create a new class that exactly meets your needs \(say a class that represents a fire-)Tj ET BT 86.522 646.575 TD 0 Tw (truck\).)Tj ET BT 105.722 633.134 TD 1.744 Tw (To produce a class representing fire-trucks, it's not necessary to code that class from)Tj ET BT 86.522 619.694 TD 0 Tw (scratch, reproducing \(or maybe cutting and pasting\) the original truck code, and then adding)Tj ET BT 86.522 606.254 TD (new methods to implement alarms, ladders, hoses, red braces, etc.)Tj ET BT 105.722 592.814 TD 1.133 Tw (Instead, we can just tell the program that the new )Tj /F4 10.08 Tf 234.245 0 TD 0 Tw (FireTruck)Tj /F3 10.08 Tf 54.442 0 TD 1.112 Tw ( class is based on \(or )Tj /F2 10.08 Tf 100.076 0 TD 0 Tw (is)Tj ET BT 86.522 579.613 TD (derived from)Tj /F3 10.08 Tf 51.742 0 TD ( or )Tj /F2 10.08 Tf 15.699 0 TD (inherits)Tj /F3 10.08 Tf 31.373 0 TD 0.494 Tw (\) the existing )Tj /F4 10.08 Tf 61.315 0 TD 0 Tw (Truck)Tj /F3 10.08 Tf 30.246 0 TD 0.494 Tw ( class. Then we tell it to add certain extra features)Tj ET BT 86.522 566.173 TD 1.825 Tw (\(i.e. additional attributes and methods\) to the )Tj /F4 10.08 Tf 217.013 0 TD 0 Tw (FireTruck)Tj /F3 10.08 Tf 54.442 0 TD 1.825 Tw ( class, over and above those it)Tj ET BT 86.522 552.733 TD 2.688 Tw (inherited from the )Tj /F4 10.08 Tf 92.032 0 TD 0 Tw (Truck)Tj /F3 10.08 Tf 30.246 0 TD 2.688 Tw ( class. Any class like )Tj /F4 10.08 Tf 105.967 0 TD 0 Tw (FireTruck)Tj /F3 10.08 Tf 54.442 0 TD 2.688 Tw ( that inherits attributes and)Tj ET BT 86.522 539.292 TD 0 Tw (methods from another is called a )Tj /F2 10.08 Tf 149.126 0 TD (derived class)Tj /F3 10.08 Tf 51.279 0 TD ( or somet 2000 imes a )Tj /F2 10.08 Tf 72.482 0 TD (child class)Tj /F3 10.08 Tf 41.761 0 TD (. The class from which)Tj ET BT 86.522 525.852 TD (it inherits \(i.e. )Tj /F4 10.08 Tf 63.912 0 TD (Truck)Tj /F3 10.08 Tf 30.246 0 TD ( in this case\) is called its )Tj /F2 10.08 Tf 108.647 0 TD (base class)Tj /F3 10.08 Tf 38.731 0 TD ( or its )Tj /F2 10.08 Tf 27.539 0 TD (parent class)Tj /F3 10.08 Tf 48.068 0 TD (.)Tj ET BT 105.722 512.652 TD 0.368 Tw (The relationship between a base class and its derived class is called the )Tj /F2 10.08 Tf 321.847 0 TD 0 Tw (is-a)Tj /F3 10.08 Tf 14.554 0 TD ( relationship,)Tj ET BT 86.522 499.211 TD 0.687 Tw (because an object of a derived class must necessarily have all the attributes and methods of)Tj ET BT 86.522 485.771 TD 0.299 Tw (an object of the base class, and hence it "is a" base-class object for all practical purposes. This)Tj ET BT 86.522 472.331 TD 0.773 Tw (idea corresponds to our inherent sense of the hierarchy of categories: a fire-truck )Tj /F2 10.08 Tf 371.043 0 TD 0 Tw (is-a)Tj /F3 10.08 Tf 14.319 0 TD ( truck,)Tj ET BT 86.522 458.891 TD 0.392 Tw (an automated teller machine )Tj /F2 10.08 Tf 131.523 0 TD 0 Tw (is-a)Tj /F3 10.08 Tf 14.314 0 TD 0.392 Tw ( machine, a hench-person )Tj /F2 10.08 Tf 117.891 0 TD 0 Tw (is-a)Tj /F3 10.08 Tf 14.352 0 TD 0.392 Tw ( person, an unnecessarily long)Tj ET BT 86.522 445.69 TD 0 Tw (list of analogies )Tj /F2 10.08 Tf 71.871 0 TD (is-a )Tj /F3 10.08 Tf 16.725 0 TD (list of analogies.)Tj ET BT 105.722 432.25 TD 1.317 Tw (The )Tj /F2 10.08 Tf 20.88 0 TD 0 Tw (is-a)Tj /F3 10.08 Tf 14.314 0 TD 1.317 Tw ( relationship is )Tj /F2 10.08 Tf 72.088 0 TD 0 Tw (transitive)Tj /F3 10.08 Tf 39.204 0 TD 1.317 Tw (, so you can have increasingly general categories over)Tj ET BT 86.522 418.81 TD 0.526 Tw (more than two levels: a fire-truck )Tj /F2 10.08 Tf 153.686 0 TD 0 Tw (is-a)Tj /F3 10.08 Tf 14.232 0 TD ( truck)Tj /F2 10.08 Tf 26.475 0 TD ( is-a)Tj /F3 10.08 Tf 17.686 0 TD ( vehicle)Tj /F2 10.08 Tf 34.606 0 TD ( is-a)Tj /F3 10.08 Tf 17.475 0 TD ( device)Tj /F2 10.08 Tf 31.963 0 TD ( is-a)Tj /F3 10.08 Tf 17.478 0 TD 0.526 Tw ( thing; a hench-person)Tj ET BT /F2 10.08 Tf 86.522 405.369 TD 0 Tw (is-a)Tj /F3 10.08 Tf 14.314 0 TD ( person )Tj /F2 10.08 Tf 35.552 0 TD (is-a)Tj /F3 10.08 Tf 14.37 0 TD ( animal )Tj /F2 10.08 Tf 35.753 0 TD (is-a)Tj /F3 10.08 Tf 14.408 0 TD ( life-form )Tj /F2 10.08 Tf 44.19 0 TD (is-a)Tj /F3 10.08 Tf 14.372 0 TD ( thing)Tj /F3 6.24 Tf 26.247 3.84 TD (3)Tj /F3 10.08 Tf 3.12 -3.84 TD (.)Tj ET BT 105.722 391.929 TD 2.466 Tw (Note however that the )Tj /F2 10.08 Tf 112.803 0 TD 0 Tw (is-a)Tj /F3 10.08 Tf 14.314 0 TD 2.466 Tw ( relationship is not bi-directional. Though an object of a)Tj ET BT 86.522 378.729 TD 0.314 Tw (derived class is always an object of a base class, it's not always \(or even usually\) true that an)Tj ET BT 86.522 365.288 TD 0.939 Tw (object of a base class )Tj /F2 10.08 Tf 97.682 0 TD 0 Tw (is-a)Tj /F3 10.08 Tf 14.314 0 TD 0.939 Tw ( object of a derived class. That is, although a fire-truck always )Tj /F2 10.08 Tf 288.034 0 TD 0 Tw (is-a)Tj ET BT /F3 10.08 Tf 86.522 351.848 TD (truck, it's not the case that a truck always )Tj /F2 10.08 Tf 185.726 0 TD (is-a)Tj /F3 10.08 Tf 14.352 0 TD ( fire-truck.)Tj ET BT /F2 11.52 Tf 86.522 323.047 TD (Inheritance and abstraction)Tj ET BT /F3 10.08 Tf 86.522 302.887 TD (Naturally, having created a useful base class like )Tj /F4 10.08 Tf 219.845 0 TD (Truck)Tj /F3 10.08 Tf 30.246 0 TD (, we are immediately going to derive)Tj ET BT 86.522 289.447 TD 0.97 Tw (from it not just a )Tj /F4 10.08 Tf 81.362 0 TD 0 Tw (FireTruck)Tj /F3 10.08 Tf 54.442 0 TD 0.97 Tw ( class, but also classes representing dump trucks, tow trucks,)Tj ET BT 86.522 276.246 TD 4.44 Tw (pickup trucks, armored cars, cement mixers, delivery vans, etc. Each of these will)Tj ET BT 86.522 262.806 TD 1.448 Tw (\(separately\) inherit the same set of characteristics from the original )Tj /F4 10.08 Tf 313.914 0 TD 0 Tw (Truck)Tj /F3 10.08 Tf 30.246 0 TD 1.448 Tw ( class, but each)Tj ET BT 86.522 249.366 TD 1.451 Tw (will extend or modify those characteristics uniquely. The relationship between the )Tj /F4 10.08 Tf 384.249 0 TD 0 Tw (Truck)Tj ET BT /F3 10.08 Tf 86.522 235.925 TD (class and its numerous child classes is shown in Figure 1.)Tj ET BT 86.522 214.565 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 216.725 138.243 0.48 re f BT /F3 5.76 Tf 86.522 199.925 TD (3)Tj /F3 9.6 Tf 2.88 -3.84 TD ( In fact, just about any class of object can be traced back to being a "thing". Of course, that)Tj ET BT 93.242 185.524 TD (doesn't mean we have to represent all those higher levels of categorization in an actual)Tj ET BT 93.242 174.964 TD (program. The universal "thing-ness" of a fire-truck, an ATM, or a hench-person is probably)Tj ET BT 93.242 164.404 TD (completely irrelevant to most applications.)Tj ET endstream endobj 28 0 obj 7472 endobj 29 0 obj << /Type /Page /Parent 5 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 30 0 R >> endobj 30 0 obj << /Length 31 0 R >> stream 0.24 w BT /F1 7.68 Tf 273.966 117.843 TD 0 Tc 0 Tw (Page 6)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD (Using inheritance means that we only have to specify how a fire-truck or a cement mixer)Tj ET BT 86.522 748.817 TD 0.803 Tw (or an armored car differs from a regular truck, rather than constantly needing to restate all)Tj ET BT 86.522 735.617 TD 0.715 Tw (the standard features of trucks as well. That makes the code that defines each type of truck)Tj ET BT 86.522 722.177 TD 0 Tw (shorter \(assuming we already have the code for a truck\).)Tj ET BT 105.722 708.736 TD (More importantly, it reduces our maintenance load because any change to the behaviour)Tj ET BT 86.522 695.296 TD 0.66 Tw (of the general )Tj /F4 10.08 Tf 65.47 0 TD 0 Tw (Truck)Tj /F3 10.08 Tf 30.246 0 TD 0.66 Tw ( class \(for example, modifying its )Tj /F4 10.08 Tf 154.13 0 TD 0 Tw (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 0.66 Tw ( method in response to)Tj ET BT 86.522 681.856 TD 1.278 Tw (some change in transport regulations\) is automatically propagated to all the specific truck)Tj ET BT 86.522 668.655 TD 0 Tw (classes \()Tj /F4 10.08 Tf 35.97 0 TD (FireTruck)Tj /F3 10.08 Tf 54.442 0 TD (, )Tj /F4 10.08 Tf 5.04 0 TD (DumpTruck)Tj /F3 10.08 Tf 54.442 0 TD (, )Tj /F4 10.08 Tf 5.04 0 TD (ArmoredCar)Tj /F3 10.08 Tf 60.491 0 TD (, etc.\) that inherit from )Tj /F4 10.08 Tf 102.51 0 TD (Truck)Tj /F3 10.08 Tf 30.246 0 TD (.)Tj ET BT 105.722 655.215 TD 3.03 Tw (In this way, inheritance also provides a way of capturing the )Tj /F2 10.08 Tf 305.6 0 TD (abstract relationships)Tj ET BT /F3 10.08 Tf 86.522 641.775 TD 0.493 Tw (between specific classes of object within a program. Thus, the class of fire-trucks is a special)Tj ET BT 86.522 628.334 TD 1.207 Tw (case of the more general class of trucks, which in turn might be a special case of the very)Tj ET BT 86.522 614.894 TD 0.336 Tw (general class of vehicles. The more abstract classes are generalized blueprints that define the)Tj ET BT 86.522 601.694 TD 3.894 Tw (common features of a wide range of kinds of objects. The more specialized classes)Tj ET BT 86.522 588.253 TD 0.161 Tw (presuppose those common features, and then describe the additional attributes and methods)Tj ET BT 86.522 574.813 TD 0 Tw (unique to their particular kind of object.)Tj ET BT /F1 7.68 Tf 223.085 294.487 TD (Figure 1: Inheriting from the Truck class)Tj ET BT /F2 11.52 Tf 86.522 255.126 TD (Inheritance hierarchies)Tj ET BT /F3 10.08 Tf 86.522 235.205 TD 1.701 Tw (The relative ease with which we can create and maintain new classes by inheriting from)Tj ET BT 86.522 221.765 TD 0.148 Tw (existing one will almost certainly encourage us to create more complex chains of inheritance.)Tj ET BT 86.522 208.325 TD 2.222 Tw (For example, there are many specialized types of fire-trucks: ladders, tankers, pumpers,)Tj ET BT 86.522 194.884 TD 0.588 Tw (snorkels, tarmac crash vehicles, etc. Likewise there are many species of dump truck: double)Tj ET BT 86.522 181.444 TD 0 Tw (bottom, highside end, lowside end, two-axle tr 2000 actor, three-axle tractor, bob-tail, etc.)Tj ET BT 105.722 168.244 TD 0.694 Tw (We may need individual classes for each of these very specific types of trucks, perhaps)Tj ET BT 86.522 154.804 TD 0.409 Tw (because each of them has unique regulations governing their registration and inspection. By)Tj ET 0.48 w 0.004 w 1 G 1 g 89.764 307.689 413.046 243.362 re b 3.36 w q 151.203 406.569 m 142.563 406.569 l 139.203 406.089 l 137.043 405.369 l 135.363 404.889 l 133.683 404.409 l 132.723 403.689 l 131.523 403.209 l 130.563 402.729 l 129.363 402.249 l 128.403 401.529 l 127.923 401.049 l 126.723 400.569 l 126.243 400.089 l 125.043 399.369 l 124.563 398.889 l 124.083 398.409 l 123.363 397.929 l 122.883 397.209 l 122.403 396.729 l 121.923 396.249 l 121.203 395.769 l 120.723 395.049 l 120.243 394.569 l 119.763 394.089 l 119.043 393.369 l 118.563 392.889 l 118.083 391.929 l 117.603 391.209 l 116.883 390.249 l 116.403 389.769 l 115.923 388.569 l 115.203 387.609 l 114.723 386.409 l 114.243 385.449 l 113.763 384.249 l 113.043 382.569 l 112.563 380.889 l 112.083 378.729 l 111.603 375.609 l 111.603 366.968 l 112.083 366.968 l 112.083 363.608 l 112.563 363.608 l 112.563 361.448 l 113.043 361.448 l 113.043 359.768 l 113.763 359.768 l 113.763 358.088 l 114.243 358.088 l 114.243 357.128 l 114.723 357.128 l 114.723 355.928 l 115.203 355.928 l 115.203 354.968 l 115.923 354.968 l 115.923 353.768 l 116.403 353.768 l 116.403 352.808 l 116.883 352.808 l 116.883 352.088 l 117.603 352.088 l 117.603 351.128 l 118.083 351.128 l 118.083 350.648 l 118.563 350.648 l 118.563 349.448 l 119.043 349.448 l 119.043 348.968 l 119.763 348.968 l 119.763 348.488 l 120.243 348.488 l 120.243 347.768 l 120.723 347.768 l 120.723 347.288 l 121.203 347.288 l 121.203 346.808 l 121.923 346.808 l 121.923 346.328 l 122.403 346.328 l 122.403 345.608 l 122.883 345.608 l 122.883 345.128 l 123.363 345.128 l 123.363 344.648 l 124.083 344.648 l 124.083 343.928 l 124.563 343.928 l 124.563 343.448 l 125.043 343.448 l 125.043 342.968 l 126.243 342.968 l 126.243 342.488 l 126.723 342.488 l 126.723 341.768 l 127.923 341.768 l 127.923 341.288 l 128.403 341.288 l 128.403 340.808 l 129.363 340.808 l 129.363 340.328 l 130.563 340.328 l 130.563 339.608 l 131.523 339.608 l 131.523 339.128 l 132.723 339.128 l 132.723 338.648 l 133.683 338.648 l 133.683 338.168 l 135.363 338.168 l 135.363 337.448 l 137.043 337.448 l 137.043 336.968 l 139.203 336.968 l 139.203 336.488 l 142.563 336.488 l 142.563 336.008 l 151.203 336.008 l 151.203 336.488 l 154.564 336.968 l 156.724 337.448 l 158.164 338.168 l 159.844 338.648 l 161.044 339.128 l 162.004 339.608 l 163.204 340.328 l 164.164 340.808 l 165.364 341.288 l 165.844 341.768 l 167.044 342.488 l 167.524 342.968 l 168.484 343.448 l 169.204 343.928 l 169.684 344.648 l 170.164 345.128 l 170.644 345.608 l 171.364 346.328 l 171.844 346.808 l 172.324 347.288 l 173.044 347.768 l 173.524 348.488 l 174.004 348.968 l 174.484 349.448 l 175.204 350.648 l 175.684 351.128 l 176.164 352.088 l 176.644 352.808 l 177.364 353.768 l 177.844 354.968 l 178.324 355.928 l 178.804 357.128 l 179.524 358.088 l 180.004 359.768 l 180.484 361.448 l 180.964 363.608 l 181.684 366.968 l 182.164 375.609 l 181.684 375.609 l 181.684 378.729 l 180.964 378.729 l 180.964 380.889 l 180.484 380.889 l 180.484 382.569 l 180.004 382.569 l 180.004 384.249 l 179.524 384.249 l 179.524 385.449 l 178.804 385.449 l 178.804 386.409 l 178.324 386.409 l 178.324 387.609 l 177.844 387.609 l 177.844 388.569 l 177.364 388.569 l 177.364 389.769 l 176.644 389.769 l 176.644 390.249 l 176.164 390.249 l 176.164 391.209 l 175.684 391.209 l 175.684 391.929 l 175.204 391.929 l 175.204 392.889 l 174.484 392.889 l 174.484 393.369 l 174.004 393.369 l 174.004 394.089 l 173.524 394.089 l 173.524 394.569 l 173.044 394.569 l 173.044 395.049 l 172.324 395.049 l 172.324 395.769 l 171.844 395.769 l 171.844 396.249 l 171.364 396.249 l 171.364 396.729 l 170.644 396.729 l 170.644 397.209 l 170.164 397.209 l 170.164 397.929 l 169.684 397.929 l 169.684 398.409 l 169.204 398.409 l 169.204 398.889 l 168.484 398.889 l 168.484 399.369 l 167.524 399.369 l 167.524 400.089 l 167.044 400.089 l 167.044 400.569 l 165.844 400.569 l 165.844 401.049 l 165.364 401.049 l 165.364 401.529 l 164.164 401.529 l 164.164 402.249 l 163.204 402.249 l 163.204 402.729 l 162.004 402.729 l 162.004 403.209 l 161.044 403.209 l 161.044 403.689 l 159.844 403.689 l 159.844 404.409 l 158.164 404.409 l 158.164 404.889 l 156.724 404.889 l 156.724 405.369 l 154.564 405.369 l 154.564 406.089 l 151.203 406.089 l 151.203 406.569 l W n 0.9 G 146.883 404.889 m 165.431 404.889 180.484 389.836 180.484 371.289 c 180.484 352.741 165.431 337.688 146.883 337.688 c 128.336 337.688 113.283 352.741 113.283 371.289 c 113.283 389.836 128.336 404.889 146.883 404.889 c s 0.7 G 146.763 403.689 m 164.45 403.689 178.804 389.228 178.804 371.409 c 178.804 353.589 164.45 339.128 146.763 339.128 c 129.077 339.128 114.723 353.589 114.723 371.409 c 114.723 389.228 129.077 403.689 146.763 403.689 c s 0.75 G 146.763 402.009 m 163.523 402.009 177.124 388.193 177.124 371.169 c 177.124 354.144 163.523 340.328 146.763 340.328 c 130.004 340.328 116.403 354.144 116.403 371.169 c 116.403 388.193 130.004 402.009 146.763 402.009 c s 0 w 0.75 g 146.763 403.689 m 164.45 403.689 178.804 389.12 178.804 371.169 c 178.804 353.217 164.45 338.648 146.763 338.648 c 129.077 338.648 114.723 353.217 114.723 371.169 c 114.723 389.12 129.077 403.689 146.763 403.689 c f Q 0 w BT /F3 5.04 Tf 0 g 0 G 2.265 0 0 2.264 122.647 367.688 Tm 0 Tw (FireTruck)Tj ET 0.5 w 122.647 366.932 m 172.097 366.932 l S 3.36 w q 350.648 406.569 m 342.008 406.569 l 338.648 406.089 l 336.488 405.369 l 334.808 404.889 l 333.368 404.409 l 332.168 403.689 l 331.208 403.209 l 330.008 402.729 l 328.808 402.249 l 327.848 401.529 l 327.367 401.049 l 326.167 400.569 l 325.687 400.089 l 324.487 399.369 l 324.007 398.889 l 323.527 398.409 l 323.047 397.929 l 322.327 397.209 l 321.847 396.729 l 321.367 396.249 l 320.887 395.769 l 320.167 395.049 l 319.687 394.569 l 319.207 394.089 l 318.487 393.369 l 318.007 392.889 l 317.527 391.929 l 317.047 391.209 l 316.327 390.249 l 315.847 389.769 l 315.367 388.569 l 314.887 387.609 l 314.167 386.409 l 313.687 385.449 l 313.207 384.249 l 312.727 382.569 l 312.007 380.889 l 311.527 378.729 l 311.047 375.609 l 311.047 366.968 l 311.527 366.968 l 311.527 363.608 l 312.007 363.608 l 312.007 361.448 l 312.727 361.448 l 312.727 359.768 l 313.207 359.768 l 313.207 358.088 l 313.687 358.088 l 313.687 357.128 l 314.167 357.128 l 314.167 355.928 l 314.887 355.928 l 314.887 354.968 l 315.367 354.968 l 315.367 353.768 l 315.847 353.768 l 315.847 352.808 l 316.327 352.808 l 316.327 352.088 l 317.047 352.088 l 317.047 351.128 l 317.527 351.128 l 317.527 350.648 l 318.007 350.648 l 318.007 349.448 l 318.487 349.448 l 318.487 348.968 l 319.207 348.968 l 319.207 348.488 l 319.687 348.488 l 319.687 347.768 l 320.167 347.768 l 320.167 347.288 l 320.887 347.288 l 320.887 346.808 l 321.367 346.808 l 321.367 346.328 l 321.847 346.328 l 321.847 345.608 l 322.327 345.608 l 322.327 345.128 l 323.047 345.128 l 323.047 344.648 l 323.527 344.648 l 323.527 343.928 l 324.007 343.928 l 324.007 343.448 l 324.487 343.448 l 324.487 342.968 l 325.687 342.968 l 325.687 342.488 l 326.167 342.488 l 326.167 341.768 l 327.367 341.768 l 327.367 341.288 l 327.848 341.288 l 327.848 340.808 l 328.808 340.808 l 328.808 340.328 l 330.008 340.328 l 330.008 339.608 l 331.208 339.608 l 331.208 339.128 l 332.168 339.128 l 332.168 338.648 l 333.368 338.648 l 333.368 338.168 l 334.808 338.168 l 334.808 337.448 l 336.488 337.448 l 336.488 336.968 l 338.648 336.968 l 338.648 336.488 l 342.008 336.488 l 342.008 336.008 l 350.648 336.008 l 350.648 336.488 l 354.008 336.968 l 356.168 337.448 l 3 2000 57.848 338.168 l 359.288 338.648 l 360.488 339.128 l 361.448 339.608 l 362.648 340.328 l 363.608 340.808 l 364.808 341.288 l 365.288 341.768 l 366.488 342.488 l 366.968 342.968 l 368.168 343.448 l 368.648 343.928 l 369.128 344.648 l 369.608 345.128 l 370.328 345.608 l 370.808 346.328 l 371.289 346.808 l 371.769 347.288 l 372.489 347.768 l 372.969 348.488 l 373.449 348.968 l 373.929 349.448 l 374.649 350.648 l 375.129 351.128 l 375.609 352.088 l 376.329 352.808 l 376.809 353.768 l 377.289 354.968 l 377.769 355.928 l 378.489 357.128 l 378.969 358.088 l 379.449 359.768 l 379.929 361.448 l 380.649 363.608 l 381.129 366.968 l 381.609 375.609 l 381.129 375.609 l 381.129 378.729 l 380.649 378.729 l 380.649 380.889 l 379.929 380.889 l 379.929 382.569 l 379.449 382.569 l 379.449 384.249 l 378.969 384.249 l 378.969 385.449 l 378.489 385.449 l 378.489 386.409 l 377.769 386.409 l 377.769 387.609 l 377.289 387.609 l 377.289 388.569 l 376.809 388.569 l 376.809 389.769 l 376.329 389.769 l 376.329 390.249 l 375.609 390.249 l 375.609 391.209 l 375.129 391.209 l 375.129 391.929 l 374.649 391.929 l 374.649 392.889 l 373.929 392.889 l 373.929 393.369 l 373.449 393.369 l 373.449 394.089 l 372.969 394.089 l 372.969 394.569 l 372.489 394.569 l 372.489 395.049 l 371.769 395.049 l 371.769 395.769 l 371.289 395.769 l 371.289 396.249 l 370.808 396.249 l 370.808 396.729 l 370.328 396.729 l 370.328 397.209 l 369.608 397.209 l 369.608 397.929 l 369.128 397.929 l 369.128 398.409 l 368.648 398.409 l 368.648 398.889 l 368.168 398.889 l 368.168 399.369 l 366.968 399.369 l 366.968 400.089 l 366.488 400.089 l 366.488 400.569 l 365.288 400.569 l 365.288 401.049 l 364.808 401.049 l 364.808 401.529 l 363.608 401.529 l 363.608 402.249 l 362.648 402.249 l 362.648 402.729 l 361.448 402.729 l 361.448 403.209 l 360.488 403.209 l 360.488 403.689 l 359.288 403.689 l 359.288 404.409 l 357.848 404.409 l 357.848 404.889 l 356.168 404.889 l 356.168 405.369 l 354.008 405.369 l 354.008 406.089 l 350.648 406.089 l 350.648 406.569 l W n 0.9 G 346.328 404.889 m 364.876 404.889 379.929 389.836 379.929 371.289 c 379.929 352.741 364.876 337.688 346.328 337.688 c 327.78 337.688 312.727 352.741 312.727 371.289 c 312.727 389.836 327.78 404.889 346.328 404.889 c s 0.7 G 346.328 403.689 m 363.948 403.689 378.249 389.228 378.249 371.409 c 378.249 353.589 363.948 339.128 346.328 339.128 c 328.708 339.128 314.407 353.589 314.407 371.409 c 314.407 389.228 328.708 403.689 346.328 403.689 c s 0.75 G 346.328 402.009 m 363.153 402.009 376.809 388.193 376.809 371.169 c 376.809 354.144 363.153 340.328 346.328 340.328 c 329.503 340.328 315.847 354.144 315.847 371.169 c 315.847 388.193 329.503 402.009 346.328 402.009 c s 0 w 0.75 g 346.328 403.689 m 364.081 403.689 378.489 389.12 378.489 371.169 c 378.489 353.217 364.081 338.648 346.328 338.648 c 328.575 338.648 314.167 353.217 314.167 371.169 c 314.167 389.12 328.575 403.689 346.328 403.689 c f Q 0 w BT 2.265 0 0 2.264 313.976 367.688 Tm (ArmoredCar)Tj ET 0.5 w 313.976 366.932 m 378.933 366.932 l S 3.36 w q 450.25 406.569 m 441.37 406.569 l 438.25 406.089 l 436.09 405.369 l 434.41 404.889 l 432.73 404.409 l 431.77 403.689 l 430.57 403.209 l 429.37 402.729 l 428.41 402.249 l 427.21 401.529 l 426.73 401.049 l 425.77 400.569 l 425.05 400.089 l 424.09 399.369 l 423.61 398.889 l 422.89 398.409 l 422.41 397.929 l 421.93 397.209 l 421.21 396.729 l 420.73 396.249 l 420.25 395.769 l 419.77 395.049 l 419.05 394.569 l 418.57 394.089 l 418.09 393.369 l 417.61 392.889 l 416.89 391.929 l 416.41 391.209 l 415.93 390.249 l 415.45 389.769 l 414.729 388.569 l 414.249 387.609 l 413.769 386.409 l 413.289 385.449 l 412.569 384.249 l 412.089 382.569 l 411.609 380.889 l 410.889 378.729 l 410.409 375.609 l 410.409 366.968 l 410.889 366.968 l 410.889 363.608 l 411.609 363.608 l 411.609 361.448 l 412.089 361.448 l 412.089 359.768 l 412.569 359.768 l 412.569 358.088 l 413.289 358.088 l 413.289 357.128 l 413.769 357.128 l 413.769 355.928 l 414.249 355.928 l 414.249 354.968 l 414.729 354.968 l 414.729 353.768 l 415.45 353.768 l 415.45 352.808 l 415.93 352.808 l 415.93 352.088 l 416.41 352.088 l 416.41 351.128 l 416.89 351.128 l 416.89 350.648 l 417.61 350.648 l 417.61 349.448 l 418.09 349.448 l 418.09 348.968 l 418.57 348.968 l 418.57 348.488 l 419.05 348.488 l 419.05 347.768 l 419.77 347.768 l 419.77 347.288 l 420.25 347.288 l 420.25 346.808 l 420.73 346.808 l 420.73 346.328 l 421.21 346.328 l 421.21 345.608 l 421.93 345.608 l 421.93 345.128 l 422.41 345.128 l 422.41 344.648 l 422.89 344.648 l 422.89 343.928 l 423.61 343.928 l 423.61 343.448 l 424.09 343.448 l 424.09 342.968 l 425.05 342.968 l 425.05 342.488 l 425.77 342.488 l 425.77 341.768 l 426.73 341.768 l 426.73 341.288 l 427.21 341.288 l 427.21 340.808 l 428.41 340.808 l 428.41 340.328 l 429.37 340.328 l 429.37 339.608 l 430.57 339.608 l 430.57 339.128 l 431.77 339.128 l 431.77 338.648 l 432.73 338.648 l 432.73 338.168 l 434.41 338.168 l 434.41 337.448 l 436.09 337.448 l 436.09 336.968 l 438.25 336.968 l 438.25 336.488 l 441.37 336.488 l 441.37 336.008 l 450.25 336.008 l 450.25 336.488 l 453.37 336.968 l 455.53 337.448 l 457.21 338.168 l 458.891 338.648 l 459.851 339.128 l 461.051 339.608 l 462.011 340.328 l 463.211 340.808 l 464.171 341.288 l 464.891 341.768 l 465.851 342.488 l 466.331 342.968 l 467.531 343.448 l 468.011 343.928 l 468.731 344.648 l 469.211 345.128 l 469.691 345.608 l 470.171 346.328 l 470.891 346.808 l 471.371 347.288 l 471.851 347.768 l 472.331 348.488 l 473.051 348.968 l 473.531 349.448 l 474.011 350.648 l 474.491 351.128 l 475.211 352.088 l 475.691 352.808 l 476.171 353.768 l 476.651 354.968 l 477.371 355.928 l 477.851 357.128 l 478.331 358.088 l 479.051 359.768 l 479.531 361.448 l 480.011 363.608 l 480.491 366.968 l 481.211 375.609 l 480.491 375.609 l 480.491 378.729 l 480.011 378.729 l 480.011 380.889 l 479.531 380.889 l 479.531 382.569 l 479.051 382.569 l 479.051 384.249 l 478.331 384.249 l 478.331 385.449 l 477.851 385.449 l 477.851 386.409 l 477.371 386.409 l 477.371 387.609 l 476.651 387.609 l 476.651 388.569 l 476.171 388.569 l 476.171 389.769 l 475.691 389.769 l 475.691 390.249 l 475.211 390.249 l 475.211 391.209 l 474.491 391.209 l 474.491 391.929 l 474.011 391.929 l 474.011 392.889 l 473.531 392.889 l 473.531 393.369 l 473.051 393.369 l 473.051 394.089 l 472.331 394.089 l 472.331 394.569 l 471.851 394.569 l 471.851 395.049 l 471.371 395.049 l 471.371 395.769 l 470.891 395.769 l 470.891 396.249 l 470.171 396.249 l 470.171 396.729 l 469.691 396.729 l 469.691 397.209 l 469.211 397.209 l 469.211 397.929 l 468.731 397.929 l 468.731 398.409 l 468.011 398.409 l 468.011 398.889 l 467.531 398.889 l 467.531 399.369 l 466.331 399.369 l 466.331 400.089 l 465.851 400.089 l 465.851 400.569 l 464.891 400.569 l 464.891 401.049 l 464.171 401.049 l 464.171 401.529 l 463.211 401.529 l 463.211 402.249 l 462.011 402.249 l 462.011 402.729 l 461.051 402.729 l 461.051 403.209 l 459.851 403.209 l 459.851 403.689 l 458.891 403.689 l 458.891 404.409 l 457.21 404.409 l 457.21 404.889 l 455.53 404.889 l 455.53 405.369 l 453.37 405.369 l 453.37 406.089 l 450.25 406.089 l 450.25 406.569 l W n 0.9 G 445.81 404.889 m 464.424 404.889 479.531 389.836 479.531 371.289 c 479.531 352.741 464.424 337.688 445.81 337.688 c 427.196 337.688 412.089 352.741 412.089 371.289 c 412.089 389.836 427.196 404.889 445.81 404.889 c s 0.7 G 445.81 403.689 m 463.497 403.689 477.851 389.228 477.851 371.409 c 477.851 353.589 463.497 339.128 445.81 339.128 c 428.124 339.128 413.769 353.589 413.769 371.409 c 413.769 389.228 428.124 403.689 445.81 403.689 c s 0.75 G 445.81 402.009 m 462.569 402.009 476.171 388.193 476.171 371.169 c 476.171 354.144 462.569 340.328 445.81 340.328 c 429.051 340.328 415.45 354.144 415.45 371.169 c 415.45 388.193 429.051 402.009 445.81 2000 402.009 c s 0 w 0.75 g 445.81 403.689 m 463.497 403.689 477.851 389.12 477.851 371.169 c 477.851 353.217 463.497 338.648 445.81 338.648 c 428.124 338.648 413.769 353.217 413.769 371.169 c 413.769 389.12 428.124 403.689 445.81 403.689 c f Q 0 w BT /F3 6.48 Tf 2.265 0 0 2.264 433.557 366.728 Tm (Van)Tj ET 0.5 w 433.557 365.756 m 460.037 365.756 l S 0.9 w 2 j 147.003 405.489 m 259.326 466.691 l S 0 j 0.36 w 2 j 264.486 470.411 m 258.006 462.251 l 258.486 467.051 l 254.166 469.211 l 264.486 470.411 l b* 0 j 0.9 w 2 j 246.846 405.489 m 275.166 451.09 l S 0 j 0.36 w 2 j 278.646 457.45 m 276.486 447.13 l 275.286 451.93 l 270.486 450.73 l 278.646 457.45 l b* 0 j 0.9 w 2 j 346.448 405.489 m 317.647 450.37 l S 0 j 0.36 w 2 j 313.927 456.25 m 322.567 450.25 l 317.287 450.73 l 316.087 445.93 l 313.927 456.25 l b* 0 j 0.9 w 2 j 446.29 405.489 m 333.968 466.211 l S 0 j 0.36 w 2 j 327.608 469.931 m 337.928 468.731 l 333.608 466.571 l 334.568 461.771 l 327.608 469.931 l b* 0 j 2.16 w q 300.727 522.732 m 291.847 522.732 l 288.727 522.252 l 286.567 521.772 l 284.887 521.052 l 283.206 520.572 l 282.246 520.092 l 281.046 519.612 l 280.086 518.892 l 278.886 518.412 l 277.926 517.932 l 277.206 517.452 l 276.246 516.732 l 275.766 516.252 l 274.566 515.772 l 274.086 515.292 l 273.366 514.572 l 272.886 514.092 l 272.406 513.612 l 271.926 513.132 l 271.206 512.412 l 270.726 511.932 l 270.246 511.452 l 269.766 510.732 l 269.046 510.252 l 268.566 509.772 l 268.086 509.292 l 267.606 508.092 l 266.886 507.612 l 266.406 506.412 l 265.926 505.932 l 265.446 504.972 l 264.726 503.772 l 264.246 502.812 l 263.766 501.611 l 263.046 500.411 l 262.566 498.971 l 262.086 497.291 l 261.606 495.131 l 260.886 491.771 l 260.886 483.131 l 261.606 483.131 l 261.606 479.771 l 262.086 479.771 l 262.086 477.611 l 262.566 477.611 l 262.566 476.171 l 263.046 476.171 l 263.046 474.491 l 263.766 474.491 l 263.766 473.291 l 264.246 473.291 l 264.246 472.331 l 264.726 472.331 l 264.726 471.131 l 265.446 471.131 l 265.446 470.171 l 265.926 470.171 l 265.926 468.971 l 266.406 468.971 l 266.406 468.491 l 266.886 468.491 l 266.886 467.291 l 267.606 467.291 l 267.606 466.811 l 268.086 466.811 l 268.086 465.851 l 268.566 465.851 l 268.566 465.131 l 269.046 465.131 l 269.046 464.651 l 269.766 464.651 l 269.766 464.171 l 270.246 464.171 l 270.246 463.691 l 270.726 463.691 l 270.726 462.971 l 271.206 462.971 l 271.206 462.491 l 271.926 462.491 l 271.926 462.011 l 272.406 462.011 l 272.406 461.291 l 272.886 461.291 l 272.886 460.811 l 273.366 460.811 l 273.366 460.331 l 274.086 460.331 l 274.086 459.851 l 274.566 459.851 l 274.566 459.131 l 275.766 459.131 l 275.766 458.651 l 276.246 458.651 l 276.246 458.17 l 277.206 458.17 l 277.206 457.69 l 277.926 457.69 l 277.926 456.97 l 278.886 456.97 l 278.886 456.49 l 280.086 456.49 l 280.086 456.01 l 281.046 456.01 l 281.046 455.53 l 282.246 455.53 l 282.246 454.81 l 283.206 454.81 l 283.206 454.33 l 284.887 454.33 l 284.887 453.85 l 286.567 453.85 l 286.567 453.37 l 288.727 453.37 l 288.727 452.65 l 291.847 452.65 l 291.847 452.17 l 300.727 452.17 l 300.727 452.65 l 303.847 453.37 l 306.007 453.85 l 307.687 454.33 l 309.367 454.81 l 310.327 455.53 l 311.527 456.01 l 312.727 456.49 l 313.687 456.97 l 314.887 457.69 l 315.367 458.17 l 316.327 458.651 l 317.047 459.131 l 318.007 459.851 l 318.487 460.331 l 319.207 460.811 l 319.687 461.291 l 320.167 462.011 l 320.887 462.491 l 321.367 462.971 l 321.847 463.691 l 322.327 464.171 l 323.047 464.651 l 323.527 465.131 l 324.007 465.851 l 324.487 466.811 l 325.207 467.291 l 325.687 468.491 l 326.167 468.971 l 326.647 470.171 l 327.367 471.131 l 327.848 472.331 l 328.328 473.291 l 328.808 474.491 l 329.528 476.171 l 330.008 477.611 l 330.488 479.771 l 331.208 483.131 l 331.688 491.771 l 331.208 491.771 l 331.208 495.131 l 330.488 495.131 l 330.488 497.291 l 330.008 497.291 l 330.008 498.971 l 329.528 498.971 l 329.528 500.411 l 328.808 500.411 l 328.808 501.611 l 328.328 501.611 l 328.328 502.812 l 327.848 502.812 l 327.848 503.772 l 327.367 503.772 l 327.367 504.972 l 326.647 504.972 l 326.647 505.932 l 326.167 505.932 l 326.167 506.412 l 325.687 506.412 l 325.687 507.612 l 325.207 507.612 l 325.207 508.092 l 324.487 508.092 l 324.487 509.292 l 324.007 509.292 l 324.007 509.772 l 323.527 509.772 l 323.527 510.252 l 323.047 510.252 l 323.047 510.732 l 322.327 510.732 l 322.327 511.452 l 321.847 511.452 l 321.847 511.932 l 321.367 511.932 l 321.367 512.412 l 320.887 512.412 l 320.887 513.132 l 320.167 513.132 l 320.167 513.612 l 319.687 513.612 l 319.687 514.092 l 319.207 514.092 l 319.207 514.572 l 318.487 514.572 l 318.487 515.292 l 318.007 515.292 l 318.007 515.772 l 317.047 515.772 l 317.047 516.252 l 316.327 516.252 l 316.327 516.732 l 315.367 516.732 l 315.367 517.452 l 314.887 517.452 l 314.887 517.932 l 313.687 517.932 l 313.687 518.412 l 312.727 518.412 l 312.727 518.892 l 311.527 518.892 l 311.527 519.612 l 310.327 519.612 l 310.327 520.092 l 309.367 520.092 l 309.367 520.572 l 307.687 520.572 l 307.687 521.052 l 306.007 521.052 l 306.007 521.772 l 303.847 521.772 l 303.847 522.252 l 300.727 522.252 l 300.727 522.732 l W n 0.65 g 225.125 488.651 m 295.687 559.213 l 297.847 559.213 l 297.847 557.053 l 227.285 486.491 l 225.125 486.491 l f 0.656 g 226.805 486.971 m 297.367 557.533 l 299.527 557.533 l 299.527 555.373 l 228.965 484.811 l 226.805 484.811 l f 0.663 g 227.765 485.771 m 298.567 556.573 l 300.727 556.573 l 300.727 554.413 l 229.925 483.611 l 227.765 483.611 l f 0.669 g 228.965 484.811 m 299.527 555.373 l 301.687 555.373 l 301.687 553.213 l 231.125 482.651 l 228.965 482.651 l f 0.676 g 229.925 483.611 m 300.727 554.413 l 302.887 554.413 l 302.887 552.253 l 232.085 481.451 l 229.925 481.451 l f 0.682 g 231.125 482.651 m 301.687 553.213 l 303.847 553.213 l 303.847 551.053 l 233.285 480.491 l 231.125 480.491 l f 0.689 g 232.085 481.451 m 302.887 552.253 l 305.047 552.253 l 305.047 550.093 l 234.245 479.291 l 232.085 479.291 l f 0.695 g 233.285 480.491 m 303.847 551.053 l 306.007 551.053 l 306.007 548.893 l 235.445 478.331 l 233.285 478.331 l f 0.702 g 234.245 479.291 m 305.047 549.853 l 307.207 549.853 l 307.207 547.693 l 236.405 477.131 l 234.245 477.131 l f 0.708 g 235.445 478.331 m 306.007 548.893 l 308.167 548.893 l 308.167 546.733 l 237.605 476.171 l 235.445 476.171 l f 0.715 g 236.405 477.131 m 307.207 547.693 l 309.367 547.693 l 309.367 545.532 l 238.565 474.971 l 236.405 474.971 l f 0.721 g 237.605 476.171 m 308.167 546.733 l 310.327 546.733 l 310.327 544.572 l 239.765 474.011 l 237.605 474.011 l f 0.727 g 238.805 474.971 m 309.367 545.532 l 311.527 545.532 l 311.527 543.372 l 240.966 472.811 l 238.805 472.811 l f 0.734 g 239.765 474.011 m 310.327 544.572 l 312.487 544.572 l 312.487 542.412 l 241.926 471.851 l 239.765 471.851 l f 0.74 g 240.966 472.811 m 311.527 543.372 l 313.687 543.372 l 313.687 541.212 l 243.126 470.651 l 240.966 470.651 l f 0.747 g 241.926 471.611 m 312.727 542.412 l 314.887 542.412 l 314.887 540.252 l 244.086 469.451 l 241.926 469.451 l f 0.753 g 243.126 470.651 m 313.687 541.212 l 315.847 541.212 l 315.847 539.052 l 245.286 468.491 l 243.126 468.491 l f 0.76 g 244.086 468.971 m 314.887 539.532 l 317.047 539.532 l 317.047 537.372 l 246.246 466.811 l 244.086 466.811 l f 0.766 g 245.286 468.011 m 315.847 538.572 l 318.007 538.572 l 318.007 536.412 l 247.446 465.851 l 245.286 465.851 l f 0.773 g 246.246 466.811 m 317.047 537.372 l 319.207 537.372 l 319.207 535.212 l 248.406 464.651 l 246.246 464.651 l f 0.779 g 247.446 465.851 m 318.007 536.412 l 320.167 536.412 l 320.167 534.252 l 249.606 463.691 l 247.446 463.691 l f 0.785 g 248.406 464.651 m 319.207 535.212 l 321.367 535.212 l 321.367 533.052 l 250.566 2000 462.491 l 248.406 462.491 l f 0.792 g 249.606 463.691 m 320.167 534.252 l 322.327 534.252 l 322.327 532.092 l 251.766 461.531 l 249.606 461.531 l f 0.798 g 250.566 462.491 m 321.367 533.052 l 323.527 533.052 l 323.527 530.892 l 252.726 460.331 l 250.566 460.331 l f 0.805 g 251.766 461.291 m 322.327 532.092 l 324.487 532.092 l 324.487 529.932 l 253.926 459.131 l 251.766 459.131 l f 0.811 g 252.726 460.331 m 323.527 530.892 l 325.687 530.892 l 325.687 528.732 l 254.886 458.17 l 252.726 458.17 l f 0.818 g 253.926 459.131 m 324.487 529.932 l 326.647 529.932 l 326.647 527.772 l 256.086 456.97 l 253.926 456.97 l f 0.824 g 254.886 458.17 m 325.687 528.732 l 327.848 528.732 l 327.848 526.572 l 257.046 456.01 l 254.886 456.01 l f 0.831 g 256.086 456.97 m 326.647 527.772 l 328.808 527.772 l 328.808 525.612 l 258.246 454.81 l 256.086 454.81 l f 0.837 g 257.286 456.01 m 327.848 526.572 l 330.008 526.572 l 330.008 524.412 l 259.446 453.85 l 257.286 453.85 l f 0.844 g 258.246 454.81 m 328.808 525.612 l 330.968 525.612 l 330.968 523.452 l 260.406 452.65 l 258.246 452.65 l f 0.85 g 259.446 453.85 m 330.008 524.412 l 332.168 524.412 l 332.168 522.252 l 261.606 451.69 l 259.446 451.69 l f 260.406 452.17 m 331.208 522.732 l 333.368 522.732 l 333.368 520.572 l 262.566 450.01 l 260.406 450.01 l f 0.844 g 262.086 450.97 m 332.648 521.772 l 334.808 521.772 l 334.808 519.612 l 264.246 448.81 l 262.086 448.81 l f 0.837 g 263.046 450.01 m 333.848 520.572 l 336.008 520.572 l 336.008 518.412 l 265.206 447.85 l 263.046 447.85 l f 0.831 g 264.246 448.81 m 334.808 519.612 l 336.968 519.612 l 336.968 517.452 l 266.406 446.65 l 264.246 446.65 l f 0.824 g 265.446 447.85 m 336.008 518.412 l 338.168 518.412 l 338.168 516.252 l 267.606 445.69 l 265.446 445.69 l f 0.818 g 266.406 446.65 m 336.968 517.452 l 339.128 517.452 l 339.128 515.292 l 268.566 444.49 l 266.406 444.49 l f 0.811 g 267.606 445.69 m 338.168 516.252 l 340.328 516.252 l 340.328 514.092 l 269.766 443.53 l 267.606 443.53 l f 0.805 g 268.566 444.49 m 339.368 515.292 l 341.528 515.292 l 341.528 513.132 l 270.726 442.33 l 268.566 442.33 l f 0.798 g 269.766 443.53 m 340.328 514.092 l 342.488 514.092 l 342.488 511.932 l 271.926 441.37 l 269.766 441.37 l f 0.792 g 270.726 442.33 m 341.528 513.132 l 343.688 513.132 l 343.688 510.972 l 272.886 440.17 l 270.726 440.17 l f 0.785 g 271.926 441.37 m 342.488 511.932 l 344.648 511.932 l 344.648 509.772 l 274.086 439.21 l 271.926 439.21 l f 0.779 g 272.886 440.17 m 343.688 510.732 l 345.848 510.732 l 345.848 508.572 l 275.046 438.01 l 272.886 438.01 l f 0.773 g 274.086 439.21 m 344.648 509.772 l 346.808 509.772 l 346.808 507.612 l 276.246 437.05 l 274.086 437.05 l f 0.766 g 275.046 438.01 m 345.848 508.572 l 348.008 508.572 l 348.008 506.412 l 277.206 435.85 l 275.046 435.85 l f 0.76 g 276.246 437.05 m 346.808 507.612 l 348.968 507.612 l 348.968 505.452 l 278.406 434.89 l 276.246 434.89 l f 0.753 g 277.206 435.85 m 348.008 506.412 l 350.168 506.412 l 350.168 504.252 l 279.366 433.69 l 277.206 433.69 l f 0.747 g 278.406 434.17 m 348.968 504.972 l 351.128 504.972 l 351.128 502.812 l 280.566 432.01 l 278.406 432.01 l f 0.74 g 279.366 433.21 m 350.168 503.772 l 352.328 503.772 l 352.328 501.611 l 281.526 431.05 l 279.366 431.05 l f 0.734 g 280.566 432.01 m 351.128 502.812 l 353.288 502.812 l 353.288 500.651 l 282.726 429.85 l 280.566 429.85 l f 0.727 g 281.526 431.05 m 352.328 501.611 l 354.488 501.611 l 354.488 499.451 l 283.686 428.89 l 281.526 428.89 l f 0.721 g 282.726 429.85 m 353.288 500.411 l 355.448 500.411 l 355.448 498.251 l 284.887 427.69 l 282.726 427.69 l f 0.715 g 283.927 428.89 m 354.488 499.451 l 356.648 499.451 l 356.648 497.291 l 286.087 426.73 l 283.927 426.73 l f 0.708 g 284.887 427.69 m 355.448 498.251 l 357.608 498.251 l 357.608 496.091 l 287.047 425.53 l 284.887 425.53 l f 0.702 g 286.087 426.73 m 356.648 497.291 l 358.808 497.291 l 358.808 495.131 l 288.247 424.57 l 286.087 424.57 l f 0.695 g 287.047 425.53 m 357.848 496.091 l 360.008 496.091 l 360.008 493.931 l 289.207 423.37 l 287.047 423.37 l f 0.689 g 288.247 424.57 m 358.808 495.131 l 360.968 495.131 l 360.968 492.971 l 290.407 422.41 l 288.247 422.41 l f 0.682 g 289.207 423.37 m 360.008 493.931 l 362.168 493.931 l 362.168 491.771 l 291.367 421.21 l 289.207 421.21 l f 0.676 g 290.407 422.17 m 360.968 492.971 l 363.128 492.971 l 363.128 490.811 l 292.567 420.01 l 290.407 420.01 l f 0.669 g 291.367 421.21 m 362.168 491.771 l 364.328 491.771 l 364.328 489.611 l 293.527 419.05 l 291.367 419.05 l f 0.663 g 292.567 420.01 m 363.128 490.811 l 365.288 490.811 l 365.288 488.651 l 294.727 417.85 l 292.567 417.85 l f 0.656 g 293.527 419.05 m 364.328 489.611 l 366.488 489.611 l 366.488 487.451 l 295.687 416.89 l 293.527 416.89 l f 0.65 g 294.727 417.85 m 365.288 488.651 l 367.448 488.651 l 367.448 486.491 l 296.887 415.69 l 294.727 415.69 l f Q 0.48 w 0.55 G 296.287 522.492 m 315.696 522.492 331.448 506.794 331.448 487.451 c 331.448 468.109 315.696 452.41 296.287 452.41 c 276.878 452.41 261.126 468.109 261.126 487.451 c 261.126 506.794 276.878 522.492 296.287 522.492 c s 0.65 G 296.407 522.012 m 315.484 522.012 330.968 506.529 330.968 487.451 c 330.968 468.374 315.484 452.89 296.407 452.89 c 277.329 452.89 261.846 468.374 261.846 487.451 c 261.846 506.529 277.329 522.012 296.407 522.012 c s 0.9 G 296.287 521.532 m 315.033 521.532 330.248 506.318 330.248 487.571 c 330.248 468.825 315.033 453.61 296.287 453.61 c 277.54 453.61 262.326 468.825 262.326 487.571 c 262.326 506.318 277.54 521.532 296.287 521.532 c s 0.65 G 296.287 520.812 m 314.768 520.812 329.768 505.866 329.768 487.451 c 329.768 469.036 314.768 454.09 296.287 454.09 c 277.805 454.09 262.806 469.036 262.806 487.451 c 262.806 505.866 277.805 520.812 296.287 520.812 c s 0.55 G 296.287 520.812 m 314.768 520.812 329.768 505.866 329.768 487.451 c 329.768 469.036 314.768 454.09 296.287 454.09 c 277.805 454.09 262.806 469.036 262.806 487.451 c 262.806 505.866 277.805 520.812 296.287 520.812 c s 0 w BT 0 G 2.265 0 0 2.264 277.559 487.211 Tm (Truck)Tj ET 0.5 w 277.559 486.239 m 315.877 486.239 l S 0 w q 263.046 474.971 66.962 24.481 re W n BT /F3 3.36 Tf 2.265 0 0 2.264 281.363 476.891 Tm (register\(\))Tj ET Q 2.16 w q 151.683 406.569 m 143.043 406.569 l 139.683 406.089 l 137.523 405.369 l 136.083 404.889 l 134.403 404.409 l 133.203 403.689 l 132.243 403.209 l 131.043 402.729 l 130.083 402.249 l 128.883 401.529 l 128.403 401.049 l 127.203 400.569 l 126.723 400.089 l 125.523 399.369 l 125.043 398.889 l 124.563 398.409 l 124.083 397.929 l 123.363 397.209 l 122.883 396.729 l 122.403 396.249 l 121.923 395.769 l 121.203 395.049 l 120.723 394.569 l 120.243 394.089 l 119.763 393.369 l 119.043 392.889 l 118.563 391.929 l 118.083 391.209 l 117.603 390.249 l 116.883 389.769 l 116.403 388.569 l 115.923 387.609 l 115.203 386.409 l 114.723 385.449 l 114.243 384.249 l 113.763 382.569 l 113.043 380.889 l 112.563 378.729 l 112.083 375.609 l 112.083 366.968 l 112.563 366.968 l 112.563 363.608 l 113.043 363.608 l 113.043 361.448 l 113.763 361.448 l 113.763 359.768 l 114.243 359.768 l 114.243 358.088 l 114.723 358.088 l 114.723 357.128 l 115.203 357.128 l 115.203 355.928 l 115.923 355.928 l 115.923 354.968 l 116.403 354.968 l 116.403 353.768 l 116.883 353.768 l 116.883 352.808 l 117.603 352.808 l 117.603 352.088 l 118.083 352.088 l 118.083 351.128 l 118.563 351.128 l 118.563 350.648 l 119.043 350.648 l 119.043 349.448 l 119.763 349.448 l 119.763 348.968 l 120.243 348.968 l 120.243 348.488 l 120.723 348.488 l 120.723 347.768 l 121.203 347.768 l 121.203 347.288 l 121.923 347.288 l 121.923 346.808 l 122.403 346.808 l 122.403 346.328 l 122.883 346.328 l 122.883 345.608 l 123.363 345.608 l 123.363 345.128 l 124.083 345.128 2000 l 124.083 344.648 l 124.563 344.648 l 124.563 343.928 l 125.043 343.928 l 125.043 343.448 l 125.523 343.448 l 125.523 342.968 l 126.723 342.968 l 126.723 342.488 l 127.203 342.488 l 127.203 341.768 l 128.403 341.768 l 128.403 341.288 l 128.883 341.288 l 128.883 340.808 l 130.083 340.808 l 130.083 340.328 l 131.043 340.328 l 131.043 339.608 l 132.243 339.608 l 132.243 339.128 l 133.203 339.128 l 133.203 338.648 l 134.403 338.648 l 134.403 338.168 l 136.083 338.168 l 136.083 337.448 l 137.523 337.448 l 137.523 336.968 l 139.683 336.968 l 139.683 336.488 l 143.043 336.488 l 143.043 336.008 l 151.683 336.008 l 151.683 336.488 l 155.044 336.968 l 157.204 337.448 l 158.884 338.168 l 160.324 338.648 l 161.524 339.128 l 162.484 339.608 l 163.684 340.328 l 164.884 340.808 l 165.844 341.288 l 166.324 341.768 l 167.524 342.488 l 168.004 342.968 l 169.204 343.448 l 169.684 343.928 l 170.164 344.648 l 170.644 345.128 l 171.364 345.608 l 171.844 346.328 l 172.324 346.808 l 173.044 347.288 l 173.524 347.768 l 174.004 348.488 l 174.484 348.968 l 175.204 349.448 l 175.684 350.648 l 176.164 351.128 l 176.644 352.088 l 177.364 352.808 l 177.844 353.768 l 178.324 354.968 l 178.804 355.928 l 179.524 357.128 l 180.004 358.088 l 180.484 359.768 l 180.964 361.448 l 181.684 363.608 l 182.164 366.968 l 182.644 375.609 l 182.164 375.609 l 182.164 378.729 l 181.684 378.729 l 181.684 380.889 l 180.964 380.889 l 180.964 382.569 l 180.484 382.569 l 180.484 384.249 l 180.004 384.249 l 180.004 385.449 l 179.524 385.449 l 179.524 386.409 l 178.804 386.409 l 178.804 387.609 l 178.324 387.609 l 178.324 388.569 l 177.844 388.569 l 177.844 389.769 l 177.364 389.769 l 177.364 390.249 l 176.644 390.249 l 176.644 391.209 l 176.164 391.209 l 176.164 391.929 l 175.684 391.929 l 175.684 392.889 l 175.204 392.889 l 175.204 393.369 l 174.484 393.369 l 174.484 394.089 l 174.004 394.089 l 174.004 394.569 l 173.524 394.569 l 173.524 395.049 l 173.044 395.049 l 173.044 395.769 l 172.324 395.769 l 172.324 396.249 l 171.844 396.249 l 171.844 396.729 l 171.364 396.729 l 171.364 397.209 l 170.644 397.209 l 170.644 397.929 l 170.164 397.929 l 170.164 398.409 l 169.684 398.409 l 169.684 398.889 l 169.204 398.889 l 169.204 399.369 l 168.004 399.369 l 168.004 400.089 l 167.524 400.089 l 167.524 400.569 l 166.324 400.569 l 166.324 401.049 l 165.844 401.049 l 165.844 401.529 l 164.884 401.529 l 164.884 402.249 l 163.684 402.249 l 163.684 402.729 l 162.484 402.729 l 162.484 403.209 l 161.524 403.209 l 161.524 403.689 l 160.324 403.689 l 160.324 404.409 l 158.884 404.409 l 158.884 404.889 l 157.204 404.889 l 157.204 405.369 l 155.044 405.369 l 155.044 406.089 l 151.683 406.089 l 151.683 406.569 l W n 0.65 g 76.082 372.249 m 146.883 442.81 l 149.043 442.81 l 149.043 440.65 l 78.242 370.088 l 76.082 370.088 l f 0.656 g 77.762 370.568 m 148.563 441.37 l 150.723 441.37 l 150.723 439.21 l 79.922 368.408 l 77.762 368.408 l f 0.663 g 78.962 369.608 m 149.523 440.17 l 151.683 440.17 l 151.683 438.01 l 81.122 367.448 l 78.962 367.448 l f 0.669 g 79.922 368.408 m 150.723 439.21 l 152.884 439.21 l 152.884 437.05 l 82.082 366.248 l 79.922 366.248 l f 0.676 g 81.122 367.448 m 151.683 438.01 l 153.844 438.01 l 153.844 435.85 l 83.282 365.288 l 81.122 365.288 l f 0.682 g 82.082 366.248 m 152.884 437.05 l 155.044 437.05 l 155.044 434.89 l 84.242 364.088 l 82.082 364.088 l f 0.689 g 83.282 365.288 m 153.844 435.85 l 156.004 435.85 l 156.004 433.69 l 85.442 363.128 l 83.282 363.128 l f 0.695 g 84.242 364.088 m 155.044 434.89 l 157.204 434.89 l 157.204 432.73 l 86.402 361.928 l 84.242 361.928 l f 0.702 g 85.442 363.128 m 156.004 433.69 l 158.164 433.69 l 158.164 431.53 l 87.602 360.968 l 85.442 360.968 l f 0.708 g 86.402 361.928 m 157.204 432.49 l 159.364 432.49 l 159.364 430.33 l 88.562 359.768 l 86.402 359.768 l f 0.715 g 87.602 360.968 m 158.164 431.53 l 160.324 431.53 l 160.324 429.37 l 89.762 358.808 l 87.602 358.808 l f 0.721 g 88.562 359.768 m 159.364 430.33 l 161.524 430.33 l 161.524 428.17 l 90.722 357.608 l 88.562 357.608 l f 0.727 g 89.762 358.808 m 160.324 429.37 l 162.484 429.37 l 162.484 427.21 l 91.922 356.648 l 89.762 356.648 l f 0.734 g 90.962 357.608 m 161.524 428.17 l 163.684 428.17 l 163.684 426.01 l 93.122 355.448 l 90.962 355.448 l f 0.74 g 91.922 356.648 m 162.484 427.21 l 164.644 427.21 l 164.644 425.05 l 94.082 354.488 l 91.922 354.488 l f 0.747 g 93.122 355.448 m 163.684 426.01 l 165.844 426.01 l 165.844 423.85 l 95.282 353.288 l 93.122 353.288 l f 0.753 g 94.082 354.248 m 164.884 425.05 l 167.044 425.05 l 167.044 422.89 l 96.242 352.088 l 94.082 352.088 l f 0.76 g 95.282 352.808 m 165.844 423.37 l 168.004 423.37 l 168.004 421.21 l 97.442 350.648 l 95.282 350.648 l f 0.766 g 96.242 351.608 m 167.044 422.17 l 169.204 422.17 l 169.204 420.01 l 98.402 349.448 l 96.242 349.448 l f 0.773 g 97.442 350.648 m 168.004 421.21 l 170.164 421.21 l 170.164 419.05 l 99.602 348.488 l 97.442 348.488 l f 0.779 g 98.402 349.448 m 169.204 420.01 l 171.364 420.01 l 171.364 417.85 l 100.562 347.288 l 98.402 347.288 l f 0.785 g 99.602 348.488 m 170.164 419.05 l 172.324 419.05 l 172.324 416.89 l 101.762 346.328 l 99.602 346.328 l f 0.792 g 100.562 347.288 m 171.364 417.85 l 173.524 417.85 l 173.524 415.69 l 102.722 345.128 l 100.562 345.128 l f 0.798 g 101.762 346.328 m 172.324 416.89 l 174.484 416.89 l 174.484 414.729 l 103.922 344.168 l 101.762 344.168 l f 0.805 g 102.722 345.128 m 173.524 415.69 l 175.684 415.69 l 175.684 413.529 l 104.882 342.968 l 102.722 342.968 l f 0.811 g 103.922 343.928 m 174.484 414.729 l 176.644 414.729 l 176.644 412.569 l 106.082 341.768 l 103.922 341.768 l f 0.818 g 104.882 342.968 m 175.684 413.529 l 177.844 413.529 l 177.844 411.369 l 107.042 340.808 l 104.882 340.808 l f 0.824 g 106.082 341.768 m 176.644 412.569 l 178.804 412.569 l 178.804 410.409 l 108.242 339.608 l 106.082 339.608 l f 0.831 g 107.042 340.808 m 177.844 411.369 l 180.004 411.369 l 180.004 409.209 l 109.203 338.648 l 107.042 338.648 l f 0.837 g 108.242 339.608 m 178.804 410.409 l 180.964 410.409 l 180.964 408.249 l 110.403 337.448 l 108.242 337.448 l f 0.844 g 109.443 338.648 m 180.004 409.209 l 182.164 409.209 l 182.164 407.049 l 111.603 336.488 l 109.443 336.488 l f 0.85 g 110.403 337.448 m 180.964 408.249 l 183.124 408.249 l 183.124 406.089 l 112.563 335.288 l 110.403 335.288 l f 111.603 336.008 m 182.164 406.569 l 184.324 406.569 l 184.324 404.409 l 113.763 333.848 l 111.603 333.848 l f 0.844 g 113.043 334.808 m 183.844 405.369 l 186.004 405.369 l 186.004 403.209 l 115.203 332.648 l 113.043 332.648 l f 0.837 g 114.243 333.608 m 184.804 404.409 l 186.964 404.409 l 186.964 402.249 l 116.403 331.448 l 114.243 331.448 l f 0.831 g 115.203 332.648 m 186.004 403.209 l 188.164 403.209 l 188.164 401.049 l 117.363 330.488 l 115.203 330.488 l f 0.824 g 116.403 331.448 m 186.964 402.249 l 189.124 402.249 l 189.124 400.089 l 118.563 329.288 l 116.403 329.288 l f 0.818 g 117.603 330.488 m 188.164 401.049 l 190.324 401.049 l 190.324 398.889 l 119.763 328.328 l 117.603 328.328 l f 0.811 g 118.563 329.288 m 189.124 400.089 l 191.284 400.089 l 191.284 397.929 l 120.723 327.127 l 118.563 327.127 l f 0.805 g 119.763 328.328 m 190.324 398.889 l 192.484 398.889 l 192.484 396.729 l 121.923 326.167 l 119.763 326.167 l f 0.798 g 120.723 327.127 m 191.524 397.929 l 193.684 397.929 l 193.684 395.769 l 122.883 324.967 l 120.723 324.967 l f 0.792 g 121.923 326.167 m 192.484 396.729 l 194.644 396.729 l 194.644 394.569 l 124.083 324.007 l 121.923 324.007 l f 0.785 g 122.883 324.967 m 193.684 395.769 l 195.844 395.769 l 195.844 393.609 l 125.043 322.807 l 122.883 322.807 l f 0.779 g 124.083 324.007 m 194.644 394.569 l 196.805 394.569 l 196.805 392.409 l 2000 126.243 321.847 l 124.083 321.847 l f 0.773 g 125.043 322.807 m 195.844 393.369 l 198.005 393.369 l 198.005 391.209 l 127.203 320.647 l 125.043 320.647 l f 0.766 g 126.243 321.847 m 196.805 392.409 l 198.965 392.409 l 198.965 390.249 l 128.403 319.687 l 126.243 319.687 l f 0.76 g 127.203 320.647 m 198.005 391.209 l 200.165 391.209 l 200.165 389.049 l 129.363 318.487 l 127.203 318.487 l f 0.753 g 128.403 319.687 m 198.965 390.249 l 201.125 390.249 l 201.125 388.089 l 130.563 317.527 l 128.403 317.527 l f 0.747 g 129.363 318.007 m 200.165 388.569 l 202.325 388.569 l 202.325 386.409 l 131.523 315.847 l 129.363 315.847 l f 0.74 g 130.563 316.807 m 201.125 387.609 l 203.285 387.609 l 203.285 385.449 l 132.723 314.647 l 130.563 314.647 l f 0.734 g 131.523 315.847 m 202.325 386.409 l 204.485 386.409 l 204.485 384.249 l 133.683 313.687 l 131.523 313.687 l f 0.727 g 132.723 314.647 m 203.285 385.449 l 205.445 385.449 l 205.445 383.289 l 134.883 312.487 l 132.723 312.487 l f 0.721 g 133.683 313.687 m 204.485 384.249 l 206.645 384.249 l 206.645 382.089 l 135.843 311.527 l 133.683 311.527 l f 0.715 g 134.883 312.487 m 205.445 383.049 l 207.605 383.049 l 207.605 380.889 l 137.043 310.327 l 134.883 310.327 l f 0.708 g 136.083 311.527 m 206.645 382.089 l 208.805 382.089 l 208.805 379.929 l 138.243 309.367 l 136.083 309.367 l f 0.702 g 137.043 310.327 m 207.605 380.889 l 209.765 380.889 l 209.765 378.729 l 139.203 308.167 l 137.043 308.167 l f 0.695 g 138.243 309.367 m 208.805 379.929 l 210.965 379.929 l 210.965 377.769 l 140.403 307.207 l 138.243 307.207 l f 0.689 g 139.203 308.167 m 210.005 378.729 l 212.165 378.729 l 212.165 376.569 l 141.363 306.007 l 139.203 306.007 l f 0.682 g 140.403 307.207 m 210.965 377.769 l 213.125 377.769 l 213.125 375.609 l 142.563 305.047 l 140.403 305.047 l f 0.676 g 141.363 306.007 m 212.165 376.569 l 214.325 376.569 l 214.325 374.409 l 143.523 303.847 l 141.363 303.847 l f 0.669 g 142.563 304.807 m 213.125 375.609 l 215.285 375.609 l 215.285 373.449 l 144.723 302.647 l 142.563 302.647 l f 0.663 g 143.523 303.847 m 214.325 374.409 l 216.485 374.409 l 216.485 372.249 l 145.683 301.687 l 143.523 301.687 l f 0.656 g 144.723 302.647 m 215.285 373.449 l 217.445 373.449 l 217.445 371.289 l 146.883 300.487 l 144.723 300.487 l f 0.65 g 145.683 301.687 m 216.485 372.249 l 218.645 372.249 l 218.645 370.088 l 147.843 299.527 l 145.683 299.527 l f Q 0.48 w 0.55 G 147.363 406.329 m 166.706 406.329 182.404 390.631 182.404 371.289 c 182.404 351.946 166.706 336.248 147.363 336.248 c 128.021 336.248 112.323 351.946 112.323 371.289 c 112.323 390.631 128.021 406.329 147.363 406.329 c s 0.65 G 147.363 405.849 m 166.441 405.849 181.924 390.366 181.924 371.289 c 181.924 352.211 166.441 336.728 147.363 336.728 c 128.286 336.728 112.803 352.211 112.803 371.289 c 112.803 390.366 128.286 405.849 147.363 405.849 c s 0.9 G 147.363 405.129 m 166.176 405.129 181.444 389.915 181.444 371.169 c 181.444 352.422 166.176 337.208 147.363 337.208 c 128.551 337.208 113.283 352.422 113.283 371.169 c 113.283 389.915 128.551 405.129 147.363 405.129 c s 0.65 G 147.363 404.649 m 165.779 404.649 180.724 389.65 180.724 371.169 c 180.724 352.687 165.779 337.688 147.363 337.688 c 128.948 337.688 114.003 352.687 114.003 371.169 c 114.003 389.65 128.948 404.649 147.363 404.649 c s 0.55 G 147.363 404.649 m 165.779 404.649 180.724 389.65 180.724 371.169 c 180.724 352.687 165.779 337.688 147.363 337.688 c 128.948 337.688 114.003 352.687 114.003 371.169 c 114.003 389.65 128.948 404.649 147.363 404.649 c s 0 w BT /F3 4.8 Tf 0 G 2.265 0 0 2.264 117.755 372.729 Tm (DumpTruck)Tj ET 0.5 w 117.755 372.009 m 177.24 372.009 l S 0 w BT /F2 3.36 Tf 2.265 0 0 2.264 133.518 362.888 Tm (register\(\))Tj ET 2.16 w q 250.566 405.369 m 241.926 405.369 l 238.805 404.889 l 236.405 404.409 l 234.965 403.689 l 233.285 403.209 l 232.085 402.729 l 231.125 402.249 l 229.925 401.529 l 228.965 401.049 l 227.765 400.569 l 227.285 400.089 l 226.085 399.369 l 225.605 398.889 l 224.645 398.409 l 223.925 397.929 l 223.445 397.209 l 222.965 396.729 l 222.485 396.249 l 221.765 395.769 l 221.285 395.049 l 220.805 394.569 l 220.325 394.089 l 219.605 393.369 l 219.125 392.889 l 218.645 392.409 l 217.925 391.929 l 217.445 390.729 l 216.965 390.249 l 216.485 389.049 l 215.765 388.569 l 215.285 387.609 l 214.805 386.409 l 214.325 385.449 l 213.605 384.249 l 213.125 383.049 l 212.645 381.609 l 212.165 379.929 l 211.445 377.769 l 210.965 374.409 l 210.965 365.768 l 211.445 365.768 l 211.445 362.408 l 212.165 362.408 l 212.165 360.248 l 212.645 360.248 l 212.645 358.808 l 213.125 358.808 l 213.125 357.128 l 213.605 357.128 l 213.605 355.928 l 214.325 355.928 l 214.325 354.968 l 214.805 354.968 l 214.805 353.768 l 215.285 353.768 l 215.285 352.808 l 215.765 352.808 l 215.765 351.608 l 216.485 351.608 l 216.485 351.128 l 216.965 351.128 l 216.965 349.928 l 217.445 349.928 l 217.445 349.448 l 217.925 349.448 l 217.925 348.488 l 218.645 348.488 l 218.645 347.768 l 219.125 347.768 l 219.125 347.288 l 219.605 347.288 l 219.605 346.808 l 220.325 346.808 l 220.325 346.328 l 220.805 346.328 l 220.805 345.608 l 221.285 345.608 l 221.285 345.128 l 221.765 345.128 l 221.765 344.648 l 222.485 344.648 l 222.485 343.928 l 222.965 343.928 l 222.965 343.448 l 223.445 343.448 l 223.445 342.968 l 223.925 342.968 l 223.925 342.488 l 224.645 342.488 l 224.645 341.768 l 225.605 341.768 l 225.605 341.288 l 226.085 341.288 l 226.085 340.808 l 227.285 340.808 l 227.285 340.328 l 227.765 340.328 l 227.765 339.608 l 228.965 339.608 l 228.965 339.128 l 229.925 339.128 l 229.925 338.648 l 231.125 338.648 l 231.125 338.168 l 232.085 338.168 l 232.085 337.448 l 233.285 337.448 l 233.285 336.968 l 234.965 336.968 l 234.965 336.488 l 236.405 336.488 l 236.405 336.008 l 238.805 336.008 l 238.805 335.288 l 241.926 335.288 l 241.926 334.808 l 250.566 334.808 l 250.566 335.288 l 253.926 336.008 l 256.086 336.488 l 257.766 336.968 l 259.446 337.448 l 260.406 338.168 l 261.606 338.648 l 262.566 339.128 l 263.766 339.608 l 264.726 340.328 l 265.446 340.808 l 266.406 341.288 l 266.886 341.768 l 268.086 342.488 l 268.566 342.968 l 269.046 343.448 l 269.766 343.928 l 270.246 344.648 l 270.726 345.128 l 271.206 345.608 l 271.926 346.328 l 272.406 346.808 l 272.886 347.288 l 273.366 347.768 l 274.086 348.488 l 274.566 349.448 l 275.046 349.928 l 275.766 351.128 l 276.246 351.608 l 276.726 352.808 l 277.206 353.768 l 277.926 354.968 l 278.406 355.928 l 278.886 357.128 l 279.366 358.808 l 280.086 360.248 l 280.566 362.408 l 281.046 365.768 l 281.526 374.409 l 281.046 374.409 l 281.046 377.769 l 280.566 377.769 l 280.566 379.929 l 280.086 379.929 l 280.086 381.609 l 279.366 381.609 l 279.366 383.049 l 278.886 383.049 l 278.886 384.249 l 278.406 384.249 l 278.406 385.449 l 277.926 385.449 l 277.926 386.409 l 277.206 386.409 l 277.206 387.609 l 276.726 387.609 l 276.726 388.569 l 276.246 388.569 l 276.246 389.049 l 275.766 389.049 l 275.766 390.249 l 275.046 390.249 l 275.046 390.729 l 274.566 390.729 l 274.566 391.929 l 274.086 391.929 l 274.086 392.409 l 273.366 392.409 l 273.366 392.889 l 272.886 392.889 l 272.886 393.369 l 272.406 393.369 l 272.406 394.089 l 271.926 394.089 l 271.926 394.569 l 271.206 394.569 l 271.206 395.049 l 270.726 395.049 l 270.726 395.769 l 270.246 395.769 l 270.246 396.249 l 269.766 396.249 l 269.766 396.729 l 269.046 396.729 l 269.046 397.209 l 268.566 397.209 l 268.566 397.929 l 268.086 397.929 l 268.086 398.409 l 266.886 398.409 l 266.886 398.889 l 266.406 398.889 l 266.406 399.369 l 265.446 399.369 l 265.446 400.089 l 264.726 400.089 l 264.726 400.569 l 263.766 400.569 l 263.766 401.049 l 262.566 401.049 l 262.566 401.529 l 261.606 401.529 l 261.606 402.249 l 260.406 402.249 l 260.406 402.729 l 259.446 402. 2000 729 l 259.446 403.209 l 257.766 403.209 l 257.766 403.689 l 256.086 403.689 l 256.086 404.409 l 253.926 404.409 l 253.926 404.889 l 250.566 404.889 l 250.566 405.369 l W n 0.65 g 175.204 371.289 m 245.766 441.85 l 247.926 441.85 l 247.926 439.69 l 177.364 369.128 l 175.204 369.128 l f 0.656 g 176.644 369.608 m 247.446 440.17 l 249.606 440.17 l 249.606 438.01 l 178.804 367.448 l 176.644 367.448 l f 0.663 g 177.844 368.408 m 248.406 439.21 l 250.566 439.21 l 250.566 437.05 l 180.004 366.248 l 177.844 366.248 l f 0.669 g 178.804 367.448 m 249.606 438.01 l 251.766 438.01 l 251.766 435.85 l 180.964 365.288 l 178.804 365.288 l f 0.676 g 180.004 366.248 m 250.566 437.05 l 252.726 437.05 l 252.726 434.89 l 182.164 364.088 l 180.004 364.088 l f 0.682 g 180.964 365.288 m 251.766 435.85 l 253.926 435.85 l 253.926 433.69 l 183.124 363.128 l 180.964 363.128 l f 0.689 g 182.164 364.088 m 252.726 434.89 l 254.886 434.89 l 254.886 432.73 l 184.324 361.928 l 182.164 361.928 l f 0.695 g 183.364 363.128 m 253.926 433.69 l 256.086 433.69 l 256.086 431.53 l 185.524 360.968 l 183.364 360.968 l f 0.702 g 184.324 361.928 m 254.886 432.49 l 257.046 432.49 l 257.046 430.33 l 186.484 359.768 l 184.324 359.768 l f 0.708 g 185.524 360.968 m 256.086 431.53 l 258.246 431.53 l 258.246 429.37 l 187.684 358.808 l 185.524 358.808 l f 0.715 g 186.484 359.768 m 257.286 430.33 l 259.446 430.33 l 259.446 428.17 l 188.644 357.608 l 186.484 357.608 l f 0.721 g 187.684 358.808 m 258.246 429.37 l 260.406 429.37 l 260.406 427.21 l 189.844 356.648 l 187.684 356.648 l f 0.727 g 188.644 357.608 m 259.446 428.17 l 261.606 428.17 l 261.606 426.01 l 190.804 355.448 l 188.644 355.448 l f 0.734 g 189.844 356.648 m 260.406 427.21 l 262.566 427.21 l 262.566 425.05 l 192.004 354.488 l 189.844 354.488 l f 0.74 g 190.804 355.448 m 261.606 426.01 l 263.766 426.01 l 263.766 423.85 l 192.964 353.288 l 190.804 353.288 l f 0.747 g 192.004 354.248 m 262.566 425.05 l 264.726 425.05 l 264.726 422.89 l 194.164 352.088 l 192.004 352.088 l f 0.753 g 192.964 353.288 m 263.766 423.85 l 265.926 423.85 l 265.926 421.69 l 195.124 351.128 l 192.964 351.128 l f 0.76 g 194.164 351.608 m 264.726 422.17 l 266.886 422.17 l 266.886 420.01 l 196.324 349.448 l 194.164 349.448 l f 0.766 g 195.124 350.648 m 265.926 421.21 l 268.086 421.21 l 268.086 419.05 l 197.285 348.488 l 195.124 348.488 l f 0.773 g 196.324 349.448 m 266.886 420.01 l 269.046 420.01 l 269.046 417.85 l 198.485 347.288 l 196.324 347.288 l f 0.779 g 197.285 348.488 m 268.086 419.05 l 270.246 419.05 l 270.246 416.89 l 199.445 346.328 l 197.285 346.328 l f 0.785 g 198.485 347.288 m 269.046 417.85 l 271.206 417.85 l 271.206 415.69 l 200.645 345.128 l 198.485 345.128 l f 0.792 g 199.445 346.328 m 270.246 416.89 l 272.406 416.89 l 272.406 414.729 l 201.605 344.168 l 199.445 344.168 l f 0.798 g 200.645 345.128 m 271.206 415.69 l 273.366 415.69 l 273.366 413.529 l 202.805 342.968 l 200.645 342.968 l f 0.805 g 201.845 343.928 m 272.406 414.729 l 274.566 414.729 l 274.566 412.569 l 204.005 341.768 l 201.845 341.768 l f 0.811 g 202.805 342.968 m 273.366 413.529 l 275.526 413.529 l 275.526 411.369 l 204.965 340.808 l 202.805 340.808 l f 0.818 g 204.005 341.768 m 274.566 412.569 l 276.726 412.569 l 276.726 410.409 l 206.165 339.608 l 204.005 339.608 l f 0.824 g 204.965 340.808 m 275.766 411.369 l 277.926 411.369 l 277.926 409.209 l 207.125 338.648 l 204.965 338.648 l f 0.831 g 206.165 339.608 m 276.726 410.409 l 278.886 410.409 l 278.886 408.249 l 208.325 337.448 l 206.165 337.448 l f 0.837 g 207.125 338.648 m 277.926 409.209 l 280.086 409.209 l 280.086 407.049 l 209.285 336.488 l 207.125 336.488 l f 0.844 g 208.325 337.448 m 278.886 408.249 l 281.046 408.249 l 281.046 406.089 l 210.485 335.288 l 208.325 335.288 l f 0.85 g 209.285 336.488 m 280.086 407.049 l 282.246 407.049 l 282.246 404.889 l 211.445 334.328 l 209.285 334.328 l f 210.485 334.808 m 281.046 405.369 l 283.206 405.369 l 283.206 403.209 l 212.645 332.648 l 210.485 332.648 l f 0.844 g 212.165 333.608 m 282.726 404.409 l 284.887 404.409 l 284.887 402.249 l 214.325 331.448 l 212.165 331.448 l f 0.837 g 213.125 332.648 m 283.927 403.209 l 286.087 403.209 l 286.087 401.049 l 215.285 330.488 l 213.125 330.488 l f 0.831 g 214.325 331.448 m 284.887 402.249 l 287.047 402.249 l 287.047 400.089 l 216.485 329.288 l 214.325 329.288 l f 0.824 g 215.285 330.488 m 286.087 401.049 l 288.247 401.049 l 288.247 398.889 l 217.445 328.328 l 215.285 328.328 l f 0.818 g 216.485 329.288 m 287.047 400.089 l 289.207 400.089 l 289.207 397.929 l 218.645 327.127 l 216.485 327.127 l f 0.811 g 217.445 328.328 m 288.247 398.889 l 290.407 398.889 l 290.407 396.729 l 219.605 326.167 l 217.445 326.167 l f 0.805 g 218.645 327.127 m 289.207 397.929 l 291.367 397.929 l 291.367 395.769 l 220.805 324.967 l 218.645 324.967 l f 0.798 g 219.605 326.167 m 290.407 396.729 l 292.567 396.729 l 292.567 394.569 l 221.765 324.007 l 219.605 324.007 l f 0.792 g 220.805 324.967 m 291.367 395.769 l 293.527 395.769 l 293.527 393.609 l 222.965 322.807 l 220.805 322.807 l f 0.785 g 221.765 324.007 m 292.567 394.569 l 294.727 394.569 l 294.727 392.409 l 223.925 321.847 l 221.765 321.847 l f 0.779 g 222.965 322.807 m 293.527 393.369 l 295.687 393.369 l 295.687 391.209 l 225.125 320.647 l 222.965 320.647 l f 0.773 g 223.925 321.847 m 294.727 392.409 l 296.887 392.409 l 296.887 390.249 l 226.085 319.687 l 223.925 319.687 l f 0.766 g 225.125 320.647 m 295.687 391.209 l 297.847 391.209 l 297.847 389.049 l 227.285 318.487 l 225.125 318.487 l f 0.76 g 226.085 319.687 m 296.887 390.249 l 299.047 390.249 l 299.047 388.089 l 228.245 317.527 l 226.085 317.527 l f 0.753 g 227.285 318.487 m 297.847 389.049 l 300.007 389.049 l 300.007 386.889 l 229.445 316.327 l 227.285 316.327 l f 0.747 g 228.485 316.807 m 299.047 387.609 l 301.207 387.609 l 301.207 385.449 l 230.645 314.647 l 228.485 314.647 l f 0.74 g 229.445 315.847 m 300.007 386.409 l 302.167 386.409 l 302.167 384.249 l 231.605 313.687 l 229.445 313.687 l f 0.734 g 230.645 314.647 m 301.207 385.449 l 303.367 385.449 l 303.367 383.289 l 232.805 312.487 l 230.645 312.487 l f 0.727 g 231.605 313.687 m 302.407 384.249 l 304.567 384.249 l 304.567 382.089 l 233.765 311.527 l 231.605 311.527 l f 0.721 g 232.805 312.487 m 303.367 383.049 l 305.527 383.049 l 305.527 380.889 l 234.965 310.327 l 232.805 310.327 l f 0.715 g 233.765 311.527 m 304.567 382.089 l 306.727 382.089 l 306.727 379.929 l 235.925 309.367 l 233.765 309.367 l f 0.708 g 234.965 310.327 m 305.527 380.889 l 307.687 380.889 l 307.687 378.729 l 237.125 308.167 l 234.965 308.167 l f 0.702 g 235.925 309.367 m 306.727 379.929 l 308.887 379.929 l 308.887 377.769 l 238.085 307.207 l 235.925 307.207 l f 0.695 g 237.125 308.167 m 307.687 378.729 l 309.847 378.729 l 309.847 376.569 l 239.285 306.007 l 237.125 306.007 l f 0.689 g 238.085 307.207 m 308.887 377.769 l 311.047 377.769 l 311.047 375.609 l 240.246 305.047 l 238.085 305.047 l f 0.682 g 239.285 306.007 m 309.847 376.569 l 312.007 376.569 l 312.007 374.409 l 241.446 303.847 l 239.285 303.847 l f 0.676 g 240.246 304.807 m 311.047 375.609 l 313.207 375.609 l 313.207 373.449 l 242.406 302.647 l 240.246 302.647 l f 0.669 g 241.446 303.847 m 312.007 374.409 l 314.167 374.409 l 314.167 372.249 l 243.606 301.687 l 241.446 301.687 l f 0.663 g 242.406 302.647 m 313.207 373.449 l 315.367 373.449 l 315.367 371.289 l 244.566 300.487 l 242.406 300.487 l f 0.656 g 243.606 301.687 m 314.167 372.249 l 316.327 372.249 l 316.327 370.088 l 245.766 299.527 l 243.606 299.527 l f 0.65 g 244.566 300.487 m 315.367 371.289 l 317.527 371.289 l 317.527 369.128 l 246.726 298.327 l 244.566 298.327 l f Q 0.48 w 0.55 G 246.246 405. 2000 129 m 265.588 405.129 281.286 389.431 281.286 370.088 c 281.286 350.746 265.588 335.048 246.246 335.048 c 226.903 335.048 211.205 350.746 211.205 370.088 c 211.205 389.431 226.903 405.129 246.246 405.129 c s 0.65 G 246.246 404.649 m 265.323 404.649 280.806 389.166 280.806 370.088 c 280.806 351.011 265.323 335.528 246.246 335.528 c 227.168 335.528 211.685 351.011 211.685 370.088 c 211.685 389.166 227.168 404.649 246.246 404.649 c s 0.9 G 246.366 404.169 m 265.112 404.169 280.326 388.955 280.326 370.208 c 280.326 351.462 265.112 336.248 246.366 336.248 c 227.619 336.248 212.405 351.462 212.405 370.208 c 212.405 388.955 227.619 404.169 246.366 404.169 c s 0.65 G 246.366 403.449 m 264.847 403.449 279.846 388.504 279.846 370.088 c 279.846 351.673 264.847 336.728 246.366 336.728 c 227.884 336.728 212.885 351.673 212.885 370.088 c 212.885 388.504 227.884 403.449 246.366 403.449 c s 0.55 G 246.366 403.449 m 264.847 403.449 279.846 388.504 279.846 370.088 c 279.846 351.673 264.847 336.728 246.366 336.728 c 227.884 336.728 212.885 351.673 212.885 370.088 c 212.885 388.504 227.884 403.449 246.366 403.449 c s 0 w BT /F3 6.48 Tf 0 G 2.265 0 0 2.264 230.813 370.088 Tm (Semi)Tj ET 0.5 w 230.813 369.116 m 262.775 369.116 l S 0 w q 213.125 357.608 66.962 24.481 re W n BT /F3 3.36 Tf 2.265 0 0 2.264 231.357 359.528 Tm (register\(\))Tj ET Q 2.16 w q 350.648 406.569 m 342.008 406.569 l 338.648 406.089 l 336.488 405.369 l 334.808 404.889 l 333.368 404.409 l 332.168 403.689 l 331.208 403.209 l 330.008 402.729 l 328.808 402.249 l 327.848 401.529 l 327.367 401.049 l 326.167 400.569 l 325.687 400.089 l 324.487 399.369 l 324.007 398.889 l 323.527 398.409 l 323.047 397.929 l 322.327 397.209 l 321.847 396.729 l 321.367 396.249 l 320.887 395.769 l 320.167 395.049 l 319.687 394.569 l 319.207 394.089 l 318.487 393.369 l 318.007 392.889 l 317.527 391.929 l 317.047 391.209 l 316.327 390.249 l 315.847 389.769 l 315.367 388.569 l 314.887 387.609 l 314.167 386.409 l 313.687 385.449 l 313.207 384.249 l 312.727 382.569 l 312.007 380.889 l 311.527 378.729 l 311.047 375.609 l 311.047 366.968 l 311.527 366.968 l 311.527 363.608 l 312.007 363.608 l 312.007 361.448 l 312.727 361.448 l 312.727 359.768 l 313.207 359.768 l 313.207 358.088 l 313.687 358.088 l 313.687 357.128 l 314.167 357.128 l 314.167 355.928 l 314.887 355.928 l 314.887 354.968 l 315.367 354.968 l 315.367 353.768 l 315.847 353.768 l 315.847 352.808 l 316.327 352.808 l 316.327 352.088 l 317.047 352.088 l 317.047 351.128 l 317.527 351.128 l 317.527 350.648 l 318.007 350.648 l 318.007 349.448 l 318.487 349.448 l 318.487 348.968 l 319.207 348.968 l 319.207 348.488 l 319.687 348.488 l 319.687 347.768 l 320.167 347.768 l 320.167 347.288 l 320.887 347.288 l 320.887 346.808 l 321.367 346.808 l 321.367 346.328 l 321.847 346.328 l 321.847 345.608 l 322.327 345.608 l 322.327 345.128 l 323.047 345.128 l 323.047 344.648 l 323.527 344.648 l 323.527 343.928 l 324.007 343.928 l 324.007 343.448 l 324.487 343.448 l 324.487 342.968 l 325.687 342.968 l 325.687 342.488 l 326.167 342.488 l 326.167 341.768 l 327.367 341.768 l 327.367 341.288 l 327.848 341.288 l 327.848 340.808 l 328.808 340.808 l 328.808 340.328 l 330.008 340.328 l 330.008 339.608 l 331.208 339.608 l 331.208 339.128 l 332.168 339.128 l 332.168 338.648 l 333.368 338.648 l 333.368 338.168 l 334.808 338.168 l 334.808 337.448 l 336.488 337.448 l 336.488 336.968 l 338.648 336.968 l 338.648 336.488 l 342.008 336.488 l 342.008 336.008 l 350.648 336.008 l 350.648 336.488 l 354.008 336.968 l 356.168 337.448 l 357.848 338.168 l 359.288 338.648 l 360.488 339.128 l 361.448 339.608 l 362.648 340.328 l 363.608 340.808 l 364.808 341.288 l 365.288 341.768 l 366.488 342.488 l 366.968 342.968 l 368.168 343.448 l 368.648 343.928 l 369.128 344.648 l 369.608 345.128 l 370.328 345.608 l 370.808 346.328 l 371.289 346.808 l 371.769 347.288 l 372.489 347.768 l 372.969 348.488 l 373.449 348.968 l 373.929 349.448 l 374.649 350.648 l 375.129 351.128 l 375.609 352.088 l 376.329 352.808 l 376.809 353.768 l 377.289 354.968 l 377.769 355.928 l 378.489 357.128 l 378.969 358.088 l 379.449 359.768 l 379.929 361.448 l 380.649 363.608 l 381.129 366.968 l 381.609 375.609 l 381.129 375.609 l 381.129 378.729 l 380.649 378.729 l 380.649 380.889 l 379.929 380.889 l 379.929 382.569 l 379.449 382.569 l 379.449 384.249 l 378.969 384.249 l 378.969 385.449 l 378.489 385.449 l 378.489 386.409 l 377.769 386.409 l 377.769 387.609 l 377.289 387.609 l 377.289 388.569 l 376.809 388.569 l 376.809 389.769 l 376.329 389.769 l 376.329 390.249 l 375.609 390.249 l 375.609 391.209 l 375.129 391.209 l 375.129 391.929 l 374.649 391.929 l 374.649 392.889 l 373.929 392.889 l 373.929 393.369 l 373.449 393.369 l 373.449 394.089 l 372.969 394.089 l 372.969 394.569 l 372.489 394.569 l 372.489 395.049 l 371.769 395.049 l 371.769 395.769 l 371.289 395.769 l 371.289 396.249 l 370.808 396.249 l 370.808 396.729 l 370.328 396.729 l 370.328 397.209 l 369.608 397.209 l 369.608 397.929 l 369.128 397.929 l 369.128 398.409 l 368.648 398.409 l 368.648 398.889 l 368.168 398.889 l 368.168 399.369 l 366.968 399.369 l 366.968 400.089 l 366.488 400.089 l 366.488 400.569 l 365.288 400.569 l 365.288 401.049 l 364.808 401.049 l 364.808 401.529 l 363.608 401.529 l 363.608 402.249 l 362.648 402.249 l 362.648 402.729 l 361.448 402.729 l 361.448 403.209 l 360.488 403.209 l 360.488 403.689 l 359.288 403.689 l 359.288 404.409 l 357.848 404.409 l 357.848 404.889 l 356.168 404.889 l 356.168 405.369 l 354.008 405.369 l 354.008 406.089 l 350.648 406.089 l 350.648 406.569 l W n 0.65 g 275.046 372.249 m 345.848 442.81 l 348.008 442.81 l 348.008 440.65 l 277.206 370.088 l 275.046 370.088 l f 0.656 g 276.726 370.568 m 347.288 441.37 l 349.448 441.37 l 349.448 439.21 l 278.886 368.408 l 276.726 368.408 l f 0.663 g 277.926 369.608 m 348.488 440.17 l 350.648 440.17 l 350.648 438.01 l 280.086 367.448 l 277.926 367.448 l f 0.669 g 278.886 368.408 m 349.688 439.21 l 351.848 439.21 l 351.848 437.05 l 281.046 366.248 l 278.886 366.248 l f 0.676 g 280.086 367.448 m 350.648 438.01 l 352.808 438.01 l 352.808 435.85 l 282.246 365.288 l 280.086 365.288 l f 0.682 g 281.046 366.248 m 351.848 437.05 l 354.008 437.05 l 354.008 434.89 l 283.206 364.088 l 281.046 364.088 l f 0.689 g 282.246 365.288 m 352.808 435.85 l 354.968 435.85 l 354.968 433.69 l 284.407 363.128 l 282.246 363.128 l f 0.695 g 283.206 364.088 m 354.008 434.89 l 356.168 434.89 l 356.168 432.73 l 285.367 361.928 l 283.206 361.928 l f 0.702 g 284.407 363.128 m 354.968 433.69 l 357.128 433.69 l 357.128 431.53 l 286.567 360.968 l 284.407 360.968 l f 0.708 g 285.367 361.928 m 356.168 432.49 l 358.328 432.49 l 358.328 430.33 l 287.527 359.768 l 285.367 359.768 l f 0.715 g 286.567 360.968 m 357.128 431.53 l 359.288 431.53 l 359.288 429.37 l 288.727 358.808 l 286.567 358.808 l f 0.721 g 287.527 359.768 m 358.328 430.33 l 360.488 430.33 l 360.488 428.17 l 289.687 357.608 l 287.527 357.608 l f 0.727 g 288.727 358.808 m 359.288 429.37 l 361.448 429.37 l 361.448 427.21 l 290.887 356.648 l 288.727 356.648 l f 0.734 g 289.687 357.608 m 360.488 428.17 l 362.648 428.17 l 362.648 426.01 l 291.847 355.448 l 289.687 355.448 l f 0.74 g 290.887 356.648 m 361.448 427.21 l 363.608 427.21 l 363.608 425.05 l 293.047 354.488 l 290.887 354.488 l f 0.747 g 291.847 355.448 m 362.648 426.01 l 364.808 426.01 l 364.808 423.85 l 294.007 353.288 l 291.847 353.288 l f 0.753 g 293.047 354.248 m 363.608 425.05 l 365.768 425.05 l 365.768 422.89 l 295.207 352.088 l 293.047 352.088 l f 0.76 g 294.247 352.808 m 364.808 423.37 l 366.968 423.37 l 366.968 421.21 l 296.407 350.648 l 294.247 350.648 l f 0.766 g 295.207 351.608 m 365.768 422.17 l 367.928 422.17 l 367.928 420.01 l 297.367 349.448 l 295.207 349.448 l f 0.773 g 296.407 350.648 m 2000 366.968 421.21 l 369.128 421.21 l 369.128 419.05 l 298.567 348.488 l 296.407 348.488 l f 0.779 g 297.367 349.448 m 368.168 420.01 l 370.328 420.01 l 370.328 417.85 l 299.527 347.288 l 297.367 347.288 l f 0.785 g 298.567 348.488 m 369.128 419.05 l 371.289 419.05 l 371.289 416.89 l 300.727 346.328 l 298.567 346.328 l f 0.792 g 299.527 347.288 m 370.328 417.85 l 372.489 417.85 l 372.489 415.69 l 301.687 345.128 l 299.527 345.128 l f 0.798 g 300.727 346.328 m 371.289 416.89 l 373.449 416.89 l 373.449 414.729 l 302.887 344.168 l 300.727 344.168 l f 0.805 g 301.687 345.128 m 372.489 415.69 l 374.649 415.69 l 374.649 413.529 l 303.847 342.968 l 301.687 342.968 l f 0.811 g 302.887 343.928 m 373.449 414.729 l 375.609 414.729 l 375.609 412.569 l 305.047 341.768 l 302.887 341.768 l f 0.818 g 303.847 342.968 m 374.649 413.529 l 376.809 413.529 l 376.809 411.369 l 306.007 340.808 l 303.847 340.808 l f 0.824 g 305.047 341.768 m 375.609 412.569 l 377.769 412.569 l 377.769 410.409 l 307.207 339.608 l 305.047 339.608 l f 0.831 g 306.007 340.808 m 376.809 411.369 l 378.969 411.369 l 378.969 409.209 l 308.167 338.648 l 306.007 338.648 l f 0.837 g 307.207 339.608 m 377.769 410.409 l 379.929 410.409 l 379.929 408.249 l 309.367 337.448 l 307.207 337.448 l f 0.844 g 308.167 338.648 m 378.969 409.209 l 381.129 409.209 l 381.129 407.049 l 310.327 336.488 l 308.167 336.488 l f 0.85 g 309.367 337.448 m 379.929 408.249 l 382.089 408.249 l 382.089 406.089 l 311.527 335.288 l 309.367 335.288 l f 310.327 336.008 m 381.129 406.569 l 383.289 406.569 l 383.289 404.409 l 312.487 333.848 l 310.327 333.848 l f 0.844 g 312.007 334.808 m 382.809 405.369 l 384.969 405.369 l 384.969 403.209 l 314.167 332.648 l 312.007 332.648 l f 0.837 g 313.207 333.608 m 383.769 404.409 l 385.929 404.409 l 385.929 402.249 l 315.367 331.448 l 313.207 331.448 l f 0.831 g 314.167 332.648 m 384.969 403.209 l 387.129 403.209 l 387.129 401.049 l 316.327 330.488 l 314.167 330.488 l f 0.824 g 315.367 331.448 m 385.929 402.249 l 388.089 402.249 l 388.089 400.089 l 317.527 329.288 l 315.367 329.288 l f 0.818 g 316.327 330.488 m 387.129 401.049 l 389.289 401.049 l 389.289 398.889 l 318.487 328.328 l 316.327 328.328 l f 0.811 g 317.527 329.288 m 388.089 400.089 l 390.249 400.089 l 390.249 397.929 l 319.687 327.127 l 317.527 327.127 l f 0.805 g 318.487 328.328 m 389.289 398.889 l 391.449 398.889 l 391.449 396.729 l 320.647 326.167 l 318.487 326.167 l f 0.798 g 319.687 327.127 m 390.249 397.929 l 392.409 397.929 l 392.409 395.769 l 321.847 324.967 l 319.687 324.967 l f 0.792 g 320.887 326.167 m 391.449 396.729 l 393.609 396.729 l 393.609 394.569 l 323.047 324.007 l 320.887 324.007 l f 0.785 g 321.847 324.967 m 392.409 395.769 l 394.569 395.769 l 394.569 393.609 l 324.007 322.807 l 321.847 322.807 l f 0.779 g 323.047 324.007 m 393.609 394.569 l 395.769 394.569 l 395.769 392.409 l 325.207 321.847 l 323.047 321.847 l f 0.773 g 324.007 322.807 m 394.809 393.369 l 396.969 393.369 l 396.969 391.209 l 326.167 320.647 l 324.007 320.647 l f 0.766 g 325.207 321.847 m 395.769 392.409 l 397.929 392.409 l 397.929 390.249 l 327.367 319.687 l 325.207 319.687 l f 0.76 g 326.167 320.647 m 396.969 391.209 l 399.129 391.209 l 399.129 389.049 l 328.328 318.487 l 326.167 318.487 l f 0.753 g 327.367 319.687 m 397.929 390.249 l 400.089 390.249 l 400.089 388.089 l 329.528 317.527 l 327.367 317.527 l f 0.747 g 328.328 318.007 m 399.129 388.569 l 401.289 388.569 l 401.289 386.409 l 330.488 315.847 l 328.328 315.847 l f 0.74 g 329.528 316.807 m 400.089 387.609 l 402.249 387.609 l 402.249 385.449 l 331.688 314.647 l 329.528 314.647 l f 0.734 g 330.488 315.847 m 401.289 386.409 l 403.449 386.409 l 403.449 384.249 l 332.648 313.687 l 330.488 313.687 l f 0.727 g 331.688 314.647 m 402.249 385.449 l 404.409 385.449 l 404.409 383.289 l 333.848 312.487 l 331.688 312.487 l f 0.721 g 332.648 313.687 m 403.449 384.249 l 405.609 384.249 l 405.609 382.089 l 334.808 311.527 l 332.648 311.527 l f 0.715 g 333.848 312.487 m 404.409 383.049 l 406.569 383.049 l 406.569 380.889 l 336.008 310.327 l 333.848 310.327 l f 0.708 g 334.808 311.527 m 405.609 382.089 l 407.769 382.089 l 407.769 379.929 l 336.968 309.367 l 334.808 309.367 l f 0.702 g 336.008 310.327 m 406.569 380.889 l 408.729 380.889 l 408.729 378.729 l 338.168 308.167 l 336.008 308.167 l f 0.695 g 336.968 309.367 m 407.769 379.929 l 409.929 379.929 l 409.929 377.769 l 339.128 307.207 l 336.968 307.207 l f 0.689 g 338.168 308.167 m 408.729 378.729 l 410.889 378.729 l 410.889 376.569 l 340.328 306.007 l 338.168 306.007 l f 0.682 g 339.368 307.207 m 409.929 377.769 l 412.089 377.769 l 412.089 375.609 l 341.528 305.047 l 339.368 305.047 l f 0.676 g 340.328 306.007 m 410.889 376.569 l 413.049 376.569 l 413.049 374.409 l 342.488 303.847 l 340.328 303.847 l f 0.669 g 341.528 304.807 m 412.089 375.609 l 414.249 375.609 l 414.249 373.449 l 343.688 302.647 l 341.528 302.647 l f 0.663 g 342.488 303.847 m 413.289 374.409 l 415.45 374.409 l 415.45 372.249 l 344.648 301.687 l 342.488 301.687 l f 0.656 g 343.688 302.647 m 414.249 373.449 l 416.41 373.449 l 416.41 371.289 l 345.848 300.487 l 343.688 300.487 l f 0.65 g 344.648 301.687 m 415.45 372.249 l 417.61 372.249 l 417.61 370.088 l 346.808 299.527 l 344.648 299.527 l f Q 0.48 w 0.55 G 346.328 406.329 m 365.671 406.329 381.369 390.631 381.369 371.289 c 381.369 351.946 365.671 336.248 346.328 336.248 c 326.985 336.248 311.287 351.946 311.287 371.289 c 311.287 390.631 326.985 406.329 346.328 406.329 c s 0.65 G 346.328 405.849 m 365.406 405.849 380.889 390.366 380.889 371.289 c 380.889 352.211 365.406 336.728 346.328 336.728 c 327.25 336.728 311.767 352.211 311.767 371.289 c 311.767 390.366 327.25 405.849 346.328 405.849 c s 0.9 G 346.328 405.129 m 365.141 405.129 380.409 389.915 380.409 371.169 c 380.409 352.422 365.141 337.208 346.328 337.208 c 327.515 337.208 312.247 352.422 312.247 371.169 c 312.247 389.915 327.515 405.129 346.328 405.129 c s 0.65 G 346.328 404.649 m 364.743 404.649 379.689 389.65 379.689 371.169 c 379.689 352.687 364.743 337.688 346.328 337.688 c 327.913 337.688 312.967 352.687 312.967 371.169 c 312.967 389.65 327.913 404.649 346.328 404.649 c s 0.55 G 346.328 404.649 m 364.743 404.649 379.689 389.65 379.689 371.169 c 379.689 352.687 364.743 337.688 346.328 337.688 c 327.913 337.688 312.967 352.687 312.967 371.169 c 312.967 389.65 327.913 404.649 346.328 404.649 c s 0 w BT /F3 5.76 Tf 0 G 2.265 0 0 2.264 318.325 376.569 Tm (FireTruck)Tj ET 0.5 w 318.325 375.705 m 374.817 375.705 l S 0 w BT /F3 3.36 Tf 2.265 0 0 2.264 331.37 366.248 Tm (register\(\))Tj ET q 313.207 355.448 66.722 30.961 re W n BT 2.265 0 0 2.264 323.217 357.368 Tm (sound_siren\(\))Tj ET Q 2.16 w q 449.53 406.569 m 440.89 406.569 l 437.53 406.089 l 435.37 405.369 l 433.93 404.889 l 432.25 404.409 l 431.05 403.689 l 430.09 403.209 l 428.89 402.729 l 427.93 402.249 l 426.73 401.529 l 426.25 401.049 l 425.05 400.569 l 424.57 400.089 l 423.61 399.369 l 422.89 398.889 l 422.41 398.409 l 421.93 397.929 l 421.21 397.209 l 420.73 396.729 l 420.25 396.249 l 419.77 395.769 l 419.05 395.049 l 418.57 394.569 l 418.09 394.089 l 417.61 393.369 l 416.89 392.889 l 416.41 391.929 l 415.93 391.209 l 415.45 390.249 l 414.729 389.769 l 414.249 388.569 l 413.769 387.609 l 413.289 386.409 l 412.569 385.449 l 412.089 384.249 l 411.609 382.569 l 410.889 380.889 l 410.409 378.729 l 409.929 375.609 l 409.929 366.968 l 410.409 366.968 l 410.409 363.608 l 410.889 363.608 l 410.889 361.448 l 411.609 361.448 l 411.609 359.768 l 412.089 359.768 l 412.089 358.088 l 412.569 358.088 l 412.569 357.128 l 413.289 357.128 l 413.289 355.928 l 413.769 355.928 l 413.769 354.968 l 414.249 354.968 l 414.249 353.768 l 414.729 353.768 l 414.729 352.808 l 415.4 2000 5 352.808 l 415.45 352.088 l 415.93 352.088 l 415.93 351.128 l 416.41 351.128 l 416.41 350.648 l 416.89 350.648 l 416.89 349.448 l 417.61 349.448 l 417.61 348.968 l 418.09 348.968 l 418.09 348.488 l 418.57 348.488 l 418.57 347.768 l 419.05 347.768 l 419.05 347.288 l 419.77 347.288 l 419.77 346.808 l 420.25 346.808 l 420.25 346.328 l 420.73 346.328 l 420.73 345.608 l 421.21 345.608 l 421.21 345.128 l 421.93 345.128 l 421.93 344.648 l 422.41 344.648 l 422.41 343.928 l 422.89 343.928 l 422.89 343.448 l 423.61 343.448 l 423.61 342.968 l 424.57 342.968 l 424.57 342.488 l 425.05 342.488 l 425.05 341.768 l 426.25 341.768 l 426.25 341.288 l 426.73 341.288 l 426.73 340.808 l 427.93 340.808 l 427.93 340.328 l 428.89 340.328 l 428.89 339.608 l 430.09 339.608 l 430.09 339.128 l 431.05 339.128 l 431.05 338.648 l 432.25 338.648 l 432.25 338.168 l 433.93 338.168 l 433.93 337.448 l 435.37 337.448 l 435.37 336.968 l 437.53 336.968 l 437.53 336.488 l 440.89 336.488 l 440.89 336.008 l 449.53 336.008 l 449.53 336.488 l 452.89 336.968 l 455.05 337.448 l 456.73 338.168 l 458.17 338.648 l 459.371 339.128 l 460.571 339.608 l 461.531 340.328 l 462.731 340.808 l 463.691 341.288 l 464.171 341.768 l 465.371 342.488 l 465.851 342.968 l 467.051 343.448 l 467.531 343.928 l 468.011 344.648 l 468.731 345.128 l 469.211 345.608 l 469.691 346.328 l 470.171 346.808 l 470.891 347.288 l 471.371 347.768 l 471.851 348.488 l 472.331 348.968 l 473.051 349.448 l 473.531 350.648 l 474.011 351.128 l 474.491 352.088 l 475.211 352.808 l 475.691 353.768 l 476.171 354.968 l 476.651 355.928 l 477.371 357.128 l 477.851 358.088 l 478.331 359.768 l 479.051 361.448 l 479.531 363.608 l 480.011 366.968 l 480.491 375.609 l 480.011 375.609 l 480.011 378.729 l 479.531 378.729 l 479.531 380.889 l 479.051 380.889 l 479.051 382.569 l 478.331 382.569 l 478.331 384.249 l 477.851 384.249 l 477.851 385.449 l 477.371 385.449 l 477.371 386.409 l 476.651 386.409 l 476.651 387.609 l 476.171 387.609 l 476.171 388.569 l 475.691 388.569 l 475.691 389.769 l 475.211 389.769 l 475.211 390.249 l 474.491 390.249 l 474.491 391.209 l 474.011 391.209 l 474.011 391.929 l 473.531 391.929 l 473.531 392.889 l 473.051 392.889 l 473.051 393.369 l 472.331 393.369 l 472.331 394.089 l 471.851 394.089 l 471.851 394.569 l 471.371 394.569 l 471.371 395.049 l 470.891 395.049 l 470.891 395.769 l 470.171 395.769 l 470.171 396.249 l 469.691 396.249 l 469.691 396.729 l 469.211 396.729 l 469.211 397.209 l 468.731 397.209 l 468.731 397.929 l 468.011 397.929 l 468.011 398.409 l 467.531 398.409 l 467.531 398.889 l 467.051 398.889 l 467.051 399.369 l 465.851 399.369 l 465.851 400.089 l 465.371 400.089 l 465.371 400.569 l 464.171 400.569 l 464.171 401.049 l 463.691 401.049 l 463.691 401.529 l 462.731 401.529 l 462.731 402.249 l 461.531 402.249 l 461.531 402.729 l 460.571 402.729 l 460.571 403.209 l 459.371 403.209 l 459.371 403.689 l 458.17 403.689 l 458.17 404.409 l 456.73 404.409 l 456.73 404.889 l 455.05 404.889 l 455.05 405.369 l 452.89 405.369 l 452.89 406.089 l 449.53 406.089 l 449.53 406.569 l W n 0.65 g 373.929 372.249 m 444.73 442.81 l 446.89 442.81 l 446.89 440.65 l 376.089 370.088 l 373.929 370.088 l f 0.656 g 375.609 370.568 m 446.41 441.37 l 448.57 441.37 l 448.57 439.21 l 377.769 368.408 l 375.609 368.408 l f 0.663 g 376.809 369.608 m 447.37 440.17 l 449.53 440.17 l 449.53 438.01 l 378.969 367.448 l 376.809 367.448 l f 0.669 g 377.769 368.408 m 448.57 439.21 l 450.73 439.21 l 450.73 437.05 l 379.929 366.248 l 377.769 366.248 l f 0.676 g 378.969 367.448 m 449.53 438.01 l 451.69 438.01 l 451.69 435.85 l 381.129 365.288 l 378.969 365.288 l f 0.682 g 379.929 366.248 m 450.73 437.05 l 452.89 437.05 l 452.89 434.89 l 382.089 364.088 l 379.929 364.088 l f 0.689 g 381.129 365.288 m 451.69 435.85 l 453.85 435.85 l 453.85 433.69 l 383.289 363.128 l 381.129 363.128 l f 0.695 g 382.089 364.088 m 452.89 434.89 l 455.05 434.89 l 455.05 432.73 l 384.249 361.928 l 382.089 361.928 l f 0.702 g 383.289 363.128 m 453.85 433.69 l 456.01 433.69 l 456.01 431.53 l 385.449 360.968 l 383.289 360.968 l f 0.708 g 384.249 361.928 m 455.05 432.49 l 457.21 432.49 l 457.21 430.33 l 386.409 359.768 l 384.249 359.768 l f 0.715 g 385.449 360.968 m 456.01 431.53 l 458.17 431.53 l 458.17 429.37 l 387.609 358.808 l 385.449 358.808 l f 0.721 g 386.649 359.768 m 457.21 430.33 l 459.371 430.33 l 459.371 428.17 l 388.809 357.608 l 386.649 357.608 l f 0.727 g 387.609 358.808 m 458.17 429.37 l 460.331 429.37 l 460.331 427.21 l 389.769 356.648 l 387.609 356.648 l f 0.734 g 388.809 357.608 m 459.371 428.17 l 461.531 428.17 l 461.531 426.01 l 390.969 355.448 l 388.809 355.448 l f 0.74 g 389.769 356.648 m 460.571 427.21 l 462.731 427.21 l 462.731 425.05 l 391.929 354.488 l 389.769 354.488 l f 0.747 g 390.969 355.448 m 461.531 426.01 l 463.691 426.01 l 463.691 423.85 l 393.129 353.288 l 390.969 353.288 l f 0.753 g 391.929 354.248 m 462.731 425.05 l 464.891 425.05 l 464.891 422.89 l 394.089 352.088 l 391.929 352.088 l f 0.76 g 393.129 352.808 m 463.691 423.37 l 465.851 423.37 l 465.851 421.21 l 395.289 350.648 l 393.129 350.648 l f 0.766 g 394.089 351.608 m 464.891 422.17 l 467.051 422.17 l 467.051 420.01 l 396.249 349.448 l 394.089 349.448 l f 0.773 g 395.289 350.648 m 465.851 421.21 l 468.011 421.21 l 468.011 419.05 l 397.449 348.488 l 395.289 348.488 l f 0.779 g 396.249 349.448 m 467.051 420.01 l 469.211 420.01 l 469.211 417.85 l 398.409 347.288 l 396.249 347.288 l f 0.785 g 397.449 348.488 m 468.011 419.05 l 470.171 419.05 l 470.171 416.89 l 399.609 346.328 l 397.449 346.328 l f 0.792 g 398.409 347.288 m 469.211 417.85 l 471.371 417.85 l 471.371 415.69 l 400.569 345.128 l 398.409 345.128 l f 0.798 g 399.609 346.328 m 470.171 416.89 l 472.331 416.89 l 472.331 414.729 l 401.769 344.168 l 399.609 344.168 l f 0.805 g 400.569 345.128 m 471.371 415.69 l 473.531 415.69 l 473.531 413.529 l 402.729 342.968 l 400.569 342.968 l f 0.811 g 401.769 343.928 m 472.331 414.729 l 474.491 414.729 l 474.491 412.569 l 403.929 341.768 l 401.769 341.768 l f 0.818 g 402.729 342.968 m 473.531 413.529 l 475.691 413.529 l 475.691 411.369 l 404.889 340.808 l 402.729 340.808 l f 0.824 g 403.929 341.768 m 474.491 412.569 l 476.651 412.569 l 476.651 410.409 l 406.089 339.608 l 403.929 339.608 l f 0.831 g 405.129 340.808 m 475.691 411.369 l 477.851 411.369 l 477.851 409.209 l 407.289 338.648 l 405.129 338.648 l f 0.837 g 406.089 339.608 m 476.651 410.409 l 478.811 410.409 l 478.811 408.249 l 408.249 337.448 l 406.089 337.448 l f 0.844 g 407.289 338.648 m 477.851 409.209 l 480.011 409.209 l 480.011 407.049 l 409.449 336.488 l 407.289 336.488 l f 0.85 g 408.249 337.448 m 479.051 408.249 l 481.211 408.249 l 481.211 406.089 l 410.409 335.288 l 408.249 335.288 l f 409.449 336.008 m 480.011 406.569 l 482.171 406.569 l 482.171 404.409 l 411.609 333.848 l 409.449 333.848 l f 0.844 g 410.889 334.808 m 481.691 405.369 l 483.851 405.369 l 483.851 403.209 l 413.049 332.648 l 410.889 332.648 l f 0.837 g 412.089 333.608 m 482.651 404.409 l 484.811 404.409 l 484.811 402.249 l 414.249 331.448 l 412.089 331.448 l f 0.831 g 413.289 332.648 m 483.851 403.209 l 486.011 403.209 l 486.011 401.049 l 415.45 330.488 l 413.289 330.488 l f 0.824 g 414.249 331.448 m 484.811 402.249 l 486.971 402.249 l 486.971 400.089 l 416.41 329.288 l 414.249 329.288 l f 0.818 g 415.45 330.488 m 486.011 401.049 l 488.171 401.049 l 488.171 398.889 l 417.61 328.328 l 415.45 328.328 l f 0.811 g 416.41 329.288 m 487.211 400.089 l 489.371 400.089 l 489.371 397.929 l 418.57 327.127 l 416.41 327.127 l f 0.805 g 417.61 328.328 m 488.171 398.889 l 490.331 398.889 l 490.331 396.729 l 419.77 326.167 l 417.61 326.167 l f 0.798 g 418.57 327.127 m 489.371 397.929 l 491.53 2000 1 397.929 l 491.531 395.769 l 420.73 324.967 l 418.57 324.967 l f 0.792 g 419.77 326.167 m 490.331 396.729 l 492.491 396.729 l 492.491 394.569 l 421.93 324.007 l 419.77 324.007 l f 0.785 g 420.73 324.967 m 491.531 395.769 l 493.691 395.769 l 493.691 393.609 l 422.89 322.807 l 420.73 322.807 l f 0.779 g 421.93 324.007 m 492.491 394.569 l 494.651 394.569 l 494.651 392.409 l 424.09 321.847 l 421.93 321.847 l f 0.773 g 422.89 322.807 m 493.691 393.369 l 495.851 393.369 l 495.851 391.209 l 425.05 320.647 l 422.89 320.647 l f 0.766 g 424.09 321.847 m 494.651 392.409 l 496.811 392.409 l 496.811 390.249 l 426.25 319.687 l 424.09 319.687 l f 0.76 g 425.05 320.647 m 495.851 391.209 l 498.011 391.209 l 498.011 389.049 l 427.21 318.487 l 425.05 318.487 l f 0.753 g 426.25 319.687 m 496.811 390.249 l 498.971 390.249 l 498.971 388.089 l 428.41 317.527 l 426.25 317.527 l f 0.747 g 427.21 318.007 m 498.011 388.569 l 500.171 388.569 l 500.171 386.409 l 429.37 315.847 l 427.21 315.847 l f 0.74 g 428.41 316.807 m 498.971 387.609 l 501.131 387.609 l 501.131 385.449 l 430.57 314.647 l 428.41 314.647 l f 0.734 g 429.37 315.847 m 500.171 386.409 l 502.332 386.409 l 502.332 384.249 l 431.53 313.687 l 429.37 313.687 l f 0.727 g 430.57 314.647 m 501.131 385.449 l 503.292 385.449 l 503.292 383.289 l 432.73 312.487 l 430.57 312.487 l f 0.721 g 431.77 313.687 m 502.332 384.249 l 504.492 384.249 l 504.492 382.089 l 433.93 311.527 l 431.77 311.527 l f 0.715 g 432.73 312.487 m 503.292 383.049 l 505.452 383.049 l 505.452 380.889 l 434.89 310.327 l 432.73 310.327 l f 0.708 g 433.93 311.527 m 504.492 382.089 l 506.652 382.089 l 506.652 379.929 l 436.09 309.367 l 433.93 309.367 l f 0.702 g 434.89 310.327 m 505.692 380.889 l 507.852 380.889 l 507.852 378.729 l 437.05 308.167 l 434.89 308.167 l f 0.695 g 436.09 309.367 m 506.652 379.929 l 508.812 379.929 l 508.812 377.769 l 438.25 307.207 l 436.09 307.207 l f 0.689 g 437.05 308.167 m 507.852 378.729 l 510.012 378.729 l 510.012 376.569 l 439.21 306.007 l 437.05 306.007 l f 0.682 g 438.25 307.207 m 508.812 377.769 l 510.972 377.769 l 510.972 375.609 l 440.41 305.047 l 438.25 305.047 l f 0.676 g 439.21 306.007 m 510.012 376.569 l 512.172 376.569 l 512.172 374.409 l 441.37 303.847 l 439.21 303.847 l f 0.669 g 440.41 304.807 m 510.972 375.609 l 513.132 375.609 l 513.132 373.449 l 442.57 302.647 l 440.41 302.647 l f 0.663 g 441.37 303.847 m 512.172 374.409 l 514.332 374.409 l 514.332 372.249 l 443.53 301.687 l 441.37 301.687 l f 0.656 g 442.57 302.647 m 513.132 373.449 l 515.292 373.449 l 515.292 371.289 l 444.73 300.487 l 442.57 300.487 l f 0.65 g 443.53 301.687 m 514.332 372.249 l 516.492 372.249 l 516.492 370.088 l 445.69 299.527 l 443.53 299.527 l f Q 0.48 w 0.55 G 445.21 406.329 m 464.553 406.329 480.251 390.631 480.251 371.289 c 480.251 351.946 464.553 336.248 445.21 336.248 c 425.868 336.248 410.169 351.946 410.169 371.289 c 410.169 390.631 425.868 406.329 445.21 406.329 c s 0.65 G 445.21 405.849 m 464.288 405.849 479.771 390.366 479.771 371.289 c 479.771 352.211 464.288 336.728 445.21 336.728 c 426.133 336.728 410.649 352.211 410.649 371.289 c 410.649 390.366 426.133 405.849 445.21 405.849 c s 0.9 G 445.21 405.129 m 464.023 405.129 479.291 389.915 479.291 371.169 c 479.291 352.422 464.023 337.208 445.21 337.208 c 426.398 337.208 411.129 352.422 411.129 371.169 c 411.129 389.915 426.398 405.129 445.21 405.129 c s 0.65 G 445.33 404.649 m 463.812 404.649 478.811 389.65 478.811 371.169 c 478.811 352.687 463.812 337.688 445.33 337.688 c 426.849 337.688 411.849 352.687 411.849 371.169 c 411.849 389.65 426.849 404.649 445.33 404.649 c s 0.55 G 445.33 404.649 m 463.812 404.649 478.811 389.65 478.811 371.169 c 478.811 352.687 463.812 337.688 445.33 337.688 c 426.849 337.688 411.849 352.687 411.849 371.169 c 411.849 389.65 426.849 404.649 445.33 404.649 c s 0 w BT /F3 4.8 Tf 0 G 2.265 0 0 2.264 414.533 372.729 Tm (ArmoredCar)Tj ET 0.5 w 414.533 372.009 m 476.397 372.009 l S 0 w BT /F3 3.36 Tf 2.265 0 0 2.264 430.296 362.888 Tm (register\(\))Tj ET BT /F2 5.76 Tf 2.265 0 0 2.264 181.894 442.33 Tm (is-a)Tj ET BT 2.265 0 0 2.264 386.812 442.33 Tm (is-a)Tj ET BT 2.265 0 0 2.264 337.893 422.17 Tm (is-a)Tj ET BT 2.265 0 0 2.264 230.813 422.17 Tm (is-a)Tj ET endstream endobj 31 0 obj 89422 endobj 32 0 obj << /Type /Page /Parent 33 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 34 0 R >> endobj 33 0 obj << /Kids [ 32 0 R 36 0 R 39 0 R 42 0 R 45 0 R 49 0 R ] /Count 6 /Type /Pages /Parent 214 0 R >> endobj 34 0 obj << /Length 35 0 R >> stream 0.24 w BT /F1 7.68 Tf 273.966 117.843 TD 0 Tc 0 Tw (Page 7)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD 1.282 Tw (deriving such classes from )Tj /F4 10.08 Tf 125.735 0 TD 0 Tw (FireTruck)Tj /F3 10.08 Tf 54.442 0 TD 1.282 Tw ( and )Tj /F4 10.08 Tf 24.668 0 TD 0 Tw (DumpTruck)Tj /F3 10.08 Tf 54.601 0 TD 1.282 Tw (, we might extend the set of class)Tj ET BT 86.522 748.817 TD 0 Tw (relationships shown in Figure 1 to the hierarchy shown in Figure 2.)Tj ET BT /F1 7.68 Tf 224.285 464.171 TD (Figure 2: Extending the Truck hierarchy)Tj ET BT /F3 10.08 Tf 105.722 440.17 TD 0.489 Tw (Within such a hierarchy, every class offers all the methods offered by any class above it)Tj ET BT 86.522 426.73 TD 0.37 Tw (in the hierarchy. Therefore, objects of a particular class can always be treated as if they were)Tj ET BT 86.522 413.289 TD 0 Tw (objects of some class higher in the inheritance tree.)Tj ET BT 105.722 399.849 TD (For example, both a )Tj /F4 10.08 Tf 90.722 0 TD (TankerFireTruck)Tj /F3 10.08 Tf 90.737 0 TD ( object and a )Tj /F4 10.08 Tf 58.547 0 TD (DoubleBottomDumpTruck)Tj /F3 10.08 Tf 127.032 0 TD ( object)Tj ET BT 86.522 386.649 TD (may be treated as if they were )Tj /F4 10.08 Tf 137.183 0 TD (Truck)Tj /F3 10.08 Tf 30.246 0 TD ( objects \(i.e. you could call their )Tj /F4 10.08 Tf 143.655 0 TD (register\(\))Tj /F3 10.08 Tf 60.491 0 TD ( method\),)Tj ET BT 86.522 373.209 TD 3.581 Tw (because both of them can trace their "ancestry" back to the primordial )Tj /F4 10.08 Tf 354.913 0 TD 0 Tw (Truck)Tj /F3 10.08 Tf 30.246 0 TD 3.581 Tw ( class.)Tj ET BT 86.522 359.768 TD 0.381 Tw (However, of the two, only the )Tj /F4 10.08 Tf 138.009 0 TD 0 Tw (Tanker)Tj /F3 10.08 Tf 36.295 0 TD 0.381 Tw ( object can be treated as a )Tj /F4 10.08 Tf 117.884 0 TD 0 Tw (FireTruck)Tj /F3 10.08 Tf 54.442 0 TD 0.381 Tw ( object \(i.e. you)Tj ET BT 86.522 346.328 TD 2.976 Tw (could call its )Tj /F4 10.08 Tf 67.51 0 TD 0 Tw (sound_siren\(\))Tj /F3 10.08 Tf 78.639 0 TD 2.976 Tw ( method\), because only the )Tj /F4 10.08 Tf 136.892 0 TD 0 Tw (Tanker)Tj /F3 10.08 Tf 36.167 0 TD 2.976 Tw ( object can trace its)Tj ET BT 86.522 332.888 TD 0 Tw (ancestry to class )Tj /F4 10.08 Tf 74.701 0 TD (FireTruck)Tj /F3 10.08 Tf 54.442 0 TD (.)Tj ET BT 105.722 319.687 TD 0.857 Tw (Note that some of the classes in the Truck hierarchy choose to redefine one or more of)Tj ET BT 86.522 306.247 TD 0.327 Tw (the methods they inherit \(see the next section for an explanation of why they might want do)Tj ET BT 86.522 292.807 TD 1.024 Tw (that\). For example, the Semi class redefines the )Tj /F4 10.08 Tf 219.076 0 TD 0 Tw (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 1.024 Tw ( method it inherits from class)Tj ET BT 86.522 279.366 TD 0.163 Tw (Truck. We can distinguish a method that has been \(re-\)defined in a class, from a method that)Tj ET BT 86.522 265.926 TD 0 Tw (a class merely inherits from its parent, by listing inherited methods in italics.)Tj ET BT /F2 15.36 Tf 86.522 237.125 TD (Polymorphism)Tj ET BT /F3 10.08 Tf 86.522 217.205 TD 0.662 Tw (If you've ever gone up to someone in a bar or club and introduced yourself, you know that)Tj ET BT 86.522 203.765 TD 0.89 Tw (people can respond to the very same message \("I'd like to get to know you better"\) in very)Tj ET BT 86.522 190.324 TD 2.402 Tw (different ways. If we were to categorize those ways, we could create several 2000 classes of)Tj ET BT 86.522 176.884 TD 5.7 Tw (person: )Tj /F4 10.08 Tf 41.252 0 TD 0 Tw (ReceptivePerson)Tj /F3 10.08 Tf 90.737 0 TD 5.7 Tw (, )Tj /F4 10.08 Tf 10.575 0 TD 0 Tw (IndifferentPerson)Tj /F3 10.08 Tf 102.835 0 TD 5.7 Tw (, )Tj /F4 10.08 Tf 10.74 0 TD 0 Tw (ShyPerson)Tj /F3 10.08 Tf 54.442 0 TD 5.7 Tw (, )Tj /F4 10.08 Tf 10.74 0 TD 0 Tw (RejectingPerson)Tj /F3 10.08 Tf 90.737 0 TD (,)Tj ET BT /F4 10.08 Tf 86.522 163.444 TD (RejectingWithExtremePrejudicePerson)Tj /F3 10.08 Tf 211.719 0 TD (, )Tj /F4 10.08 Tf 5.04 0 TD (JustPlainWeirdPerson)Tj /F3 10.08 Tf 120.982 0 TD (.)Tj ET 0.48 w 0.004 w 1 G 1 g 89.764 477.373 413.046 264.962 re b 2.16 w q 300.727 723.857 m 293.527 723.857 l 290.887 723.377 l 288.727 722.897 l 287.047 722.177 l 286.087 721.697 l 284.887 721.217 l 283.927 720.496 l 283.206 720.016 l 282.246 719.536 l 281.766 719.056 l 280.566 718.336 l 280.086 717.856 l 279.606 717.376 l 278.886 716.896 l 278.406 716.176 l 277.926 715.696 l 277.206 715.216 l 276.726 714.736 l 276.246 714.016 l 275.766 713.056 l 275.046 712.576 l 274.566 711.376 l 274.086 710.896 l 273.606 709.696 l 272.886 708.736 l 272.406 707.536 l 271.926 705.856 l 271.446 703.696 l 270.726 701.056 l 270.726 694.096 l 271.446 694.096 l 271.446 691.216 l 271.926 691.216 l 271.926 689.056 l 272.406 689.056 l 272.406 687.376 l 272.886 687.376 l 272.886 686.416 l 273.606 686.416 l 273.606 685.216 l 274.086 685.216 l 274.086 684.256 l 274.566 684.256 l 274.566 683.776 l 275.046 683.776 l 275.046 682.576 l 275.766 682.576 l 275.766 682.096 l 276.246 682.096 l 276.246 680.896 l 276.726 680.896 l 276.726 680.416 l 277.206 680.416 l 277.206 679.936 l 277.926 679.936 l 277.926 679.456 l 278.406 679.456 l 278.406 678.736 l 278.886 678.736 l 278.886 678.256 l 279.606 678.256 l 279.606 677.776 l 280.086 677.776 l 280.086 677.055 l 280.566 677.055 l 280.566 676.575 l 281.766 676.575 l 281.766 676.095 l 282.246 676.095 l 282.246 675.615 l 283.206 675.615 l 283.206 674.895 l 283.927 674.895 l 283.927 674.415 l 284.887 674.415 l 284.887 673.935 l 286.087 673.935 l 286.087 673.455 l 287.047 673.455 l 287.047 672.735 l 288.727 672.735 l 288.727 672.255 l 290.887 672.255 l 290.887 671.775 l 293.527 671.775 l 293.527 671.295 l 300.727 671.295 l 300.727 671.775 l 303.367 672.255 l 305.527 672.735 l 307.207 673.455 l 308.407 673.935 l 309.367 674.415 l 310.567 674.895 l 311.047 675.615 l 312.007 676.095 l 312.727 676.575 l 313.687 677.055 l 314.167 677.776 l 314.887 678.256 l 315.367 678.736 l 315.847 679.456 l 316.567 679.936 l 317.047 680.416 l 317.527 680.896 l 318.007 682.096 l 318.727 682.576 l 319.207 683.776 l 319.687 684.256 l 320.167 685.216 l 320.887 686.416 l 321.367 687.376 l 321.847 689.056 l 322.327 691.216 l 323.047 694.096 l 323.527 701.056 l 323.047 701.056 l 323.047 703.696 l 322.327 703.696 l 322.327 705.856 l 321.847 705.856 l 321.847 707.536 l 321.367 707.536 l 321.367 708.736 l 320.887 708.736 l 320.887 709.696 l 320.167 709.696 l 320.167 710.896 l 319.687 710.896 l 319.687 711.376 l 319.207 711.376 l 319.207 712.576 l 318.727 712.576 l 318.727 713.056 l 318.007 713.056 l 318.007 714.016 l 317.527 714.016 l 317.527 714.736 l 317.047 714.736 l 317.047 715.216 l 316.567 715.216 l 316.567 715.696 l 315.847 715.696 l 315.847 716.176 l 315.367 716.176 l 315.367 716.896 l 314.887 716.896 l 314.887 717.376 l 314.167 717.376 l 314.167 717.856 l 313.687 717.856 l 313.687 718.336 l 312.727 718.336 l 312.727 719.056 l 312.007 719.056 l 312.007 719.536 l 311.047 719.536 l 311.047 720.016 l 310.567 720.016 l 310.567 720.496 l 309.367 720.496 l 309.367 721.217 l 308.407 721.217 l 308.407 721.697 l 307.207 721.697 l 307.207 722.177 l 305.527 722.177 l 305.527 722.897 l 303.367 722.897 l 303.367 723.377 l 300.727 723.377 l 300.727 723.857 l W n 0.65 g 244.806 698.896 m 296.887 750.977 l 299.047 750.977 l 299.047 748.817 l 246.966 696.736 l 244.806 696.736 l f 0.659 g 245.766 697.216 m 298.087 749.297 l 300.247 749.297 l 300.247 747.137 l 247.926 695.056 l 245.766 695.056 l f 0.667 g 246.966 696.256 m 299.047 748.337 l 301.207 748.337 l 301.207 746.177 l 249.126 694.096 l 246.966 694.096 l f 0.676 g 247.926 695.056 m 300.247 747.137 l 302.407 747.137 l 302.407 744.977 l 250.086 692.896 l 247.926 692.896 l f 0.685 g 249.126 694.096 m 301.207 746.177 l 303.367 746.177 l 303.367 744.017 l 251.286 691.936 l 249.126 691.936 l f 0.693 g 250.086 692.896 m 302.407 744.977 l 304.567 744.977 l 304.567 742.817 l 252.246 690.736 l 250.086 690.736 l f 0.702 g 251.286 691.936 m 303.367 744.017 l 305.527 744.017 l 305.527 741.857 l 253.446 689.776 l 251.286 689.776 l f 0.711 g 252.246 690.736 m 304.567 742.817 l 306.727 742.817 l 306.727 740.657 l 254.406 688.576 l 252.246 688.576 l f 0.72 g 253.446 689.776 m 305.527 741.857 l 307.687 741.857 l 307.687 739.697 l 255.606 687.616 l 253.446 687.616 l f 0.728 g 254.406 688.576 m 306.727 740.657 l 308.887 740.657 l 308.887 738.497 l 256.566 686.416 l 254.406 686.416 l f 0.737 g 255.606 687.376 m 307.687 739.697 l 309.847 739.697 l 309.847 737.537 l 257.766 685.216 l 255.606 685.216 l f 0.746 g 256.566 686.416 m 308.887 738.497 l 311.047 738.497 l 311.047 736.337 l 258.726 684.256 l 256.566 684.256 l f 0.754 g 257.766 685.216 m 309.847 737.537 l 312.007 737.537 l 312.007 735.377 l 259.926 683.056 l 257.766 683.056 l f 0.763 g 258.726 684.256 m 311.047 736.337 l 313.207 736.337 l 313.207 734.177 l 260.886 682.096 l 258.726 682.096 l f 0.772 g 259.926 683.056 m 312.007 735.377 l 314.167 735.377 l 314.167 733.217 l 262.086 680.896 l 259.926 680.896 l f 0.78 g 261.126 682.096 m 313.207 734.177 l 315.367 734.177 l 315.367 732.017 l 263.286 679.936 l 261.126 679.936 l f 0.789 g 262.086 680.896 m 314.167 733.217 l 316.327 733.217 l 316.327 731.057 l 264.246 678.736 l 262.086 678.736 l f 0.798 g 263.286 679.936 m 315.367 732.017 l 317.527 732.017 l 317.527 729.857 l 265.446 677.776 l 263.286 677.776 l f 0.807 g 264.246 678.736 m 316.567 730.817 l 318.727 730.817 l 318.727 728.657 l 266.406 676.575 l 264.246 676.575 l f 0.815 g 265.446 677.776 m 317.527 729.857 l 319.687 729.857 l 319.687 727.697 l 267.606 675.615 l 265.446 675.615 l f 0.824 g 266.406 676.575 m 318.727 728.657 l 320.887 728.657 l 320.887 726.497 l 268.566 674.415 l 266.406 674.415 l f 0.833 g 267.606 675.615 m 319.687 727.697 l 321.847 727.697 l 321.847 725.537 l 269.766 673.455 l 267.606 673.455 l f 0.841 g 268.566 674.415 m 320.887 726.497 l 323.047 726.497 l 323.047 724.337 l 270.726 672.255 l 268.566 672.255 l f 0.85 g 269.766 673.455 m 321.847 725.537 l 324.007 725.537 l 324.007 723.377 l 271.926 671.295 l 269.766 671.295 l f 270.726 672.255 m 323.047 724.337 l 325.207 724.337 l 325.207 722.177 l 272.886 670.095 l 270.726 670.095 l f 0.841 g 271.926 670.575 m 324.007 722.897 l 326.167 722.897 l 326.167 720.736 l 274.086 668.415 l 271.926 668.415 l f 0.833 g 272.886 669.615 m 325.207 721.697 l 327.367 721.697 l 327.367 719.536 l 275.046 667.455 l 272.886 667.455 l f 0.824 g 274.086 668.415 m 326.167 720.496 l 328.328 720.496 l 328.328 718.336 l 276.246 666.255 l 274.086 666.255 l f 0.815 g 275.046 667.455 m 327.367 719.536 l 329.528 719.536 l 329.528 717.376 l 277.206 665.295 l 275.046 665.295 l f 0.807 g 276.246 666.255 m 328.328 718.336 l 330.488 718.336 l 330.488 716.176 l 278.406 664.095 l 276.246 664.095 l f 0.798 g 277.206 665.295 m 329.528 717.376 l 331.688 717.376 l 331.688 715.216 l 279.366 663.135 l 277.206 663.135 l f 0.789 g 278.406 664.095 m 330.488 716.176 l 332.648 716.176 l 332.648 714.016 l 280.566 661.935 l 278.406 661.935 l f 0.78 g 279.606 663.135 m 331.688 715.216 l 333.848 715.216 l 333.848 713.056 l 281.766 660.975 l 279.606 660.975 l f 0.772 g 280.566 661.935 m 332.648 714.016 l 334.808 714.016 l 334.808 711.856 l 28 2000 2.726 659.775 l 280.566 659.775 l f 0.763 g 281.766 660.975 m 333.848 713.056 l 336.008 713.056 l 336.008 710.896 l 283.927 658.815 l 281.766 658.815 l f 0.754 g 282.726 659.775 m 335.048 711.856 l 337.208 711.856 l 337.208 709.696 l 284.887 657.615 l 282.726 657.615 l f 0.746 g 283.927 658.815 m 336.008 710.896 l 338.168 710.896 l 338.168 708.736 l 286.087 656.655 l 283.927 656.655 l f 0.737 g 284.887 657.615 m 337.208 709.696 l 339.368 709.696 l 339.368 707.536 l 287.047 655.455 l 284.887 655.455 l f 0.728 g 286.087 656.415 m 338.168 708.736 l 340.328 708.736 l 340.328 706.576 l 288.247 654.255 l 286.087 654.255 l f 0.72 g 287.047 655.455 m 339.368 707.536 l 341.528 707.536 l 341.528 705.376 l 289.207 653.295 l 287.047 653.295 l f 0.711 g 288.247 654.255 m 340.328 706.576 l 342.488 706.576 l 342.488 704.416 l 290.407 652.095 l 288.247 652.095 l f 0.702 g 289.207 653.295 m 341.528 705.376 l 343.688 705.376 l 343.688 703.216 l 291.367 651.135 l 289.207 651.135 l f 0.693 g 290.407 652.095 m 342.488 704.416 l 344.648 704.416 l 344.648 702.256 l 292.567 649.935 l 290.407 649.935 l f 0.685 g 291.367 651.135 m 343.688 703.216 l 345.848 703.216 l 345.848 701.056 l 293.527 648.975 l 291.367 648.975 l f 0.676 g 292.567 649.935 m 344.648 702.256 l 346.808 702.256 l 346.808 700.096 l 294.727 647.775 l 292.567 647.775 l f 0.667 g 293.527 648.975 m 345.848 701.056 l 348.008 701.056 l 348.008 698.896 l 295.687 646.815 l 293.527 646.815 l f 0.659 g 294.727 647.775 m 346.808 700.096 l 348.968 700.096 l 348.968 697.936 l 296.887 645.615 l 294.727 645.615 l f 0.65 g 295.687 646.815 m 348.008 698.896 l 350.168 698.896 l 350.168 696.736 l 297.847 644.655 l 295.687 644.655 l f Q 0.36 w 0.55 G 297.127 723.677 m 311.601 723.677 323.347 711.984 323.347 697.576 c 323.347 683.168 311.601 671.475 297.127 671.475 c 282.653 671.475 270.906 683.168 270.906 697.576 c 270.906 711.984 282.653 723.677 297.127 723.677 c s 0.65 G 297.127 723.677 m 311.601 723.677 323.347 712.091 323.347 697.816 c 323.347 683.541 311.601 671.955 297.127 671.955 c 282.653 671.955 270.906 683.541 270.906 697.816 c 270.906 712.091 282.653 723.677 297.127 723.677 c s 0.9 G 297.247 723.197 m 311.389 723.197 322.867 711.719 322.867 697.576 c 322.867 683.433 311.389 671.955 297.247 671.955 c 283.104 671.955 271.626 683.433 271.626 697.576 c 271.626 711.719 283.104 723.197 297.247 723.197 c s 0.65 G 297.127 722.717 m 310.938 722.717 322.147 711.454 322.147 697.576 c 322.147 683.698 310.938 672.435 297.127 672.435 c 283.315 672.435 272.106 683.698 272.106 697.576 c 272.106 711.454 283.315 722.717 297.127 722.717 c s 0.55 G 297.127 722.717 m 310.938 722.717 322.147 711.454 322.147 697.576 c 322.147 683.698 310.938 672.435 297.127 672.435 c 283.315 672.435 272.106 683.698 272.106 697.576 c 272.106 711.454 283.315 722.717 297.127 722.717 c s 0 w BT /F3 4.8 Tf 0 g 0 G 2.265 0 0 2.263 283.024 699.376 Tm (Truck)Tj ET 0.5 w 283.024 698.656 m 311.412 698.656 l S 0 w BT /F3 3.36 Tf 2.265 0 0 2.263 281.937 689.536 Tm (register\(\))Tj ET 3.36 w q 188.644 636.975 m 181.204 636.975 l 178.324 636.495 l 176.644 636.015 l 175.204 635.295 l 173.524 634.815 l 172.324 634.335 l 171.844 633.615 l 170.644 633.134 l 169.684 632.654 l 169.204 632.174 l 168.484 631.454 l 167.524 630.974 l 167.044 630.494 l 166.324 630.014 l 165.844 629.294 l 165.364 628.814 l 164.884 628.334 l 164.164 627.854 l 163.684 626.654 l 163.204 626.174 l 162.724 625.694 l 162.004 624.494 l 161.524 623.294 l 161.044 622.814 l 160.324 621.854 l 159.844 620.174 l 159.364 618.494 l 158.884 616.814 l 158.164 614.174 l 158.164 606.494 l 158.884 606.494 l 158.884 603.854 l 159.364 603.854 l 159.364 602.174 l 159.844 602.174 l 159.844 600.494 l 160.324 600.494 l 160.324 599.054 l 161.044 599.054 l 161.044 597.854 l 161.524 597.854 l 161.524 597.374 l 162.004 597.374 l 162.004 596.174 l 162.724 596.174 l 162.724 595.214 l 163.204 595.214 l 163.204 594.734 l 163.684 594.734 l 163.684 594.014 l 164.164 594.014 l 164.164 593.054 l 164.884 593.054 l 164.884 592.334 l 165.364 592.334 l 165.364 591.854 l 165.844 591.854 l 165.844 591.374 l 166.324 591.374 l 166.324 590.894 l 167.044 590.894 l 167.044 590.174 l 167.524 590.174 l 167.524 589.694 l 168.484 589.694 l 168.484 589.213 l 169.204 589.213 l 169.204 588.733 l 169.684 588.733 l 169.684 588.013 l 170.644 588.013 l 170.644 587.533 l 171.844 587.533 l 171.844 587.053 l 172.324 587.053 l 172.324 586.573 l 173.524 586.573 l 173.524 585.853 l 175.204 585.853 l 175.204 585.373 l 176.644 585.373 l 176.644 584.893 l 178.324 584.893 l 178.324 584.413 l 181.204 584.413 l 181.204 583.693 l 188.644 583.693 l 188.644 584.413 l 191.524 584.893 l 192.964 585.373 l 194.644 585.853 l 196.324 586.573 l 197.285 587.053 l 198.005 587.533 l 198.965 588.013 l 200.165 588.733 l 200.645 589.213 l 201.125 589.694 l 202.325 590.174 l 202.805 590.894 l 203.285 591.374 l 204.005 591.854 l 204.485 592.334 l 204.965 593.054 l 205.445 594.014 l 206.165 594.734 l 206.645 595.214 l 207.125 596.174 l 207.845 597.374 l 208.325 597.854 l 208.805 599.054 l 209.285 600.494 l 210.005 602.174 l 210.485 603.854 l 210.965 606.494 l 211.445 614.174 l 210.965 614.174 l 210.965 616.814 l 210.485 616.814 l 210.485 618.494 l 210.005 618.494 l 210.005 620.174 l 209.285 620.174 l 209.285 621.854 l 208.805 621.854 l 208.805 622.814 l 208.325 622.814 l 208.325 623.294 l 207.845 623.294 l 207.845 624.494 l 207.125 624.494 l 207.125 625.694 l 206.645 625.694 l 206.645 626.174 l 206.165 626.174 l 206.165 626.654 l 205.445 626.654 l 205.445 627.854 l 204.965 627.854 l 204.965 628.334 l 204.485 628.334 l 204.485 628.814 l 204.005 628.814 l 204.005 629.294 l 203.285 629.294 l 203.285 630.014 l 202.805 630.014 l 202.805 630.494 l 202.325 630.494 l 202.325 630.974 l 201.125 630.974 l 201.125 631.454 l 200.645 631.454 l 200.645 632.174 l 200.165 632.174 l 200.165 632.654 l 198.965 632.654 l 198.965 633.134 l 198.005 633.134 l 198.005 633.615 l 197.285 633.615 l 197.285 634.335 l 196.324 634.335 l 196.324 634.815 l 194.644 634.815 l 194.644 635.295 l 192.964 635.295 l 192.964 636.015 l 191.524 636.015 l 191.524 636.495 l 188.644 636.495 l 188.644 636.975 l W n 0.9 G 184.804 635.295 m 198.583 635.295 209.765 624.112 209.765 610.334 c 209.765 596.556 198.583 585.373 184.804 585.373 c 171.026 585.373 159.844 596.556 159.844 610.334 c 159.844 624.112 171.026 635.295 184.804 635.295 c s 0.7 G 184.924 634.335 m 197.841 634.335 208.325 623.744 208.325 610.694 c 208.325 597.644 197.841 587.053 184.924 587.053 c 172.007 587.053 161.524 597.644 161.524 610.694 c 161.524 623.744 172.007 634.335 184.924 634.335 c s 0.75 G 184.924 632.654 m 196.914 632.654 206.645 622.709 206.645 610.454 c 206.645 598.199 196.914 588.253 184.924 588.253 c 172.934 588.253 163.204 598.199 163.204 610.454 c 163.204 622.709 172.934 632.654 184.924 632.654 c s 0 w 0.75 g 184.924 634.335 m 197.841 634.335 208.325 623.636 208.325 610.454 c 208.325 597.272 197.841 586.573 184.924 586.573 c 172.007 586.573 161.524 597.272 161.524 610.454 c 161.524 623.636 172.007 634.335 184.924 634.335 c f Q 0 w BT /F3 3.6 Tf 2.265 0 0 2.263 167.774 607.934 Tm (FireTruck)Tj ET 0.5 w 167.774 607.394 m 203.101 607.394 l S 3.36 w q 263.286 636.975 m 256.086 636.975 l 253.446 636.495 l 251.286 636.015 l 249.606 635.295 l 248.406 634.815 l 247.446 634.335 l 246.246 633.615 l 245.766 633.134 l 244.806 632.654 l 244.086 632.174 l 243.126 631.454 l 242.406 630.974 l 241.926 630.494 l 241.446 630.014 l 240.966 629.294 l 240.246 628.814 l 239.765 628.334 l 239.285 627.854 l 238.805 626.654 l 238.085 626.174 l 237.605 625.694 l 237.125 624.494 l 236.645 624.014 l 235.925 622.814 l 235.445 621.854 l 234.965 620.174 l 234.485 618.974 l 233.765 616.814 l 233.285 614.174 l 233.285 606.494 l 233.765 606.494 l 233.765 603.854 l 234.485 6 2000 03.854 l 234.485 601.694 l 234.965 601.694 l 234.965 600.494 l 235.445 600.494 l 235.445 599.054 l 235.925 599.054 l 235.925 597.854 l 236.645 597.854 l 236.645 596.894 l 237.125 596.894 l 237.125 596.174 l 237.605 596.174 l 237.605 595.214 l 238.085 595.214 l 238.085 594.734 l 238.805 594.734 l 238.805 594.014 l 239.285 594.014 l 239.285 593.054 l 239.765 593.054 l 239.765 592.334 l 240.246 592.334 l 240.246 591.854 l 240.966 591.854 l 240.966 591.374 l 241.446 591.374 l 241.446 590.894 l 241.926 590.894 l 241.926 590.174 l 242.406 590.174 l 242.406 589.694 l 243.126 589.694 l 243.126 589.213 l 244.086 589.213 l 244.086 588.733 l 244.806 588.733 l 244.806 588.013 l 245.766 588.013 l 245.766 587.533 l 246.246 587.533 l 246.246 587.053 l 247.446 587.053 l 247.446 586.573 l 248.406 586.573 l 248.406 585.853 l 249.606 585.853 l 249.606 585.373 l 251.286 585.373 l 251.286 584.893 l 253.446 584.893 l 253.446 584.413 l 256.086 584.413 l 256.086 583.693 l 263.286 583.693 l 263.286 584.413 l 265.926 584.893 l 268.086 585.373 l 269.766 585.853 l 270.726 586.573 l 271.926 587.053 l 272.886 587.533 l 273.606 588.013 l 274.566 588.733 l 275.046 589.213 l 276.246 589.694 l 276.726 590.174 l 277.206 590.894 l 277.926 591.374 l 278.406 591.854 l 278.886 592.334 l 279.606 593.054 l 280.086 594.014 l 280.566 594.734 l 281.046 595.214 l 281.766 596.174 l 282.246 596.894 l 282.726 597.854 l 283.206 599.054 l 283.927 600.494 l 284.407 601.694 l 284.887 603.854 l 285.367 606.494 l 286.087 614.174 l 285.367 614.174 l 285.367 616.814 l 284.887 616.814 l 284.887 618.974 l 284.407 618.974 l 284.407 620.174 l 283.927 620.174 l 283.927 621.854 l 283.206 621.854 l 283.206 622.814 l 282.726 622.814 l 282.726 624.014 l 282.246 624.014 l 282.246 624.494 l 281.766 624.494 l 281.766 625.694 l 281.046 625.694 l 281.046 626.174 l 280.566 626.174 l 280.566 626.654 l 280.086 626.654 l 280.086 627.854 l 279.606 627.854 l 279.606 628.334 l 278.886 628.334 l 278.886 628.814 l 278.406 628.814 l 278.406 629.294 l 277.926 629.294 l 277.926 630.014 l 277.206 630.014 l 277.206 630.494 l 276.726 630.494 l 276.726 630.974 l 276.246 630.974 l 276.246 631.454 l 275.046 631.454 l 275.046 632.174 l 274.566 632.174 l 274.566 632.654 l 273.606 632.654 l 273.606 633.134 l 272.886 633.134 l 272.886 633.615 l 271.926 633.615 l 271.926 634.335 l 270.726 634.335 l 270.726 634.815 l 269.766 634.815 l 269.766 635.295 l 268.086 635.295 l 268.086 636.015 l 265.926 636.015 l 265.926 636.495 l 263.286 636.495 l 263.286 636.975 l W n 0.9 G 259.686 635.295 m 273.332 635.295 284.407 624.112 284.407 610.334 c 284.407 596.556 273.332 585.373 259.686 585.373 c 246.04 585.373 234.965 596.556 234.965 610.334 c 234.965 624.112 246.04 635.295 259.686 635.295 c s 0.7 G 259.686 634.335 m 272.404 634.335 282.726 623.744 282.726 610.694 c 282.726 597.644 272.404 587.053 259.686 587.053 c 246.968 587.053 236.645 597.644 236.645 610.694 c 236.645 623.744 246.968 634.335 259.686 634.335 c s 0.75 G 259.926 632.654 m 271.849 632.654 281.526 622.709 281.526 610.454 c 281.526 598.199 271.849 588.253 259.926 588.253 c 248.002 588.253 238.325 598.199 238.325 610.454 c 238.325 622.709 248.002 632.654 259.926 632.654 c s 0 w 0.75 g 259.926 634.335 m 272.777 634.335 283.206 623.636 283.206 610.454 c 283.206 597.272 272.777 586.573 259.926 586.573 c 247.075 586.573 236.645 597.272 236.645 610.454 c 236.645 623.636 247.075 634.335 259.926 634.335 c f Q 0 w BT 2.265 0 0 2.263 237.359 607.934 Tm (DumpTruck)Tj ET 0.5 w 237.359 607.394 m 281.98 607.394 l S 3.36 w q 338.168 636.975 m 331.208 636.975 l 328.328 636.495 l 326.167 636.015 l 324.727 635.295 l 323.527 634.815 l 322.327 634.335 l 321.367 633.615 l 320.887 633.134 l 319.687 632.654 l 319.207 632.174 l 318.007 631.454 l 317.527 630.974 l 317.047 630.494 l 316.567 630.014 l 315.847 629.294 l 315.367 628.814 l 314.887 628.334 l 314.167 627.854 l 313.687 626.654 l 313.207 626.174 l 312.727 625.694 l 312.007 624.494 l 311.527 624.014 l 311.047 622.814 l 310.567 621.854 l 309.847 620.174 l 309.367 618.974 l 308.887 616.814 l 308.407 614.174 l 308.407 606.494 l 308.887 606.494 l 308.887 603.854 l 309.367 603.854 l 309.367 601.694 l 309.847 601.694 l 309.847 600.494 l 310.567 600.494 l 310.567 599.054 l 311.047 599.054 l 311.047 597.854 l 311.527 597.854 l 311.527 596.894 l 312.007 596.894 l 312.007 596.174 l 312.727 596.174 l 312.727 595.214 l 313.207 595.214 l 313.207 594.734 l 313.687 594.734 l 313.687 594.014 l 314.167 594.014 l 314.167 593.054 l 314.887 593.054 l 314.887 592.334 l 315.367 592.334 l 315.367 591.854 l 315.847 591.854 l 315.847 591.374 l 316.567 591.374 l 316.567 590.894 l 317.047 590.894 l 317.047 590.174 l 317.527 590.174 l 317.527 589.694 l 318.007 589.694 l 318.007 589.213 l 319.207 589.213 l 319.207 588.733 l 319.687 588.733 l 319.687 588.013 l 320.887 588.013 l 320.887 587.533 l 321.367 587.533 l 321.367 587.053 l 322.327 587.053 l 322.327 586.573 l 323.527 586.573 l 323.527 585.853 l 324.727 585.853 l 324.727 585.373 l 326.167 585.373 l 326.167 584.893 l 328.328 584.893 l 328.328 584.413 l 331.208 584.413 l 331.208 583.693 l 338.168 583.693 l 338.168 584.413 l 340.808 584.893 l 343.208 585.373 l 344.648 585.853 l 345.848 586.573 l 346.808 587.053 l 348.008 587.533 l 348.488 588.013 l 349.688 588.733 l 350.168 589.213 l 351.368 589.694 l 351.848 590.174 l 352.328 590.894 l 352.808 591.374 l 353.528 591.854 l 354.008 592.334 l 354.488 593.054 l 354.968 594.014 l 355.688 594.734 l 356.168 595.214 l 356.648 596.174 l 357.128 596.894 l 357.848 597.854 l 358.328 599.054 l 358.808 600.494 l 359.288 601.694 l 360.008 603.854 l 360.488 606.494 l 360.968 614.174 l 360.488 614.174 l 360.488 616.814 l 360.008 616.814 l 360.008 618.974 l 359.288 618.974 l 359.288 620.174 l 358.808 620.174 l 358.808 621.854 l 358.328 621.854 l 358.328 622.814 l 357.848 622.814 l 357.848 624.014 l 357.128 624.014 l 357.128 624.494 l 356.648 624.494 l 356.648 625.694 l 356.168 625.694 l 356.168 626.174 l 355.688 626.174 l 355.688 626.654 l 354.968 626.654 l 354.968 627.854 l 354.488 627.854 l 354.488 628.334 l 354.008 628.334 l 354.008 628.814 l 353.528 628.814 l 353.528 629.294 l 352.808 629.294 l 352.808 630.014 l 352.328 630.014 l 352.328 630.494 l 351.848 630.494 l 351.848 630.974 l 351.368 630.974 l 351.368 631.454 l 350.168 631.454 l 350.168 632.174 l 349.688 632.174 l 349.688 632.654 l 348.488 632.654 l 348.488 633.134 l 348.008 633.134 l 348.008 633.615 l 346.808 633.615 l 346.808 634.335 l 345.848 634.335 l 345.848 634.815 l 344.648 634.815 l 344.648 635.295 l 343.208 635.295 l 343.208 636.015 l 340.808 636.015 l 340.808 636.495 l 338.168 636.495 l 338.168 636.975 l W n 0.9 G 334.688 635.295 m 348.267 635.295 359.288 624.112 359.288 610.334 c 359.288 596.556 348.267 585.373 334.688 585.373 c 321.108 585.373 310.087 596.556 310.087 610.334 c 310.087 624.112 321.108 635.295 334.688 635.295 c s 0.7 G 334.568 634.335 m 347.286 634.335 357.608 623.744 357.608 610.694 c 357.608 597.644 347.286 587.053 334.568 587.053 c 321.849 587.053 311.527 597.644 311.527 610.694 c 311.527 623.744 321.849 634.335 334.568 634.335 c s 0.75 G 334.928 632.654 m 346.917 632.654 356.648 622.709 356.648 610.454 c 356.648 598.199 346.917 588.253 334.928 588.253 c 322.938 588.253 313.207 598.199 313.207 610.454 c 313.207 622.709 322.938 632.654 334.928 632.654 c s 0 w 0.75 g 334.928 634.335 m 347.845 634.335 358.328 623.636 358.328 610.454 c 358.328 597.272 347.845 586.573 334.928 586.573 c 322.011 586.573 311.527 597.272 311.527 610.454 c 311.527 623.636 322.011 634.335 334.928 634.335 c f Q 0 w BT 2.265 0 0 2.263 311.837 607.934 Tm (ArmoredCar)Tj ET 0.5 w 311.837 607.394 m 358.242 607.394 l S 3.36 w q 413.289 636.975 m 405.609 636.975 l 402.969 636.495 l 401.289 636.015 l 399.609 635.295 l 397.929 634.815 l 396.969 63 2000 4.335 l 396.489 633.615 l 395.289 633.134 l 394.089 632.654 l 393.609 632.174 l 393.129 631.454 l 391.929 630.974 l 391.449 630.494 l 390.969 630.014 l 390.489 629.294 l 389.769 628.814 l 389.289 628.334 l 388.809 627.854 l 388.329 626.654 l 387.609 626.174 l 387.129 625.694 l 386.649 624.494 l 385.929 623.294 l 385.449 622.814 l 384.969 621.854 l 384.489 620.174 l 383.769 618.494 l 383.289 616.814 l 382.809 614.174 l 382.809 606.494 l 383.289 606.494 l 383.289 603.854 l 383.769 603.854 l 383.769 602.174 l 384.489 602.174 l 384.489 600.494 l 384.969 600.494 l 384.969 599.054 l 385.449 599.054 l 385.449 597.854 l 385.929 597.854 l 385.929 597.374 l 386.649 597.374 l 386.649 596.174 l 387.129 596.174 l 387.129 595.214 l 387.609 595.214 l 387.609 594.734 l 388.329 594.734 l 388.329 594.014 l 388.809 594.014 l 388.809 593.054 l 389.289 593.054 l 389.289 592.334 l 389.769 592.334 l 389.769 591.854 l 390.489 591.854 l 390.489 591.374 l 390.969 591.374 l 390.969 590.894 l 391.449 590.894 l 391.449 590.174 l 391.929 590.174 l 391.929 589.694 l 393.129 589.694 l 393.129 589.213 l 393.609 589.213 l 393.609 588.733 l 394.089 588.733 l 394.089 588.013 l 395.289 588.013 l 395.289 587.533 l 396.489 587.533 l 396.489 587.053 l 396.969 587.053 l 396.969 586.573 l 397.929 586.573 l 397.929 585.853 l 399.609 585.853 l 399.609 585.373 l 401.289 585.373 l 401.289 584.893 l 402.969 584.893 l 402.969 584.413 l 405.609 584.413 l 405.609 583.693 l 413.289 583.693 l 413.289 584.413 l 415.93 584.893 l 417.61 585.373 l 419.29 585.853 l 420.73 586.573 l 421.93 587.053 l 422.41 587.533 l 423.61 588.013 l 424.57 588.733 l 425.29 589.213 l 425.77 589.694 l 426.73 590.174 l 427.45 590.894 l 427.93 591.374 l 428.41 591.854 l 428.89 592.334 l 429.61 593.054 l 430.09 594.014 l 430.57 594.734 l 431.05 595.214 l 431.77 596.174 l 432.25 597.374 l 432.73 597.854 l 433.45 599.054 l 433.93 600.494 l 434.41 602.174 l 434.89 603.854 l 435.61 606.494 l 436.09 614.174 l 435.61 614.174 l 435.61 616.814 l 434.89 616.814 l 434.89 618.494 l 434.41 618.494 l 434.41 620.174 l 433.93 620.174 l 433.93 621.854 l 433.45 621.854 l 433.45 622.814 l 432.73 622.814 l 432.73 623.294 l 432.25 623.294 l 432.25 624.494 l 431.77 624.494 l 431.77 625.694 l 431.05 625.694 l 431.05 626.174 l 430.57 626.174 l 430.57 626.654 l 430.09 626.654 l 430.09 627.854 l 429.61 627.854 l 429.61 628.334 l 428.89 628.334 l 428.89 628.814 l 428.41 628.814 l 428.41 629.294 l 427.93 629.294 l 427.93 630.014 l 427.45 630.014 l 427.45 630.494 l 426.73 630.494 l 426.73 630.974 l 425.77 630.974 l 425.77 631.454 l 425.29 631.454 l 425.29 632.174 l 424.57 632.174 l 424.57 632.654 l 423.61 632.654 l 423.61 633.134 l 422.41 633.134 l 422.41 633.615 l 421.93 633.615 l 421.93 634.335 l 420.73 634.335 l 420.73 634.815 l 419.29 634.815 l 419.29 635.295 l 417.61 635.295 l 417.61 636.015 l 415.93 636.015 l 415.93 636.495 l 413.289 636.495 l 413.289 636.975 l W n 0.9 G 409.449 635.295 m 423.228 635.295 434.41 624.112 434.41 610.334 c 434.41 596.556 423.228 585.373 409.449 585.373 c 395.671 585.373 384.489 596.556 384.489 610.334 c 384.489 624.112 395.671 635.295 409.449 635.295 c s 0.7 G 409.449 634.335 m 422.3 634.335 432.73 623.744 432.73 610.694 c 432.73 597.644 422.3 587.053 409.449 587.053 c 396.598 587.053 386.169 597.644 386.169 610.694 c 386.169 623.744 396.598 634.335 409.449 634.335 c s 0.75 G 409.329 632.654 m 421.319 632.654 431.05 622.709 431.05 610.454 c 431.05 598.199 421.319 588.253 409.329 588.253 c 397.34 588.253 387.609 598.199 387.609 610.454 c 387.609 622.709 397.34 632.654 409.329 632.654 c s 0 w 0.75 g 409.329 634.335 m 422.247 634.335 432.73 623.636 432.73 610.454 c 432.73 597.272 422.247 586.573 409.329 586.573 c 396.412 586.573 385.929 597.272 385.929 610.454 c 385.929 623.636 396.412 634.335 409.329 634.335 c f Q 0 w BT /F3 4.8 Tf 2.265 0 0 2.263 399.905 607.454 Tm (Van)Tj ET 0.5 w 399.905 606.734 m 419.523 606.734 l S 0.54 w 2 j 185.044 636.255 m 268.326 681.856 l S 0 j 2 j 273.846 684.496 m 267.126 676.335 l 267.846 681.376 l 263.526 683.536 l 273.846 684.496 l b* 0 j 2 j 259.686 636.255 m 280.326 669.375 l S 0 j 2 j 283.446 674.655 m 281.286 664.335 l 280.326 669.375 l 275.286 668.175 l 283.446 674.655 l b* 0 j 2 j 334.568 636.255 m 313.447 668.895 l S 0 j 2 j 310.087 674.175 m 318.967 668.175 l 313.447 668.895 l 312.247 663.855 l 310.087 674.175 l b* 0 j 2 j 409.209 636.255 m 325.927 681.856 l S 0 j 2 j 320.407 684.496 m 330.728 683.536 l 326.407 681.376 l 327.608 676.335 l 320.407 684.496 l b* 0 j 2.16 w q 189.364 636.975 m 181.684 636.975 l 178.804 636.495 l 177.364 636.015 l 175.684 635.295 l 174.004 634.815 l 173.044 634.335 l 172.324 633.615 l 171.364 633.134 l 170.164 632.654 l 169.684 632.174 l 169.204 631.454 l 168.004 630.974 l 167.524 630.494 l 167.044 630.014 l 166.324 629.294 l 165.844 628.814 l 165.364 628.334 l 164.884 627.854 l 164.164 626.654 l 163.684 626.174 l 163.204 625.694 l 162.724 624.494 l 162.004 623.294 l 161.524 622.814 l 161.044 621.854 l 160.324 620.174 l 159.844 618.494 l 159.364 616.814 l 158.884 614.174 l 158.884 606.494 l 159.364 606.494 l 159.364 603.854 l 159.844 603.854 l 159.844 602.174 l 160.324 602.174 l 160.324 600.494 l 161.044 600.494 l 161.044 599.054 l 161.524 599.054 l 161.524 597.854 l 162.004 597.854 l 162.004 597.374 l 162.724 597.374 l 162.724 596.174 l 163.204 596.174 l 163.204 595.214 l 163.684 595.214 l 163.684 594.734 l 164.164 594.734 l 164.164 594.014 l 164.884 594.014 l 164.884 593.054 l 165.364 593.054 l 165.364 592.334 l 165.844 592.334 l 165.844 591.854 l 166.324 591.854 l 166.324 591.374 l 167.044 591.374 l 167.044 590.894 l 167.524 590.894 l 167.524 590.174 l 168.004 590.174 l 168.004 589.694 l 169.204 589.694 l 169.204 589.213 l 169.684 589.213 l 169.684 588.733 l 170.164 588.733 l 170.164 588.013 l 171.364 588.013 l 171.364 587.533 l 172.324 587.533 l 172.324 587.053 l 173.044 587.053 l 173.044 586.573 l 174.004 586.573 l 174.004 585.853 l 175.684 585.853 l 175.684 585.373 l 177.364 585.373 l 177.364 584.893 l 178.804 584.893 l 178.804 584.413 l 181.684 584.413 l 181.684 583.693 l 189.364 583.693 l 189.364 584.413 l 192.004 584.893 l 193.684 585.373 l 195.124 585.853 l 196.805 586.573 l 198.005 587.053 l 198.485 587.533 l 199.685 588.013 l 200.645 588.733 l 201.125 589.213 l 201.845 589.694 l 202.805 590.174 l 203.285 590.894 l 204.005 591.374 l 204.485 591.854 l 204.965 592.334 l 205.445 593.054 l 206.165 594.014 l 206.645 594.734 l 207.125 595.214 l 207.845 596.174 l 208.325 597.374 l 208.805 597.854 l 209.285 599.054 l 210.005 600.494 l 210.485 602.174 l 210.965 603.854 l 211.445 606.494 l 212.165 614.174 l 211.445 614.174 l 211.445 616.814 l 210.965 616.814 l 210.965 618.494 l 210.485 618.494 l 210.485 620.174 l 210.005 620.174 l 210.005 621.854 l 209.285 621.854 l 209.285 622.814 l 208.805 622.814 l 208.805 623.294 l 208.325 623.294 l 208.325 624.494 l 207.845 624.494 l 207.845 625.694 l 207.125 625.694 l 207.125 626.174 l 206.645 626.174 l 206.645 626.654 l 206.165 626.654 l 206.165 627.854 l 205.445 627.854 l 205.445 628.334 l 204.965 628.334 l 204.965 628.814 l 204.485 628.814 l 204.485 629.294 l 204.005 629.294 l 204.005 630.014 l 203.285 630.014 l 203.285 630.494 l 202.805 630.494 l 202.805 630.974 l 201.845 630.974 l 201.845 631.454 l 201.125 631.454 l 201.125 632.174 l 200.645 632.174 l 200.645 632.654 l 199.685 632.654 l 199.685 633.134 l 198.485 633.134 l 198.485 633.615 l 198.005 633.615 l 198.005 634.335 l 196.805 634.335 l 196.805 634.815 l 195.124 634.815 l 195.124 635.295 l 193.684 635.295 l 193.684 636.015 l 192.004 636.015 l 192.004 636.495 l 189.364 636.495 l 189.364 636.975 l W n 0.65 g 131.523 611.534 m 184.804 664.575 l 186.964 664.575 l 186.964 662.415 l 133.683 609.374 l 131.523 609.374 l 2000 f 0.659 g 133.203 609.854 m 186.484 663.135 l 188.644 663.135 l 188.644 660.975 l 135.363 607.694 l 133.203 607.694 l f 0.667 g 134.403 608.654 m 187.684 661.935 l 189.844 661.935 l 189.844 659.775 l 136.563 606.494 l 134.403 606.494 l f 0.676 g 135.363 607.694 m 188.644 660.975 l 190.804 660.975 l 190.804 658.815 l 137.523 605.534 l 135.363 605.534 l f 0.685 g 136.563 606.494 m 189.844 659.775 l 192.004 659.775 l 192.004 657.615 l 138.723 604.334 l 136.563 604.334 l f 0.693 g 137.523 605.534 m 190.804 658.815 l 192.964 658.815 l 192.964 656.655 l 139.683 603.374 l 137.523 603.374 l f 0.702 g 138.723 604.334 m 192.004 657.615 l 194.164 657.615 l 194.164 655.455 l 140.883 602.174 l 138.723 602.174 l f 0.711 g 139.683 603.374 m 192.964 656.415 l 195.124 656.415 l 195.124 654.255 l 141.843 601.214 l 139.683 601.214 l f 0.72 g 140.883 602.174 m 194.164 655.455 l 196.324 655.455 l 196.324 653.295 l 143.043 600.014 l 140.883 600.014 l f 0.728 g 141.843 601.214 m 195.124 654.255 l 197.285 654.255 l 197.285 652.095 l 144.003 599.054 l 141.843 599.054 l f 0.737 g 143.043 600.014 m 196.324 653.295 l 198.485 653.295 l 198.485 651.135 l 145.203 597.854 l 143.043 597.854 l f 0.746 g 144.243 599.054 m 197.285 652.095 l 199.445 652.095 l 199.445 649.935 l 146.403 596.894 l 144.243 596.894 l f 0.754 g 145.203 597.854 m 198.485 651.135 l 200.645 651.135 l 200.645 648.975 l 147.363 595.694 l 145.203 595.694 l f 0.763 g 146.403 596.174 m 199.685 649.455 l 201.845 649.455 l 201.845 647.295 l 148.563 594.014 l 146.403 594.014 l f 0.772 g 147.363 595.214 m 200.645 648.495 l 202.805 648.495 l 202.805 646.335 l 149.523 593.054 l 147.363 593.054 l f 0.78 g 148.563 594.014 m 201.845 647.295 l 204.005 647.295 l 204.005 645.135 l 150.723 591.854 l 148.563 591.854 l f 0.789 g 149.523 593.054 m 202.805 646.095 l 204.965 646.095 l 204.965 643.935 l 151.683 590.894 l 149.523 590.894 l f 0.798 g 150.723 591.854 m 204.005 645.135 l 206.165 645.135 l 206.165 642.975 l 152.884 589.694 l 150.723 589.694 l f 0.807 g 151.683 590.894 m 204.965 643.935 l 207.125 643.935 l 207.125 641.775 l 153.844 588.733 l 151.683 588.733 l f 0.815 g 152.884 589.694 m 206.165 642.975 l 208.325 642.975 l 208.325 640.815 l 155.044 587.533 l 152.884 587.533 l f 0.824 g 153.844 588.733 m 207.125 641.775 l 209.285 641.775 l 209.285 639.615 l 156.004 586.573 l 153.844 586.573 l f 0.833 g 155.044 587.533 m 208.325 640.815 l 210.485 640.815 l 210.485 638.655 l 157.204 585.373 l 155.044 585.373 l f 0.841 g 156.004 586.573 m 209.285 639.615 l 211.445 639.615 l 211.445 637.455 l 158.164 584.413 l 156.004 584.413 l f 0.85 g 157.204 585.373 m 210.485 638.655 l 212.645 638.655 l 212.645 636.495 l 159.364 583.213 l 157.204 583.213 l f 158.164 584.413 m 211.445 637.455 l 213.605 637.455 l 213.605 635.295 l 160.324 582.253 l 158.164 582.253 l f 0.841 g 159.844 582.733 m 213.125 636.015 l 215.285 636.015 l 215.285 633.855 l 162.004 580.573 l 159.844 580.573 l f 0.833 g 161.044 581.533 m 214.325 634.815 l 216.485 634.815 l 216.485 632.654 l 163.204 579.373 l 161.044 579.373 l f 0.824 g 162.004 580.573 m 215.285 633.615 l 217.445 633.615 l 217.445 631.454 l 164.164 578.413 l 162.004 578.413 l f 0.815 g 163.204 579.373 m 216.485 632.654 l 218.645 632.654 l 218.645 630.494 l 165.364 577.213 l 163.204 577.213 l f 0.807 g 164.164 578.413 m 217.445 631.454 l 219.605 631.454 l 219.605 629.294 l 166.324 576.253 l 164.164 576.253 l f 0.798 g 165.364 577.213 m 218.645 630.494 l 220.805 630.494 l 220.805 628.334 l 167.524 575.053 l 165.364 575.053 l f 0.789 g 166.324 576.253 m 219.605 629.294 l 221.765 629.294 l 221.765 627.134 l 168.484 574.093 l 166.324 574.093 l f 0.78 g 167.524 575.053 m 220.805 628.334 l 222.965 628.334 l 222.965 626.174 l 169.684 572.893 l 167.524 572.893 l f 0.772 g 168.484 574.093 m 221.765 627.134 l 223.925 627.134 l 223.925 624.974 l 170.644 571.933 l 168.484 571.933 l f 0.763 g 169.684 572.893 m 222.965 626.174 l 225.125 626.174 l 225.125 624.014 l 171.844 570.733 l 169.684 570.733 l f 0.754 g 170.644 571.933 m 223.925 624.974 l 226.085 624.974 l 226.085 622.814 l 172.804 569.773 l 170.644 569.773 l f 0.746 g 171.844 570.253 m 225.125 623.294 l 227.285 623.294 l 227.285 621.134 l 174.004 568.093 l 171.844 568.093 l f 0.737 g 173.044 569.053 m 226.325 622.334 l 228.485 622.334 l 228.485 620.174 l 175.204 566.893 l 173.044 566.893 l f 0.728 g 174.004 568.093 m 227.285 621.134 l 229.445 621.134 l 229.445 618.974 l 176.164 565.933 l 174.004 565.933 l f 0.72 g 175.204 566.893 m 228.485 620.174 l 230.645 620.174 l 230.645 618.014 l 177.364 564.733 l 175.204 564.733 l f 0.711 g 176.164 565.933 m 229.445 618.974 l 231.605 618.974 l 231.605 616.814 l 178.324 563.773 l 176.164 563.773 l f 0.702 g 177.364 564.733 m 230.645 618.014 l 232.805 618.014 l 232.805 615.854 l 179.524 562.573 l 177.364 562.573 l f 0.693 g 178.324 563.773 m 231.605 616.814 l 233.765 616.814 l 233.765 614.654 l 180.484 561.613 l 178.324 561.613 l f 0.685 g 179.524 562.573 m 232.805 615.854 l 234.965 615.854 l 234.965 613.694 l 181.684 560.413 l 179.524 560.413 l f 0.676 g 180.484 561.613 m 233.765 614.654 l 235.925 614.654 l 235.925 612.494 l 182.644 559.453 l 180.484 559.453 l f 0.667 g 181.684 560.413 m 234.965 613.694 l 237.125 613.694 l 237.125 611.534 l 183.844 558.253 l 181.684 558.253 l f 0.659 g 182.644 559.213 m 235.925 612.494 l 238.085 612.494 l 238.085 610.334 l 184.804 557.053 l 182.644 557.053 l f 0.65 g 183.844 558.253 m 237.125 611.534 l 239.285 611.534 l 239.285 609.374 l 186.004 556.093 l 183.844 556.093 l f Q 0.36 w 0.55 G 185.524 636.795 m 200.131 636.795 211.985 624.94 211.985 610.334 c 211.985 595.728 200.131 583.873 185.524 583.873 c 170.918 583.873 159.064 595.728 159.064 610.334 c 159.064 624.94 170.918 636.795 185.524 636.795 c s 0.65 G 185.404 636.315 m 199.679 636.315 211.265 624.729 211.265 610.454 c 211.265 596.179 199.679 584.593 185.404 584.593 c 171.129 584.593 159.544 596.179 159.544 610.454 c 159.544 624.729 171.129 636.315 185.404 636.315 c s 0.9 G 185.164 635.835 m 199.307 635.835 210.785 624.357 210.785 610.214 c 210.785 596.071 199.307 584.593 185.164 584.593 c 171.022 584.593 159.544 596.071 159.544 610.214 c 159.544 624.357 171.022 635.835 185.164 635.835 c s 0.65 G 185.404 635.835 m 199.414 635.835 210.785 624.464 210.785 610.454 c 210.785 596.444 199.414 585.073 185.404 585.073 c 171.394 585.073 160.024 596.444 160.024 610.454 c 160.024 624.464 171.394 635.835 185.404 635.835 c s 0.55 G 185.404 635.115 m 199.149 635.115 210.305 624.013 210.305 610.334 c 210.305 596.655 199.149 585.553 185.404 585.553 c 171.659 585.553 160.504 596.655 160.504 610.334 c 160.504 624.013 171.659 635.115 185.404 635.115 c s 0 w BT /F3 3.6 Tf 0 G 2.265 0 0 2.263 163.425 611.774 Tm (DumpTruck)Tj ET 0.5 w 163.425 611.234 m 208.046 611.234 l S 0 w BT /F2 3.36 Tf 2.265 0 0 2.263 171.579 602.174 Tm (register\(\))Tj ET 2.16 w q 263.286 636.015 m 256.086 636.015 l 253.446 635.295 l 251.286 634.815 l 249.606 634.335 l 248.406 633.615 l 247.446 633.134 l 246.246 632.654 l 245.766 632.174 l 244.806 631.454 l 244.086 630.974 l 243.126 630.494 l 242.406 630.014 l 241.926 629.294 l 241.446 628.814 l 240.966 628.334 l 240.246 627.854 l 239.765 627.134 l 239.285 626.654 l 238.805 626.174 l 238.085 624.974 l 237.605 624.494 l 237.125 623.294 l 236.645 622.814 l 235.925 621.854 l 235.445 620.654 l 234.965 619.694 l 234.485 618.014 l 233.765 615.854 l 233.285 612.974 l 233.285 606.014 l 233.765 606.014 l 233.765 603.374 l 234.485 603.374 l 234.485 601.214 l 234.965 601.214 l 234.965 599.534 l 235.445 599.534 l 235.445 598.334 l 235.925 598.334 l 235.925 597.374 l 236.645 597.374 l 236.645 596.174 l 237.125 596.174 l 237.125 595.694 l 237.605 595.694 l 237.605 594.734 l 2 2000 38.085 594.734 l 238.085 594.014 l 238.805 594.014 l 238.805 593.054 l 239.285 593.054 l 239.285 592.334 l 239.765 592.334 l 239.765 591.854 l 240.246 591.854 l 240.246 591.374 l 240.966 591.374 l 240.966 590.894 l 241.446 590.894 l 241.446 590.174 l 241.926 590.174 l 241.926 589.694 l 242.406 589.694 l 242.406 589.213 l 243.126 589.213 l 243.126 588.733 l 244.086 588.733 l 244.086 588.013 l 244.806 588.013 l 244.806 587.533 l 245.766 587.533 l 245.766 587.053 l 246.246 587.053 l 246.246 586.573 l 247.446 586.573 l 247.446 585.853 l 248.406 585.853 l 248.406 585.373 l 249.606 585.373 l 249.606 584.893 l 251.286 584.893 l 251.286 584.413 l 253.446 584.413 l 253.446 583.693 l 256.086 583.693 l 256.086 583.213 l 263.286 583.213 l 263.286 583.693 l 265.926 584.413 l 268.086 584.893 l 269.766 585.373 l 270.726 585.853 l 271.926 586.573 l 272.886 587.053 l 273.606 587.533 l 274.566 588.013 l 275.046 588.733 l 276.246 589.213 l 276.726 589.694 l 277.206 590.174 l 277.926 590.894 l 278.406 591.374 l 278.886 591.854 l 279.606 592.334 l 280.086 593.054 l 280.566 594.014 l 281.046 594.734 l 281.766 595.694 l 282.246 596.174 l 282.726 597.374 l 283.206 598.334 l 283.927 599.534 l 284.407 601.214 l 284.887 603.374 l 285.367 606.014 l 286.087 612.974 l 285.367 612.974 l 285.367 615.854 l 284.887 615.854 l 284.887 618.014 l 284.407 618.014 l 284.407 619.694 l 283.927 619.694 l 283.927 620.654 l 283.206 620.654 l 283.206 621.854 l 282.726 621.854 l 282.726 622.814 l 282.246 622.814 l 282.246 623.294 l 281.766 623.294 l 281.766 624.494 l 281.046 624.494 l 281.046 624.974 l 280.566 624.974 l 280.566 626.174 l 280.086 626.174 l 280.086 626.654 l 279.606 626.654 l 279.606 627.134 l 278.886 627.134 l 278.886 627.854 l 278.406 627.854 l 278.406 628.334 l 277.926 628.334 l 277.926 628.814 l 277.206 628.814 l 277.206 629.294 l 276.726 629.294 l 276.726 630.014 l 276.246 630.014 l 276.246 630.494 l 275.046 630.494 l 275.046 630.974 l 274.566 630.974 l 274.566 631.454 l 273.606 631.454 l 273.606 632.174 l 272.886 632.174 l 272.886 632.654 l 271.926 632.654 l 271.926 633.134 l 270.726 633.134 l 270.726 633.615 l 269.766 633.615 l 269.766 634.335 l 268.086 634.335 l 268.086 634.815 l 265.926 634.815 l 265.926 635.295 l 263.286 635.295 l 263.286 636.015 l W n 0.65 g 207.125 610.814 m 259.446 663.135 l 261.606 663.135 l 261.606 660.975 l 209.285 608.654 l 207.125 608.654 l f 0.659 g 208.325 609.374 m 260.406 661.455 l 262.566 661.455 l 262.566 659.295 l 210.485 607.214 l 208.325 607.214 l f 0.667 g 209.285 608.174 m 261.606 660.255 l 263.766 660.255 l 263.766 658.095 l 211.445 606.014 l 209.285 606.014 l f 0.676 g 210.485 607.214 m 262.566 659.295 l 264.726 659.295 l 264.726 657.135 l 212.645 605.054 l 210.485 605.054 l f 0.685 g 211.445 606.014 m 263.766 658.095 l 265.926 658.095 l 265.926 655.935 l 213.605 603.854 l 211.445 603.854 l f 0.693 g 212.645 605.054 m 264.726 657.135 l 266.886 657.135 l 266.886 654.975 l 214.805 602.894 l 212.645 602.894 l f 0.702 g 213.605 603.854 m 265.926 655.935 l 268.086 655.935 l 268.086 653.775 l 215.765 601.694 l 213.605 601.694 l f 0.711 g 214.805 602.654 m 266.886 654.975 l 269.046 654.975 l 269.046 652.815 l 216.965 600.494 l 214.805 600.494 l f 0.72 g 216.005 601.694 m 268.086 653.775 l 270.246 653.775 l 270.246 651.615 l 218.165 599.534 l 216.005 599.534 l f 0.728 g 216.965 600.494 m 269.046 652.815 l 271.206 652.815 l 271.206 650.655 l 219.125 598.334 l 216.965 598.334 l f 0.737 g 218.165 599.534 m 270.246 651.615 l 272.406 651.615 l 272.406 649.455 l 220.325 597.374 l 218.165 597.374 l f 0.746 g 219.125 598.334 m 271.446 650.655 l 273.606 650.655 l 273.606 648.495 l 221.285 596.174 l 219.125 596.174 l f 0.754 g 220.325 597.374 m 272.406 649.455 l 274.566 649.455 l 274.566 647.295 l 222.485 595.214 l 220.325 595.214 l f 0.763 g 221.285 596.174 m 273.606 648.495 l 275.766 648.495 l 275.766 646.335 l 223.445 594.014 l 221.285 594.014 l f 0.772 g 222.485 595.214 m 274.566 647.295 l 276.726 647.295 l 276.726 645.135 l 224.645 593.054 l 222.485 593.054 l f 0.78 g 223.445 594.014 m 275.766 646.095 l 277.926 646.095 l 277.926 643.935 l 225.605 591.854 l 223.445 591.854 l f 0.789 g 224.645 593.054 m 276.726 645.135 l 278.886 645.135 l 278.886 642.975 l 226.805 590.894 l 224.645 590.894 l f 0.798 g 225.605 591.854 m 277.926 643.935 l 280.086 643.935 l 280.086 641.775 l 227.765 589.694 l 225.605 589.694 l f 0.807 g 226.805 590.894 m 278.886 642.975 l 281.046 642.975 l 281.046 640.815 l 228.965 588.733 l 226.805 588.733 l f 0.815 g 227.765 589.694 m 280.086 641.775 l 282.246 641.775 l 282.246 639.615 l 229.925 587.533 l 227.765 587.533 l f 0.824 g 228.965 588.733 m 281.046 640.815 l 283.206 640.815 l 283.206 638.655 l 231.125 586.573 l 228.965 586.573 l f 0.833 g 229.925 587.533 m 282.246 639.615 l 284.407 639.615 l 284.407 637.455 l 232.085 585.373 l 229.925 585.373 l f 0.841 g 231.125 586.573 m 283.206 638.655 l 285.367 638.655 l 285.367 636.495 l 233.285 584.413 l 231.125 584.413 l f 0.85 g 232.085 585.373 m 284.407 637.455 l 286.567 637.455 l 286.567 635.295 l 234.245 583.213 l 232.085 583.213 l f 233.285 584.413 m 285.367 636.495 l 287.527 636.495 l 287.527 634.335 l 235.445 582.253 l 233.285 582.253 l f 0.841 g 234.485 582.733 m 286.567 634.815 l 288.727 634.815 l 288.727 632.654 l 236.645 580.573 l 234.485 580.573 l f 0.833 g 235.445 581.533 m 287.527 633.615 l 289.687 633.615 l 289.687 631.454 l 237.605 579.373 l 235.445 579.373 l f 0.824 g 236.645 580.573 m 288.727 632.654 l 290.887 632.654 l 290.887 630.494 l 238.805 578.413 l 236.645 578.413 l f 0.815 g 237.605 579.373 m 289.927 631.454 l 292.087 631.454 l 292.087 629.294 l 239.765 577.213 l 237.605 577.213 l f 0.807 g 238.805 578.413 m 290.887 630.494 l 293.047 630.494 l 293.047 628.334 l 240.966 576.253 l 238.805 576.253 l f 0.798 g 239.765 577.213 m 292.087 629.294 l 294.247 629.294 l 294.247 627.134 l 241.926 575.053 l 239.765 575.053 l f 0.789 g 240.966 576.253 m 293.047 628.334 l 295.207 628.334 l 295.207 626.174 l 243.126 574.093 l 240.966 574.093 l f 0.78 g 241.926 575.053 m 294.247 627.134 l 296.407 627.134 l 296.407 624.974 l 244.086 572.893 l 241.926 572.893 l f 0.772 g 243.126 574.093 m 295.207 626.174 l 297.367 626.174 l 297.367 624.014 l 245.286 571.933 l 243.126 571.933 l f 0.763 g 244.086 572.893 m 296.407 624.974 l 298.567 624.974 l 298.567 622.814 l 246.246 570.733 l 244.086 570.733 l f 0.754 g 245.286 571.933 m 297.367 624.014 l 299.527 624.014 l 299.527 621.854 l 247.446 569.773 l 245.286 569.773 l f 0.746 g 246.246 570.733 m 298.567 622.814 l 300.727 622.814 l 300.727 620.654 l 248.406 568.573 l 246.246 568.573 l f 0.737 g 247.446 569.533 m 299.527 621.854 l 301.687 621.854 l 301.687 619.694 l 249.606 567.373 l 247.446 567.373 l f 0.728 g 248.406 568.573 m 300.727 620.654 l 302.887 620.654 l 302.887 618.494 l 250.566 566.413 l 248.406 566.413 l f 0.72 g 249.606 567.373 m 301.687 619.694 l 303.847 619.694 l 303.847 617.534 l 251.766 565.213 l 249.606 565.213 l f 0.711 g 250.566 566.413 m 302.887 618.494 l 305.047 618.494 l 305.047 616.334 l 252.726 564.253 l 250.566 564.253 l f 0.702 g 251.766 565.213 m 303.847 617.534 l 306.007 617.534 l 306.007 615.374 l 253.926 563.053 l 251.766 563.053 l f 0.693 g 252.966 564.253 m 305.047 616.334 l 307.207 616.334 l 307.207 614.174 l 255.126 562.093 l 252.966 562.093 l f 0.685 g 253.926 563.053 m 306.247 615.374 l 308.407 615.374 l 308.407 613.214 l 256.086 560.893 l 253.926 560.893 l f 0.676 g 255.126 562.093 m 307.207 614.174 l 309.367 614.174 l 309.367 612.014 l 257.286 559.933 l 255.126 559.933 l f 0.667 g 256.086 560.893 m 308.407 612.974 l 310.567 612.974 l 310.567 610.814 l 258.246 558.733 l 256.086 558.733 l f 0.659 g 257. 2000 286 559.933 m 309.367 612.014 l 311.527 612.014 l 311.527 609.854 l 259.446 557.773 l 257.286 557.773 l f 0.65 g 258.246 558.733 m 310.567 610.814 l 312.727 610.814 l 312.727 608.654 l 260.406 556.573 l 258.246 556.573 l f Q 0.36 w 0.55 G 259.686 635.835 m 274.16 635.835 285.907 624.088 285.907 609.614 c 285.907 595.14 274.16 583.393 259.686 583.393 c 245.212 583.393 233.465 595.14 233.465 609.614 c 233.465 624.088 245.212 635.835 259.686 635.835 c s 0.65 G 259.326 635.115 m 273.601 635.115 285.187 623.529 285.187 609.254 c 285.187 594.979 273.601 583.393 259.326 583.393 c 245.051 583.393 233.465 594.979 233.465 609.254 c 233.465 623.529 245.051 635.115 259.326 635.115 c s 0.9 G 259.566 635.115 m 273.709 635.115 285.187 623.637 285.187 609.494 c 285.187 595.351 273.709 583.873 259.566 583.873 c 245.423 583.873 233.945 595.351 233.945 609.494 c 233.945 623.637 245.423 635.115 259.566 635.115 c s 0.65 G 259.686 634.635 m 273.497 634.635 284.707 623.425 284.707 609.614 c 284.707 595.803 273.497 584.593 259.686 584.593 c 245.875 584.593 234.665 595.803 234.665 609.614 c 234.665 623.425 245.875 634.635 259.686 634.635 c s 0.55 G 259.686 634.635 m 273.497 634.635 284.707 623.425 284.707 609.614 c 284.707 595.803 273.497 584.593 259.686 584.593 c 245.875 584.593 234.665 595.803 234.665 609.614 c 234.665 623.425 245.875 634.635 259.686 634.635 c s 0 w BT /F3 4.8 Tf 0 G 2.265 0 0 2.263 248.231 610.814 Tm (Semi)Tj ET 0.5 w 248.231 610.094 m 271.911 610.094 l S 0 w q 234.965 599.054 49.921 20.64 re W n BT /F3 3.36 Tf 2.265 0 0 2.263 244.426 600.974 Tm (register\(\))Tj ET Q 2.16 w q 338.168 636.975 m 331.208 636.975 l 328.328 636.495 l 326.167 636.015 l 324.727 635.295 l 323.527 634.815 l 322.327 634.335 l 321.367 633.615 l 320.887 633.134 l 319.687 632.654 l 319.207 632.174 l 318.007 631.454 l 317.527 630.974 l 317.047 630.494 l 316.567 630.014 l 315.847 629.294 l 315.367 628.814 l 314.887 628.334 l 314.167 627.854 l 313.687 626.654 l 313.207 626.174 l 312.727 625.694 l 312.007 624.494 l 311.527 624.014 l 311.047 622.814 l 310.567 621.854 l 309.847 620.174 l 309.367 618.974 l 308.887 616.814 l 308.407 614.174 l 308.407 606.494 l 308.887 606.494 l 308.887 603.854 l 309.367 603.854 l 309.367 601.694 l 309.847 601.694 l 309.847 600.494 l 310.567 600.494 l 310.567 599.054 l 311.047 599.054 l 311.047 597.854 l 311.527 597.854 l 311.527 596.894 l 312.007 596.894 l 312.007 596.174 l 312.727 596.174 l 312.727 595.214 l 313.207 595.214 l 313.207 594.734 l 313.687 594.734 l 313.687 594.014 l 314.167 594.014 l 314.167 593.054 l 314.887 593.054 l 314.887 592.334 l 315.367 592.334 l 315.367 591.854 l 315.847 591.854 l 315.847 591.374 l 316.567 591.374 l 316.567 590.894 l 317.047 590.894 l 317.047 590.174 l 317.527 590.174 l 317.527 589.694 l 318.007 589.694 l 318.007 589.213 l 319.207 589.213 l 319.207 588.733 l 319.687 588.733 l 319.687 588.013 l 320.887 588.013 l 320.887 587.533 l 321.367 587.533 l 321.367 587.053 l 322.327 587.053 l 322.327 586.573 l 323.527 586.573 l 323.527 585.853 l 324.727 585.853 l 324.727 585.373 l 326.167 585.373 l 326.167 584.893 l 328.328 584.893 l 328.328 584.413 l 331.208 584.413 l 331.208 583.693 l 338.168 583.693 l 338.168 584.413 l 340.808 584.893 l 343.208 585.373 l 344.648 585.853 l 345.848 586.573 l 346.808 587.053 l 348.008 587.533 l 348.488 588.013 l 349.688 588.733 l 350.168 589.213 l 351.368 589.694 l 351.848 590.174 l 352.328 590.894 l 352.808 591.374 l 353.528 591.854 l 354.008 592.334 l 354.488 593.054 l 354.968 594.014 l 355.688 594.734 l 356.168 595.214 l 356.648 596.174 l 357.128 596.894 l 357.848 597.854 l 358.328 599.054 l 358.808 600.494 l 359.288 601.694 l 360.008 603.854 l 360.488 606.494 l 360.968 614.174 l 360.488 614.174 l 360.488 616.814 l 360.008 616.814 l 360.008 618.974 l 359.288 618.974 l 359.288 620.174 l 358.808 620.174 l 358.808 621.854 l 358.328 621.854 l 358.328 622.814 l 357.848 622.814 l 357.848 624.014 l 357.128 624.014 l 357.128 624.494 l 356.648 624.494 l 356.648 625.694 l 356.168 625.694 l 356.168 626.174 l 355.688 626.174 l 355.688 626.654 l 354.968 626.654 l 354.968 627.854 l 354.488 627.854 l 354.488 628.334 l 354.008 628.334 l 354.008 628.814 l 353.528 628.814 l 353.528 629.294 l 352.808 629.294 l 352.808 630.014 l 352.328 630.014 l 352.328 630.494 l 351.848 630.494 l 351.848 630.974 l 351.368 630.974 l 351.368 631.454 l 350.168 631.454 l 350.168 632.174 l 349.688 632.174 l 349.688 632.654 l 348.488 632.654 l 348.488 633.134 l 348.008 633.134 l 348.008 633.615 l 346.808 633.615 l 346.808 634.335 l 345.848 634.335 l 345.848 634.815 l 344.648 634.815 l 344.648 635.295 l 343.208 635.295 l 343.208 636.015 l 340.808 636.015 l 340.808 636.495 l 338.168 636.495 l 338.168 636.975 l W n 0.65 g 281.046 611.534 m 333.368 663.615 l 335.528 663.615 l 335.528 661.455 l 283.206 609.374 l 281.046 609.374 l f 0.659 g 282.726 609.854 m 335.048 661.935 l 337.208 661.935 l 337.208 659.775 l 284.887 607.694 l 282.726 607.694 l f 0.667 g 283.927 608.654 m 336.008 660.975 l 338.168 660.975 l 338.168 658.815 l 286.087 606.494 l 283.927 606.494 l f 0.676 g 284.887 607.694 m 337.208 659.775 l 339.368 659.775 l 339.368 657.615 l 287.047 605.534 l 284.887 605.534 l f 0.685 g 286.087 606.494 m 338.168 658.815 l 340.328 658.815 l 340.328 656.655 l 288.247 604.334 l 286.087 604.334 l f 0.693 g 287.047 605.534 m 339.368 657.615 l 341.528 657.615 l 341.528 655.455 l 289.207 603.374 l 287.047 603.374 l f 0.702 g 288.247 604.334 m 340.328 656.415 l 342.488 656.415 l 342.488 654.255 l 290.407 602.174 l 288.247 602.174 l f 0.711 g 289.207 603.374 m 341.528 655.455 l 343.688 655.455 l 343.688 653.295 l 291.367 601.214 l 289.207 601.214 l f 0.72 g 290.407 602.174 m 342.488 654.255 l 344.648 654.255 l 344.648 652.095 l 292.567 600.014 l 290.407 600.014 l f 0.728 g 291.367 601.214 m 343.688 653.295 l 345.848 653.295 l 345.848 651.135 l 293.527 599.054 l 291.367 599.054 l f 0.737 g 292.567 600.014 m 344.648 652.095 l 346.808 652.095 l 346.808 649.935 l 294.727 597.854 l 292.567 597.854 l f 0.746 g 293.527 599.054 m 345.848 651.135 l 348.008 651.135 l 348.008 648.975 l 295.687 596.894 l 293.527 596.894 l f 0.754 g 294.727 597.854 m 346.808 649.935 l 348.968 649.935 l 348.968 647.775 l 296.887 595.694 l 294.727 595.694 l f 0.763 g 295.687 596.894 m 348.008 648.975 l 350.168 648.975 l 350.168 646.815 l 297.847 594.734 l 295.687 594.734 l f 0.772 g 296.887 595.694 m 348.968 647.775 l 351.128 647.775 l 351.128 645.615 l 299.047 593.534 l 296.887 593.534 l f 0.78 g 298.087 594.734 m 350.168 646.815 l 352.328 646.815 l 352.328 644.655 l 300.247 592.574 l 298.087 592.574 l f 0.789 g 299.047 593.534 m 351.368 645.615 l 353.528 645.615 l 353.528 643.455 l 301.207 591.374 l 299.047 591.374 l f 0.798 g 300.247 592.334 m 352.328 644.655 l 354.488 644.655 l 354.488 642.495 l 302.407 590.174 l 300.247 590.174 l f 0.807 g 301.207 591.374 m 353.528 643.455 l 355.688 643.455 l 355.688 641.295 l 303.367 589.213 l 301.207 589.213 l f 0.815 g 302.407 590.174 m 354.488 642.495 l 356.648 642.495 l 356.648 640.335 l 304.567 588.013 l 302.407 588.013 l f 0.824 g 303.367 589.213 m 355.688 641.295 l 357.848 641.295 l 357.848 639.135 l 305.527 587.053 l 303.367 587.053 l f 0.833 g 304.567 588.013 m 356.648 640.335 l 358.808 640.335 l 358.808 638.175 l 306.727 585.853 l 304.567 585.853 l f 0.841 g 305.527 587.053 m 357.848 639.135 l 360.008 639.135 l 360.008 636.975 l 307.687 584.893 l 305.527 584.893 l f 0.85 g 306.727 585.853 m 358.808 638.175 l 360.968 638.175 l 360.968 636.015 l 308.887 583.693 l 306.727 583.693 l f 307.687 584.893 m 360.008 636.975 l 362.168 636.975 l 362.168 634.815 l 309.847 582.733 l 307.687 582.733 l f 0.841 g 309.367 583.213 m 361.688 635.295 l 363.848 635.295 l 363.848 633.134 l 311.527 581.053 2000 l 309.367 581.053 l f 0.833 g 310.567 582.013 m 362.648 634.335 l 364.808 634.335 l 364.808 632.174 l 312.727 579.853 l 310.567 579.853 l f 0.824 g 311.527 581.053 m 363.848 633.134 l 366.008 633.134 l 366.008 630.974 l 313.687 578.893 l 311.527 578.893 l f 0.815 g 312.727 579.853 m 364.808 632.174 l 366.968 632.174 l 366.968 630.014 l 314.887 577.693 l 312.727 577.693 l f 0.807 g 313.687 578.893 m 366.008 630.974 l 368.168 630.974 l 368.168 628.814 l 315.847 576.733 l 313.687 576.733 l f 0.798 g 314.887 577.693 m 366.968 630.014 l 369.128 630.014 l 369.128 627.854 l 317.047 575.533 l 314.887 575.533 l f 0.789 g 315.847 576.733 m 368.168 628.814 l 370.328 628.814 l 370.328 626.654 l 318.007 574.573 l 315.847 574.573 l f 0.78 g 317.047 575.533 m 369.128 627.854 l 371.289 627.854 l 371.289 625.694 l 319.207 573.373 l 317.047 573.373 l f 0.772 g 318.007 574.573 m 370.328 626.654 l 372.489 626.654 l 372.489 624.494 l 320.167 572.413 l 318.007 572.413 l f 0.763 g 319.207 573.373 m 371.289 625.694 l 373.449 625.694 l 373.449 623.534 l 321.367 571.213 l 319.207 571.213 l f 0.754 g 320.167 572.413 m 372.489 624.494 l 374.649 624.494 l 374.649 622.334 l 322.327 570.253 l 320.167 570.253 l f 0.746 g 321.367 571.213 m 373.449 623.294 l 375.609 623.294 l 375.609 621.134 l 323.527 569.053 l 321.367 569.053 l f 0.737 g 322.327 570.253 m 374.649 622.334 l 376.809 622.334 l 376.809 620.174 l 324.487 568.093 l 322.327 568.093 l f 0.728 g 323.527 569.053 m 375.609 621.134 l 377.769 621.134 l 377.769 618.974 l 325.687 566.893 l 323.527 566.893 l f 0.72 g 324.727 568.093 m 376.809 620.174 l 378.969 620.174 l 378.969 618.014 l 326.887 565.933 l 324.727 565.933 l f 0.711 g 325.687 566.893 m 377.769 618.974 l 379.929 618.974 l 379.929 616.814 l 327.848 564.733 l 325.687 564.733 l f 0.702 g 326.887 565.933 m 378.969 618.014 l 381.129 618.014 l 381.129 615.854 l 329.048 563.773 l 326.887 563.773 l f 0.693 g 327.848 564.733 m 380.169 616.814 l 382.329 616.814 l 382.329 614.654 l 330.008 562.573 l 327.848 562.573 l f 0.685 g 329.048 563.773 m 381.129 615.854 l 383.289 615.854 l 383.289 613.694 l 331.208 561.613 l 329.048 561.613 l f 0.676 g 330.008 562.573 m 382.329 614.654 l 384.489 614.654 l 384.489 612.494 l 332.168 560.413 l 330.008 560.413 l f 0.667 g 331.208 561.613 m 383.289 613.694 l 385.449 613.694 l 385.449 611.534 l 333.368 559.453 l 331.208 559.453 l f 0.659 g 332.168 560.413 m 384.489 612.494 l 386.649 612.494 l 386.649 610.334 l 334.328 558.253 l 332.168 558.253 l f 0.65 g 333.368 559.213 m 385.449 611.534 l 387.609 611.534 l 387.609 609.374 l 335.528 557.053 l 333.368 557.053 l f Q 0.36 w 0.55 G 334.688 636.795 m 349.095 636.795 360.788 624.94 360.788 610.334 c 360.788 595.728 349.095 583.873 334.688 583.873 c 320.28 583.873 308.587 595.728 308.587 610.334 c 308.587 624.94 320.28 636.795 334.688 636.795 c s 0.65 G 334.928 636.315 m 349.203 636.315 360.788 624.729 360.788 610.454 c 360.788 596.179 349.203 584.593 334.928 584.593 c 320.653 584.593 309.067 596.179 309.067 610.454 c 309.067 624.729 320.653 636.315 334.928 636.315 c s 0.9 G 334.688 635.835 m 348.83 635.835 360.308 624.357 360.308 610.214 c 360.308 596.071 348.83 584.593 334.688 584.593 c 320.545 584.593 309.067 596.071 309.067 610.214 c 309.067 624.357 320.545 635.835 334.688 635.835 c s 0.65 G 334.688 635.835 m 348.565 635.835 359.828 624.464 359.828 610.454 c 359.828 596.444 348.565 585.073 334.688 585.073 c 320.81 585.073 309.547 596.444 309.547 610.454 c 309.547 624.464 320.81 635.835 334.688 635.835 c s 0.55 G 334.688 635.115 m 348.565 635.115 359.828 624.013 359.828 610.334 c 359.828 596.655 348.565 585.553 334.688 585.553 c 320.81 585.553 309.547 596.655 309.547 610.334 c 309.547 624.013 320.81 635.115 334.688 635.115 c s 0 w BT /F3 4.32 Tf 0 G 2.265 0 0 2.263 314.011 616.094 Tm (FireTruck)Tj ET 0.5 w 314.011 615.446 m 356.388 615.446 l S 0 w BT /F3 3.36 Tf 2.265 0 0 2.263 319.448 606.494 Tm (register\(\))Tj -3.36 -3.924 TD (sound_siren\(\))Tj ET 2.16 w q 412.569 636.975 m 405.129 636.975 l 402.249 636.495 l 400.809 636.015 l 399.129 635.295 l 397.449 634.815 l 396.489 634.335 l 395.769 633.615 l 394.809 633.134 l 393.609 632.654 l 393.129 632.174 l 392.649 631.454 l 391.449 630.974 l 390.969 630.494 l 390.489 630.014 l 389.769 629.294 l 389.289 628.814 l 388.809 628.334 l 388.329 627.854 l 387.609 626.654 l 387.129 626.174 l 386.649 625.694 l 385.929 624.494 l 385.449 623.294 l 384.969 622.814 l 384.489 621.854 l 383.769 620.174 l 383.289 618.494 l 382.809 616.814 l 382.329 614.174 l 382.329 606.494 l 382.809 606.494 l 382.809 603.854 l 383.289 603.854 l 383.289 602.174 l 383.769 602.174 l 383.769 600.494 l 384.489 600.494 l 384.489 599.054 l 384.969 599.054 l 384.969 597.854 l 385.449 597.854 l 385.449 597.374 l 385.929 597.374 l 385.929 596.174 l 386.649 596.174 l 386.649 595.214 l 387.129 595.214 l 387.129 594.734 l 387.609 594.734 l 387.609 594.014 l 388.329 594.014 l 388.329 593.054 l 388.809 593.054 l 388.809 592.334 l 389.289 592.334 l 389.289 591.854 l 389.769 591.854 l 389.769 591.374 l 390.489 591.374 l 390.489 590.894 l 390.969 590.894 l 390.969 590.174 l 391.449 590.174 l 391.449 589.694 l 392.649 589.694 l 392.649 589.213 l 393.129 589.213 l 393.129 588.733 l 393.609 588.733 l 393.609 588.013 l 394.809 588.013 l 394.809 587.533 l 395.769 587.533 l 395.769 587.053 l 396.489 587.053 l 396.489 586.573 l 397.449 586.573 l 397.449 585.853 l 399.129 585.853 l 399.129 585.373 l 400.809 585.373 l 400.809 584.893 l 402.249 584.893 l 402.249 584.413 l 405.129 584.413 l 405.129 583.693 l 412.569 583.693 l 412.569 584.413 l 415.45 584.893 l 417.13 585.373 l 418.57 585.853 l 420.25 586.573 l 421.45 587.053 l 421.93 587.533 l 423.13 588.013 l 424.09 588.733 l 424.57 589.213 l 425.29 589.694 l 426.25 590.174 l 426.73 590.894 l 427.45 591.374 l 427.93 591.854 l 428.41 592.334 l 428.89 593.054 l 429.61 594.014 l 430.09 594.734 l 430.57 595.214 l 431.05 596.174 l 431.77 597.374 l 432.25 597.854 l 432.73 599.054 l 433.45 600.494 l 433.93 602.174 l 434.41 603.854 l 434.89 606.494 l 435.61 614.174 l 434.89 614.174 l 434.89 616.814 l 434.41 616.814 l 434.41 618.494 l 433.93 618.494 l 433.93 620.174 l 433.45 620.174 l 433.45 621.854 l 432.73 621.854 l 432.73 622.814 l 432.25 622.814 l 432.25 623.294 l 431.77 623.294 l 431.77 624.494 l 431.05 624.494 l 431.05 625.694 l 430.57 625.694 l 430.57 626.174 l 430.09 626.174 l 430.09 626.654 l 429.61 626.654 l 429.61 627.854 l 428.89 627.854 l 428.89 628.334 l 428.41 628.334 l 428.41 628.814 l 427.93 628.814 l 427.93 629.294 l 427.45 629.294 l 427.45 630.014 l 426.73 630.014 l 426.73 630.494 l 426.25 630.494 l 426.25 630.974 l 425.29 630.974 l 425.29 631.454 l 424.57 631.454 l 424.57 632.174 l 424.09 632.174 l 424.09 632.654 l 423.13 632.654 l 423.13 633.134 l 421.93 633.134 l 421.93 633.615 l 421.45 633.615 l 421.45 634.335 l 420.25 634.335 l 420.25 634.815 l 418.57 634.815 l 418.57 635.295 l 417.13 635.295 l 417.13 636.015 l 415.45 636.015 l 415.45 636.495 l 412.569 636.495 l 412.569 636.975 l W n 0.65 g 354.968 611.534 m 408.249 664.575 l 410.409 664.575 l 410.409 662.415 l 357.128 609.374 l 354.968 609.374 l f 0.659 g 356.648 609.854 m 409.929 663.135 l 412.089 663.135 l 412.089 660.975 l 358.808 607.694 l 356.648 607.694 l f 0.667 g 357.848 608.654 m 411.129 661.935 l 413.289 661.935 l 413.289 659.775 l 360.008 606.494 l 357.848 606.494 l f 0.676 g 358.808 607.694 m 412.089 660.975 l 414.249 660.975 l 414.249 658.815 l 360.968 605.534 l 358.808 605.534 l f 0.685 g 360.008 606.494 m 413.289 659.775 l 415.45 659.775 l 415.45 657.615 l 362.168 604.334 l 360.008 604.334 l f 0.693 g 360.968 605.534 m 414.249 658.815 l 416.41 658.815 l 416.41 656.655 l 363.128 603.374 l 360.968 603.374 l f 0.702 g 362.168 604 2000 .334 m 415.45 657.615 l 417.61 657.615 l 417.61 655.455 l 364.328 602.174 l 362.168 602.174 l f 0.711 g 363.128 603.374 m 416.41 656.415 l 418.57 656.415 l 418.57 654.255 l 365.288 601.214 l 363.128 601.214 l f 0.72 g 364.328 602.174 m 417.61 655.455 l 419.77 655.455 l 419.77 653.295 l 366.488 600.014 l 364.328 600.014 l f 0.728 g 365.288 601.214 m 418.57 654.255 l 420.73 654.255 l 420.73 652.095 l 367.448 599.054 l 365.288 599.054 l f 0.737 g 366.488 600.014 m 419.77 653.295 l 421.93 653.295 l 421.93 651.135 l 368.648 597.854 l 366.488 597.854 l f 0.746 g 367.448 599.054 m 420.73 652.095 l 422.89 652.095 l 422.89 649.935 l 369.608 596.894 l 367.448 596.894 l f 0.754 g 368.648 597.854 m 421.93 651.135 l 424.09 651.135 l 424.09 648.975 l 370.808 595.694 l 368.648 595.694 l f 0.763 g 369.848 596.174 m 423.13 649.455 l 425.29 649.455 l 425.29 647.295 l 372.009 594.014 l 369.848 594.014 l f 0.772 g 370.808 595.214 m 424.09 648.495 l 426.25 648.495 l 426.25 646.335 l 372.969 593.054 l 370.808 593.054 l f 0.78 g 372.009 594.014 m 425.29 647.295 l 427.45 647.295 l 427.45 645.135 l 374.169 591.854 l 372.009 591.854 l f 0.789 g 372.969 593.054 m 426.25 646.095 l 428.41 646.095 l 428.41 643.935 l 375.129 590.894 l 372.969 590.894 l f 0.798 g 374.169 591.854 m 427.45 645.135 l 429.61 645.135 l 429.61 642.975 l 376.329 589.694 l 374.169 589.694 l f 0.807 g 375.129 590.894 m 428.41 643.935 l 430.57 643.935 l 430.57 641.775 l 377.289 588.733 l 375.129 588.733 l f 0.815 g 376.329 589.694 m 429.61 642.975 l 431.77 642.975 l 431.77 640.815 l 378.489 587.533 l 376.329 587.533 l f 0.824 g 377.289 588.733 m 430.57 641.775 l 432.73 641.775 l 432.73 639.615 l 379.449 586.573 l 377.289 586.573 l f 0.833 g 378.489 587.533 m 431.77 640.815 l 433.93 640.815 l 433.93 638.655 l 380.649 585.373 l 378.489 585.373 l f 0.841 g 379.449 586.573 m 432.73 639.615 l 434.89 639.615 l 434.89 637.455 l 381.609 584.413 l 379.449 584.413 l f 0.85 g 380.649 585.373 m 433.93 638.655 l 436.09 638.655 l 436.09 636.495 l 382.809 583.213 l 380.649 583.213 l f 381.609 584.413 m 434.89 637.455 l 437.05 637.455 l 437.05 635.295 l 383.769 582.253 l 381.609 582.253 l f 0.841 g 383.289 582.733 m 436.57 636.015 l 438.73 636.015 l 438.73 633.855 l 385.449 580.573 l 383.289 580.573 l f 0.833 g 384.489 581.533 m 437.77 634.815 l 439.93 634.815 l 439.93 632.654 l 386.649 579.373 l 384.489 579.373 l f 0.824 g 385.449 580.573 m 438.73 633.615 l 440.89 633.615 l 440.89 631.454 l 387.609 578.413 l 385.449 578.413 l f 0.815 g 386.649 579.373 m 439.93 632.654 l 442.09 632.654 l 442.09 630.494 l 388.809 577.213 l 386.649 577.213 l f 0.807 g 387.609 578.413 m 440.89 631.454 l 443.05 631.454 l 443.05 629.294 l 389.769 576.253 l 387.609 576.253 l f 0.798 g 388.809 577.213 m 442.09 630.494 l 444.25 630.494 l 444.25 628.334 l 390.969 575.053 l 388.809 575.053 l f 0.789 g 389.769 576.253 m 443.05 629.294 l 445.21 629.294 l 445.21 627.134 l 391.929 574.093 l 389.769 574.093 l f 0.78 g 390.969 575.053 m 444.25 628.334 l 446.41 628.334 l 446.41 626.174 l 393.129 572.893 l 390.969 572.893 l f 0.772 g 391.929 574.093 m 445.21 627.134 l 447.37 627.134 l 447.37 624.974 l 394.089 571.933 l 391.929 571.933 l f 0.763 g 393.129 572.893 m 446.41 626.174 l 448.57 626.174 l 448.57 624.014 l 395.289 570.733 l 393.129 570.733 l f 0.754 g 394.089 571.933 m 447.37 624.974 l 449.53 624.974 l 449.53 622.814 l 396.249 569.773 l 394.089 569.773 l f 0.746 g 395.289 570.253 m 448.57 623.294 l 450.73 623.294 l 450.73 621.134 l 397.449 568.093 l 395.289 568.093 l f 0.737 g 396.489 569.053 m 449.53 622.334 l 451.69 622.334 l 451.69 620.174 l 398.649 566.893 l 396.489 566.893 l f 0.728 g 397.449 568.093 m 450.73 621.134 l 452.89 621.134 l 452.89 618.974 l 399.609 565.933 l 397.449 565.933 l f 0.72 g 398.649 566.893 m 451.93 620.174 l 454.09 620.174 l 454.09 618.014 l 400.809 564.733 l 398.649 564.733 l f 0.711 g 399.609 565.933 m 452.89 618.974 l 455.05 618.974 l 455.05 616.814 l 401.769 563.773 l 399.609 563.773 l f 0.702 g 400.809 564.733 m 454.09 618.014 l 456.25 618.014 l 456.25 615.854 l 402.969 562.573 l 400.809 562.573 l f 0.693 g 401.769 563.773 m 455.05 616.814 l 457.21 616.814 l 457.21 614.654 l 403.929 561.613 l 401.769 561.613 l f 0.685 g 402.969 562.573 m 456.25 615.854 l 458.41 615.854 l 458.41 613.694 l 405.129 560.413 l 402.969 560.413 l f 0.676 g 403.929 561.613 m 457.21 614.654 l 459.371 614.654 l 459.371 612.494 l 406.089 559.453 l 403.929 559.453 l f 0.667 g 405.129 560.413 m 458.41 613.694 l 460.571 613.694 l 460.571 611.534 l 407.289 558.253 l 405.129 558.253 l f 0.659 g 406.089 559.213 m 459.371 612.494 l 461.531 612.494 l 461.531 610.334 l 408.249 557.053 l 406.089 557.053 l f 0.65 g 407.289 558.253 m 460.571 611.534 l 462.731 611.534 l 462.731 609.374 l 409.449 556.093 l 407.289 556.093 l f Q 0.36 w 0.55 G 408.969 636.795 m 423.576 636.795 435.43 624.94 435.43 610.334 c 435.43 595.728 423.576 583.873 408.969 583.873 c 394.363 583.873 382.509 595.728 382.509 610.334 c 382.509 624.94 394.363 636.795 408.969 636.795 c s 0.65 G 408.849 636.315 m 423.124 636.315 434.71 624.729 434.71 610.454 c 434.71 596.179 423.124 584.593 408.849 584.593 c 394.574 584.593 382.989 596.179 382.989 610.454 c 382.989 624.729 394.574 636.315 408.849 636.315 c s 0.9 G 409.089 635.835 m 423.232 635.835 434.71 624.357 434.71 610.214 c 434.71 596.071 423.232 584.593 409.089 584.593 c 394.947 584.593 383.469 596.071 383.469 610.214 c 383.469 624.357 394.947 635.835 409.089 635.835 c s 0.65 G 408.849 635.835 m 422.859 635.835 434.23 624.464 434.23 610.454 c 434.23 596.444 422.859 585.073 408.849 585.073 c 394.839 585.073 383.469 596.444 383.469 610.454 c 383.469 624.464 394.839 635.835 408.849 635.835 c s 0.55 G 408.849 635.115 m 422.595 635.115 433.75 624.013 433.75 610.334 c 433.75 596.655 422.595 585.553 408.849 585.553 c 395.104 585.553 383.949 596.655 383.949 610.334 c 383.949 624.013 395.104 635.115 408.849 635.115 c s 0 w BT /F3 3.6 Tf 0 G 2.265 0 0 2.263 386.315 611.774 Tm (ArmoredCar)Tj ET 0.5 w 386.315 611.234 m 432.72 611.234 l S 0 w BT /F3 3.36 Tf 2.265 0 0 2.263 393.925 602.174 Tm (register\(\))Tj ET BT /F2 4.32 Tf 2.265 0 0 2.263 211.264 662.895 Tm (is-a)Tj ET BT 2.265 0 0 2.263 365.113 662.895 Tm (is-a)Tj ET BT 2.265 0 0 2.263 328.146 647.775 Tm (is-a)Tj ET BT 2.265 0 0 2.263 247.688 647.775 Tm (is-a)Tj ET 3.36 w q 300.727 549.613 m 293.527 549.613 l 290.887 548.893 l 288.727 548.413 l 287.047 547.933 l 286.087 547.453 l 284.887 546.733 l 283.927 546.253 l 283.206 545.772 l 282.246 545.292 l 281.766 544.572 l 280.566 544.092 l 280.086 543.612 l 279.606 543.132 l 278.886 542.412 l 278.406 541.932 l 277.926 541.452 l 277.206 540.972 l 276.726 540.252 l 276.246 539.292 l 275.766 538.572 l 275.046 538.092 l 274.566 537.132 l 274.086 536.412 l 273.606 535.452 l 272.886 534.252 l 272.406 532.812 l 271.926 531.612 l 271.446 529.452 l 270.726 526.812 l 270.726 519.132 l 271.446 519.132 l 271.446 516.492 l 271.926 516.492 l 271.926 514.332 l 272.406 514.332 l 272.406 513.132 l 272.886 513.132 l 272.886 511.452 l 273.606 511.452 l 273.606 510.492 l 274.086 510.492 l 274.086 509.292 l 274.566 509.292 l 274.566 508.812 l 275.046 508.812 l 275.046 507.852 l 275.766 507.852 l 275.766 507.132 l 276.246 507.132 l 276.246 506.652 l 276.726 506.652 l 276.726 505.452 l 277.206 505.452 l 277.206 504.972 l 277.926 504.972 l 277.926 504.492 l 278.406 504.492 l 278.406 504.012 l 278.886 504.012 l 278.886 503.292 l 279.606 503.292 l 279.606 502.812 l 280.086 502.812 l 280.086 502.332 l 280.566 502.332 l 280.566 501.851 l 281.766 501.851 l 281.766 501.131 l 282.246 501.131 l 282.246 500.651 l 283.206 500.651 l 283.206 500.171 l 283.927 500.171 l 283.927 499.691 l 284.887 499.691 l 284.887 498.971 l 286 2000 .087 498.971 l 286.087 498.491 l 287.047 498.491 l 287.047 498.011 l 288.727 498.011 l 288.727 497.531 l 290.887 497.531 l 290.887 496.811 l 293.527 496.811 l 293.527 496.331 l 300.727 496.331 l 300.727 496.811 l 303.367 497.531 l 305.527 498.011 l 307.207 498.491 l 308.407 498.971 l 309.367 499.691 l 310.567 500.171 l 311.047 500.651 l 312.007 501.131 l 312.727 501.851 l 313.687 502.332 l 314.167 502.812 l 314.887 503.292 l 315.367 504.012 l 315.847 504.492 l 316.567 504.972 l 317.047 505.452 l 317.527 506.652 l 318.007 507.132 l 318.727 507.852 l 319.207 508.812 l 319.687 509.292 l 320.167 510.492 l 320.887 511.452 l 321.367 513.132 l 321.847 514.332 l 322.327 516.492 l 323.047 519.132 l 323.527 526.812 l 323.047 526.812 l 323.047 529.452 l 322.327 529.452 l 322.327 531.612 l 321.847 531.612 l 321.847 532.812 l 321.367 532.812 l 321.367 534.252 l 320.887 534.252 l 320.887 535.452 l 320.167 535.452 l 320.167 536.412 l 319.687 536.412 l 319.687 537.132 l 319.207 537.132 l 319.207 538.092 l 318.727 538.092 l 318.727 538.572 l 318.007 538.572 l 318.007 539.292 l 317.527 539.292 l 317.527 540.252 l 317.047 540.252 l 317.047 540.972 l 316.567 540.972 l 316.567 541.452 l 315.847 541.452 l 315.847 541.932 l 315.367 541.932 l 315.367 542.412 l 314.887 542.412 l 314.887 543.132 l 314.167 543.132 l 314.167 543.612 l 313.687 543.612 l 313.687 544.092 l 312.727 544.092 l 312.727 544.572 l 312.007 544.572 l 312.007 545.292 l 311.047 545.292 l 311.047 545.772 l 310.567 545.772 l 310.567 546.253 l 309.367 546.253 l 309.367 546.733 l 308.407 546.733 l 308.407 547.453 l 307.207 547.453 l 307.207 547.933 l 305.527 547.933 l 305.527 548.413 l 303.367 548.413 l 303.367 548.893 l 300.727 548.893 l 300.727 549.613 l W n 0.9 G 297.127 547.933 m 310.773 547.933 321.847 536.75 321.847 522.972 c 321.847 509.194 310.773 498.011 297.127 498.011 c 283.481 498.011 272.406 509.194 272.406 522.972 c 272.406 536.75 283.481 547.933 297.127 547.933 c s 0.7 G 297.127 546.733 m 309.845 546.733 320.167 536.195 320.167 523.212 c 320.167 510.229 309.845 499.691 297.127 499.691 c 284.408 499.691 274.086 510.229 274.086 523.212 c 274.086 536.195 284.408 546.733 297.127 546.733 c s 0.75 G 297.487 545.052 m 309.477 545.052 319.207 535.107 319.207 522.852 c 319.207 510.597 309.477 500.651 297.487 500.651 c 285.497 500.651 275.766 510.597 275.766 522.852 c 275.766 535.107 285.497 545.052 297.487 545.052 c s 0 w 0.75 g 297.487 546.733 m 310.404 546.733 320.887 536.034 320.887 522.852 c 320.887 509.67 310.404 498.971 297.487 498.971 c 284.57 498.971 274.086 509.67 274.086 522.852 c 274.086 536.034 284.57 546.733 297.487 546.733 c f Q 0 w BT /F3 3.6 Tf 2.265 0 0 2.263 274.87 520.572 Tm (DumpTruck)Tj ET 0.5 w 274.87 520.032 m 319.491 520.032 l S 3.36 w q 375.609 549.613 m 368.648 549.613 l 366.008 548.893 l 363.848 548.413 l 362.168 547.933 l 360.968 547.453 l 360.008 546.733 l 358.808 546.253 l 358.328 545.772 l 357.128 545.292 l 356.648 544.572 l 355.688 544.092 l 354.968 543.612 l 354.488 543.132 l 354.008 542.412 l 353.528 541.932 l 352.808 541.452 l 352.328 540.972 l 351.848 540.252 l 351.368 539.292 l 350.648 538.572 l 350.168 538.092 l 349.688 537.132 l 348.968 536.412 l 348.488 535.452 l 348.008 534.252 l 347.528 532.812 l 346.808 531.612 l 346.328 529.452 l 345.848 526.812 l 345.848 519.132 l 346.328 519.132 l 346.328 516.492 l 346.808 516.492 l 346.808 514.332 l 347.528 514.332 l 347.528 513.132 l 348.008 513.132 l 348.008 511.452 l 348.488 511.452 l 348.488 510.492 l 348.968 510.492 l 348.968 509.292 l 349.688 509.292 l 349.688 508.812 l 350.168 508.812 l 350.168 507.852 l 350.648 507.852 l 350.648 507.132 l 351.368 507.132 l 351.368 506.652 l 351.848 506.652 l 351.848 505.452 l 352.328 505.452 l 352.328 504.972 l 352.808 504.972 l 352.808 504.492 l 353.528 504.492 l 353.528 504.012 l 354.008 504.012 l 354.008 503.292 l 354.488 503.292 l 354.488 502.812 l 354.968 502.812 l 354.968 502.332 l 355.688 502.332 l 355.688 501.851 l 356.648 501.851 l 356.648 501.131 l 357.128 501.131 l 357.128 500.651 l 358.328 500.651 l 358.328 500.171 l 358.808 500.171 l 358.808 499.691 l 360.008 499.691 l 360.008 498.971 l 360.968 498.971 l 360.968 498.491 l 362.168 498.491 l 362.168 498.011 l 363.848 498.011 l 363.848 497.531 l 366.008 497.531 l 366.008 496.811 l 368.648 496.811 l 368.648 496.331 l 375.609 496.331 l 375.609 496.811 l 378.489 497.531 l 380.649 498.011 l 382.329 498.491 l 383.289 498.971 l 384.489 499.691 l 385.449 500.171 l 385.929 500.651 l 387.129 501.131 l 387.609 501.851 l 388.809 502.332 l 389.289 502.812 l 389.769 503.292 l 390.489 504.012 l 390.969 504.492 l 391.449 504.972 l 391.929 505.452 l 392.649 506.652 l 393.129 507.132 l 393.609 507.852 l 394.089 508.812 l 394.809 509.292 l 395.289 510.492 l 395.769 511.452 l 396.489 513.132 l 396.969 514.332 l 397.449 516.492 l 397.929 519.132 l 398.649 526.812 l 397.929 526.812 l 397.929 529.452 l 397.449 529.452 l 397.449 531.612 l 396.969 531.612 l 396.969 532.812 l 396.489 532.812 l 396.489 534.252 l 395.769 534.252 l 395.769 535.452 l 395.289 535.452 l 395.289 536.412 l 394.809 536.412 l 394.809 537.132 l 394.089 537.132 l 394.089 538.092 l 393.609 538.092 l 393.609 538.572 l 393.129 538.572 l 393.129 539.292 l 392.649 539.292 l 392.649 540.252 l 391.929 540.252 l 391.929 540.972 l 391.449 540.972 l 391.449 541.452 l 390.969 541.452 l 390.969 541.932 l 390.489 541.932 l 390.489 542.412 l 389.769 542.412 l 389.769 543.132 l 389.289 543.132 l 389.289 543.612 l 388.809 543.612 l 388.809 544.092 l 387.609 544.092 l 387.609 544.572 l 387.129 544.572 l 387.129 545.292 l 385.929 545.292 l 385.929 545.772 l 385.449 545.772 l 385.449 546.253 l 384.489 546.253 l 384.489 546.733 l 383.289 546.733 l 383.289 547.453 l 382.329 547.453 l 382.329 547.933 l 380.649 547.933 l 380.649 548.413 l 378.489 548.413 l 378.489 548.893 l 375.609 548.893 l 375.609 549.613 l W n 0.9 G 372.249 547.933 m 385.894 547.933 396.969 536.75 396.969 522.972 c 396.969 509.194 385.894 498.011 372.249 498.011 c 358.603 498.011 347.528 509.194 347.528 522.972 c 347.528 536.75 358.603 547.933 372.249 547.933 c s 0.7 G 372.249 546.733 m 384.967 546.733 395.289 536.195 395.289 523.212 c 395.289 510.229 384.967 499.691 372.249 499.691 c 359.53 499.691 349.208 510.229 349.208 523.212 c 349.208 536.195 359.53 546.733 372.249 546.733 c s 0.75 G 372.369 545.052 m 384.358 545.052 394.089 535.107 394.089 522.852 c 394.089 510.597 384.358 500.651 372.369 500.651 c 360.379 500.651 350.648 510.597 350.648 522.852 c 350.648 535.107 360.379 545.052 372.369 545.052 c s 0 w 0.75 g 372.369 546.733 m 385.286 546.733 395.769 536.034 395.769 522.852 c 395.769 509.67 385.286 498.971 372.369 498.971 c 359.451 498.971 348.968 509.67 348.968 522.852 c 348.968 536.034 359.451 546.733 372.369 546.733 c f Q 0 w BT 2.265 0 0 2.263 349.347 520.572 Tm (ArmoredCar)Tj ET 0.5 w 349.347 520.032 m 395.753 520.032 l S 3.36 w q 450.73 549.613 m 443.05 549.613 l 440.41 548.893 l 438.73 548.413 l 437.05 547.933 l 435.61 547.453 l 434.41 546.733 l 433.93 546.253 l 432.73 545.772 l 431.77 545.292 l 431.05 544.572 l 430.57 544.092 l 429.61 543.612 l 428.89 543.132 l 428.41 542.412 l 427.93 541.932 l 427.45 541.452 l 426.73 540.972 l 426.25 540.252 l 425.77 539.292 l 425.29 538.572 l 424.57 538.092 l 424.09 537.132 l 423.61 535.932 l 423.13 535.452 l 422.41 534.252 l 421.93 532.812 l 421.45 531.132 l 420.73 529.452 l 420.25 526.812 l 420.25 519.132 l 420.73 519.132 l 420.73 516.492 l 421.45 516.492 l 421.45 514.812 l 421.93 514.812 l 421.93 513.132 l 422.41 513.132 l 422.41 511.452 l 423.13 511.452 l 423.13 510.492 l 423.61 510.492 l 423.61 510.012 l 424.09 510.012 l 424.09 508.812 l 424.57 508.812 l 424.57 507.852 l 425.29 507.852 l 425.29 507.132 l 425.77 507.132 l 425.77 506.652 l 426.25 506.652 l 426.25 505.452 l 2000 426.73 505.452 l 426.73 504.972 l 427.45 504.972 l 427.45 504.492 l 427.93 504.492 l 427.93 504.012 l 428.41 504.012 l 428.41 503.292 l 428.89 503.292 l 428.89 502.812 l 429.61 502.812 l 429.61 502.332 l 430.57 502.332 l 430.57 501.851 l 431.05 501.851 l 431.05 501.131 l 431.77 501.131 l 431.77 500.651 l 432.73 500.651 l 432.73 500.171 l 433.93 500.171 l 433.93 499.691 l 434.41 499.691 l 434.41 498.971 l 435.61 498.971 l 435.61 498.491 l 437.05 498.491 l 437.05 498.011 l 438.73 498.011 l 438.73 497.531 l 440.41 497.531 l 440.41 496.811 l 443.05 496.811 l 443.05 496.331 l 450.73 496.331 l 450.73 496.811 l 453.37 497.531 l 455.05 498.011 l 456.73 498.491 l 458.41 498.971 l 459.371 499.691 l 460.091 500.171 l 461.051 500.651 l 462.251 501.131 l 462.731 501.851 l 463.211 502.332 l 464.411 502.812 l 464.891 503.292 l 465.371 504.012 l 465.851 504.492 l 466.571 504.972 l 467.051 505.452 l 467.531 506.652 l 468.251 507.132 l 468.731 507.852 l 469.211 508.812 l 469.691 510.012 l 470.411 510.492 l 470.891 511.452 l 471.371 513.132 l 471.851 514.812 l 472.571 516.492 l 473.051 519.132 l 473.531 526.812 l 473.051 526.812 l 473.051 529.452 l 472.571 529.452 l 472.571 531.132 l 471.851 531.132 l 471.851 532.812 l 471.371 532.812 l 471.371 534.252 l 470.891 534.252 l 470.891 535.452 l 470.411 535.452 l 470.411 535.932 l 469.691 535.932 l 469.691 537.132 l 469.211 537.132 l 469.211 538.092 l 468.731 538.092 l 468.731 538.572 l 468.251 538.572 l 468.251 539.292 l 467.531 539.292 l 467.531 540.252 l 467.051 540.252 l 467.051 540.972 l 466.571 540.972 l 466.571 541.452 l 465.851 541.452 l 465.851 541.932 l 465.371 541.932 l 465.371 542.412 l 464.891 542.412 l 464.891 543.132 l 464.411 543.132 l 464.411 543.612 l 463.211 543.612 l 463.211 544.092 l 462.731 544.092 l 462.731 544.572 l 462.251 544.572 l 462.251 545.292 l 461.051 545.292 l 461.051 545.772 l 460.091 545.772 l 460.091 546.253 l 459.371 546.253 l 459.371 546.733 l 458.41 546.733 l 458.41 547.453 l 456.73 547.453 l 456.73 547.933 l 455.05 547.933 l 455.05 548.413 l 453.37 548.413 l 453.37 548.893 l 450.73 548.893 l 450.73 549.613 l W n 0.9 G 446.89 547.933 m 460.669 547.933 471.851 536.75 471.851 522.972 c 471.851 509.194 460.669 498.011 446.89 498.011 c 433.112 498.011 421.93 509.194 421.93 522.972 c 421.93 536.75 433.112 547.933 446.89 547.933 c s 0.7 G 446.89 546.733 m 459.741 546.733 470.171 536.195 470.171 523.212 c 470.171 510.229 459.741 499.691 446.89 499.691 c 434.039 499.691 423.61 510.229 423.61 523.212 c 423.61 536.195 434.039 546.733 446.89 546.733 c s 0.75 G 447.01 545.052 m 459 545.052 468.731 535.107 468.731 522.852 c 468.731 510.597 459 500.651 447.01 500.651 c 435.02 500.651 425.29 510.597 425.29 522.852 c 425.29 535.107 435.02 545.052 447.01 545.052 c s 0 w 0.75 g 447.01 546.733 m 459.927 546.733 470.411 536.034 470.411 522.852 c 470.411 509.67 459.927 498.971 447.01 498.971 c 434.093 498.971 423.61 509.67 423.61 522.852 c 423.61 536.034 434.093 546.733 447.01 546.733 c f Q 0 w BT /F3 4.8 Tf 2.265 0 0 2.263 437.416 520.092 Tm (Van)Tj ET 0.5 w 437.416 519.372 m 457.034 519.372 l S 0.54 w 2 j 297.127 548.653 m 317.767 581.773 l S 0 j 2 j 321.127 587.293 m 318.967 576.973 l 317.767 581.773 l 312.967 580.813 l 321.127 587.293 l b* 0 j 2 j 372.249 548.653 m 350.888 581.293 l S 0 j 2 j 347.768 586.813 m 356.408 580.813 l 350.888 581.293 l 349.928 576.493 l 347.768 586.813 l b* 0 j 2 j 446.65 548.653 m 363.368 594.494 l S 0 j 2 j 358.088 597.134 m 368.408 595.934 l 364.088 593.774 l 365.048 588.973 l 358.088 597.134 l b* 0 j 2.16 w q 300.727 548.413 m 293.527 548.413 l 290.887 547.933 l 288.727 547.453 l 287.047 546.733 l 286.087 546.253 l 284.887 545.772 l 283.927 545.292 l 283.206 544.572 l 282.246 544.092 l 281.766 543.612 l 280.566 543.132 l 280.086 542.412 l 279.606 541.932 l 278.886 541.452 l 278.406 540.972 l 277.926 540.252 l 277.206 539.772 l 276.726 539.292 l 276.246 538.572 l 275.766 537.612 l 275.046 537.132 l 274.566 535.932 l 274.086 535.452 l 273.606 534.252 l 272.886 533.292 l 272.406 532.092 l 271.926 530.652 l 271.446 528.252 l 270.726 525.612 l 270.726 518.652 l 271.446 518.652 l 271.446 515.772 l 271.926 515.772 l 271.926 513.612 l 272.406 513.612 l 272.406 512.172 l 272.886 512.172 l 272.886 510.972 l 273.606 510.972 l 273.606 510.012 l 274.086 510.012 l 274.086 508.812 l 274.566 508.812 l 274.566 508.332 l 275.046 508.332 l 275.046 507.132 l 275.766 507.132 l 275.766 506.652 l 276.246 506.652 l 276.246 505.452 l 276.726 505.452 l 276.726 504.972 l 277.206 504.972 l 277.206 504.492 l 277.926 504.492 l 277.926 504.012 l 278.406 504.012 l 278.406 503.292 l 278.886 503.292 l 278.886 502.812 l 279.606 502.812 l 279.606 502.332 l 280.086 502.332 l 280.086 501.851 l 280.566 501.851 l 280.566 501.131 l 281.766 501.131 l 281.766 500.651 l 282.246 500.651 l 282.246 500.171 l 283.206 500.171 l 283.206 499.691 l 283.927 499.691 l 283.927 498.971 l 284.887 498.971 l 284.887 498.491 l 286.087 498.491 l 286.087 498.011 l 287.047 498.011 l 287.047 497.531 l 288.727 497.531 l 288.727 496.811 l 290.887 496.811 l 290.887 496.331 l 293.527 496.331 l 293.527 495.851 l 300.727 495.851 l 300.727 496.331 l 303.367 496.811 l 305.527 497.531 l 307.207 498.011 l 308.407 498.491 l 309.367 498.971 l 310.567 499.691 l 311.047 500.171 l 312.007 500.651 l 312.727 501.131 l 313.687 501.851 l 314.167 502.332 l 314.887 502.812 l 315.367 503.292 l 315.847 504.012 l 316.567 504.492 l 317.047 504.972 l 317.527 505.452 l 318.007 506.652 l 318.727 507.132 l 319.207 508.332 l 319.687 508.812 l 320.167 510.012 l 320.887 510.972 l 321.367 512.172 l 321.847 513.612 l 322.327 515.772 l 323.047 518.652 l 323.527 525.612 l 323.047 525.612 l 323.047 528.252 l 322.327 528.252 l 322.327 530.652 l 321.847 530.652 l 321.847 532.092 l 321.367 532.092 l 321.367 533.292 l 320.887 533.292 l 320.887 534.252 l 320.167 534.252 l 320.167 535.452 l 319.687 535.452 l 319.687 535.932 l 319.207 535.932 l 319.207 537.132 l 318.727 537.132 l 318.727 537.612 l 318.007 537.612 l 318.007 538.572 l 317.527 538.572 l 317.527 539.292 l 317.047 539.292 l 317.047 539.772 l 316.567 539.772 l 316.567 540.252 l 315.847 540.252 l 315.847 540.972 l 315.367 540.972 l 315.367 541.452 l 314.887 541.452 l 314.887 541.932 l 314.167 541.932 l 314.167 542.412 l 313.687 542.412 l 313.687 543.132 l 312.727 543.132 l 312.727 543.612 l 312.007 543.612 l 312.007 544.092 l 311.047 544.092 l 311.047 544.572 l 310.567 544.572 l 310.567 545.292 l 309.367 545.292 l 309.367 545.772 l 308.407 545.772 l 308.407 546.253 l 307.207 546.253 l 307.207 546.733 l 305.527 546.733 l 305.527 547.453 l 303.367 547.453 l 303.367 547.933 l 300.727 547.933 l 300.727 548.413 l W n 0.65 g 244.806 523.452 m 296.887 575.533 l 299.047 575.533 l 299.047 573.373 l 246.966 521.292 l 244.806 521.292 l f 0.659 g 245.766 521.772 m 298.087 574.093 l 300.247 574.093 l 300.247 571.933 l 247.926 519.612 l 245.766 519.612 l f 0.667 g 246.966 520.812 m 299.047 572.893 l 301.207 572.893 l 301.207 570.733 l 249.126 518.652 l 246.966 518.652 l f 0.676 g 247.926 519.612 m 300.247 571.933 l 302.407 571.933 l 302.407 569.773 l 250.086 517.452 l 247.926 517.452 l f 0.685 g 249.126 518.652 m 301.207 570.733 l 303.367 570.733 l 303.367 568.573 l 251.286 516.492 l 249.126 516.492 l f 0.693 g 250.086 517.452 m 302.407 569.533 l 304.567 569.533 l 304.567 567.373 l 252.246 515.292 l 250.086 515.292 l f 0.702 g 251.286 516.492 m 303.367 568.573 l 305.527 568.573 l 305.527 566.413 l 253.446 514.332 l 251.286 514.332 l f 0.711 g 252.246 515.292 m 304.567 567.373 l 306.727 567.373 l 306.727 565.213 l 254.406 513.132 l 252.246 513.132 l f 0.72 g 253.446 514.332 m 305.527 566.413 l 307.687 566.413 l 307.687 564.253 l 255.606 512.172 l 253.446 512.172 l f 0.728 g 254.406 513. 2000 132 m 306.727 565.213 l 308.887 565.213 l 308.887 563.053 l 256.566 510.972 l 254.406 510.972 l f 0.737 g 255.606 512.172 m 307.687 564.253 l 309.847 564.253 l 309.847 562.093 l 257.766 510.012 l 255.606 510.012 l f 0.746 g 256.566 510.972 m 308.887 563.053 l 311.047 563.053 l 311.047 560.893 l 258.726 508.812 l 256.566 508.812 l f 0.754 g 257.766 510.012 m 309.847 562.093 l 312.007 562.093 l 312.007 559.933 l 259.926 507.852 l 257.766 507.852 l f 0.763 g 258.726 508.812 m 311.047 560.893 l 313.207 560.893 l 313.207 558.733 l 260.886 506.652 l 258.726 506.652 l f 0.772 g 259.926 507.852 m 312.007 559.933 l 314.167 559.933 l 314.167 557.773 l 262.086 505.692 l 259.926 505.692 l f 0.78 g 261.126 506.652 m 313.207 558.733 l 315.367 558.733 l 315.367 556.573 l 263.286 504.492 l 261.126 504.492 l f 0.789 g 262.086 505.452 m 314.167 557.773 l 316.327 557.773 l 316.327 555.613 l 264.246 503.292 l 262.086 503.292 l f 0.798 g 263.286 504.492 m 315.367 556.573 l 317.527 556.573 l 317.527 554.413 l 265.446 502.332 l 263.286 502.332 l f 0.807 g 264.246 503.292 m 316.567 555.613 l 318.727 555.613 l 318.727 553.453 l 266.406 501.131 l 264.246 501.131 l f 0.815 g 265.446 502.332 m 317.527 554.413 l 319.687 554.413 l 319.687 552.253 l 267.606 500.171 l 265.446 500.171 l f 0.824 g 266.406 501.131 m 318.727 553.453 l 320.887 553.453 l 320.887 551.293 l 268.566 498.971 l 266.406 498.971 l f 0.833 g 267.606 500.171 m 319.687 552.253 l 321.847 552.253 l 321.847 550.093 l 269.766 498.011 l 267.606 498.011 l f 0.841 g 268.566 498.971 m 320.887 551.293 l 323.047 551.293 l 323.047 549.133 l 270.726 496.811 l 268.566 496.811 l f 0.85 g 269.766 498.011 m 321.847 550.093 l 324.007 550.093 l 324.007 547.933 l 271.926 495.851 l 269.766 495.851 l f 270.726 496.811 m 323.047 548.893 l 325.207 548.893 l 325.207 546.733 l 272.886 494.651 l 270.726 494.651 l f 0.841 g 271.926 495.131 m 324.007 547.453 l 326.167 547.453 l 326.167 545.292 l 274.086 492.971 l 271.926 492.971 l f 0.833 g 272.886 494.171 m 325.207 546.253 l 327.367 546.253 l 327.367 544.092 l 275.046 492.011 l 272.886 492.011 l f 0.824 g 274.086 492.971 m 326.167 545.292 l 328.328 545.292 l 328.328 543.132 l 276.246 490.811 l 274.086 490.811 l f 0.815 g 275.046 492.011 m 327.367 544.092 l 329.528 544.092 l 329.528 541.932 l 277.206 489.851 l 275.046 489.851 l f 0.807 g 276.246 490.811 m 328.328 543.132 l 330.488 543.132 l 330.488 540.972 l 278.406 488.651 l 276.246 488.651 l f 0.798 g 277.206 489.851 m 329.528 541.932 l 331.688 541.932 l 331.688 539.772 l 279.366 487.691 l 277.206 487.691 l f 0.789 g 278.406 488.651 m 330.488 540.972 l 332.648 540.972 l 332.648 538.812 l 280.566 486.491 l 278.406 486.491 l f 0.78 g 279.606 487.691 m 331.688 539.772 l 333.848 539.772 l 333.848 537.612 l 281.766 485.531 l 279.606 485.531 l f 0.772 g 280.566 486.491 m 332.648 538.572 l 334.808 538.572 l 334.808 536.412 l 282.726 484.331 l 280.566 484.331 l f 0.763 g 281.766 485.531 m 333.848 537.612 l 336.008 537.612 l 336.008 535.452 l 283.927 483.371 l 281.766 483.371 l f 0.754 g 282.726 484.331 m 335.048 536.412 l 337.208 536.412 l 337.208 534.252 l 284.887 482.171 l 282.726 482.171 l f 0.746 g 283.927 483.371 m 336.008 535.452 l 338.168 535.452 l 338.168 533.292 l 286.087 481.211 l 283.927 481.211 l f 0.737 g 284.887 482.171 m 337.208 534.252 l 339.368 534.252 l 339.368 532.092 l 287.047 480.011 l 284.887 480.011 l f 0.728 g 286.087 481.211 m 338.168 533.292 l 340.328 533.292 l 340.328 531.132 l 288.247 479.051 l 286.087 479.051 l f 0.72 g 287.047 480.011 m 339.368 532.092 l 341.528 532.092 l 341.528 529.932 l 289.207 477.851 l 287.047 477.851 l f 0.711 g 288.247 479.051 m 340.328 531.132 l 342.488 531.132 l 342.488 528.972 l 290.407 476.891 l 288.247 476.891 l f 0.702 g 289.207 477.851 m 341.528 529.932 l 343.688 529.932 l 343.688 527.772 l 291.367 475.691 l 289.207 475.691 l f 0.693 g 290.407 476.891 m 342.488 528.972 l 344.648 528.972 l 344.648 526.812 l 292.567 474.731 l 290.407 474.731 l f 0.685 g 291.367 475.691 m 343.688 527.772 l 345.848 527.772 l 345.848 525.612 l 293.527 473.531 l 291.367 473.531 l f 0.676 g 292.567 474.491 m 344.648 526.812 l 346.808 526.812 l 346.808 524.652 l 294.727 472.331 l 292.567 472.331 l f 0.667 g 293.527 473.531 m 345.848 525.612 l 348.008 525.612 l 348.008 523.452 l 295.687 471.371 l 293.527 471.371 l f 0.659 g 294.727 472.331 m 346.808 524.652 l 348.968 524.652 l 348.968 522.492 l 296.887 470.171 l 294.727 470.171 l f 0.65 g 295.687 471.371 m 348.008 523.452 l 350.168 523.452 l 350.168 521.292 l 297.847 469.211 l 295.687 469.211 l f Q 0.36 w 0.55 G 297.127 548.233 m 311.601 548.233 323.347 536.54 323.347 522.132 c 323.347 507.724 311.601 496.031 297.127 496.031 c 282.653 496.031 270.906 507.724 270.906 522.132 c 270.906 536.54 282.653 548.233 297.127 548.233 c s 0.65 G 296.887 547.753 m 311.228 547.753 322.867 536.167 322.867 521.892 c 322.867 507.617 311.228 496.031 296.887 496.031 c 282.545 496.031 270.906 507.617 270.906 521.892 c 270.906 536.167 282.545 547.753 296.887 547.753 c s 0.9 G 297.247 547.753 m 311.389 547.753 322.867 536.275 322.867 522.132 c 322.867 507.989 311.389 496.511 297.247 496.511 c 283.104 496.511 271.626 507.989 271.626 522.132 c 271.626 536.275 283.104 547.753 297.247 547.753 c s 0.65 G 297.127 547.273 m 310.938 547.273 322.147 536.01 322.147 522.132 c 322.147 508.254 310.938 496.991 297.127 496.991 c 283.315 496.991 272.106 508.254 272.106 522.132 c 272.106 536.01 283.315 547.273 297.127 547.273 c s 0.55 G 297.127 547.273 m 310.938 547.273 322.147 536.01 322.147 522.132 c 322.147 508.254 310.938 496.991 297.127 496.991 c 283.315 496.991 272.106 508.254 272.106 522.132 c 272.106 536.01 283.315 547.273 297.127 547.273 c s 0 w BT /F3 4.32 Tf 0 G 2.265 0 0 2.263 281.937 527.772 Tm (Tanker)Tj ET 0.5 w 281.937 527.124 m 312.508 527.124 l S 0 w BT /F2 3.36 Tf 2.265 0 0 2.263 283.024 517.932 Tm (register\(\))Tj -3.12 -3.818 TD (sound_siren\(\))Tj ET 2.16 w q 375.609 549.613 m 368.648 549.613 l 366.008 548.893 l 363.848 548.413 l 362.168 547.933 l 360.968 547.453 l 360.008 546.733 l 358.808 546.253 l 358.328 545.772 l 357.128 545.292 l 356.648 544.572 l 355.688 544.092 l 354.968 543.612 l 354.488 543.132 l 354.008 542.412 l 353.528 541.932 l 352.808 541.452 l 352.328 540.972 l 351.848 540.252 l 351.368 539.292 l 350.648 538.572 l 350.168 538.092 l 349.688 537.132 l 348.968 536.412 l 348.488 535.452 l 348.008 534.252 l 347.528 532.812 l 346.808 531.612 l 346.328 529.452 l 345.848 526.812 l 345.848 519.132 l 346.328 519.132 l 346.328 516.492 l 346.808 516.492 l 346.808 514.332 l 347.528 514.332 l 347.528 513.132 l 348.008 513.132 l 348.008 511.452 l 348.488 511.452 l 348.488 510.492 l 348.968 510.492 l 348.968 509.292 l 349.688 509.292 l 349.688 508.812 l 350.168 508.812 l 350.168 507.852 l 350.648 507.852 l 350.648 507.132 l 351.368 507.132 l 351.368 506.652 l 351.848 506.652 l 351.848 505.452 l 352.328 505.452 l 352.328 504.972 l 352.808 504.972 l 352.808 504.492 l 353.528 504.492 l 353.528 504.012 l 354.008 504.012 l 354.008 503.292 l 354.488 503.292 l 354.488 502.812 l 354.968 502.812 l 354.968 502.332 l 355.688 502.332 l 355.688 501.851 l 356.648 501.851 l 356.648 501.131 l 357.128 501.131 l 357.128 500.651 l 358.328 500.651 l 358.328 500.171 l 358.808 500.171 l 358.808 499.691 l 360.008 499.691 l 360.008 498.971 l 360.968 498.971 l 360.968 498.491 l 362.168 498.491 l 362.168 498.011 l 363.848 498.011 l 363.848 497.531 l 366.008 497.531 l 366.008 496.811 l 368.648 496.811 l 368.648 496.331 l 375.609 496.331 l 375.609 496.811 l 378.489 497.531 l 380.649 498.011 l 382.329 498.491 l 383.289 498.971 l 384.489 499.691 l 385.449 500.171 l 385.929 500.651 l 387.129 501.131 l 387.609 501.851 l 388.809 502.332 l 389.289 502.81 2000 2 l 389.769 503.292 l 390.489 504.012 l 390.969 504.492 l 391.449 504.972 l 391.929 505.452 l 392.649 506.652 l 393.129 507.132 l 393.609 507.852 l 394.089 508.812 l 394.809 509.292 l 395.289 510.492 l 395.769 511.452 l 396.489 513.132 l 396.969 514.332 l 397.449 516.492 l 397.929 519.132 l 398.649 526.812 l 397.929 526.812 l 397.929 529.452 l 397.449 529.452 l 397.449 531.612 l 396.969 531.612 l 396.969 532.812 l 396.489 532.812 l 396.489 534.252 l 395.769 534.252 l 395.769 535.452 l 395.289 535.452 l 395.289 536.412 l 394.809 536.412 l 394.809 537.132 l 394.089 537.132 l 394.089 538.092 l 393.609 538.092 l 393.609 538.572 l 393.129 538.572 l 393.129 539.292 l 392.649 539.292 l 392.649 540.252 l 391.929 540.252 l 391.929 540.972 l 391.449 540.972 l 391.449 541.452 l 390.969 541.452 l 390.969 541.932 l 390.489 541.932 l 390.489 542.412 l 389.769 542.412 l 389.769 543.132 l 389.289 543.132 l 389.289 543.612 l 388.809 543.612 l 388.809 544.092 l 387.609 544.092 l 387.609 544.572 l 387.129 544.572 l 387.129 545.292 l 385.929 545.292 l 385.929 545.772 l 385.449 545.772 l 385.449 546.253 l 384.489 546.253 l 384.489 546.733 l 383.289 546.733 l 383.289 547.453 l 382.329 547.453 l 382.329 547.933 l 380.649 547.933 l 380.649 548.413 l 378.489 548.413 l 378.489 548.893 l 375.609 548.893 l 375.609 549.613 l W n 0.65 g 318.727 523.932 m 370.808 576.253 l 372.969 576.253 l 372.969 574.093 l 320.887 521.772 l 318.727 521.772 l f 0.659 g 320.167 522.492 m 372.489 574.573 l 374.649 574.573 l 374.649 572.413 l 322.327 520.332 l 320.167 520.332 l f 0.667 g 321.367 521.292 m 373.449 573.373 l 375.609 573.373 l 375.609 571.213 l 323.527 519.132 l 321.367 519.132 l f 0.676 g 322.327 520.332 m 374.649 572.413 l 376.809 572.413 l 376.809 570.253 l 324.487 518.172 l 322.327 518.172 l f 0.685 g 323.527 519.132 m 375.609 571.213 l 377.769 571.213 l 377.769 569.053 l 325.687 516.972 l 323.527 516.972 l f 0.693 g 324.727 517.932 m 376.809 570.253 l 378.969 570.253 l 378.969 568.093 l 326.887 515.772 l 324.727 515.772 l f 0.702 g 325.687 516.972 m 377.769 569.053 l 379.929 569.053 l 379.929 566.893 l 327.848 514.812 l 325.687 514.812 l f 0.711 g 326.887 515.772 m 378.969 568.093 l 381.129 568.093 l 381.129 565.933 l 329.048 513.612 l 326.887 513.612 l f 0.72 g 327.848 514.812 m 380.169 566.893 l 382.329 566.893 l 382.329 564.733 l 330.008 512.652 l 327.848 512.652 l f 0.728 g 329.048 513.612 m 381.129 565.933 l 383.289 565.933 l 383.289 563.773 l 331.208 511.452 l 329.048 511.452 l f 0.737 g 330.008 512.652 m 382.329 564.733 l 384.489 564.733 l 384.489 562.573 l 332.168 510.492 l 330.008 510.492 l f 0.746 g 331.208 511.452 m 383.289 563.773 l 385.449 563.773 l 385.449 561.613 l 333.368 509.292 l 331.208 509.292 l f 0.754 g 332.168 510.492 m 384.489 562.573 l 386.649 562.573 l 386.649 560.413 l 334.328 508.332 l 332.168 508.332 l f 0.763 g 333.368 509.292 m 385.449 561.613 l 387.609 561.613 l 387.609 559.453 l 335.528 507.132 l 333.368 507.132 l f 0.772 g 334.328 508.332 m 386.649 560.413 l 388.809 560.413 l 388.809 558.253 l 336.488 506.172 l 334.328 506.172 l f 0.78 g 335.528 507.132 m 387.609 559.213 l 389.769 559.213 l 389.769 557.053 l 337.688 504.972 l 335.528 504.972 l f 0.789 g 336.488 506.172 m 388.809 558.253 l 390.969 558.253 l 390.969 556.093 l 338.648 504.012 l 336.488 504.012 l f 0.798 g 337.688 504.972 m 389.769 557.053 l 391.929 557.053 l 391.929 554.893 l 339.848 502.812 l 337.688 502.812 l f 0.807 g 338.648 504.012 m 390.969 556.093 l 393.129 556.093 l 393.129 553.933 l 340.808 501.851 l 338.648 501.851 l f 0.815 g 339.848 502.812 m 391.929 554.893 l 394.089 554.893 l 394.089 552.733 l 342.008 500.651 l 339.848 500.651 l f 0.824 g 340.808 501.851 m 393.129 553.933 l 395.289 553.933 l 395.289 551.773 l 342.968 499.691 l 340.808 499.691 l f 0.833 g 342.008 500.651 m 394.089 552.733 l 396.249 552.733 l 396.249 550.573 l 344.168 498.491 l 342.008 498.491 l f 0.841 g 343.208 499.691 m 395.289 551.773 l 397.449 551.773 l 397.449 549.613 l 345.368 497.531 l 343.208 497.531 l f 0.85 g 344.168 498.491 m 396.489 550.573 l 398.649 550.573 l 398.649 548.413 l 346.328 496.331 l 344.168 496.331 l f 345.368 497.531 m 397.449 549.613 l 399.609 549.613 l 399.609 547.453 l 347.528 495.371 l 345.368 495.371 l f 0.841 g 346.808 495.851 m 399.129 547.933 l 401.289 547.933 l 401.289 545.772 l 348.968 493.691 l 346.808 493.691 l f 0.833 g 348.008 494.651 m 400.089 546.733 l 402.249 546.733 l 402.249 544.572 l 350.168 492.491 l 348.008 492.491 l f 0.824 g 348.968 493.691 m 401.289 545.772 l 403.449 545.772 l 403.449 543.612 l 351.128 491.531 l 348.968 491.531 l f 0.815 g 350.168 492.491 m 402.249 544.572 l 404.409 544.572 l 404.409 542.412 l 352.328 490.331 l 350.168 490.331 l f 0.807 g 351.368 491.531 m 403.449 543.612 l 405.609 543.612 l 405.609 541.452 l 353.528 489.371 l 351.368 489.371 l f 0.798 g 352.328 490.331 m 404.409 542.412 l 406.569 542.412 l 406.569 540.252 l 354.488 488.171 l 352.328 488.171 l f 0.789 g 353.528 489.371 m 405.609 541.452 l 407.769 541.452 l 407.769 539.292 l 355.688 487.211 l 353.528 487.211 l f 0.78 g 354.488 488.171 m 406.809 540.252 l 408.969 540.252 l 408.969 538.092 l 356.648 486.011 l 354.488 486.011 l f 0.772 g 355.688 487.211 m 407.769 539.292 l 409.929 539.292 l 409.929 537.132 l 357.848 485.051 l 355.688 485.051 l f 0.763 g 356.648 486.011 m 408.969 538.092 l 411.129 538.092 l 411.129 535.932 l 358.808 483.851 l 356.648 483.851 l f 0.754 g 357.848 484.811 m 409.929 537.132 l 412.089 537.132 l 412.089 534.972 l 360.008 482.651 l 357.848 482.651 l f 0.746 g 358.808 483.851 m 411.129 535.932 l 413.289 535.932 l 413.289 533.772 l 360.968 481.691 l 358.808 481.691 l f 0.737 g 360.008 482.651 m 412.089 534.972 l 414.249 534.972 l 414.249 532.812 l 362.168 480.491 l 360.008 480.491 l f 0.728 g 360.968 481.691 m 413.289 533.772 l 415.45 533.772 l 415.45 531.612 l 363.128 479.531 l 360.968 479.531 l f 0.72 g 362.168 480.491 m 414.249 532.812 l 416.41 532.812 l 416.41 530.652 l 364.328 478.331 l 362.168 478.331 l f 0.711 g 363.128 479.531 m 415.45 531.612 l 417.61 531.612 l 417.61 529.452 l 365.288 477.371 l 363.128 477.371 l f 0.702 g 364.328 478.331 m 416.41 530.652 l 418.57 530.652 l 418.57 528.492 l 366.488 476.171 l 364.328 476.171 l f 0.693 g 365.288 477.371 m 417.61 529.452 l 419.77 529.452 l 419.77 527.292 l 367.448 475.211 l 365.288 475.211 l f 0.685 g 366.488 476.171 m 418.57 528.252 l 420.73 528.252 l 420.73 526.092 l 368.648 474.011 l 366.488 474.011 l f 0.676 g 367.448 475.211 m 419.77 527.292 l 421.93 527.292 l 421.93 525.132 l 369.608 473.051 l 367.448 473.051 l f 0.667 g 368.648 474.011 m 420.73 526.092 l 422.89 526.092 l 422.89 523.932 l 370.808 471.851 l 368.648 471.851 l f 0.659 g 369.848 473.051 m 421.93 525.132 l 424.09 525.132 l 424.09 522.972 l 372.009 470.891 l 369.848 470.891 l f 0.65 g 370.808 471.851 m 423.13 523.932 l 425.29 523.932 l 425.29 521.772 l 372.969 469.691 l 370.808 469.691 l f Q 0.36 w 0.55 G 372.249 549.433 m 386.722 549.433 398.469 537.578 398.469 522.972 c 398.469 508.366 386.722 496.511 372.249 496.511 c 357.775 496.511 346.028 508.366 346.028 522.972 c 346.028 537.578 357.775 549.433 372.249 549.433 c s 0.65 G 372.489 548.713 m 386.83 548.713 398.469 537.127 398.469 522.852 c 398.469 508.577 386.83 496.991 372.489 496.991 c 358.147 496.991 346.508 508.577 346.508 522.852 c 346.508 537.127 358.147 548.713 372.489 548.713 c s 0.9 G 372.129 548.233 m 386.271 548.233 397.749 536.755 397.749 522.612 c 397.749 508.469 386.271 496.991 372.129 496.991 c 357.986 496.991 346.508 508.469 346.508 522.612 c 346.508 536.755 357.986 548.233 372.129 548.233 c s 0.65 G 372.129 548.233 m 386.006 548.233 397.269 536.916 397.269 522.972 c 397 2000 .269 509.028 386.006 497.711 372.129 497.711 c 358.251 497.711 346.988 509.028 346.988 522.972 c 346.988 536.916 358.251 548.233 372.129 548.233 c s 0.55 G 372.129 547.753 m 386.006 547.753 397.269 536.651 397.269 522.972 c 397.269 509.293 386.006 498.191 372.129 498.191 c 358.251 498.191 346.988 509.293 346.988 522.972 c 346.988 536.651 358.251 547.753 372.129 547.753 c s 0 w BT /F3 4.32 Tf 0 G 2.265 0 0 2.263 355.871 528.732 Tm (Snorkel)Tj ET 0.5 w 355.871 528.084 m 388.877 528.084 l S 0 w BT /F2 3.36 Tf 2.265 0 0 2.263 358.046 518.892 Tm (register\(\))Tj -3.12 -3.818 TD (sound_siren\(\))Tj ET 2.16 w q 450.25 549.613 m 442.57 549.613 l 439.93 548.893 l 438.25 548.413 l 436.57 547.933 l 434.89 547.453 l 433.93 546.733 l 433.45 546.253 l 432.25 545.772 l 431.05 545.292 l 430.57 544.572 l 430.09 544.092 l 428.89 543.612 l 428.41 543.132 l 427.93 542.412 l 427.45 541.932 l 426.73 541.452 l 426.25 540.972 l 425.77 540.252 l 425.29 539.292 l 424.57 538.572 l 424.09 538.092 l 423.61 537.132 l 423.13 535.932 l 422.41 535.452 l 421.93 534.252 l 421.45 532.812 l 420.73 531.132 l 420.25 529.452 l 419.77 526.812 l 419.77 519.132 l 420.25 519.132 l 420.25 516.492 l 420.73 516.492 l 420.73 514.812 l 421.45 514.812 l 421.45 513.132 l 421.93 513.132 l 421.93 511.452 l 422.41 511.452 l 422.41 510.492 l 423.13 510.492 l 423.13 510.012 l 423.61 510.012 l 423.61 508.812 l 424.09 508.812 l 424.09 507.852 l 424.57 507.852 l 424.57 507.132 l 425.29 507.132 l 425.29 506.652 l 425.77 506.652 l 425.77 505.452 l 426.25 505.452 l 426.25 504.972 l 426.73 504.972 l 426.73 504.492 l 427.45 504.492 l 427.45 504.012 l 427.93 504.012 l 427.93 503.292 l 428.41 503.292 l 428.41 502.812 l 428.89 502.812 l 428.89 502.332 l 430.09 502.332 l 430.09 501.851 l 430.57 501.851 l 430.57 501.131 l 431.05 501.131 l 431.05 500.651 l 432.25 500.651 l 432.25 500.171 l 433.45 500.171 l 433.45 499.691 l 433.93 499.691 l 433.93 498.971 l 434.89 498.971 l 434.89 498.491 l 436.57 498.491 l 436.57 498.011 l 438.25 498.011 l 438.25 497.531 l 439.93 497.531 l 439.93 496.811 l 442.57 496.811 l 442.57 496.331 l 450.25 496.331 l 450.25 496.811 l 452.89 497.531 l 454.57 498.011 l 456.25 498.491 l 457.69 498.971 l 458.891 499.691 l 459.371 500.171 l 460.571 500.651 l 461.531 501.131 l 462.251 501.851 l 462.731 502.332 l 463.691 502.812 l 464.411 503.292 l 464.891 504.012 l 465.371 504.492 l 465.851 504.972 l 466.571 505.452 l 467.051 506.652 l 467.531 507.132 l 468.251 507.852 l 468.731 508.812 l 469.211 510.012 l 469.691 510.492 l 470.411 511.452 l 470.891 513.132 l 471.371 514.812 l 471.851 516.492 l 472.571 519.132 l 473.051 526.812 l 472.571 526.812 l 472.571 529.452 l 471.851 529.452 l 471.851 531.132 l 471.371 531.132 l 471.371 532.812 l 470.891 532.812 l 470.891 534.252 l 470.411 534.252 l 470.411 535.452 l 469.691 535.452 l 469.691 535.932 l 469.211 535.932 l 469.211 537.132 l 468.731 537.132 l 468.731 538.092 l 468.251 538.092 l 468.251 538.572 l 467.531 538.572 l 467.531 539.292 l 467.051 539.292 l 467.051 540.252 l 466.571 540.252 l 466.571 540.972 l 465.851 540.972 l 465.851 541.452 l 465.371 541.452 l 465.371 541.932 l 464.891 541.932 l 464.891 542.412 l 464.411 542.412 l 464.411 543.132 l 463.691 543.132 l 463.691 543.612 l 462.731 543.612 l 462.731 544.092 l 462.251 544.092 l 462.251 544.572 l 461.531 544.572 l 461.531 545.292 l 460.571 545.292 l 460.571 545.772 l 459.371 545.772 l 459.371 546.253 l 458.891 546.253 l 458.891 546.733 l 457.69 546.733 l 457.69 547.453 l 456.25 547.453 l 456.25 547.933 l 454.57 547.933 l 454.57 548.413 l 452.89 548.413 l 452.89 548.893 l 450.25 548.893 l 450.25 549.613 l W n 0.65 g 392.649 523.932 m 445.93 577.213 l 448.09 577.213 l 448.09 575.053 l 394.809 521.772 l 392.649 521.772 l f 0.659 g 394.089 522.492 m 447.37 575.533 l 449.53 575.533 l 449.53 573.373 l 396.249 520.332 l 394.089 520.332 l f 0.667 g 395.289 521.292 m 448.57 574.573 l 450.73 574.573 l 450.73 572.413 l 397.449 519.132 l 395.289 519.132 l f 0.676 g 396.489 520.332 m 449.53 573.373 l 451.69 573.373 l 451.69 571.213 l 398.649 518.172 l 396.489 518.172 l f 0.685 g 397.449 519.132 m 450.73 572.413 l 452.89 572.413 l 452.89 570.253 l 399.609 516.972 l 397.449 516.972 l f 0.693 g 398.649 517.932 m 451.93 571.213 l 454.09 571.213 l 454.09 569.053 l 400.809 515.772 l 398.649 515.772 l f 0.702 g 399.609 516.972 m 452.89 570.253 l 455.05 570.253 l 455.05 568.093 l 401.769 514.812 l 399.609 514.812 l f 0.711 g 400.809 515.772 m 454.09 569.053 l 456.25 569.053 l 456.25 566.893 l 402.969 513.612 l 400.809 513.612 l f 0.72 g 401.769 514.812 m 455.05 568.093 l 457.21 568.093 l 457.21 565.933 l 403.929 512.652 l 401.769 512.652 l f 0.728 g 402.969 513.612 m 456.25 566.893 l 458.41 566.893 l 458.41 564.733 l 405.129 511.452 l 402.969 511.452 l f 0.737 g 403.929 512.652 m 457.21 565.933 l 459.371 565.933 l 459.371 563.773 l 406.089 510.492 l 403.929 510.492 l f 0.746 g 405.129 511.452 m 458.41 564.733 l 460.571 564.733 l 460.571 562.573 l 407.289 509.292 l 405.129 509.292 l f 0.754 g 406.089 510.492 m 459.371 563.773 l 461.531 563.773 l 461.531 561.613 l 408.249 508.332 l 406.089 508.332 l f 0.763 g 407.289 508.812 m 460.571 562.093 l 462.731 562.093 l 462.731 559.933 l 409.449 506.652 l 407.289 506.652 l f 0.772 g 408.249 507.852 m 461.531 560.893 l 463.691 560.893 l 463.691 558.733 l 410.409 505.692 l 408.249 505.692 l f 0.78 g 409.449 506.652 m 462.731 559.933 l 464.891 559.933 l 464.891 557.773 l 411.609 504.492 l 409.449 504.492 l f 0.789 g 410.409 505.452 m 463.691 558.733 l 465.851 558.733 l 465.851 556.573 l 412.569 503.292 l 410.409 503.292 l f 0.798 g 411.609 504.492 m 464.891 557.773 l 467.051 557.773 l 467.051 555.613 l 413.769 502.332 l 411.609 502.332 l f 0.807 g 412.569 503.292 m 465.851 556.573 l 468.011 556.573 l 468.011 554.413 l 414.729 501.131 l 412.569 501.131 l f 0.815 g 413.769 502.332 m 467.051 555.613 l 469.211 555.613 l 469.211 553.453 l 415.93 500.171 l 413.769 500.171 l f 0.824 g 414.97 501.131 m 468.251 554.413 l 470.411 554.413 l 470.411 552.253 l 417.13 498.971 l 414.97 498.971 l f 0.833 g 415.93 500.171 m 469.211 553.453 l 471.371 553.453 l 471.371 551.293 l 418.09 498.011 l 415.93 498.011 l f 0.841 g 417.13 498.971 m 470.411 552.253 l 472.571 552.253 l 472.571 550.093 l 419.29 496.811 l 417.13 496.811 l f 0.85 g 418.09 498.011 m 471.371 551.293 l 473.531 551.293 l 473.531 549.133 l 420.25 495.851 l 418.09 495.851 l f 419.29 496.811 m 472.571 550.093 l 474.731 550.093 l 474.731 547.933 l 421.45 494.651 l 419.29 494.651 l f 0.841 g 420.73 495.131 m 474.011 548.413 l 476.171 548.413 l 476.171 546.253 l 422.89 492.971 l 420.73 492.971 l f 0.833 g 421.93 494.171 m 475.211 547.453 l 477.371 547.453 l 477.371 545.292 l 424.09 492.011 l 421.93 492.011 l f 0.824 g 423.13 492.971 m 476.171 546.253 l 478.331 546.253 l 478.331 544.092 l 425.29 490.811 l 423.13 490.811 l f 0.815 g 424.09 492.011 m 477.371 545.292 l 479.531 545.292 l 479.531 543.132 l 426.25 489.851 l 424.09 489.851 l f 0.807 g 425.29 490.811 m 478.571 544.092 l 480.731 544.092 l 480.731 541.932 l 427.45 488.651 l 425.29 488.651 l f 0.798 g 426.25 489.851 m 479.531 543.132 l 481.691 543.132 l 481.691 540.972 l 428.41 487.691 l 426.25 487.691 l f 0.789 g 427.45 488.651 m 480.731 541.932 l 482.891 541.932 l 482.891 539.772 l 429.61 486.491 l 427.45 486.491 l f 0.78 g 428.41 487.691 m 481.691 540.972 l 483.851 540.972 l 483.851 538.812 l 430.57 485.531 l 428.41 485.531 l f 0.772 g 429.61 486.491 m 482.891 539.772 l 485.051 539.772 l 485.051 537.612 l 431.77 484.331 l 429.61 484.331 l f 0.763 g 430.57 485.531 m 483.851 538.572 l 486.011 538.572 l 486.011 536.412 l 432.73 483.371 l 430.57 483.371 l f 0.754 g 431.77 484.331 m 485.051 537.612 l 487.211 2000 537.612 l 487.211 535.452 l 433.93 482.171 l 431.77 482.171 l f 0.746 g 432.73 482.651 m 486.011 535.932 l 488.171 535.932 l 488.171 533.772 l 434.89 480.491 l 432.73 480.491 l f 0.737 g 433.93 481.691 m 487.211 534.972 l 489.371 534.972 l 489.371 532.812 l 436.09 479.531 l 433.93 479.531 l f 0.728 g 434.89 480.491 m 488.171 533.772 l 490.331 533.772 l 490.331 531.612 l 437.05 478.331 l 434.89 478.331 l f 0.72 g 436.09 479.531 m 489.371 532.812 l 491.531 532.812 l 491.531 530.652 l 438.25 477.371 l 436.09 477.371 l f 0.711 g 437.05 478.331 m 490.331 531.612 l 492.491 531.612 l 492.491 529.452 l 439.21 476.171 l 437.05 476.171 l f 0.702 g 438.25 477.371 m 491.531 530.652 l 493.691 530.652 l 493.691 528.492 l 440.41 475.211 l 438.25 475.211 l f 0.693 g 439.21 476.171 m 492.491 529.452 l 494.651 529.452 l 494.651 527.292 l 441.37 474.011 l 439.21 474.011 l f 0.685 g 440.41 475.211 m 493.691 528.252 l 495.851 528.252 l 495.851 526.092 l 442.57 473.051 l 440.41 473.051 l f 0.676 g 441.61 474.011 m 494.651 527.292 l 496.811 527.292 l 496.811 525.132 l 443.77 471.851 l 441.61 471.851 l f 0.667 g 442.57 473.051 m 495.851 526.092 l 498.011 526.092 l 498.011 523.932 l 444.73 470.891 l 442.57 470.891 l f 0.659 g 443.77 471.851 m 497.051 525.132 l 499.211 525.132 l 499.211 522.972 l 445.93 469.691 l 443.77 469.691 l f 0.65 g 444.73 470.891 m 498.011 523.932 l 500.171 523.932 l 500.171 521.772 l 446.89 468.731 l 444.73 468.731 l f Q 0.36 w 0.55 G 446.41 549.433 m 461.017 549.433 472.871 537.578 472.871 522.972 c 472.871 508.366 461.017 496.511 446.41 496.511 c 431.804 496.511 419.95 508.366 419.95 522.972 c 419.95 537.578 431.804 549.433 446.41 549.433 c s 0.65 G 446.41 548.713 m 460.752 548.713 472.391 537.127 472.391 522.852 c 472.391 508.577 460.752 496.991 446.41 496.991 c 432.069 496.991 420.43 508.577 420.43 522.852 c 420.43 537.127 432.069 548.713 446.41 548.713 c s 0.9 G 446.65 548.233 m 460.859 548.233 472.391 536.755 472.391 522.612 c 472.391 508.469 460.859 496.991 446.65 496.991 c 432.441 496.991 420.91 508.469 420.91 522.612 c 420.91 536.755 432.441 548.233 446.65 548.233 c s 0.65 G 446.29 548.233 m 460.3 548.233 471.671 536.916 471.671 522.972 c 471.671 509.028 460.3 497.711 446.29 497.711 c 432.28 497.711 420.91 509.028 420.91 522.972 c 420.91 536.916 432.28 548.233 446.29 548.233 c s 0.55 G 446.41 547.753 m 460.089 547.753 471.191 536.651 471.191 522.972 c 471.191 509.293 460.089 498.191 446.41 498.191 c 432.731 498.191 421.63 509.293 421.63 522.972 c 421.63 536.651 432.731 547.753 446.41 547.753 c s 0 w BT /F3 4.8 Tf 0 G 2.265 0 0 2.263 427.631 528.732 Tm (Pumper)Tj ET 0.5 w 427.631 528.012 m 466.393 528.012 l S 0 w BT /F2 3.36 Tf 2.265 0 0 2.263 432.523 518.892 Tm (register\(\))Tj -3.12 -3.818 TD (sound_siren\(\))Tj ET 3.36 w q 226.325 549.613 m 218.645 549.613 l 216.005 548.893 l 214.325 548.413 l 212.645 547.933 l 210.965 547.453 l 210.005 546.733 l 209.285 546.253 l 208.325 545.772 l 207.125 545.292 l 206.645 544.572 l 206.165 544.092 l 204.965 543.612 l 204.485 543.132 l 204.005 542.412 l 203.285 541.932 l 202.805 541.452 l 202.325 540.972 l 201.845 540.252 l 201.125 539.292 l 200.645 538.572 l 200.165 538.092 l 199.685 537.132 l 198.965 535.932 l 198.485 535.452 l 198.005 534.252 l 197.285 532.812 l 196.805 531.132 l 196.324 529.452 l 195.844 526.812 l 195.844 519.132 l 196.324 519.132 l 196.324 516.492 l 196.805 516.492 l 196.805 514.812 l 197.285 514.812 l 197.285 513.132 l 198.005 513.132 l 198.005 511.452 l 198.485 511.452 l 198.485 510.492 l 198.965 510.492 l 198.965 510.012 l 199.685 510.012 l 199.685 508.812 l 200.165 508.812 l 200.165 507.852 l 200.645 507.852 l 200.645 507.132 l 201.125 507.132 l 201.125 506.652 l 201.845 506.652 l 201.845 505.452 l 202.325 505.452 l 202.325 504.972 l 202.805 504.972 l 202.805 504.492 l 203.285 504.492 l 203.285 504.012 l 204.005 504.012 l 204.005 503.292 l 204.485 503.292 l 204.485 502.812 l 204.965 502.812 l 204.965 502.332 l 206.165 502.332 l 206.165 501.851 l 206.645 501.851 l 206.645 501.131 l 207.125 501.131 l 207.125 500.651 l 208.325 500.651 l 208.325 500.171 l 209.285 500.171 l 209.285 499.691 l 210.005 499.691 l 210.005 498.971 l 210.965 498.971 l 210.965 498.491 l 212.645 498.491 l 212.645 498.011 l 214.325 498.011 l 214.325 497.531 l 216.005 497.531 l 216.005 496.811 l 218.645 496.811 l 218.645 496.331 l 226.325 496.331 l 226.325 496.811 l 228.965 497.531 l 230.645 498.011 l 232.085 498.491 l 233.765 498.971 l 234.965 499.691 l 235.445 500.171 l 236.645 500.651 l 237.605 501.131 l 238.085 501.851 l 238.805 502.332 l 239.765 502.812 l 240.246 503.292 l 240.966 504.012 l 241.446 504.492 l 241.926 504.972 l 242.406 505.452 l 243.126 506.652 l 243.606 507.132 l 244.086 507.852 l 244.806 508.812 l 245.286 510.012 l 245.766 510.492 l 246.246 511.452 l 246.966 513.132 l 247.446 514.812 l 247.926 516.492 l 248.406 519.132 l 249.126 526.812 l 248.406 526.812 l 248.406 529.452 l 247.926 529.452 l 247.926 531.132 l 247.446 531.132 l 247.446 532.812 l 246.966 532.812 l 246.966 534.252 l 246.246 534.252 l 246.246 535.452 l 245.766 535.452 l 245.766 535.932 l 245.286 535.932 l 245.286 537.132 l 244.806 537.132 l 244.806 538.092 l 244.086 538.092 l 244.086 538.572 l 243.606 538.572 l 243.606 539.292 l 243.126 539.292 l 243.126 540.252 l 242.406 540.252 l 242.406 540.972 l 241.926 540.972 l 241.926 541.452 l 241.446 541.452 l 241.446 541.932 l 240.966 541.932 l 240.966 542.412 l 240.246 542.412 l 240.246 543.132 l 239.765 543.132 l 239.765 543.612 l 238.805 543.612 l 238.805 544.092 l 238.085 544.092 l 238.085 544.572 l 237.605 544.572 l 237.605 545.292 l 236.645 545.292 l 236.645 545.772 l 235.445 545.772 l 235.445 546.253 l 234.965 546.253 l 234.965 546.733 l 233.765 546.733 l 233.765 547.453 l 232.085 547.453 l 232.085 547.933 l 230.645 547.933 l 230.645 548.413 l 228.965 548.413 l 228.965 548.893 l 226.325 548.893 l 226.325 549.613 l W n 0.9 G 222.485 547.933 m 236.263 547.933 247.446 536.75 247.446 522.972 c 247.446 509.194 236.263 498.011 222.485 498.011 c 208.707 498.011 197.525 509.194 197.525 522.972 c 197.525 536.75 208.707 547.933 222.485 547.933 c s 0.7 G 222.365 546.733 m 235.282 546.733 245.766 536.195 245.766 523.212 c 245.766 510.229 235.282 499.691 222.365 499.691 c 209.448 499.691 198.965 510.229 198.965 523.212 c 198.965 536.195 209.448 546.733 222.365 546.733 c s 0.75 G 222.365 545.052 m 234.355 545.052 244.086 535.107 244.086 522.852 c 244.086 510.597 234.355 500.651 222.365 500.651 c 210.375 500.651 200.645 510.597 200.645 522.852 c 200.645 535.107 210.375 545.052 222.365 545.052 c s 0 w 0.75 g 222.365 546.733 m 235.282 546.733 245.766 536.034 245.766 522.852 c 245.766 509.67 235.282 498.971 222.365 498.971 c 209.448 498.971 198.965 509.67 198.965 522.852 c 198.965 536.034 209.448 546.733 222.365 546.733 c f Q 0 w BT /F3 3.6 Tf 2.265 0 0 2.263 205.284 520.572 Tm (FireTruck)Tj ET 0.5 w 205.284 520.032 m 240.612 520.032 l S 0.54 w 2 j 222.725 548.653 m 200.885 581.293 l S 0 j 2 j 197.525 586.813 m 206.405 580.813 l 200.885 581.293 l 199.925 576.493 l 197.525 586.813 l b* 0 j 2.16 w q 226.805 549.613 m 219.125 549.613 l 216.485 548.893 l 214.805 548.413 l 213.125 547.933 l 211.445 547.453 l 210.485 546.733 l 210.005 546.253 l 208.805 545.772 l 207.845 545.292 l 207.125 544.572 l 206.645 544.092 l 205.445 543.612 l 204.965 543.132 l 204.485 542.412 l 204.005 541.932 l 203.285 541.452 l 202.805 540.972 l 202.325 540.252 l 201.845 539.292 l 201.125 538.572 l 200.645 538.092 l 200.165 537.132 l 199.685 535.932 l 198.965 535.452 l 198.485 534.252 l 198.005 532.812 l 197.285 531.132 l 196.805 529.452 l 196.324 526.812 l 196.324 519.132 l 196.805 519.132 l 196.805 516.492 l 197.285 516.492 l 197.285 514.812 l 198.005 514.812 l 198.005 513.132 l 198.485 513.132 l 198.485 511. 2000 452 l 198.965 511.452 l 198.965 510.492 l 199.685 510.492 l 199.685 510.012 l 200.165 510.012 l 200.165 508.812 l 200.645 508.812 l 200.645 507.852 l 201.125 507.852 l 201.125 507.132 l 201.845 507.132 l 201.845 506.652 l 202.325 506.652 l 202.325 505.452 l 202.805 505.452 l 202.805 504.972 l 203.285 504.972 l 203.285 504.492 l 204.005 504.492 l 204.005 504.012 l 204.485 504.012 l 204.485 503.292 l 204.965 503.292 l 204.965 502.812 l 205.445 502.812 l 205.445 502.332 l 206.645 502.332 l 206.645 501.851 l 207.125 501.851 l 207.125 501.131 l 207.845 501.131 l 207.845 500.651 l 208.805 500.651 l 208.805 500.171 l 210.005 500.171 l 210.005 499.691 l 210.485 499.691 l 210.485 498.971 l 211.445 498.971 l 211.445 498.491 l 213.125 498.491 l 213.125 498.011 l 214.805 498.011 l 214.805 497.531 l 216.485 497.531 l 216.485 496.811 l 219.125 496.811 l 219.125 496.331 l 226.805 496.331 l 226.805 496.811 l 229.445 497.531 l 231.125 498.011 l 232.805 498.491 l 234.485 498.971 l 235.445 499.691 l 235.925 500.171 l 237.125 500.651 l 238.085 501.131 l 238.805 501.851 l 239.285 502.332 l 240.246 502.812 l 240.966 503.292 l 241.446 504.012 l 241.926 504.492 l 242.406 504.972 l 243.126 505.452 l 243.606 506.652 l 244.086 507.132 l 244.806 507.852 l 245.286 508.812 l 245.766 510.012 l 246.246 510.492 l 246.966 511.452 l 247.446 513.132 l 247.926 514.812 l 248.406 516.492 l 249.126 519.132 l 249.606 526.812 l 249.126 526.812 l 249.126 529.452 l 248.406 529.452 l 248.406 531.132 l 247.926 531.132 l 247.926 532.812 l 247.446 532.812 l 247.446 534.252 l 246.966 534.252 l 246.966 535.452 l 246.246 535.452 l 246.246 535.932 l 245.766 535.932 l 245.766 537.132 l 245.286 537.132 l 245.286 538.092 l 244.806 538.092 l 244.806 538.572 l 244.086 538.572 l 244.086 539.292 l 243.606 539.292 l 243.606 540.252 l 243.126 540.252 l 243.126 540.972 l 242.406 540.972 l 242.406 541.452 l 241.926 541.452 l 241.926 541.932 l 241.446 541.932 l 241.446 542.412 l 240.966 542.412 l 240.966 543.132 l 240.246 543.132 l 240.246 543.612 l 239.285 543.612 l 239.285 544.092 l 238.805 544.092 l 238.805 544.572 l 238.085 544.572 l 238.085 545.292 l 237.125 545.292 l 237.125 545.772 l 235.925 545.772 l 235.925 546.253 l 235.445 546.253 l 235.445 546.733 l 234.485 546.733 l 234.485 547.453 l 232.805 547.453 l 232.805 547.933 l 231.125 547.933 l 231.125 548.413 l 229.445 548.413 l 229.445 548.893 l 226.805 548.893 l 226.805 549.613 l W n 0.65 g 169.204 523.932 m 222.485 577.213 l 224.645 577.213 l 224.645 575.053 l 171.364 521.772 l 169.204 521.772 l f 0.659 g 170.644 522.492 m 223.925 575.533 l 226.085 575.533 l 226.085 573.373 l 172.804 520.332 l 170.644 520.332 l f 0.667 g 171.844 521.292 m 225.125 574.573 l 227.285 574.573 l 227.285 572.413 l 174.004 519.132 l 171.844 519.132 l f 0.676 g 173.044 520.332 m 226.325 573.373 l 228.485 573.373 l 228.485 571.213 l 175.204 518.172 l 173.044 518.172 l f 0.685 g 174.004 519.132 m 227.285 572.413 l 229.445 572.413 l 229.445 570.253 l 176.164 516.972 l 174.004 516.972 l f 0.693 g 175.204 517.932 m 228.485 571.213 l 230.645 571.213 l 230.645 569.053 l 177.364 515.772 l 175.204 515.772 l f 0.702 g 176.164 516.972 m 229.445 570.253 l 231.605 570.253 l 231.605 568.093 l 178.324 514.812 l 176.164 514.812 l f 0.711 g 177.364 515.772 m 230.645 569.053 l 232.805 569.053 l 232.805 566.893 l 179.524 513.612 l 177.364 513.612 l f 0.72 g 178.324 514.812 m 231.605 568.093 l 233.765 568.093 l 233.765 565.933 l 180.484 512.652 l 178.324 512.652 l f 0.728 g 179.524 513.612 m 232.805 566.893 l 234.965 566.893 l 234.965 564.733 l 181.684 511.452 l 179.524 511.452 l f 0.737 g 180.484 512.652 m 233.765 565.933 l 235.925 565.933 l 235.925 563.773 l 182.644 510.492 l 180.484 510.492 l f 0.746 g 181.684 511.452 m 234.965 564.733 l 237.125 564.733 l 237.125 562.573 l 183.844 509.292 l 181.684 509.292 l f 0.754 g 182.644 510.492 m 235.925 563.773 l 238.085 563.773 l 238.085 561.613 l 184.804 508.332 l 182.644 508.332 l f 0.763 g 183.844 508.812 m 237.125 562.093 l 239.285 562.093 l 239.285 559.933 l 186.004 506.652 l 183.844 506.652 l f 0.772 g 184.804 507.852 m 238.085 560.893 l 240.246 560.893 l 240.246 558.733 l 186.964 505.692 l 184.804 505.692 l f 0.78 g 186.004 506.652 m 239.285 559.933 l 241.446 559.933 l 241.446 557.773 l 188.164 504.492 l 186.004 504.492 l f 0.789 g 186.964 505.452 m 240.246 558.733 l 242.406 558.733 l 242.406 556.573 l 189.124 503.292 l 186.964 503.292 l f 0.798 g 188.164 504.492 m 241.446 557.773 l 243.606 557.773 l 243.606 555.613 l 190.324 502.332 l 188.164 502.332 l f 0.807 g 189.364 503.292 m 242.406 556.573 l 244.566 556.573 l 244.566 554.413 l 191.524 501.131 l 189.364 501.131 l f 0.815 g 190.324 502.332 m 243.606 555.613 l 245.766 555.613 l 245.766 553.453 l 192.484 500.171 l 190.324 500.171 l f 0.824 g 191.524 501.131 m 244.806 554.413 l 246.966 554.413 l 246.966 552.253 l 193.684 498.971 l 191.524 498.971 l f 0.833 g 192.484 500.171 m 245.766 553.453 l 247.926 553.453 l 247.926 551.293 l 194.644 498.011 l 192.484 498.011 l f 0.841 g 193.684 498.971 m 246.966 552.253 l 249.126 552.253 l 249.126 550.093 l 195.844 496.811 l 193.684 496.811 l f 0.85 g 194.644 498.011 m 247.926 551.293 l 250.086 551.293 l 250.086 549.133 l 196.805 495.851 l 194.644 495.851 l f 195.844 496.811 m 249.126 550.093 l 251.286 550.093 l 251.286 547.933 l 198.005 494.651 l 195.844 494.651 l f 0.841 g 197.285 495.131 m 250.566 548.413 l 252.726 548.413 l 252.726 546.253 l 199.445 492.971 l 197.285 492.971 l f 0.833 g 198.485 494.171 m 251.766 547.453 l 253.926 547.453 l 253.926 545.292 l 200.645 492.011 l 198.485 492.011 l f 0.824 g 199.685 492.971 m 252.966 546.253 l 255.126 546.253 l 255.126 544.092 l 201.845 490.811 l 199.685 490.811 l f 0.815 g 200.645 492.011 m 253.926 545.292 l 256.086 545.292 l 256.086 543.132 l 202.805 489.851 l 200.645 489.851 l f 0.807 g 201.845 490.811 m 255.126 544.092 l 257.286 544.092 l 257.286 541.932 l 204.005 488.651 l 201.845 488.651 l f 0.798 g 202.805 489.851 m 256.086 543.132 l 258.246 543.132 l 258.246 540.972 l 204.965 487.691 l 202.805 487.691 l f 0.789 g 204.005 488.651 m 257.286 541.932 l 259.446 541.932 l 259.446 539.772 l 206.165 486.491 l 204.005 486.491 l f 0.78 g 204.965 487.691 m 258.246 540.972 l 260.406 540.972 l 260.406 538.812 l 207.125 485.531 l 204.965 485.531 l f 0.772 g 206.165 486.491 m 259.446 539.772 l 261.606 539.772 l 261.606 537.612 l 208.325 484.331 l 206.165 484.331 l f 0.763 g 207.125 485.531 m 260.406 538.572 l 262.566 538.572 l 262.566 536.412 l 209.285 483.371 l 207.125 483.371 l f 0.754 g 208.325 484.331 m 261.606 537.612 l 263.766 537.612 l 263.766 535.452 l 210.485 482.171 l 208.325 482.171 l f 0.746 g 209.285 482.651 m 262.566 535.932 l 264.726 535.932 l 264.726 533.772 l 211.445 480.491 l 209.285 480.491 l f 0.737 g 210.485 481.691 m 263.766 534.972 l 265.926 534.972 l 265.926 532.812 l 212.645 479.531 l 210.485 479.531 l f 0.728 g 211.445 480.491 m 264.726 533.772 l 266.886 533.772 l 266.886 531.612 l 213.605 478.331 l 211.445 478.331 l f 0.72 g 212.645 479.531 m 265.926 532.812 l 268.086 532.812 l 268.086 530.652 l 214.805 477.371 l 212.645 477.371 l f 0.711 g 213.605 478.331 m 266.886 531.612 l 269.046 531.612 l 269.046 529.452 l 215.765 476.171 l 213.605 476.171 l f 0.702 g 214.805 477.371 m 268.086 530.652 l 270.246 530.652 l 270.246 528.492 l 216.965 475.211 l 214.805 475.211 l f 0.693 g 216.005 476.171 m 269.046 529.452 l 271.206 529.452 l 271.206 527.292 l 218.165 474.011 l 216.005 474.011 l f 0.685 g 216.965 475.211 m 270.246 528.252 l 272.406 528.252 l 272.406 526.092 l 219.125 473.051 l 216.965 473.051 l f 0.676 g 218.165 474.011 m 271.446 527.292 l 273.606 527.292 l 273.606 525.132 l 220.325 471.851 l 2 2000 18.165 471.851 l f 0.667 g 219.125 473.051 m 272.406 526.092 l 274.566 526.092 l 274.566 523.932 l 221.285 470.891 l 219.125 470.891 l f 0.659 g 220.325 471.851 m 273.606 525.132 l 275.766 525.132 l 275.766 522.972 l 222.485 469.691 l 220.325 469.691 l f 0.65 g 221.285 470.891 m 274.566 523.932 l 276.726 523.932 l 276.726 521.772 l 223.445 468.731 l 221.285 468.731 l f Q 0.36 w 0.55 G 222.965 549.433 m 237.571 549.433 249.426 537.578 249.426 522.972 c 249.426 508.366 237.571 496.511 222.965 496.511 c 208.359 496.511 196.505 508.366 196.505 522.972 c 196.505 537.578 208.359 549.433 222.965 549.433 c s 0.65 G 222.965 548.713 m 237.306 548.713 248.946 537.127 248.946 522.852 c 248.946 508.577 237.306 496.991 222.965 496.991 c 208.624 496.991 196.985 508.577 196.985 522.852 c 196.985 537.127 208.624 548.713 222.965 548.713 c s 0.9 G 222.605 548.233 m 236.748 548.233 248.226 536.755 248.226 522.612 c 248.226 508.469 236.748 496.991 222.605 496.991 c 208.462 496.991 196.985 508.469 196.985 522.612 c 196.985 536.755 208.462 548.233 222.605 548.233 c s 0.65 G 222.845 548.233 m 236.855 548.233 248.226 536.916 248.226 522.972 c 248.226 509.028 236.855 497.711 222.845 497.711 c 208.835 497.711 197.465 509.028 197.465 522.972 c 197.465 536.916 208.835 548.233 222.845 548.233 c s 0.55 G 222.965 547.753 m 236.644 547.753 247.746 536.651 247.746 522.972 c 247.746 509.293 236.644 498.191 222.965 498.191 c 209.286 498.191 198.185 509.293 198.185 522.972 c 198.185 536.651 209.286 547.753 222.965 547.753 c s 0 w BT 0 G 2.265 0 0 2.263 199.304 524.412 Tm (HighSideEnd)Tj ET 0.5 w 199.304 523.872 m 247.995 523.872 l S 0 w BT /F3 3.36 Tf 2.265 0 0 2.263 208.003 514.572 Tm (register\(\))Tj ET BT /F2 4.32 Tf 2.265 0 0 2.263 217.788 560.893 Tm (is-a)Tj ET BT 2.265 0 0 2.263 428.718 560.893 Tm (is-a)Tj ET BT 2.265 0 0 2.263 365.656 560.893 Tm (is-a)Tj ET BT 2.265 0 0 2.263 285.199 560.893 Tm (is-a)Tj ET 3.36 w q 149.523 549.613 m 142.563 549.613 l 139.683 548.893 l 137.523 548.413 l 136.083 547.933 l 134.883 547.453 l 133.683 546.733 l 132.723 546.253 l 132.243 545.772 l 131.043 545.292 l 130.563 544.572 l 129.363 544.092 l 128.883 543.612 l 128.403 543.132 l 127.923 542.412 l 127.203 541.932 l 126.723 541.452 l 126.243 540.972 l 125.523 540.252 l 125.043 539.292 l 124.563 538.572 l 124.083 538.092 l 123.363 537.132 l 122.883 536.412 l 122.403 535.452 l 121.923 534.252 l 121.203 532.812 l 120.723 531.612 l 120.243 529.452 l 119.763 526.812 l 119.763 519.132 l 120.243 519.132 l 120.243 516.492 l 120.723 516.492 l 120.723 514.332 l 121.203 514.332 l 121.203 513.132 l 121.923 513.132 l 121.923 511.452 l 122.403 511.452 l 122.403 510.492 l 122.883 510.492 l 122.883 509.292 l 123.363 509.292 l 123.363 508.812 l 124.083 508.812 l 124.083 507.852 l 124.563 507.852 l 124.563 507.132 l 125.043 507.132 l 125.043 506.652 l 125.523 506.652 l 125.523 505.452 l 126.243 505.452 l 126.243 504.972 l 126.723 504.972 l 126.723 504.492 l 127.203 504.492 l 127.203 504.012 l 127.923 504.012 l 127.923 503.292 l 128.403 503.292 l 128.403 502.812 l 128.883 502.812 l 128.883 502.332 l 129.363 502.332 l 129.363 501.851 l 130.563 501.851 l 130.563 501.131 l 131.043 501.131 l 131.043 500.651 l 132.243 500.651 l 132.243 500.171 l 132.723 500.171 l 132.723 499.691 l 133.683 499.691 l 133.683 498.971 l 134.883 498.971 l 134.883 498.491 l 136.083 498.491 l 136.083 498.011 l 137.523 498.011 l 137.523 497.531 l 139.683 497.531 l 139.683 496.811 l 142.563 496.811 l 142.563 496.331 l 149.523 496.331 l 149.523 496.811 l 152.163 497.531 l 154.564 498.011 l 156.004 498.491 l 157.204 498.971 l 158.164 499.691 l 159.364 500.171 l 159.844 500.651 l 161.044 501.131 l 161.524 501.851 l 162.724 502.332 l 163.204 502.812 l 163.684 503.292 l 164.164 504.012 l 164.884 504.492 l 165.364 504.972 l 165.844 505.452 l 166.324 506.652 l 167.044 507.132 l 167.524 507.852 l 168.004 508.812 l 168.484 509.292 l 169.204 510.492 l 169.684 511.452 l 170.164 513.132 l 170.644 514.332 l 171.364 516.492 l 171.844 519.132 l 172.324 526.812 l 171.844 526.812 l 171.844 529.452 l 171.364 529.452 l 171.364 531.612 l 170.644 531.612 l 170.644 532.812 l 170.164 532.812 l 170.164 534.252 l 169.684 534.252 l 169.684 535.452 l 169.204 535.452 l 169.204 536.412 l 168.484 536.412 l 168.484 537.132 l 168.004 537.132 l 168.004 538.092 l 167.524 538.092 l 167.524 538.572 l 167.044 538.572 l 167.044 539.292 l 166.324 539.292 l 166.324 540.252 l 165.844 540.252 l 165.844 540.972 l 165.364 540.972 l 165.364 541.452 l 164.884 541.452 l 164.884 541.932 l 164.164 541.932 l 164.164 542.412 l 163.684 542.412 l 163.684 543.132 l 163.204 543.132 l 163.204 543.612 l 162.724 543.612 l 162.724 544.092 l 161.524 544.092 l 161.524 544.572 l 161.044 544.572 l 161.044 545.292 l 159.844 545.292 l 159.844 545.772 l 159.364 545.772 l 159.364 546.253 l 158.164 546.253 l 158.164 546.733 l 157.204 546.733 l 157.204 547.453 l 156.004 547.453 l 156.004 547.933 l 154.564 547.933 l 154.564 548.413 l 152.163 548.413 l 152.163 548.893 l 149.523 548.893 l 149.523 549.613 l W n 0.9 G 146.043 547.933 m 159.623 547.933 170.644 536.75 170.644 522.972 c 170.644 509.194 159.623 498.011 146.043 498.011 c 132.464 498.011 121.443 509.194 121.443 522.972 c 121.443 536.75 132.464 547.933 146.043 547.933 c s 0.7 G 145.923 546.733 m 158.642 546.733 168.964 536.195 168.964 523.212 c 168.964 510.229 158.642 499.691 145.923 499.691 c 133.205 499.691 122.883 510.229 122.883 523.212 c 122.883 536.195 133.205 546.733 145.923 546.733 c s 0.75 G 146.283 545.052 m 158.273 545.052 168.004 535.107 168.004 522.852 c 168.004 510.597 158.273 500.651 146.283 500.651 c 134.294 500.651 124.563 510.597 124.563 522.852 c 124.563 535.107 134.294 545.052 146.283 545.052 c s 0 w 0.75 g 146.283 546.733 m 159.2 546.733 169.684 536.034 169.684 522.852 c 169.684 509.67 159.2 498.971 146.283 498.971 c 133.366 498.971 122.883 509.67 122.883 522.852 c 122.883 536.034 133.366 546.733 146.283 546.733 c f Q 0 w q -1 0 0 1 0 0 cm Q q 6 0 0 9.84 159.364 517.932 cm BI /F /CCF /W 11 /H 18 /BPC 1 /IM true /D [ 1 0 ] /DecodeParms << /K -1 /Columns 11 >> ID &¡yÿ‘Úÿ0ÿ#Üý> ID &£æñóß_ÿ§Ž{Çà EI Q q 4.32 0 0 9.84 153.844 517.932 cm BI /F /CCF /W 8 /H 18 /BPC 1 /IM true /D [ 1 0 ] /DecodeParms << /K -1 /Columns 8 >> ID &¢ÿòœ¡úO¿ÿ ã•Øü@ EI Q q 5.52 0 0 9.84 149.523 517.932 cm BI /F /CCF /W 10 /H 18 /BPC 1 /IM true /D [ 1 0 ] /DecodeParms << /K -1 /Columns 10 >> ID &¡?ù£@Œ?°¸ò1óícŸñø€ EI Q q 6.48 0 0 9.84 144.723 517.932 cm BI /F /CCF /W 12 /H 18 /BPC 1 /IM true /D [ 1 0 ] /DecodeParms << /K -1 /Columns 12 >> ID &¡ùéÈñÿãÿÿþž9éÀ@ EI Q q 4.56 0 0 9.84 141.843 517.932 cm BI /F /CCF /W 8 /H 18 /BPC 1 /IM true /D [ 1 0 ] /DecodeParms << /K -1 /Columns 8 >> ID &¢ÿòœ¡úO¿ÿ ã•Øü@ EI Q q 6.48 0 0 9.84 136.563 517.932 cm BI /F /CCF /W 12 /H 18 /BPC 1 /IM true /D [ 1 0 ] /DecodeParms << /K -1 /Columns 12 >> ID &¡ÿù‡,~ïªÿþý KÏL~  EI Q q 5.04 0 0 9.84 133.203 517.932 cm BI /F /CCF /W 9 /H 18 /BPC 1 /IM true /D [ 1 0 ] /DecodeParms << /K -1 /Columns 9 >> ID &¢ò¯‚0þÂÇý,«Ç+ñø€ EI Q q 6 0 0 9.84 128.403 517.932 cm BI /F /CCF /W 11 /H 18 /BPC 1 /IM true /D [ 1 0 ] /DecodeParms << /K -1 /Columns 11 >> ID &¡x%×þgöü0¾=Òð’xŽyãð EI Q q -1 0 0 1 0 0 cm Q 0.54 w 2 j 146.643 548.653 m 167.764 581.293 l S 0 j 2 j 170.884 586.813 m 168.724 576.493 l 167.764 581.293 l 162.244 580.813 l 170.884 586.813 l b* 0 j 2.16 w q 149.523 549.613 m 142.563 549.613 l 139.683 548.893 l 137.523 548.413 l 136.083 547.933 l 134.883 547.453 l 133.683 546.733 l 132.723 546.253 l 132.243 545.772 l 131.043 545.292 l 130.563 544.572 l 129.363 544.092 l 128.883 543.612 l 128.403 543.132 l 127.923 542.412 l 127.203 541.932 l 126.723 541.452 l 126.243 540.972 l 125.523 540.252 l 2000 125.043 539.292 l 124.563 538.572 l 124.083 538.092 l 123.363 537.132 l 122.883 536.412 l 122.403 535.452 l 121.923 534.252 l 121.203 532.812 l 120.723 531.612 l 120.243 529.452 l 119.763 526.812 l 119.763 519.132 l 120.243 519.132 l 120.243 516.492 l 120.723 516.492 l 120.723 514.332 l 121.203 514.332 l 121.203 513.132 l 121.923 513.132 l 121.923 511.452 l 122.403 511.452 l 122.403 510.492 l 122.883 510.492 l 122.883 509.292 l 123.363 509.292 l 123.363 508.812 l 124.083 508.812 l 124.083 507.852 l 124.563 507.852 l 124.563 507.132 l 125.043 507.132 l 125.043 506.652 l 125.523 506.652 l 125.523 505.452 l 126.243 505.452 l 126.243 504.972 l 126.723 504.972 l 126.723 504.492 l 127.203 504.492 l 127.203 504.012 l 127.923 504.012 l 127.923 503.292 l 128.403 503.292 l 128.403 502.812 l 128.883 502.812 l 128.883 502.332 l 129.363 502.332 l 129.363 501.851 l 130.563 501.851 l 130.563 501.131 l 131.043 501.131 l 131.043 500.651 l 132.243 500.651 l 132.243 500.171 l 132.723 500.171 l 132.723 499.691 l 133.683 499.691 l 133.683 498.971 l 134.883 498.971 l 134.883 498.491 l 136.083 498.491 l 136.083 498.011 l 137.523 498.011 l 137.523 497.531 l 139.683 497.531 l 139.683 496.811 l 142.563 496.811 l 142.563 496.331 l 149.523 496.331 l 149.523 496.811 l 152.163 497.531 l 154.564 498.011 l 156.004 498.491 l 157.204 498.971 l 158.164 499.691 l 159.364 500.171 l 159.844 500.651 l 161.044 501.131 l 161.524 501.851 l 162.724 502.332 l 163.204 502.812 l 163.684 503.292 l 164.164 504.012 l 164.884 504.492 l 165.364 504.972 l 165.844 505.452 l 166.324 506.652 l 167.044 507.132 l 167.524 507.852 l 168.004 508.812 l 168.484 509.292 l 169.204 510.492 l 169.684 511.452 l 170.164 513.132 l 170.644 514.332 l 171.364 516.492 l 171.844 519.132 l 172.324 526.812 l 171.844 526.812 l 171.844 529.452 l 171.364 529.452 l 171.364 531.612 l 170.644 531.612 l 170.644 532.812 l 170.164 532.812 l 170.164 534.252 l 169.684 534.252 l 169.684 535.452 l 169.204 535.452 l 169.204 536.412 l 168.484 536.412 l 168.484 537.132 l 168.004 537.132 l 168.004 538.092 l 167.524 538.092 l 167.524 538.572 l 167.044 538.572 l 167.044 539.292 l 166.324 539.292 l 166.324 540.252 l 165.844 540.252 l 165.844 540.972 l 165.364 540.972 l 165.364 541.452 l 164.884 541.452 l 164.884 541.932 l 164.164 541.932 l 164.164 542.412 l 163.684 542.412 l 163.684 543.132 l 163.204 543.132 l 163.204 543.612 l 162.724 543.612 l 162.724 544.092 l 161.524 544.092 l 161.524 544.572 l 161.044 544.572 l 161.044 545.292 l 159.844 545.292 l 159.844 545.772 l 159.364 545.772 l 159.364 546.253 l 158.164 546.253 l 158.164 546.733 l 157.204 546.733 l 157.204 547.453 l 156.004 547.453 l 156.004 547.933 l 154.564 547.933 l 154.564 548.413 l 152.163 548.413 l 152.163 548.893 l 149.523 548.893 l 149.523 549.613 l W n 0.65 g 92.402 523.932 m 144.723 576.253 l 146.883 576.253 l 146.883 574.093 l 94.562 521.772 l 92.402 521.772 l f 0.659 g 94.082 522.492 m 146.403 574.573 l 148.563 574.573 l 148.563 572.413 l 96.242 520.332 l 94.082 520.332 l f 0.667 g 95.282 521.292 m 147.363 573.373 l 149.523 573.373 l 149.523 571.213 l 97.442 519.132 l 95.282 519.132 l f 0.676 g 96.242 520.332 m 148.563 572.413 l 150.723 572.413 l 150.723 570.253 l 98.402 518.172 l 96.242 518.172 l f 0.685 g 97.442 519.132 m 149.523 571.213 l 151.683 571.213 l 151.683 569.053 l 99.602 516.972 l 97.442 516.972 l f 0.693 g 98.402 517.932 m 150.723 570.253 l 152.884 570.253 l 152.884 568.093 l 100.562 515.772 l 98.402 515.772 l f 0.702 g 99.602 516.972 m 151.683 569.053 l 153.844 569.053 l 153.844 566.893 l 101.762 514.812 l 99.602 514.812 l f 0.711 g 100.562 515.772 m 152.884 568.093 l 155.044 568.093 l 155.044 565.933 l 102.722 513.612 l 100.562 513.612 l f 0.72 g 101.762 514.812 m 153.844 566.893 l 156.004 566.893 l 156.004 564.733 l 103.922 512.652 l 101.762 512.652 l f 0.728 g 102.722 513.612 m 155.044 565.933 l 157.204 565.933 l 157.204 563.773 l 104.882 511.452 l 102.722 511.452 l f 0.737 g 103.922 512.652 m 156.004 564.733 l 158.164 564.733 l 158.164 562.573 l 106.082 510.492 l 103.922 510.492 l f 0.746 g 104.882 511.452 m 157.204 563.773 l 159.364 563.773 l 159.364 561.613 l 107.042 509.292 l 104.882 509.292 l f 0.754 g 106.082 510.492 m 158.164 562.573 l 160.324 562.573 l 160.324 560.413 l 108.242 508.332 l 106.082 508.332 l f 0.763 g 107.042 509.292 m 159.364 561.613 l 161.524 561.613 l 161.524 559.453 l 109.203 507.132 l 107.042 507.132 l f 0.772 g 108.242 508.332 m 160.324 560.413 l 162.484 560.413 l 162.484 558.253 l 110.403 506.172 l 108.242 506.172 l f 0.78 g 109.443 507.132 m 161.524 559.213 l 163.684 559.213 l 163.684 557.053 l 111.603 504.972 l 109.443 504.972 l f 0.789 g 110.403 506.172 m 162.724 558.253 l 164.884 558.253 l 164.884 556.093 l 112.563 504.012 l 110.403 504.012 l f 0.798 g 111.603 504.972 m 163.684 557.053 l 165.844 557.053 l 165.844 554.893 l 113.763 502.812 l 111.603 502.812 l f 0.807 g 112.563 504.012 m 164.884 556.093 l 167.044 556.093 l 167.044 553.933 l 114.723 501.851 l 112.563 501.851 l f 0.815 g 113.763 502.812 m 165.844 554.893 l 168.004 554.893 l 168.004 552.733 l 115.923 500.651 l 113.763 500.651 l f 0.824 g 114.723 501.851 m 167.044 553.933 l 169.204 553.933 l 169.204 551.773 l 116.883 499.691 l 114.723 499.691 l f 0.833 g 115.923 500.651 m 168.004 552.733 l 170.164 552.733 l 170.164 550.573 l 118.083 498.491 l 115.923 498.491 l f 0.841 g 116.883 499.691 m 169.204 551.773 l 171.364 551.773 l 171.364 549.613 l 119.043 497.531 l 116.883 497.531 l f 0.85 g 118.083 498.491 m 170.164 550.573 l 172.324 550.573 l 172.324 548.413 l 120.243 496.331 l 118.083 496.331 l f 119.043 497.531 m 171.364 549.613 l 173.524 549.613 l 173.524 547.453 l 121.203 495.371 l 119.043 495.371 l f 0.841 g 120.723 495.851 m 173.044 547.933 l 175.204 547.933 l 175.204 545.772 l 122.883 493.691 l 120.723 493.691 l f 0.833 g 121.923 494.651 m 174.004 546.733 l 176.164 546.733 l 176.164 544.572 l 124.083 492.491 l 121.923 492.491 l f 0.824 g 122.883 493.691 m 175.204 545.772 l 177.364 545.772 l 177.364 543.612 l 125.043 491.531 l 122.883 491.531 l f 0.815 g 124.083 492.491 m 176.164 544.572 l 178.324 544.572 l 178.324 542.412 l 126.243 490.331 l 124.083 490.331 l f 0.807 g 125.043 491.531 m 177.364 543.612 l 179.524 543.612 l 179.524 541.452 l 127.203 489.371 l 125.043 489.371 l f 0.798 g 126.243 490.331 m 178.324 542.412 l 180.484 542.412 l 180.484 540.252 l 128.403 488.171 l 126.243 488.171 l f 0.789 g 127.203 489.371 m 179.524 541.452 l 181.684 541.452 l 181.684 539.292 l 129.363 487.211 l 127.203 487.211 l f 0.78 g 128.403 488.171 m 180.484 540.252 l 182.644 540.252 l 182.644 538.092 l 130.563 486.011 l 128.403 486.011 l f 0.772 g 129.363 487.211 m 181.684 539.292 l 183.844 539.292 l 183.844 537.132 l 131.523 485.051 l 129.363 485.051 l f 0.763 g 130.563 486.011 m 182.644 538.092 l 184.804 538.092 l 184.804 535.932 l 132.723 483.851 l 130.563 483.851 l f 0.754 g 131.523 484.811 m 183.844 537.132 l 186.004 537.132 l 186.004 534.972 l 133.683 482.651 l 131.523 482.651 l f 0.746 g 132.723 483.851 m 184.804 535.932 l 186.964 535.932 l 186.964 533.772 l 134.883 481.691 l 132.723 481.691 l f 0.737 g 133.683 482.651 m 186.004 534.972 l 188.164 534.972 l 188.164 532.812 l 135.843 480.491 l 133.683 480.491 l f 0.728 g 134.883 481.691 m 186.964 533.772 l 189.124 533.772 l 189.124 531.612 l 137.043 479.531 l 134.883 479.531 l f 0.72 g 136.083 480.491 m 188.164 532.812 l 190.324 532.812 l 190.324 530.652 l 138.243 478.331 l 136.083 478.331 l f 0.711 g 137.043 479.531 m 189.364 531.612 l 191.524 531.612 l 191.524 529.452 l 139.203 477.371 l 137.043 477.371 l f 0.702 g 138.243 478.331 m 190.324 530.652 l 192.484 530.652 l 192.484 528.492 l 140.403 476.171 l 138.243 476.171 l f 0 2000 .693 g 139.203 477.371 m 191.524 529.452 l 193.684 529.452 l 193.684 527.292 l 141.363 475.211 l 139.203 475.211 l f 0.685 g 140.403 476.171 m 192.484 528.252 l 194.644 528.252 l 194.644 526.092 l 142.563 474.011 l 140.403 474.011 l f 0.676 g 141.363 475.211 m 193.684 527.292 l 195.844 527.292 l 195.844 525.132 l 143.523 473.051 l 141.363 473.051 l f 0.667 g 142.563 474.011 m 194.644 526.092 l 196.805 526.092 l 196.805 523.932 l 144.723 471.851 l 142.563 471.851 l f 0.659 g 143.523 473.051 m 195.844 525.132 l 198.005 525.132 l 198.005 522.972 l 145.683 470.891 l 143.523 470.891 l f 0.65 g 144.723 471.851 m 196.805 523.932 l 198.965 523.932 l 198.965 521.772 l 146.883 469.691 l 144.723 469.691 l f Q 0.36 w 0.55 G 146.043 549.433 m 160.451 549.433 172.144 537.578 172.144 522.972 c 172.144 508.366 160.451 496.511 146.043 496.511 c 131.636 496.511 119.943 508.366 119.943 522.972 c 119.943 537.578 131.636 549.433 146.043 549.433 c s 0.65 G 146.283 548.713 m 160.558 548.713 172.144 537.127 172.144 522.852 c 172.144 508.577 160.558 496.991 146.283 496.991 c 132.008 496.991 120.423 508.577 120.423 522.852 c 120.423 537.127 132.008 548.713 146.283 548.713 c s 0.9 G 146.043 548.233 m 160.186 548.233 171.664 536.755 171.664 522.612 c 171.664 508.469 160.186 496.991 146.043 496.991 c 131.901 496.991 120.423 508.469 120.423 522.612 c 120.423 536.755 131.901 548.233 146.043 548.233 c s 0.65 G 146.043 548.233 m 159.921 548.233 171.184 536.916 171.184 522.972 c 171.184 509.028 159.921 497.711 146.043 497.711 c 132.166 497.711 120.903 509.028 120.903 522.972 c 120.903 536.916 132.166 548.233 146.043 548.233 c s 0.55 G 146.043 547.753 m 159.921 547.753 171.184 536.651 171.184 522.972 c 171.184 509.293 159.921 498.191 146.043 498.191 c 132.166 498.191 120.903 509.293 120.903 522.972 c 120.903 536.651 132.166 547.753 146.043 547.753 c s 0 w BT 0 G 2.265 0 0 2.263 134.068 560.893 Tm (is-a)Tj ET BT /F3 3.36 Tf 2.265 0 0 2.263 122.108 523.932 Tm (DoubleBottom)Tj ET 0.5 w 122.108 523.428 m 171.448 523.428 l S 0 w q 121.923 512.172 49.441 20.64 re W n BT /F2 3.36 Tf 2.265 0 0 2.263 132.437 514.092 Tm (register\(\))Tj ET Q endstream endobj 35 0 obj 153057 endobj 36 0 obj << /Type /Page /Parent 33 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 37 0 R >> endobj 37 0 obj << /Length 38 0 R >> stream 0.24 w BT /F1 7.68 Tf 273.966 117.843 TD 0 Tc 0 Tw (Page 8)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 1.748 Tw (Turning that around, we can observe that the way in which a particular person will)Tj ET BT 86.522 748.817 TD 1.505 Tw (respond to your message depends on the kind of person they are. A )Tj /F4 10.08 Tf 323.767 0 TD 0 Tw (ReceptivePerson)Tj ET BT /F3 10.08 Tf 86.522 735.617 TD 8.944 Tw (will respond enthusiastically, a )Tj /F4 10.08 Tf 176.948 0 TD 0 Tw (ShyPerson)Tj /F3 10.08 Tf 54.442 0 TD 8.944 Tw ( will respond tentatively, and a)Tj ET BT /F4 10.08 Tf 86.522 722.177 TD 0 Tw (JustPlainWeirdPerson)Tj /F3 10.08 Tf 120.982 0 TD 4.463 Tw ( will probably respond in iambic pentameter. The original)Tj ET BT 86.522 708.736 TD 0 Tw (message is always the same; the response depends on the kind of person who receives it.)Tj ET BT 105.722 695.296 TD 1.106 Tw (Language theorists)Tj /F3 6.24 Tf 85.922 3.84 TD (4)Tj /F3 10.08 Tf 3.12 -3.84 TD ( call this type of behaviour )Tj /F2 10.08 Tf 127.645 0 TD 0 Tw (polymorphism)Tj /F3 10.08 Tf 58.359 0 TD 1.106 Tw (. When a method is called)Tj ET BT 86.522 681.856 TD 0.873 Tw (on a particular object, the actual method that's involved may depend on the class to which)Tj ET BT 86.522 668.655 TD 0.276 Tw (the object belongs. For instance, if we call an object's )Tj /F4 10.08 Tf 237.469 0 TD 0 Tw (ignite\(\))Tj /F3 10.08 Tf 48.393 0 TD 0.276 Tw ( method, its response will be)Tj ET BT 86.522 655.215 TD 3.08 Tw (quite different depending on whether it belongs to the )Tj /F4 10.08 Tf 271.926 0 TD 0 Tw (Paper)Tj /F3 10.08 Tf 30.246 0 TD 3.08 Tw (, )Tj /F4 10.08 Tf 8.121 0 TD 0 Tw (Rocket)Tj /F3 10.08 Tf 36.295 0 TD 3.08 Tw (, )Tj /F4 10.08 Tf 8.121 0 TD 0 Tw (Passion)Tj /F3 10.08 Tf 42.344 0 TD 3.08 Tw (, or)Tj ET BT /F4 10.08 Tf 86.522 641.775 TD 0 Tw (FlameWar)Tj /F3 10.08 Tf 48.393 0 TD ( class.)Tj ET BT 105.722 628.334 TD 0.805 Tw (Randomly calling an identically named method on objects of different classes is not, of)Tj ET BT 86.522 614.894 TD 2.058 Tw (course, a recommended programming technique. However, polymorphic behaviour does)Tj ET BT 86.522 601.694 TD 0.556 Tw (prove extremely useful when there is some explicit relationship between the various classes)Tj ET BT 86.522 588.253 TD 0.688 Tw (of objects, or when there is an implicit relationship or a common universal property shared)Tj ET BT 86.522 574.813 TD 0 Tw (between them. The following subsections discuss each of these cases.)Tj ET BT /F2 11.52 Tf 86.522 546.013 TD (Inheritance polymorphism)Tj ET BT /F3 10.08 Tf 86.522 525.852 TD 4.06 Tw (Suppose we are creating an object-oriented system for tracking the registration and)Tj ET BT 86.522 512.412 TD 2.326 Tw (inspection of trucks. We'd almost certainly want to use our )Tj /F4 10.08 Tf 287.749 0 TD 0 Tw (Truck)Tj /F3 10.08 Tf 30.246 0 TD 2.326 Tw ( class \(and its many)Tj ET BT 86.522 499.211 TD 0 Tw (descendents\) to implement the parts of the system that represent individual trucks.)Tj ET BT 105.722 485.771 TD 0.166 Tw (Typically, the objects representing the various trucks would be collected in some kind of)Tj ET BT 86.522 472.331 TD 0.662 Tw (container, probably a list. Some operations will need to be carried out on individual objects)Tj ET BT 86.522 458.891 TD 0.83 Tw (\(e.g. register this particular truck, schedule an inspection for that one, etc.\), but many tasks)Tj ET BT 86.522 445.45 TD 0.457 Tw (will have to be performed on every truck in the system \(e.g. send out an annual registration)Tj ET BT 86.522 432.25 TD 0 Tw (notice for each, print a complete list of recent inspection dates, etc.\))Tj ET BT 105.722 418.81 TD (For operations that need to be performed on every truck, the application is likely to walk)Tj ET BT 86.522 405.369 TD 0.656 Tw (along the truck list using a loop, calling the appropriate method for each object in turn. For)Tj ET BT 86.522 391.929 TD 0 Tw (example, the loop might call each object's )Tj /F4 10.08 Tf 186.514 0 TD (print_registration_reminder\(\))Tj /F3 10.08 Tf 175.425 0 TD ( method.)Tj ET BT 105.722 378.489 TD 0.294 Tw (The problem is that the actual procedure to be followed by each object may be different,)Tj ET BT 86.522 365.288 TD 0.885 Tw (depending on the actual kind of truck the object represents \(i.e. the actual class to which it)Tj ET BT 86.522 351.848 TD 0.525 Tw (belongs\). For instance, the form for registering a semi-trailer may be very different from the)Tj ET BT 86.522 338.408 TD 0.465 Tw (one for a fire-truck, or for an armored car. If that's the case, the processing loop will have to)Tj ET BT 86.522 324.967 TD 0 Tw (determine the class of each object and then branch to perform a separate method call for each)Tj ET BT 86.522 311.527 TD 1.987 Tw (distinct class. That's a pain to code, and a bigger pain to re-code every time we add or)Tj ET BT 86.522 298.327 TD 0 Tw (remove another class of truck.)Tj ET BT 105.722 284.887 TD 0.523 Tw (This situation is the ideal place to use polymorphism. If the ancestral )Tj /F4 10.08 Tf 314.86 0 TD 0 Tw (Truck)Tj /F3 10.08 Tf 30.246 0 TD 0.523 Tw ( class has a)Tj ET BT /F4 10.08 Tf 86.522 271.446 TD 0 Tw (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 4.446 Tw ( method, then we are guaranteed that every derived class also has a)Tj ET BT /F4 10.08 Tf 86.522 258.006 TD 0 Tw (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 0.877 Tw ( method \(i.e. the one that it inherits from )Tj /F4 10.08 Tf 190.555 0 TD 0 Tw (Truck)Tj /F3 10.08 Tf 30.246 0 TD 0.877 Tw (\). However, when we specify)Tj ET BT 86.522 244.566 TD 1.67 Tw (the various derived classes, we may choose to )Tj /F2 10.08 Tf 220.085 0 TD 0 Tw (replace)Tj /F3 10.08 Tf 28.188 0 TD 1.67 Tw ( the inherited )Tj /F4 10.08 Tf 67.094 0 TD 0 Tw (registe 2000 r\(\))Tj /F3 10.08 Tf 60.491 0 TD 1.67 Tw ( method)Tj ET BT 86.522 231.365 TD 0 Tw (with one specific to the needs of the derived class.)Tj ET BT 105.722 217.925 TD 0.243 Tw (Having given each class its own unique )Tj /F4 10.08 Tf 180.705 0 TD 0 Tw (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 0.243 Tw ( method, we can then walk the list)Tj ET BT 86.522 204.485 TD 0 Tw (of objects and simply call )Tj /F4 10.08 Tf 115.443 0 TD (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 0.135 Tw ( on each. We're sure each can respond to that method)Tj ET BT 86.522 183.124 TD 0 Tw ( )Tj 72.002 0 TD ( )Tj ET 86.402 185.284 138.243 0.48 re f BT /F3 5.76 Tf 86.522 168.244 TD (4)Tj /F3 9.6 Tf 6.72 -3.84 TD (\311most of whom live at ground-zero in the )Tj /F4 9.6 Tf 183.946 0 TD (JustPlainWeirdPerson)Tj /F3 9.6 Tf 115.1 0 TD ( category\311)Tj ET endstream endobj 38 0 obj 6609 endobj 39 0 obj << /Type /Page /Parent 33 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 40 0 R >> endobj 40 0 obj << /Length 41 0 R >> stream 0.24 w BT /F1 7.68 Tf 273.966 117.843 TD 0 Tc 0 Tw (Page 9)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD 1.62 Tw (call because at the very least they'll use the )Tj /F4 10.08 Tf 207.365 0 TD 0 Tw (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 1.62 Tw ( they inherited from the )Tj /F4 10.08 Tf 116.699 0 TD 0 Tw (Truck)Tj ET BT /F3 10.08 Tf 86.522 748.817 TD 1.809 Tw (class. However, if they have a more specialized way of registering themselves, then that)Tj ET BT 86.522 735.617 TD 2.077 Tw (more specialized method will be automatically invoked instead. In other words, we can)Tj ET BT 86.522 722.177 TD 4.65 Tw (arrange that each object has a )Tj /F4 10.08 Tf 161.524 0 TD 0 Tw (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 4.65 Tw ( method, but not necessarily the )Tj /F2 10.08 Tf 172.554 0 TD 0 Tw (same)Tj ET BT /F4 10.08 Tf 86.522 708.736 TD (register\(\))Tj /F3 10.08 Tf 60.491 0 TD ( method.)Tj ET BT 105.722 695.296 TD (The result is that, although our loop code is very simple:)Tj ET BT /F4 7.68 Tf 86.522 678.976 TD (for each object in the list\311)Tj ET BT 98.042 669.375 TD (call its register\(\) method)Tj ET BT /F3 10.08 Tf 86.522 651.135 TD 2.639 Tw (the response to those calls is always appropriate to the particular object on which the)Tj ET BT 86.522 637.935 TD 1.082 Tw (method is called. Better yet, if we subsequently add a new class derived from )Tj /F4 10.08 Tf 361.287 0 TD 0 Tw (Truck)Tj /F3 10.08 Tf 30.246 0 TD 1.082 Tw (, and)Tj ET BT 86.522 624.494 TD 1.641 Tw (then put objects of that new class in the list, the old code will continue to work without)Tj ET BT 86.522 611.054 TD 1.237 Tw (modification. When the loop encounters an object of the new class, it will simply call that)Tj ET BT 86.522 597.614 TD 0.72 Tw (object's new )Tj /F4 10.08 Tf 57.98 0 TD 0 Tw (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 0.72 Tw ( method, and execute the new behaviour specified by the object's)Tj ET BT 86.522 584.173 TD 3.221 Tw (class definition. If the new class didn't define any new behaviour, the old behaviour)Tj ET BT 86.522 570.973 TD 0 Tw (inherited from class )Tj /F4 10.08 Tf 90.978 0 TD (Truck)Tj /F3 10.08 Tf 30.246 0 TD ( will be used instead.)Tj ET BT 105.722 557.533 TD 1.751 Tw (This kind of polymorphism is known as )Tj /F2 10.08 Tf 192.724 0 TD (inheritance polymorphism)Tj /F3 10.08 Tf 108.066 0 TD (, because the objects)Tj ET BT 86.522 544.092 TD 0 Tw (whose methods are called belong to a hierarchy of classes that are related by inheritance. The)Tj ET BT 86.522 530.652 TD 0.21 Tw (presence of the required method in the base class of the hierarchy ensures that objects of any)Tj ET BT 86.522 517.212 TD 0.723 Tw (derived class can always respond \(if only generically\) to a given method call. The ability to)Tj ET BT 86.522 504.012 TD 1.769 Tw (redefine individual methods in derived classes allows objects of those classes to respond)Tj ET BT 86.522 490.571 TD 0 Tw (more specifically to a particular method call, if they so wish.)Tj ET BT 105.722 477.131 TD (All object-oriented languages support inheritance polymorphism)Tj /F3 6.24 Tf 290.887 3.84 TD (5)Tj /F3 10.08 Tf 3.12 -3.84 TD (; for some, it's the only)Tj ET BT 86.522 463.691 TD 0.147 Tw (form of polymorphism they permit. But it certainly isn't the only form that's possible. In fact,)Tj ET BT 86.522 450.25 TD 2.853 Tw (there's no need for objects that are treated polymorphically to have any kind of class)Tj ET BT 86.522 437.05 TD 0 Tw (relationship at all.)Tj ET BT /F2 11.52 Tf 86.522 408.249 TD (Interface polymorphism)Tj ET BT /F3 10.08 Tf 86.522 388.089 TD 0.744 Tw (The alternative approach to polymorphism is to allow any object with a suitable method to)Tj ET BT 86.522 374.649 TD 1.071 Tw (respond to a call to that method. This is known as )Tj /F2 10.08 Tf 235.74 0 TD (interface polymorphism)Tj /F3 10.08 Tf 96.907 0 TD (, because the only)Tj ET BT 86.522 361.208 TD 0 Tw (requirement is that a particular object's interface provide a method of the appropriate name)Tj /F3 6.24 Tf 407.529 3.84 TD (6)Tj /F3 10.08 Tf 3.12 -3.84 TD (.)Tj ET BT 105.722 347.768 TD 0.342 Tw (For example, since there are probably no actual )Tj /F4 10.08 Tf 215.817 0 TD 0 Tw (Truck)Tj /F3 10.08 Tf 30.246 0 TD 0.342 Tw ( objects used in the truck registry)Tj ET BT 86.522 334.568 TD 4.111 Tw (application, there's no real need for the )Tj /F4 10.08 Tf 204.893 0 TD 0 Tw (Truck)Tj /F3 10.08 Tf 30.246 0 TD 4.111 Tw ( class at all \(at least, as far as the)Tj ET BT 86.522 321.127 TD 0 Tw (polymorphism in the registration loop is concerned\). So long as each object in the list belongs)Tj ET BT 86.522 307.687 TD 0.928 Tw (to a class that has a )Tj /F4 10.08 Tf 93.216 0 TD 0 Tw (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 0.928 Tw ( method, the loop doesn't really care what their ancestral)Tj ET BT 86.522 294.247 TD 3.98 Tw (class was \(i.e. whether they are trucks, truckers, trucking companies, or truculents\).)Tj ET BT 86.522 280.806 TD 0.917 Tw (Provided they can respond to a call on their )Tj /F4 10.08 Tf 205.4 0 TD 0 Tw (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 0.917 Tw ( method, the loop proceeds with)Tj ET BT 86.522 267.606 TD 0 Tw (serene indifference.)Tj ET BT 86.522 243.366 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 245.526 138.243 0.48 re f BT /F3 5.76 Tf 86.522 228.725 TD (5)Tj /F3 9.6 Tf 6.72 -3.84 TD (But that's rather a circular definition, since most language lawyers insist that this form of)Tj ET BT 93.242 214.325 TD (polymorphism is one of the essential characteristics a language must possess if it's to be)Tj ET BT 93.242 203.765 TD (considered object-oriented in the first place.)Tj ET BT /F3 5.76 Tf 86.522 189.364 TD (6)Tj /F3 9.6 Tf 6.72 -3.84 TD (Statically-typed object-oriented languages \(e.g. Java or Ada\) usually also require that the)Tj ET BT 93.242 174.964 TD (argument list passed in the method call be type-compatible with the parameter list specified by)Tj ET BT 93.242 164.404 TD (the object's method.)Tj ET endstream endobj 41 0 obj 5999 endobj 42 0 obj << /Type /Page /Parent 33 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 43 0 R >> endobj 43 0 obj << /Length 44 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 10)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 0.125 Tw (Of course, that's a mighty big proviso. With inheritance polymorphism we could be sure)Tj ET BT 86.522 748.817 TD 1.499 Tw (that every object in the list did have a )Tj /F4 10.08 Tf 182.404 0 TD 0 Tw (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 1.499 Tw ( method \(at the very least, the one it)Tj ET BT 86.522 735.617 TD 0 Tw (inherited from )Tj /F4 10.08 Tf 67.466 0 TD (Truck)Tj /F3 10.08 Tf 30.246 0 TD (\). With interface polymorphism there's no such guarantee.)Tj ET BT 105.722 722.177 TD 1.578 Tw (Worse still, because the list is almost certainly built at run-time, and modified as the)Tj ET BT 86.522 708.736 TD 0.655 Tw (program executes, unless we're very careful in setting up the logic of our application, we're)Tj 2000 ET BT 86.522 695.296 TD 2.549 Tw (not likely to know beforehand whether a particular object in the list can respond to a)Tj ET BT /F4 10.08 Tf 86.522 681.856 TD 0 Tw (register\(\))Tj /F3 10.08 Tf 60.491 0 TD 1.715 Tw ( request. In fact, we're unlikely to find out until the application attempts to)Tj ET BT 86.522 668.655 TD 0 Tw (invoke the object's )Tj /F4 10.08 Tf 84.373 0 TD (register\(\))Tj /F3 10.08 Tf 60.491 0 TD ( method, and finds that it doesn't have one.)Tj ET BT 105.722 655.215 TD 1.877 Tw (Consequently, languages that allow interface polymorphism must also provide some)Tj ET BT 86.522 641.775 TD 1.562 Tw (run-time mechanism for handling cases where an object is unable to provide a requested)Tj ET BT 86.522 628.334 TD 1.717 Tw (method. Typically, this involves providing a means of specifying a "fall-back" subroutine)Tj ET BT 86.522 614.894 TD 3.63 Tw (that is called whenever an object cannot respond to a particular method invocation.)Tj ET BT 86.522 601.694 TD 0.999 Tw (Alternatively, such languages may have some form of exception system, and will trigger a)Tj ET BT 86.522 588.253 TD 4.51 Tw (well-defined exception \(e.g. "No such method!"\) if the object cannot respond more)Tj ET BT 86.522 574.813 TD 0 Tw (appropriately.)Tj ET BT 105.722 561.373 TD 3.551 Tw (Inheritance polymorphism is a special case of interface polymorphism, because a)Tj ET BT 86.522 547.933 TD 1.912 Tw (common base class guarantees that objects share a specific inherited method. Hence any)Tj ET BT 86.522 534.732 TD 6.215 Tw (language that supports interface polymorphism automatically supports inheritance)Tj ET BT 86.522 521.292 TD 0 Tw (polymorphism as well. As we shall see, Perl is such a language.)Tj ET BT /F2 10.08 Tf 86.522 467.771 TD 3.318 Tw (In order to understand object-oriented Perl, it's important to have a reasonable grasp of the)Tj ET BT 86.522 454.33 TD 1.913 Tw (language's non-object-oriented features. For example, the following extract explains the difference)Tj ET BT 86.522 440.89 TD 4.468 Tw (between package variables and lexicals\321forever a source of confusion amongst novice Perl)Tj ET BT 86.522 427.45 TD 0 Tw (programmers...)Tj ET BT /F2 15.36 Tf 86.522 398.649 TD (Package variables)Tj ET BT /F3 10.08 Tf 86.522 378.489 TD 0.266 Tw (Perl variables come in two "flavours": )Tj /F2 10.08 Tf 171.417 0 TD 0 Tw (package variables)Tj /F3 10.08 Tf 70.341 0 TD ( and )Tj /F2 10.08 Tf 22.489 0 TD (lexical variables)Tj /F3 10.08 Tf 65.041 0 TD 0.266 Tw (. They look and act)Tj ET BT 86.522 365.288 TD 0 Tw (much the same, but there are fundamental differences between them.)Tj ET BT 105.722 351.848 TD 2.037 Tw (As the name suggests, each package variable belongs to a package \(normally to the)Tj ET BT 86.522 338.408 TD 0.525 Tw (current one\). Package variables are the ones that most casual Perl programmers use most of)Tj ET BT 86.522 324.967 TD 2.055 Tw (the time. They're the standard no-preparation-necessary, ready-to-serve, instant variables)Tj ET BT 86.522 311.527 TD 0 Tw (that are frequently used in small throw-away programs:)Tj ET BT /F4 7.68 Tf 86.522 295.207 TD (for \($i=0; $i<100; $i++\))Tj ET BT 86.522 285.607 TD ({)Tj ET BT 98.042 276.006 TD ($time = localtime\(\);)Tj ET BT 98.042 266.406 TD (print "$i at $time\\n";)Tj ET BT 86.522 256.806 TD (})Tj ET BT 86.522 247.206 TD (print "last time was: $time\\n";)Tj ET BT 86.522 237.605 TD (print "last index was: $ i\\n";)Tj ET BT /F3 10.08 Tf 105.722 219.605 TD 3.727 Tw (Here, the variables )Tj /F4 10.08 Tf 97.442 0 TD 0 Tw ($time)Tj /F3 10.08 Tf 30.246 0 TD 3.727 Tw ( and )Tj /F4 10.08 Tf 29.559 0 TD 0 Tw ($i)Tj /F3 10.08 Tf 11.957 0 TD 3.727 Tw ( are both package variables. They are created)Tj ET BT 86.522 206.165 TD 1.755 Tw (automatically the first time they're referred to, and continue to exist until the end of the)Tj ET BT 86.522 192.724 TD 0 Tw (program. They belong to the current package \(i.e. "main"\).)Tj ET BT 105.722 179.284 TD 0.852 Tw (Whenever it's necessary to make a package variable's ownership explicit, its "personal")Tj ET BT 86.522 165.844 TD 0 Tw (name can be )Tj /F2 10.08 Tf 57.981 0 TD (qualified)Tj /F3 10.08 Tf 34.912 0 TD ( with the name of its package.)Tj ET endstream endobj 44 0 obj 5038 endobj 45 0 obj << /Type /Page /Parent 33 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F6 46 0 R >> /ProcSet 2 0 R >> /Contents 47 0 R >> endobj 46 0 obj << /Type /Font /Subtype /TrueType /Name /F6 /BaseFont /Courier-Bold /Encoding /MacRomanEncoding >> endobj 47 0 obj << /Length 48 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 11)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 3.748 Tw (Package variables belonging to packages other than the current package are not)Tj ET BT 86.522 748.817 TD 0 Tw (accessible unless you use their fully-qualified name. For example, this code:)Tj ET BT /F4 7.68 Tf 86.522 732.497 TD (package main;)Tj ET BT 86.522 713.296 TD (for \($i=0; $i<100; $i++\))Tj ET BT 86.522 703.696 TD ({)Tj ET BT /F6 7.68 Tf 98.042 694.096 TD ($Other_package::time = localtime\(\);)Tj ET BT 98.042 684.496 TD (print "$i at $Other_package::time\\n";)Tj ET BT /F4 7.68 Tf 86.522 674.895 TD (})Tj ET BT /F6 7.68 Tf 86.522 655.695 TD (package Other_package;)Tj ET BT /F4 7.68 Tf 86.522 646.095 TD (print "last time was: $time\\n";)Tj ET BT /F6 7.68 Tf 86.522 636.495 TD (print "last index was: $main::i\\n";)Tj ET BT /F3 10.08 Tf 86.522 618.494 TD 0.751 Tw (uses the package variable )Tj /F4 10.08 Tf 119.202 0 TD 0 Tw ($time)Tj /F3 10.08 Tf 30.246 0 TD 0.751 Tw ( belonging to the package called "Other_package", and the)Tj ET BT 86.522 605.054 TD 0.953 Tw (package variable )Tj /F4 10.08 Tf 79.628 0 TD 0 Tw ($i)Tj /F3 10.08 Tf 12.098 0 TD 0.953 Tw ( belonging to the main package. Within their home packages, they can)Tj ET BT 86.522 591.614 TD 0 Tw (be referred to directly; elsewhere, you have to give their package name as well.)Tj ET BT 105.722 578.173 TD 0.822 Tw (Note that the package name prefix always comes )Tj /F2 10.08 Tf 227.122 0 TD 0 Tw (after)Tj /F3 10.08 Tf 18.477 0 TD 0.822 Tw ( the leading symbol. That is, you)Tj ET BT 86.522 564.733 TD 0 Tw (write )Tj /F4 10.08 Tf 25.959 0 TD ($Other_package::time)Tj /F3 10.08 Tf 120.982 0 TD (, not )Tj /F4 10.08 Tf 22.218 0 TD (Other_package::$time)Tj /F3 10.08 Tf 120.982 0 TD (.)Tj ET BT /F2 15.36 Tf 86.522 535.932 TD (Lexical variables)Tj ET BT /F3 10.08 Tf 86.522 516.012 TD 0.67 Tw (The other type of variable is a lexical variable. Unlike package variables, lexicals have to be)Tj ET BT 86.522 502.572 TD 0 Tw (explicitly declared, using the )Tj /F4 10.08 Tf 130.935 0 TD (my)Tj /F3 10.08 Tf 12.098 0 TD ( keyword:)Tj ET BT /F4 7.68 Tf 86.522 486.251 TD (package main;)Tj ET BT 86.522 467.051 TD (my $i;)Tj ET BT 86.522 457.45 TD (for \($i=0; $i<100; $i++\))Tj ET BT 86.522 447.85 TD ({)Tj ET BT 98.042 438.25 TD (my $time = localtime\(\);)Tj ET BT 98.042 428.65 TD (print "$i at $time\\n";)Tj ET BT 86.522 419.05 TD (})Tj ET BT /F3 10.08 Tf 105.722 400.809 TD (Lexical variables differ from package variables in that:)Tj ET BT 95.642 384.489 TD (\245)Tj 10.08 0 TD (They don't belong to any package \(so you can't prefix them with a package name\).)Tj ET BT 95.642 365.288 TD (\245)Tj 10.08 0 TD 0.291 Tw (They are only directly accessible within the physical boundaries of the code block or file)Tj ET BT 105.722 352.088 TD 0 Tw (in which they're declared. Hence in the code above, )Tj /F4 10.08 Tf 232.085 0 TD ($time)Tj /F3 10.08 Tf 30.246 0 TD ( is only accessible to code that)Tj ET BT 105.722 338.648 TD 0.895 Tw (is physically located inside the )Tj /F4 10.08 Tf 143.208 0 TD 0 Tw (for)Tj /F3 10.08 Tf 18.316 0 TD 0.895 Tw ( loop \(and not to code that is called during or after)Tj ET BT 105.722 325.207 TD 0 Tw (that loop\).)Tj ET BT 95.642 306.007 TD (\245)Tj 10.08 0 TD 0.466 Tw (They \(usually\) cease to exist each time the program leaves the code block in which they)Tj ET BT 105.722 292.567 TD 0.356 Tw (were declared. Hence in the code above, the variable )Tj /F4 10.08 Tf 240.156 0 TD 0 Tw ($time)Tj /F3 10.08 Tf 30.246 0 TD 0.356 Tw ( ceases to exist at the end of)Tj ET BT 105.722 279.366 TD 0 Tw (e 2000 ach iteration of the )Tj /F4 10.08 Tf 90.796 0 TD (for)Tj /F3 10.08 Tf 18.147 0 TD ( loop \(and is recreated at the beginning of the next iteration\).)Tj ET BT 105.722 263.046 TD 0.981 Tw (It may help to think of the two types of variables \(package and lexical\) in the way the)Tj ET BT 86.522 249.606 TD 0.11 Tw (Ancient Greeks thought of their gods. They had big general-purpose gods like Uranus, Zeus,)Tj ET BT 86.522 236.165 TD 2.606 Tw (Aphrodite, and Atropos, who existed for all time and could appear anywhere without)Tj ET BT 86.522 222.725 TD 0 Tw (warning. These are analogous to package variables)Tj /F3 6.24 Tf 226.805 3.84 TD (7)Tj /F3 10.08 Tf 3.12 -3.84 TD (.)Tj ET BT 86.522 194.164 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 196.324 138.243 0.48 re f BT /F3 5.76 Tf 86.522 179.044 TD (7)Tj /F3 9.6 Tf 2.88 -3.84 TD ( The big Greek gods even came in "packages": )Tj /F4 9.6 Tf 196.509 0 TD ($Titans::Uranus)Tj /F3 9.6 Tf 86.416 0 TD (, )Tj /F4 9.6 Tf 4.8 0 TD ($Olympians::Zeus)Tj /F3 9.6 Tf 92.177 0 TD (,)Tj ET BT /F4 9.6 Tf 93.242 164.404 TD ($Olympians::Aphrodite)Tj /F3 9.6 Tf 120.982 0 TD (, )Tj /F4 9.6 Tf 4.8 0 TD ($Fates::Atropos)Tj /F3 9.6 Tf 86.416 0 TD (.)Tj ET endstream endobj 48 0 obj 4862 endobj 49 0 obj << /Type /Page /Parent 33 0 R /Resources << /Font << /F1 7 0 R /F3 11 0 R /F4 20 0 R /F6 46 0 R >> /ProcSet 2 0 R >> /Contents 50 0 R >> endobj 50 0 obj << /Length 51 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 12)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 0.951 Tw (Then there were the small, specialized gods like the spirits of trees, or door-steps, or a)Tj ET BT 86.522 748.817 TD 0.744 Tw (hearth. They were restricted to a well-defined domain \(a tree, a building, the fireplace\) and)Tj ET BT 86.522 735.617 TD 1.753 Tw (existed only for a specific period \(the life of the tree, the occupation of the building, the)Tj ET BT 86.522 722.177 TD 0 Tw (duration of a fire\). These are like lexical variables: localized and transient.)Tj ET BT 105.722 708.736 TD 2.941 Tw (Generally speaking, package variables are fine for very short programs, but cause)Tj ET BT 86.522 695.296 TD 1.023 Tw (problems in larger code. This is because they're accessible throughout the program source,)Tj ET BT 86.522 681.856 TD 2.771 Tw (which means that changes made at one point in the code can unexpectedly affect the)Tj ET BT 86.522 668.655 TD 0 Tw (program's behaviour elsewhere. The typical example is something like this:)Tj ET BT /F4 7.68 Tf 86.522 653.775 TD (package Recipe;)Tj ET BT 86.522 638.415 TD (sub print_recipes)Tj ET BT 86.522 630.734 TD ({)Tj ET BT 98.042 623.054 TD (for \($i=0; $i<@_; $i++\))Tj ET BT 98.042 615.374 TD ({)Tj ET BT 109.563 607.694 TD (print_ingredients\($_[$i]\);)Tj ET BT 109.563 600.014 TD (print_directions\($_[$i]\);)Tj ET BT 98.042 592.334 TD (})Tj ET BT 86.522 584.653 TD (})Tj ET BT 86.522 564.013 TD (sub print_ingredients)Tj ET BT 86.522 554.413 TD ({)Tj ET BT 98.042 544.812 TD (for \($i=0; $i<$#recipes; $i++\))Tj ET BT 98.042 535.212 TD ({)Tj ET BT 109.563 525.612 TD (print $_[0]->{ingredients}[$i], "\\n";)Tj ET BT 98.042 516.012 TD (})Tj ET BT 86.522 506.412 TD (})Tj ET BT /F3 10.08 Tf 105.722 488.171 TD 0.38 Tw (The problem is that )Tj /F4 10.08 Tf 90.944 0 TD 0 Tw ($i)Tj /F3 10.08 Tf 12.098 0 TD 0.38 Tw ( is a package variable \(since it's not pre-declared as a lexical with)Tj ET BT 86.522 474.731 TD 4.616 Tw (a )Tj /F4 10.08 Tf 12.176 0 TD 0 Tw (my)Tj /F3 10.08 Tf 12.098 0 TD 4.616 Tw ( declaration\). That means that the subroutines )Tj /F4 10.08 Tf 239.302 0 TD 0 Tw (Recipe::print_recipes)Tj /F3 10.08 Tf 127.032 0 TD 4.616 Tw ( and)Tj ET BT /F4 10.08 Tf 86.522 461.291 TD 0 Tw (Recipe::print_ingredients)Tj /F3 10.08 Tf 151.228 0 TD 2.78 Tw ( both use the same package variable \()Tj /F4 10.08 Tf 185.575 0 TD 0 Tw ($Recipe::i)Tj /F3 10.08 Tf 60.367 0 TD 2.78 Tw (\) in)Tj ET BT 86.522 447.85 TD 1.155 Tw (their respective )Tj /F4 10.08 Tf 73.437 0 TD 0 Tw (for)Tj /F3 10.08 Tf 18.147 0 TD 1.155 Tw ( loops. So after )Tj /F4 10.08 Tf 72.778 0 TD 0 Tw (Recipe::print_ingredients)Tj /F3 10.08 Tf 151.228 0 TD 1.155 Tw ( has been called from)Tj ET BT 86.522 434.65 TD 2.404 Tw (within )Tj /F4 10.08 Tf 34.22 0 TD 0 Tw (Recipe::print_recipe)Tj /F3 10.08 Tf 120.982 0 TD 2.404 Tw (, )Tj /F4 10.08 Tf 7.444 0 TD 0 Tw ($Recipe::i)Tj /F3 10.08 Tf 60.491 0 TD 2.404 Tw ( will no longer contain the index of the)Tj ET BT 86.522 421.21 TD 0.629 Tw (current recipe. Instead, it will contain a number one greater than the number of ingredients)Tj ET BT 86.522 407.769 TD 6.984 Tw (of the current recipe \(since that's the value left in it by the )Tj /F4 10.08 Tf 348.739 0 TD 0 Tw (for)Tj /F3 10.08 Tf 18.147 0 TD 6.984 Tw ( loop in)Tj ET BT /F4 10.08 Tf 86.522 394.329 TD 0 Tw (Recipe::print_ingredients)Tj /F3 10.08 Tf 151.228 0 TD (\).)Tj ET BT 105.722 380.889 TD (If we'd used lexical variables instead:)Tj ET BT /F4 7.68 Tf 86.522 364.568 TD (package Recipe;)Tj ET BT 86.522 345.368 TD (sub print_recipes)Tj ET BT 86.522 335.768 TD ({)Tj ET BT 98.042 326.167 TD (for \()Tj /F6 7.68 Tf 23.044 0 TD (my $i)Tj /F4 7.68 Tf 23.044 0 TD (=0; $i<@_; $i++\))Tj ET BT 98.042 316.567 TD ({)Tj ET BT 109.563 306.967 TD (print_ingredients\($_[$i]\);)Tj ET BT 109.563 297.367 TD (print_directions\($_[$i]\);)Tj ET BT 98.042 287.767 TD (})Tj ET BT 86.522 278.166 TD (})Tj ET BT 86.522 257.046 TD (sub print_ingredients)Tj ET BT 86.522 247.446 TD ({)Tj ET BT 98.042 237.845 TD (for \()Tj /F6 7.68 Tf 23.044 0 TD (my $i)Tj /F4 7.68 Tf 23.044 0 TD (=0; $i<@_; $i++\))Tj ET BT 98.042 228.245 TD ({)Tj ET BT 109.563 218.645 TD (print $_[0]->{ingredients}[$i], "\\n";)Tj ET BT 98.042 209.045 TD (})Tj ET BT 86.522 199.445 TD (})Tj ET endstream endobj 51 0 obj 4303 endobj 52 0 obj << /Type /Page /Parent 53 0 R /Resources << /Font 58 0 R /ProcSet 2 0 R >> /Contents 54 0 R >> endobj 53 0 obj << /Kids [ 52 0 R 59 0 R 65 0 R 73 0 R 77 0 R 81 0 R ] /Count 6 /Type /Pages /Parent 214 0 R >> endobj 54 0 obj << /Length 55 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 13)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD 0.177 Tw (there would have been no unexpected interaction between the two subroutines)Tj /F3 6.24 Tf 354.008 3.84 TD (8)Tj /F3 10.08 Tf 3.12 -3.84 TD 0 Tw (. Each lexical)Tj ET BT /F4 10.08 Tf 86.522 748.817 TD ($i)Tj /F3 10.08 Tf 12.098 0 TD 0.384 Tw ( is distinct, unrelated to any other lexical )Tj /F4 10.08 Tf 186.146 0 TD 0 Tw ($i)Tj /F3 10.08 Tf 12.098 0 TD 0.384 Tw ( \(or to the package variable )Tj /F4 10.08 Tf 125.425 0 TD 0 Tw ($Recipe::i)Tj /F3 10.08 Tf 60.491 0 TD (, for)Tj ET BT 86.522 735.617 TD 1.316 Tw (that matter\). Most importantly, each is confined to the body of the )Tj /F4 10.08 Tf 312.247 0 TD 0 Tw (for)Tj /F3 10.08 Tf 18.147 0 TD 1.316 Tw ( loop in which it's)Tj ET BT 86.522 722.177 TD 0 Tw (declared.)Tj ET BT 105.722 708.736 TD 0.548 Tw (The only problem is that, in Perl, lexical variables and package variables look the same,)Tj ET BT 86.522 695.296 TD 1.685 Tw (and since package variables can be conjured into existence just by mentioning them, this)Tj ET BT 86.522 681.856 TD 0.744 Tw (similarity can lead to subtle difficulties. For example, if we added an extra statement to the)Tj ET BT 86.522 668.655 TD 0 Tw (end of the loop timer shown earlier:)Tj ET BT /F4 7.68 Tf 86.522 653.775 TD (package main;)Tj ET BT 86.522 638.415 TD (my $i;)Tj ET BT 86.522 630.734 TD (for \($i=0; $i<100; $i++\))Tj ET BT 86.522 623.054 TD ({)Tj ET BT 98.042 615.374 TD (my $time = localtime\(\);)Tj ET BT 98.042 607.694 TD (print "$i at $time\\n";)Tj ET BT 86.522 600.014 TD (})Tj ET BT /F6 7.68 Tf 86.522 592.334 TD (print "last time was: $time\\n";)Tj ET BT /F3 10.08 Tf 86.522 574.573 TD (we'd find that the last line printed:)Tj ET BT /F7 7.68 Tf 86.522 558.253 TD (last time was:)Tj ET BT /F3 10.08 Tf 105.722 540.012 TD (That's because the )Tj /F2 10.08 Tf 83.282 0 TD (lexical)Tj /F3 10.08 Tf 25.944 0 TD ( variable )Tj /F4 10.08 Tf 41.147 0 TD ($time)Tj /F3 10.08 Tf 30.246 0 TD ( exists only inside the )Tj /F4 10.08 Tf 98.477 0 TD (for)Tj /F3 10.08 Tf 18.271 0 TD 2000 ( loop, so Perl assumes)Tj ET BT 86.522 526.572 TD (that when we referred to )Tj /F4 10.08 Tf 113.441 0 TD ($time)Tj /F3 10.08 Tf 30.246 0 TD ( outside the loop we meant the \(undefined\) package variable)Tj ET BT /F4 10.08 Tf 86.522 513.132 TD ($main::time)Tj /F3 10.08 Tf 66.54 0 TD 0.899 Tw (. This problem doesn't arise if you always put a )Tj /F4 10.08 Tf 222.05 0 TD 0 Tw (use strict)Tj /F3 10.08 Tf 61.39 0 TD 0.899 Tw ( at the start of)Tj ET BT 86.522 499.931 TD 1.451 Tw (your code, because )Tj /F4 10.08 Tf 91.922 0 TD (use strict)Tj /F3 10.08 Tf 61.942 0 TD ( requires that all package variables be fully qualified \(to)Tj ET BT 86.522 486.491 TD 0 Tw (avoid just this kind of confusion\).)Tj ET BT /F2 10.08 Tf 86.522 432.97 TD 1.234 Tw (Object-oriented programming in Perl can involve darker mysteries too, such as references, closures)Tj ET BT 86.522 419.53 TD 0 Tw (modules, and even the enigmatic typeglob...)Tj ET BT /F2 15.36 Tf 86.522 390.729 TD (Typeglobs)Tj ET BT /F3 10.08 Tf 86.522 370.568 TD 1.774 Tw (Typeglobs are amongst the most poorly understood features of Perl \(right up there with)Tj ET BT 86.522 357.128 TD 1.078 Tw (closures, in fact\). But, like closures, they're actually very easy to understand and use, once)Tj ET BT 86.522 343.688 TD 0 Tw (you unravel their mysterious syntax and their polymorphic behaviour.)Tj ET BT 105.722 330.488 TD 2.548 Tw (Perl maintains separate namespaces for each package, and for each type of named)Tj ET BT 86.522 317.047 TD 2.661 Tw (construct within a package. Hence within a given package you can have the variables)Tj ET BT /F4 10.08 Tf 86.522 303.607 TD 0 Tw ($FILE)Tj /F3 10.08 Tf 30.246 0 TD (, )Tj /F4 10.08 Tf 5.264 0 TD (@FILE)Tj /F3 10.08 Tf 30.246 0 TD (, and )Tj /F4 10.08 Tf 25.207 0 TD (%FILE)Tj /F3 10.08 Tf 30.246 0 TD 0.224 Tw ( as well as the subroutine )Tj /F4 10.08 Tf 116.582 0 TD 0 Tw (&FILE)Tj /F3 10.08 Tf 30.246 0 TD 0.224 Tw (. Best of all, you can use them all)Tj ET BT 86.522 290.167 TD 0 Tw (at the same time.)Tj ET BT 105.722 276.726 TD 0.982 Tw (Unlike many other languages, where an identifier must be associated with exactly one)Tj ET BT 86.522 263.526 TD 0.96 Tw (thing in the symbol table, in Perl there's no confusion because each identifier has a unique)Tj ET BT 86.522 250.086 TD 0.207 Tw (prefix symbol indicating its type. In fact, they all live together in the very same entry of their)Tj ET BT 86.522 236.645 TD 0 Tw (package's symbol table, as Figure 3 illustrates.)Tj ET BT 105.722 223.205 TD 0.321 Tw (Each Perl symbol table entry is like a "sampler" box of chocolates: you get a slot holding)Tj ET BT 86.522 209.765 TD 0.36 Tw (a reference to one scalar, a slot holding a reference to one array, a slot holding a reference to)Tj ET BT 86.522 193.444 TD 0 Tw ( )Tj 72.002 0 TD ( )Tj ET 86.402 195.604 138.243 0.48 re f BT /F3 5.76 Tf 86.522 178.804 TD (8)Tj /F3 9.6 Tf 2.88 -3.84 TD ( An interaction of this kind between subroutines is known as )Tj /F2 9.6 Tf 260.275 0 TD (coupling)Tj /F3 9.6 Tf 33.784 0 TD (, and just as in real life, it)Tj ET BT 93.242 164.404 TD (can cause no end of difficulties.)Tj ET endstream endobj 55 0 obj 5278 endobj 56 0 obj << /Type /FontDescriptor /FontName /Arial-BoldMT /Flags 32800 /FontBBox [ -250 -219 1000 906 ] /MissingWidth 278 /StemV 125 /StemH 125 /ItalicAngle 0 /CapHeight 718 /XHeight 531 /Ascent 906 /Descent -219 /Leading 31 /MaxWidth 1000 /AvgWidth 567 /Style << /Panose <0508020b0600000000000000>>> >> endobj 57 0 obj << /Type /Font /Subtype /TrueType /Name /F7 /BaseFont /Arial-BoldMT /FirstChar 0 /LastChar 255 /Widths [ 0 750 750 750 750 750 750 750 0 278 750 750 750 0 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 0 750 750 278 333 474 556 556 889 722 238 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 333 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 750 722 722 722 667 722 778 722 556 556 556 556 556 556 556 556 556 556 556 278 278 278 278 611 611 611 611 611 611 611 611 611 611 556 400 556 556 556 350 556 611 737 737 1000 333 333 549 1000 778 713 549 549 549 556 576 494 713 823 549 274 370 365 768 889 611 611 333 584 549 556 549 612 556 556 1000 278 722 722 778 1000 944 556 1000 500 500 278 278 549 494 556 667 167 556 333 333 611 611 556 278 278 500 1000 722 667 722 667 667 278 278 278 278 778 778 750 778 722 722 722 278 333 333 333 333 333 333 333 333 333 333 ] /Encoding /MacRomanEncoding /FontDescriptor 56 0 R >> endobj 58 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F6 46 0 R /F7 57 0 R >> endobj 59 0 obj << /Type /Page /Parent 53 0 R /Resources << /Font 64 0 R /ProcSet 2 0 R >> /Contents 60 0 R >> endobj 60 0 obj << /Length 61 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 14)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD 0.075 Tw (one hash, and a slot holding a reference to one subroutine \(as well slots holding references to)Tj ET BT 86.522 748.817 TD 0 Tw (one filehandle, and one format\).)Tj ET BT 105.722 735.617 TD 2.679 Tw (You can access an entire symbol table entry via a special piece of syntax called a)Tj ET BT /F2 10.08 Tf 86.522 722.177 TD 0 Tw (typeglob)Tj /F3 6.24 Tf 34.321 3.84 TD (9)Tj /F3 10.08 Tf 3.12 -3.84 TD 2.499 Tw (: )Tj /F4 10.08 Tf 7.539 0 TD (*)Tj /F5 10.08 Tf 5.902 0 TD 0 Tw (symbol_name)Tj /F3 10.08 Tf 66.54 0 TD 2.499 Tw (. For example, to refer to the complete symbol table entry for)Tj ET BT 86.522 708.736 TD 1.282 Tw (anything that's called "FILE" \(i.e. )Tj /F4 10.08 Tf 154.084 0 TD 0 Tw ($FILE)Tj /F3 10.08 Tf 30.246 0 TD 1.282 Tw (, )Tj /F4 10.08 Tf 6.475 0 TD 0 Tw (%FILE)Tj /F3 10.08 Tf 30.246 0 TD 1.282 Tw (, )Tj /F4 10.08 Tf 6.322 0 TD 0 Tw (&FILE)Tj /F3 10.08 Tf 30.246 0 TD 1.282 Tw (, etc.\), we would use the typeglob)Tj ET BT /F4 10.08 Tf 86.522 695.296 TD 0 Tw (*FILE)Tj /F3 10.08 Tf 30.246 0 TD 0.624 Tw (. The slots in that symbol table entry would contain a reference to the package scalar)Tj ET BT 86.522 681.856 TD 0 Tw (variable )Tj /F4 10.08 Tf 39.078 0 TD ($FILE)Tj /F3 10.08 Tf 30.246 0 TD 0.529 Tw (, a reference to the package array variable )Tj /F4 10.08 Tf 192.033 0 TD 0 Tw (@FILE)Tj /F3 10.08 Tf 30.246 0 TD 0.529 Tw (, a reference to the package)Tj ET BT 86.522 668.655 TD 0 Tw (subroutine )Tj /F4 10.08 Tf 50.928 0 TD (&FILE)Tj /F3 10.08 Tf 30.246 0 TD (, etc.)Tj ET BT /F1 7.68 Tf 194.284 383.769 TD (Figure 3: An entry \(typeglob\) in a package's symbol table)Tj ET BT /F2 10.08 Tf 86.522 332.888 TD 2.263 Tw (Once the necessary groundwork has been laid, we can finally start to talk about object-oriented)Tj ET BT 86.522 319.447 TD 0 Tw (programming in Perl...)Tj ET BT /F2 19.2 Tf 86.522 282.006 TD (Three little rules)Tj ET BT /F3 10.08 Tf 86.522 256.326 TD 0.586 Tw (If you've ever used another object-oriented programming language, or been traumatized by)Tj ET BT 86.522 242.886 TD 4.584 Tw (some prior exposure to object orientation, you're probably dreading tackling object)Tj ET BT 86.522 229.445 TD 2.332 Tw (orientation in Perl\321more syntax, more semantics, more rules, more complexity. On the)Tj ET BT 86.522 216.005 TD 1.064 Tw (other hand, if you're entirely new to object orientation, you're likely to be equally nervous)Tj ET BT 86.522 202.565 TD 0.649 Tw (about all those unfamiliar concepts, and how you're going to keep them all straight in your)Tj ET BT 86.522 182.884 TD 0 Tw ( )Tj 72.002 0 TD ( )Tj ET 86.402 185.044 138.243 0.48 re f BT /F3 5.76 Tf 86.522 168.244 TD (9)Tj /F3 9.6 Tf 2.88 -3.84 TD ( \311because it "globs" \(generically matches\) any type of variable with the correct name.)Tj ET 0.002 w 1 G 1 g 86.403 409.45 413.768 256.324 re b 0.85 g 117.603 450.01 90.962 191.044 re f 1.92 w 0.75 G 207.605 450.97 m 207.605 640.095 l S 0.9 G 118.563 640.095 m 207.605 640.095 l S 118.563 450.97 m 118.563 640.09 2000 5 l S 0.75 G 118.563 450.97 m 207.605 450.97 l S 271.926 619.214 48.481 27.361 re f 0.96 w 272.166 619.454 m 320.167 619.454 l S 320.167 619.454 m 320.167 646.335 l S 0.9 G 272.166 646.335 m 320.167 646.335 l S 272.166 619.454 m 272.166 646.335 l S 0 w BT /F4 6.72 Tf 0 g 0 G 1.308 0 0 1.309 295.021 630.494 Tm (1)Tj ET 0.85 g 155.764 595.454 48.481 27.361 re f 0.96 w 0.75 G 156.004 595.454 m 204.005 595.454 l S 204.005 595.454 m 204.005 622.574 l S 0.9 G 156.004 622.574 m 204.005 622.574 l S 155.284 595.454 m 155.284 622.574 l S 0.002 w 0 G 0 g 179.884 612.973 m 182.07 612.973 183.843 611.199 183.843 609.014 c 183.843 606.828 182.07 605.055 179.884 605.055 c 177.699 605.055 175.925 606.828 175.925 609.014 c 175.925 611.199 177.699 612.973 179.884 612.973 c b 0.96 w 2 j 183.604 609.134 m 227.765 609.134 l 227.765 632.894 l 266.166 632.894 l S 0 j 0.24 w 2 j 271.806 633.014 m 266.046 630.374 l 266.046 633.014 l 266.046 635.415 l 271.806 633.014 l b* 0 j 0.85 g 271.926 580.333 48.481 27.361 re f 0.96 w 0.75 G 272.166 580.573 m 320.167 580.573 l S 320.167 580.573 m 320.167 607.454 l S 0.9 G 272.166 607.454 m 320.167 607.454 l S 272.166 580.573 m 272.166 607.454 l S 320.887 580.333 48.481 27.361 re f 0.75 G 321.127 580.573 m 369.128 580.573 l S 369.128 580.573 m 369.128 607.454 l S 0.9 G 321.127 607.454 m 369.128 607.454 l S 321.127 580.573 m 321.127 607.454 l S 369.848 580.333 48.481 27.361 re f 0.75 G 370.088 580.573 m 418.09 580.573 l S 418.09 580.573 m 418.09 607.454 l S 0.9 G 370.088 607.454 m 418.09 607.454 l S 370.088 580.573 m 370.088 607.454 l S 418.81 580.333 48.481 27.361 re f 0.75 G 419.05 580.573 m 467.051 580.573 l S 467.051 580.573 m 467.051 607.454 l S 0.9 G 419.05 607.454 m 467.051 607.454 l S 419.05 580.573 m 419.05 607.454 l S 0 w BT 0 g 0 G 1.308 0 0 1.309 280.893 591.374 Tm (\322make\322)Tj ET BT 1.308 0 0 1.309 327.672 591.374 Tm (\322nail\323)Tj ET BT 1.308 0 0 1.309 376.962 591.374 Tm (\322anglo\323)Tj ET 0.85 g 155.764 567.373 48.481 27.361 re f 0.96 w 0.75 G 156.004 567.613 m 204.005 567.613 l S 204.005 567.613 m 204.005 594.494 l S 0.9 G 156.004 594.494 m 204.005 594.494 l S 155.284 567.613 m 155.284 594.494 l S 0.002 w 0 G 0 g 179.884 585.132 m 182.07 585.132 183.843 583.359 183.843 581.173 c 183.843 578.988 182.07 577.214 179.884 577.214 c 177.699 577.214 175.925 578.988 175.925 581.173 c 175.925 583.359 177.699 585.132 179.884 585.132 c b 0.96 w 2 j 183.604 581.053 m 227.765 581.053 l 227.765 594.014 l 266.166 594.014 l S 0 j 0.24 w 2 j 271.806 594.134 m 266.046 591.494 l 266.046 594.134 l 266.046 596.534 l 271.806 594.134 l b* 0 j 0.18 w 0.85 G 0.85 g 271.776 501.942 73.262 66.782 re b 0 w 271.926 547.933 36.481 20.4 re f 0.81 w 0.75 G 272.331 547.768 m 308.092 547.768 l S 308.092 547.768 m 308.092 567.928 l S 0.9 G 272.331 567.928 m 308.092 567.928 l S 272.331 547.768 m 272.331 567.928 l S 0 w BT /F4 5.76 Tf 0 g 0 G 1.308 0 0 1.309 279.324 556.333 Tm (\322dir\323)Tj ET 0.85 g 308.647 547.933 36.481 20.4 re f 0.81 w 0.75 G 309.052 547.768 m 344.813 547.768 l S 344.813 547.768 m 344.813 567.928 l S 0.9 G 309.052 567.928 m 344.813 567.928 l S 309.052 547.768 m 309.052 567.928 l S 0 w BT 0 g 0 G 1.308 0 0 1.309 320.451 556.333 Tm (\322.\323)Tj ET 0.85 g 271.926 525.132 36.481 20.64 re f 0.81 w 0.75 G 272.331 524.967 m 308.092 524.967 l S 308.092 524.967 m 308.092 545.127 l S 0.9 G 272.331 545.127 m 308.092 545.127 l S 272.331 524.967 m 272.331 545.127 l S 0 w BT 0 g 0 G 1.308 0 0 1.309 277.126 533.532 Tm (\322type\323)Tj ET 0.85 g 308.647 525.132 36.481 20.64 re f 0.81 w 0.75 G 309.052 524.967 m 344.813 524.967 l S 344.813 524.967 m 344.813 545.127 l S 0.9 G 309.052 545.127 m 344.813 545.127 l S 309.052 524.967 m 309.052 545.127 l S 0 w BT 0 g 0 G 1.308 0 0 1.309 311.66 533.532 Tm (\322ASCII\323)Tj ET 0.85 g 271.926 502.091 36.481 20.64 re f 0.81 w 0.75 G 272.331 501.926 m 308.092 501.926 l S 308.092 501.926 m 308.092 522.087 l S 0.9 G 272.331 522.087 m 308.092 522.087 l S 272.331 501.926 m 272.331 522.087 l S 0 w 308.647 502.091 36.481 20.64 re f 0.81 w 0.75 G 309.052 501.926 m 344.813 501.926 l S 344.813 501.926 m 344.813 522.087 l S 0.9 G 309.052 522.087 m 344.813 522.087 l S 309.052 501.926 m 309.052 522.087 l S 155.764 539.532 48.481 27.361 re f 0.96 w 0.75 G 156.004 539.532 m 204.005 539.532 l S 204.005 539.532 m 204.005 566.653 l S 0.9 G 156.004 566.653 m 204.005 566.653 l S 155.284 539.532 m 155.284 566.653 l S 0.002 w 0 G 0 g 179.884 557.052 m 182.07 557.052 183.843 555.278 183.843 553.093 c 183.843 550.907 182.07 549.134 179.884 549.134 c 177.699 549.134 175.925 550.907 175.925 553.093 c 175.925 555.278 177.699 557.052 179.884 557.052 c b 0.96 w 2 j 183.604 553.213 m 227.765 553.213 l 227.765 535.212 l 266.166 535.212 l S 0 j 0.24 w 2 j 271.806 535.332 m 266.046 532.692 l 266.046 535.332 l 266.046 537.732 l 271.806 535.332 l b* 0 j 0.85 g 155.764 511.212 48.481 27.361 re f 0.96 w 0.75 G 204.005 511.692 m 204.005 538.812 l S 0.9 G 156.004 538.812 m 204.005 538.812 l S 155.284 511.692 m 155.284 538.812 l S 0.002 w 0 G 0 g 179.884 529.211 m 182.07 529.211 183.843 527.437 183.843 525.252 c 183.843 523.067 182.07 521.293 179.884 521.293 c 177.699 521.293 175.925 523.067 175.925 525.252 c 175.925 527.437 177.699 529.211 179.884 529.211 c b 0.96 w 2 j 183.604 525.132 m 253.686 525.132 l 253.686 487.211 l 323.527 487.211 l S 0 j 2 j 323.527 487.211 m 363.848 487.211 l 363.848 524.892 l 397.929 524.892 l S 0 j 0.24 w 2 j 403.569 525.012 m 398.049 522.372 l 398.049 525.012 l 398.049 527.412 l 403.569 525.012 l b* 0 j 0 w 1 g 403.449 540.012 17.28 11.04 re f 0.8 g 403.689 497.771 53.761 53.761 re f 0.92 w 0.75 G 456.71 498.271 m 456.71 551.313 l S 403.909 498.271 m 456.71 498.271 l S 0.9 G 403.909 498.271 m 403.909 551.313 l S 403.909 551.313 m 456.71 551.313 l S 406.549 500.431 m 454.55 500.431 l S 454.55 500.671 m 454.55 549.153 l S 0.75 G 406.549 500.431 m 406.549 549.153 l S 406.549 549.153 m 454.55 549.153 l S 0 w BT /F8 2.4 Tf 0 g 0 G 1.308 0 0 1.309 409.298 543.612 Tm (open FILE, shift)Tj 0 -3.484 TD ( or die \322Could open\323;)Tj 0 -6.601 TD (print FILE, @_)Tj 0 -3.484 TD ( or die \322Could print\323;)Tj 0 -6.601 TD (close FILE)Tj 0 -3.484 TD ( or die \322Could close\323;)Tj 0 -6.601 TD (return 1;)Tj ET 0.96 w 0.75 G 156.004 510.732 m 204.005 510.732 l S 0.85 g 155.764 482.651 48.481 27.361 re f 156.004 482.891 m 204.005 482.891 l S 204.005 482.891 m 204.005 509.772 l S 0.9 G 156.004 509.772 m 204.005 509.772 l S 155.284 482.891 m 155.284 509.772 l S 0.002 w 0 G 0 g 179.884 500.171 m 182.07 500.171 183.843 498.397 183.843 496.211 c 183.843 494.026 182.07 492.252 179.884 492.252 c 177.699 492.252 175.925 494.026 175.925 496.211 c 175.925 498.397 177.699 500.171 179.884 500.171 c b 0.85 g 155.764 455.05 48.481 27.361 re f 0.96 w 0.75 G 156.004 455.05 m 204.005 455.05 l S 204.005 455.05 m 204.005 482.171 l S 0.9 G 156.004 482.171 m 204.005 482.171 l S 155.284 455.05 m 155.284 482.171 l S 0.002 w 0 G 0 g 179.884 472.57 m 182.07 472.57 183.843 470.796 183.843 468.611 c 183.843 466.425 182.07 464.652 179.884 464.652 c 177.699 464.652 175.925 466.425 175.925 468.611 c 175.925 470.796 177.699 472.57 179.884 472.57 c b 0 w BT /F3 5.28 Tf 1.308 0 0 1.309 126.117 606.254 Tm (SCALAR)Tj ET BT 1.308 0 0 1.309 129.884 579.133 Tm (ARRAY)Tj ET BT 1.308 0 0 1.309 134.279 551.293 Tm (HASH)Tj ET BT 1.308 0 0 1.309 134.907 523.212 Tm (CODE)Tj ET BT 1.308 0 0 1.309 146.209 493.931 Tm (IO)Tj ET BT 1.308 0 0 1.309 123.919 466.571 Tm (FORMAT)Tj ET 0.85 g 271.926 446.41 48.481 27.361 re f 0.96 w 0.75 G 272.166 446.65 m 320.167 446.65 l S 320.167 446.65 m 320.167 473.771 l S 0.9 G 272.166 473.771 m 320.167 473.771 l S 272.166 446.65 m 272.166 473.771 l 2000 S 0 w BT /F5 7.68 Tf 0 g 0 G 1.308 0 0 1.309 278.382 457.45 Tm (handle)Tj ET 0.96 w 2 j 179.764 464.891 m 179.764 432.25 l 319.207 432.25 l S 0 j 2 j 319.207 432.25 m 362.168 432.25 l 362.168 457.21 l 399.609 457.21 l S 0 j 0.24 w 2 j 405.249 457.33 m 399.489 454.93 l 399.489 457.33 l 399.489 459.971 l 405.249 457.33 l b* 0 j 0.96 w 2 j 183.604 496.331 m 227.765 496.331 l 227.765 460.091 l 266.166 460.091 l S 0 j 0.24 w 2 j 271.806 460.211 m 266.046 457.57 l 266.046 460.211 l 266.046 462.611 l 271.806 460.211 l b* 0 j 0 w BT /F4 6.72 Tf 1.308 0 0 1.309 435.356 591.374 Tm (\322X\323)Tj ET BT /F4 5.76 Tf 1.308 0 0 1.309 277.126 510.252 Tm (\322date\323)Tj ET BT 1.308 0 0 1.309 311.66 510.252 Tm (1304312)Tj ET BT /F4 7.68 Tf 1.308 0 0 1.309 117.012 645.615 Tm (*FILE)Tj ET 1 g 404.649 472.571 17.28 11.28 re f 0.8 g 405.129 430.09 53.521 53.761 re f 0.92 w 0.75 G 457.91 431.07 m 457.91 484.111 l S 405.589 431.07 m 458.15 431.07 l S 0.9 G 405.589 431.07 m 405.589 484.111 l S 405.589 484.111 m 458.15 484.111 l S 407.749 432.75 m 455.99 432.75 l S 455.99 433.47 m 455.99 481.951 l S 0.75 G 407.749 432.75 m 407.749 481.951 l S 407.749 481.951 m 455.99 481.951 l S 0 w BT /F8 2.4 Tf 0 g 0 G 1.308 0 0 1.309 408.67 476.411 Tm (formline\($l1,@a1\);)Tj 0 -6.784 TD (formline\($l2,@a2\))Tj 0 -3.301 TD ( while grep {length} @a2;)Tj 0 -6.784 TD (formline\($l3,@a3\);)Tj T* (formline\($l4,@a4\);)Tj 0 -6.601 TD (formline\($l5,@a5\);)Tj ET endstream endobj 61 0 obj 12881 endobj 62 0 obj << /Type /FontDescriptor /FontName /EspySans /Flags 96 /FontBBox [ -350 -200 1400 1100 ] /MissingWidth 400 /StemV 187 /StemH 437 /ItalicAngle -23 /CapHeight 750 /XHeight 562 /Ascent 1100 /Descent -200 /Leading 100 /MaxWidth 1400 /AvgWidth 708 >> endobj 63 0 obj << /Type /Font /Subtype /Type1 /Name /F8 /BaseFont /EspySans /FirstChar 0 /LastChar 255 /Widths [ 0 900 0 900 0 900 900 900 900 700 900 900 900 0 900 900 900 900 900 900 900 900 900 900 900 900 900 900 900 900 900 900 400 400 500 1000 700 1000 900 300 500 500 700 700 400 500 400 600 800 800 800 800 800 800 800 800 800 800 400 400 700 800 700 600 1000 900 700 800 800 700 700 800 800 400 600 700 700 1100 800 900 700 900 700 700 700 800 900 1100 800 700 800 400 600 400 700 700 400 700 700 600 700 700 500 700 700 300 400 600 300 1100 700 700 700 700 500 600 600 700 700 1100 700 700 600 500 500 500 800 0 900 900 800 700 800 900 800 700 700 700 700 700 700 700 700 700 700 700 300 300 300 300 700 700 700 700 700 700 700 700 700 700 1100 600 700 800 1100 800 700 700 900 900 1100 400 500 800 1200 900 1100 700 700 700 900 700 700 700 900 800 500 600 600 900 1100 700 600 400 800 700 800 800 900 700 700 1000 400 900 900 900 1200 1100 800 1200 600 600 400 400 700 900 700 900 600 900 500 500 700 700 1000 500 400 600 1400 900 700 900 700 700 300 300 300 300 900 900 800 900 800 800 800 300 600 700 500 600 300 600 500 600 500 500 ] /Encoding /MacRomanEncoding /FontDescriptor 62 0 R >> endobj 64 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R /F8 63 0 R >> endobj 65 0 obj << /Type /Page /Parent 53 0 R /Resources << /Font 72 0 R /ProcSet 2 0 R >> /Contents 66 0 R >> endobj 66 0 obj << /Length 67 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 15)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD (head while you learn the specific Perl syntax and semantics.)Tj ET BT 105.722 748.817 TD (Relax!)Tj ET BT 105.722 735.617 TD 0.773 Tw (Object-oriented Perl isn't like that at all. To do real, useful, production-strength, object-)Tj ET BT 86.522 722.177 TD 3.471 Tw (oriented programming in Perl you only need to learn about one extra function, one)Tj ET BT 86.522 708.736 TD 0.452 Tw (straightforward piece of additional syntax, and three very simple rules)Tj /F3 6.24 Tf 318.967 3.84 TD 0 Tw (10)Tj /F3 10.08 Tf 6.24 -3.84 TD 0.452 Tw (. Let's start with the)Tj ET BT 86.522 695.296 TD 0 Tw (rules\311)Tj ET BT /F2 15.36 Tf 86.522 666.495 TD (Rule 1: To create a class, build a package)Tj ET BT /F3 10.08 Tf 86.522 646.335 TD (Perl packages already have a number of class-like features:)Tj ET BT 95.642 630.254 TD (\245)Tj 10.08 0 TD (They collect related code together;)Tj ET BT 95.642 611.054 TD (\245)Tj 10.08 0 TD (They distinguish that code from unrelated code;)Tj ET BT 95.642 591.854 TD (\245)Tj 10.08 0 TD 0.305 Tw (They provide a separate namespace within the program, which keeps subroutine names)Tj ET BT 105.722 578.413 TD 0 Tw (from clashing with those in other packages;)Tj ET BT 95.642 559.213 TD (\245)Tj 10.08 0 TD 1.13 Tw (They have a name, which can be used to identify data and subroutines defined in the)Tj ET BT 105.722 546.013 TD 0 Tw (package.)Tj ET BT 105.722 529.692 TD (In Perl, those features are sufficient to allow a package to act like a class.)Tj ET BT 105.722 516.252 TD 1.244 Tw (Suppose we wanted to build an application to track faults in a system. Here's how to)Tj ET BT 86.522 502.812 TD 0 Tw (declare a class named "Bug" in Perl:)Tj ET BT /F6 7.68 Tf 86.522 486.491 TD (package Bug;)Tj ET BT /F3 10.08 Tf 105.722 468.251 TD 0.397 Tw (That's it! Of course, such a class isn't very interesting or useful, since it has no attributes)Tj ET BT 86.522 455.05 TD 0 Tw (or behaviour. And that brings us to the second rule\311)Tj ET BT /F2 15.36 Tf 86.522 426.25 TD (Rule 2: To create a method, write a subroutine)Tj ET BT /F3 10.08 Tf 86.522 406.089 TD 4.125 Tw (Methods are just subroutines that are associated with a particular class. They exist)Tj ET BT 86.522 392.649 TD 0 Tw (specifically to operate on objects that are instances of that class.)Tj ET BT 105.722 379.209 TD 0.733 Tw (Happily, in Perl a subroutine that is declared in a particular package )Tj /F2 10.08 Tf 316.052 0 TD 0 Tw (is)Tj /F3 10.08 Tf 6.723 0 TD 0.733 Tw ( associated with)Tj ET BT 86.522 365.768 TD 0.086 Tw (that package. So to write a Perl method, we just write a subroutine within the package that is)Tj ET BT 86.522 352.568 TD 0 Tw (acting as our class.)Tj ET BT 105.722 339.128 TD (For example, here's how we provide an object method to print our Bug objects:)Tj ET BT /F4 7.68 Tf 86.522 322.807 TD (package Bug;)Tj ET BT /F6 7.68 Tf 86.522 303.607 TD (sub print_me)Tj ET BT 86.522 294.007 TD ({)Tj ET BT /F9 7.68 Tf 98.042 284.407 TD (# The code needed to print the Bug goes here)Tj ET BT /F6 7.68 Tf 86.522 274.806 TD (})Tj ET BT /F3 10.08 Tf 105.722 256.566 TD 0.974 Tw (Again, that's it. The subroutine )Tj /F4 10.08 Tf 145.15 0 TD 0 Tw (print_me)Tj /F3 10.08 Tf 48.535 0 TD 0.974 Tw ( is now associated with the package Bug, so)Tj ET BT 86.522 243.126 TD 0 Tw (whenever we treat Bug as a class, Perl automatically treats )Tj /F4 10.08 Tf 262.46 0 TD (Bug::print_me)Tj /F3 10.08 Tf 78.828 0 TD ( as a method.)Tj ET BT 105.722 229.685 TD 3.455 Tw (Calling the )Tj /F4 10.08 Tf 58.561 0 TD 0 Tw (Bug::print_me)Tj /F3 10.08 Tf 78.639 0 TD 3.455 Tw ( method involves that one extra piece of syntax\321an)Tj ET BT 86.522 216.485 TD 0.938 Tw (extension to the existing Perl "arrow" notation. If you have a reference to an object of class)Tj ET BT 86.522 194.164 TD 0 Tw ( )Tj 72.002 0 TD ( )Tj ET 86.402 196.324 138.243 0.48 re f BT /F3 5.76 Tf 86.522 179.524 TD (10)Tj /F3 9.6 Tf 5.76 -3.84 TD ( The three rules were originally formulated by Larry Wall, and appear in a slightly different)Tj ET BT 93.242 164.404 TD (form in the )Tj /F10 9.6 Tf 49.604 0 TD (perlobj)Tj /F3 9.6 Tf 28.819 0 TD ( documentation.)Tj ET endstream endobj 67 0 obj 4290 endobj 68 0 obj << /Type /FontDescriptor /FontName /Courier,BoldItalic /Flags 32866 /FontBBox [ -211 -250 844 750 ] /MissingWidth 600 /StemV 125 /StemH 593 /ItalicAngle -12 /CapHeight 593 /XHeight 437 /Ascent 750 /Descent -250 /Leading 0 /MaxWidth 844 /AvgWidth 589 >> endobj 69 0 obj << /Type /Font /Subtype /TrueType /Name /F9 /BaseFont /Courier,BoldItalic /FirstChar 0 /LastChar 255 /Widths [ 0 600 600 600 600 600 600 600 0 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 60 2000 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 400 600 600 600 600 600 600 600 600 600 600 600 549 600 600 713 549 549 549 600 576 494 713 823 549 274 600 600 768 600 600 600 600 600 549 600 549 612 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 549 494 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 790 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] /Encoding /MacRomanEncoding /FontDescriptor 68 0 R >> endobj 70 0 obj << /Type /FontDescriptor /FontName /ArialMT /Flags 32800 /FontBBox [ -256 -200 1025 900 ] /MissingWidth 278 /StemV 93 /StemH 93 /ItalicAngle 0 /CapHeight 718 /XHeight 531 /Ascent 900 /Descent -200 /Leading 25 /MaxWidth 1025 /AvgWidth 551 /Style << /Panose <0508020b0600000000000000>>> >> endobj 71 0 obj << /Type /Font /Subtype /TrueType /Name /F10 /BaseFont /ArialMT /FirstChar 0 /LastChar 255 /Widths [ 0 750 750 750 750 750 750 750 0 278 750 750 750 0 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 0 750 750 278 278 355 556 556 889 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 750 667 667 722 667 722 778 722 556 556 556 556 556 556 500 556 556 556 556 278 278 278 278 556 556 556 556 556 556 556 556 556 556 556 400 556 556 556 350 537 611 737 737 1000 333 333 549 1000 778 713 549 549 549 556 576 494 713 823 549 274 370 365 768 889 611 611 333 584 549 556 549 612 556 556 1000 278 667 667 778 1000 944 556 1000 333 333 222 222 549 494 500 667 167 556 333 333 500 500 556 278 222 333 1000 667 667 667 667 667 278 278 278 278 778 778 750 778 722 722 722 278 333 333 333 333 333 333 333 333 333 333 ] /Encoding /MacRomanEncoding /FontDescriptor 70 0 R >> endobj 72 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F6 46 0 R /F9 69 0 R /F10 71 0 R >> endobj 73 0 obj << /Type /Page /Parent 53 0 R /Resources << /Font 76 0 R /ProcSet 2 0 R >> /Contents 74 0 R >> endobj 74 0 obj << /Length 75 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 16)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD 0.537 Tw (Bug \(we'll see how to get such a reference in a moment\), you can access any method of that)Tj ET BT 86.522 748.817 TD 0 Tw (object by using a )Tj /F4 10.08 Tf 77.088 0 TD (->)Tj /F3 10.08 Tf 11.954 0 TD ( symbol, followed by the name of the method.)Tj ET BT 105.722 735.617 TD 0.603 Tw (For example, if the variable )Tj /F4 10.08 Tf 127.443 0 TD 0 Tw ($nextbug)Tj /F3 10.08 Tf 48.241 0 TD 0.603 Tw ( holds a reference to a Bug object, you could call)Tj ET BT /F4 10.08 Tf 86.522 722.177 TD 0 Tw (Bug::print_me)Tj /F3 10.08 Tf 78.639 0 TD ( on that object by writing:)Tj ET BT /F4 7.68 Tf 86.522 705.856 TD (package main;)Tj ET BT /F5 7.68 Tf 86.522 686.656 TD (# set $nextbug to refer to a Bug object, somehow, and then\311)Tj ET BT /F4 7.68 Tf 86.522 667.455 TD ($nextbug->print_me\(\);)Tj ET BT /F3 10.08 Tf 105.722 649.215 TD 0.921 Tw (Calling a method through an arrow should be very familiar to any C++ programmers;)Tj ET BT 86.522 635.775 TD 0 Tw (for the rest of us, it\325s at least consistent with other Perl usages:)Tj ET BT /F4 7.68 Tf 86.522 606.014 TD ($hsh_ref->{"key"};)Tj /F5 7.68 Tf 122.403 0 TD (# Access the hash referred to by $hashref)Tj ET BT /F4 7.68 Tf 86.522 596.414 TD ($arr_ref->[$index];)Tj /F5 7.68 Tf 122.403 0 TD (# Access the array referred to by $arrayref)Tj ET BT /F4 7.68 Tf 86.522 586.813 TD ($sub_ref->\(@args\);)Tj /F5 7.68 Tf 122.403 0 TD (# Access the sub referred to by $subref)Tj ET BT /F6 7.68 Tf 86.522 577.213 TD ($obj_ref->method\(@args\);)Tj /F9 7.68 Tf 122.403 0 TD (# Access the object referred to by $objref)Tj ET BT /F3 10.08 Tf 105.722 559.213 TD 0.264 Tw (The only difference with the last case is that the thing referred to by )Tj /F4 10.08 Tf 307.157 0 TD 0 Tw ($objref)Tj /F3 10.08 Tf 42.344 0 TD ( has many)Tj ET BT 86.522 545.772 TD 0.272 Tw (ways of being accessed \(namely, its various methods\). So, when we want to access an object,)Tj ET BT 86.522 532.332 TD 0 Tw (we have to specify which particular way \(i.e. which method\) should be used.)Tj ET BT 105.722 518.892 TD 1.815 Tw (Just to be a little more flexible, Perl doesn't actually require that we "hard-code" the)Tj ET BT 86.522 505.452 TD 1.116 Tw (method name in the call. It's also possible to specify the method name as a scalar variable)Tj ET BT 86.522 492.251 TD 1.892 Tw (containing a string matching the name \(i.e. a symbolic reference\), or as a scalar variable)Tj ET BT 86.522 478.811 TD 0 Tw (containing a real reference to the subroutine in question. For example, instead of:)Tj ET BT /F4 7.68 Tf 86.522 462.491 TD ($nextbug->print_me\(\);)Tj ET BT /F3 10.08 Tf 86.522 444.25 TD (we could write:)Tj ET BT /F4 7.68 Tf 86.522 427.93 TD ($method_name = "print_me";)Tj /F5 7.68 Tf 149.763 0 TD (# i.e. "symbolic reference" to some &print_me)Tj ET BT /F4 7.68 Tf 86.522 418.33 TD ($nextbug->$method_name\(\);)Tj /F5 7.68 Tf 149.763 0 TD (# Method call via symbolic reference)Tj ET BT /F3 10.08 Tf 86.522 400.089 TD (or:)Tj ET BT /F4 7.68 Tf 86.522 383.769 TD ($method_ref = \\&Bug::print_me;)Tj /F5 7.68 Tf 149.763 0 TD (# i.e. reference to &Bug::print_me)Tj ET BT /F4 7.68 Tf 86.522 374.169 TD ($nextbug->$method_ref\(\);)Tj /F5 7.68 Tf 149.763 0 TD (# Method call via hard reference)Tj ET BT /F3 10.08 Tf 86.522 355.928 TD (In practice, the method name is almost always hard-coded.)Tj ET BT 105.722 342.728 TD 0.447 Tw (When a method like )Tj /F4 10.08 Tf 94.396 0 TD 0 Tw (Bug::print_me)Tj /F3 10.08 Tf 78.639 0 TD 0.447 Tw ( is called, the argument list that it receives begins)Tj ET BT 86.522 329.288 TD 0 Tw (with the object reference through which it was called)Tj /F3 6.24 Tf 235.925 3.84 TD (11)Tj /F3 10.08 Tf 6.24 -3.84 TD (, followed by any arguments that were)Tj ET BT 86.522 315.847 TD 1.441 Tw (explicitly given to the method. That means that calling )Tj /F4 10.08 Tf 258.154 0 TD 0 Tw (Bug::print_me\("logfile"\))Tj /F3 10.08 Tf 145.179 0 TD 1.441 Tw ( is)Tj ET BT /F2 10.08 Tf 86.522 302.407 TD 0 Tw (not)Tj /F3 10.08 Tf 13.437 0 TD ( the same as calling )Tj /F4 10.08 Tf 89.49 0 TD ($nextbug->print_me\("logfile"\))Tj /F3 10.08 Tf 175.259 0 TD (. In the first case, )Tj /F4 10.08 Tf 78.1 0 TD (print_me)Tj /F3 10.08 Tf 48.393 0 TD ( is)Tj ET BT 86.522 288.967 TD 0.179 Tw (treated as a regular subroutine so the argument list passed to )Tj /F4 10.08 Tf 276.512 0 TD 0 Tw (Bug::print_me)Tj /F3 10.08 Tf 78.639 0 TD ( is equivalent)Tj ET BT 86.522 275.766 TD (to:)Tj ET BT /F4 7.68 Tf 86.522 259.446 TD (\( "logfile" \))Tj ET BT /F3 10.08 Tf 105.722 241.206 TD 0.744 Tw (In the second case, )Tj /F4 10.08 Tf 88.539 0 TD 0 Tw (print_me)Tj /F3 10.08 Tf 48.393 0 TD 0.744 Tw ( is treated as a method so the argument list is equivalent)Tj ET BT 86.522 227.765 TD 0 Tw (to:)Tj ET BT 86.522 204.245 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 206.405 138.243 0.48 re f BT /F3 5.76 Tf 86.522 189.604 TD (11)Tj /F3 9.6 Tf 5.76 -3.84 TD ( The object on which the method is called is known as the )Tj /F2 9.6 Tf 246.123 0 TD (invoking object)Tj /F3 9.6 Tf 58.75 0 TD (, or sometimes the)Tj ET BT /F2 9.6 Tf 93.242 175.204 TD (message target)Tj /F3 9.6 Tf 56.8 0 TD (. It is the reference to this object that is passed as the first argument of any method)Tj ET BT 93.242 164.404 TD (invoked using the )Tj /F4 9.6 Tf 78.944 2000 0 TD (->)Tj /F3 9.6 Tf 11.522 0 TD ( notation.)Tj ET endstream endobj 75 0 obj 5472 endobj 76 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R /F6 46 0 R /F9 69 0 R >> endobj 77 0 obj << /Type /Page /Parent 53 0 R /Resources << /Font 80 0 R /ProcSet 2 0 R >> /Contents 78 0 R >> endobj 78 0 obj << /Length 79 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 17)Tj ET BT /F4 7.68 Tf 86.522 765.138 TD (\( $objref, "logfile" \))Tj ET BT /F3 10.08 Tf 105.722 746.897 TD 0.796 Tw (Having a reference to the object passed as the first parameter is vital, because it means)Tj ET BT 86.522 733.457 TD 1.708 Tw (that the method then has access to the object on which it's supposed to operate)Tj /F3 6.24 Tf 373.449 3.84 TD 0 Tw (12)Tj /F3 10.08 Tf 6.24 -3.84 TD 1.708 Tw (. Hence)Tj ET BT 86.522 720.256 TD 0 Tw (you'll find that most methods in Perl start with something equivalent to this:)Tj ET BT /F4 7.68 Tf 86.522 703.936 TD (package Bug;)Tj ET BT 86.522 684.736 TD (sub print_me)Tj ET BT 86.522 675.135 TD ({)Tj ET BT /F6 7.68 Tf 98.042 665.535 TD (my \($self\) = shift;)Tj ET BT /F5 7.68 Tf 98.042 655.935 TD (# The @_ array now stores the explicit argument list passed to &Bug::print_me)Tj ET BT 98.042 646.335 TD (# The rest of the &print_me method uses the data referred to by $self and)Tj ET BT 98.042 636.735 TD (# the explicit arguments \(still in @_\))Tj ET BT /F4 7.68 Tf 86.522 627.134 TD (})Tj ET BT /F3 10.08 Tf 86.522 608.894 TD (or, better still:)Tj ET BT /F4 7.68 Tf 86.522 592.574 TD (package Bug;)Tj ET BT 86.522 573.373 TD (sub print_me)Tj ET BT 86.522 563.773 TD ({)Tj ET BT /F6 7.68 Tf 98.042 554.173 TD (my \($self, @args\) = @_;)Tj ET BT /F5 7.68 Tf 98.042 544.572 TD (# The @args array now stores the explicit argument list passed to &Bug::print_me)Tj ET BT 98.042 534.972 TD (# The rest of the &print_me method uses the data referred to by $self and)Tj ET BT 98.042 525.372 TD (# the explicit arguments \(now in @args\))Tj ET BT /F4 7.68 Tf 86.522 515.772 TD (})Tj ET BT /F3 10.08 Tf 105.722 497.531 TD 0.111 Tw (This second version is better because it provides a lexically scoped copy of the argument)Tj ET BT 86.522 484.091 TD 1.609 Tw (list \()Tj /F4 10.08 Tf 20.913 0 TD 0 Tw (@args)Tj /F3 10.08 Tf 30.246 0 TD 1.609 Tw (\). Remember that the )Tj /F4 10.08 Tf 102.436 0 TD 0 Tw (@_)Tj /F3 10.08 Tf 12.098 0 TD 1.609 Tw ( array is "magical" in that changing any element of it)Tj ET BT 86.522 470.651 TD 2.434 Tw (actually changes the caller's version of the corresponding argument. Copying argument)Tj ET BT 86.522 457.45 TD 3.045 Tw (values to a lexical array like )Tj /F4 10.08 Tf 144.369 0 TD 0 Tw (@args)Tj /F3 10.08 Tf 30.246 0 TD 3.072 Tw ( prevents nasty surprises of this kind, as well as)Tj ET BT 86.522 444.01 TD 1.69 Tw (improving the internal documentation of the subroutine \(especially if a more meaningful)Tj ET BT 86.522 430.57 TD 0 Tw (name than )Tj /F4 10.08 Tf 49.737 0 TD (@args)Tj /F3 10.08 Tf 30.246 0 TD ( is chosen\).)Tj ET BT 105.722 417.13 TD (The only remaining question is: )Tj /F2 10.08 Tf 143.481 0 TD (how do we create the invoking object in the first place?)Tj ET BT /F2 15.36 Tf 86.522 388.329 TD (Rule 3: To create an object, bless a referent)Tj ET BT /F3 10.08 Tf 86.522 368.168 TD 0.837 Tw (Unlike other object-oriented languages, Perl doesn't require that an object be a special kind)Tj ET BT 86.522 354.968 TD 0.352 Tw (of record-like data structure. In fact, you can use )Tj /F2 10.08 Tf 221.301 0 TD 0 Tw (any)Tj /F3 10.08 Tf 15.12 0 TD 0.375 Tw ( existing type of Perl variable\321a scalar,)Tj ET BT 86.522 341.528 TD 0 Tw (an array, a hash, etc.\321as an object in Perl)Tj /F3 6.24 Tf 183.844 3.84 TD (13)Tj /F3 10.08 Tf 6.24 -3.84 TD (.)Tj ET BT 105.722 328.088 TD 0.506 Tw (Hence, the issue isn't so much how to )Tj /F2 10.08 Tf 173.604 0 TD 0 Tw (create)Tj /F3 10.08 Tf 23.704 0 TD 0.506 Tw ( the object \(you create them exactly like any)Tj ET BT 86.522 314.647 TD 1.608 Tw (other Perl variable\), but rather how to tell Perl that such an object )Tj /F2 10.08 Tf 314.167 0 TD 0 Tw (belongs)Tj /F3 10.08 Tf 30.433 0 TD 1.608 Tw ( to a particular)Tj ET BT 86.522 301.207 TD 1.559 Tw (class. That brings us to that one extra built-in Perl function you need to know about. It's)Tj ET BT 86.522 288.007 TD 0 Tw (called )Tj /F4 10.08 Tf 28.887 0 TD (bless)Tj /F3 10.08 Tf 30.246 0 TD (, and its only job is to mark a variable as belonging to a particular class.)Tj ET BT 86.522 233.525 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 235.685 138.243 0.48 re f BT /F3 5.76 Tf 86.522 218.885 TD (12)Tj /F3 9.6 Tf 5.76 -3.84 TD ( There are similar automatic features in all object-oriented languages. C++ member functions)Tj ET BT 93.242 204.005 TD (have a pointer called )Tj /F4 9.6 Tf 90.836 0 TD (this)Tj /F3 9.6 Tf 23.044 0 TD (, Java member functions have a reference called )Tj /F4 9.6 Tf 203.887 0 TD (this)Tj /F3 9.6 Tf 23.044 0 TD (, Smalltalk)Tj ET BT 93.242 193.204 TD (methods have the )Tj /F4 9.6 Tf 77.894 0 TD (self)Tj /F3 9.6 Tf 23.044 0 TD ( pseudo-object, and Python's methods \(like Perl's\) receive the invoking)Tj ET BT 93.242 182.644 TD (object as their first argument.)Tj ET BT /F3 5.76 Tf 86.522 168.244 TD (13)Tj /F3 9.6 Tf 5.76 -3.84 TD ( You can also bless other things, such as subroutines, regular expressions, and typeglobs.)Tj ET endstream endobj 79 0 obj 5071 endobj 80 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R /F6 46 0 R >> endobj 81 0 obj << /Type /Page /Parent 53 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F6 46 0 R >> /ProcSet 2 0 R >> /Contents 82 0 R >> endobj 82 0 obj << /Length 83 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 18)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD (The )Tj /F4 10.08 Tf 19.883 0 TD (bless)Tj /F3 10.08 Tf 30.246 0 TD 0.513 Tw ( function takes two arguments: a reference to the variable to be marked, and)Tj ET BT 86.522 748.817 TD 2.587 Tw (a string containing the name of the class. It then sets an internal flag on the variable,)Tj ET BT 86.522 735.617 TD 0 Tw (indicating that it now belongs to the class)Tj /F3 6.24 Tf 184.564 3.84 TD (14)Tj /F3 10.08 Tf 6.24 -3.84 TD (.)Tj ET BT 105.722 722.177 TD (For example, suppose that )Tj /F4 10.08 Tf 120.037 0 TD ($nextbug)Tj /F3 10.08 Tf 48.206 0 TD ( actually stores a reference to an anonymous hash:)Tj ET BT /F4 7.68 Tf 86.522 702.016 TD ($nextbug =)Tj 54.481 0 TD ({)Tj ET BT 155.644 692.416 TD (_id)Tj 32.881 0 TD (=>)Tj 13.68 0 TD ("00001",)Tj ET BT 155.644 682.816 TD (_type)Tj 32.881 0 TD (=>)Tj 13.68 0 TD ("fatal",)Tj ET BT 155.644 673.215 TD (_descr)Tj 32.881 0 TD (=>)Tj 13.68 0 TD ("application does not compile",)Tj ET BT 141.003 663.615 TD (};)Tj ET BT /F3 10.08 Tf 86.522 645.375 TD (To make turn that anonymous hash into an object of class Bug we write:)Tj ET BT /F4 7.68 Tf 86.522 629.054 TD (bless $nextbug, "Bug";)Tj ET BT /F3 10.08 Tf 105.722 610.814 TD 2.731 Tw (And, once again, that's it! The anonymous array referred to by )Tj /F4 10.08 Tf 309.777 0 TD 0 Tw ($nextbug)Tj /F3 10.08 Tf 48.393 0 TD 2.731 Tw ( is now)Tj ET BT 86.522 597.374 TD 0.946 Tw (marked as being an object of class Bug. Note that the variable )Tj /F4 10.08 Tf 286.864 0 TD 0 Tw ($nextbug)Tj /F3 10.08 Tf 48.183 0 TD 0.946 Tw ( itself hasn't been)Tj ET BT 86.522 584.173 TD 0.684 Tw (altered in any way \(i.e. we didn't bless the )Tj /F2 10.08 Tf 195.844 0 TD 0 Tw (reference)Tj /F3 10.08 Tf 36.049 0 TD 0.684 Tw (\); only the nameless hash it refers to has)Tj ET BT 86.522 570.733 TD 4.086 Tw (been marked \(i.e. we blessed the )Tj /F2 10.08 Tf 171.364 0 TD 0 Tw (referent)Tj /F3 10.08 Tf 31.378 0 TD 4.086 Tw (\). Figure 4 illustrates where the new class)Tj ET BT 86.522 557.293 TD 0 Tw (membership flag is set.)Tj ET BT /F1 7.68 Tf 207.485 242.886 TD (Figure 4: What changes when an object is blessed)Tj ET BT /F3 10.08 Tf 86.522 214.565 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 216.725 138.243 0.48 re f BT /F3 5.76 Tf 86.522 199.925 TD (14)Tj /F3 9.6 Tf 5.76 -3.84 TD 2000 ( Actually, the second argument is optional, and defaults to the name of the current package.)Tj ET BT 93.242 185.524 TD (However, although omitting the second argument may occasionally be convenient, it's )Tj /F2 9.6 Tf 369.369 0 TD (never)Tj /F3 9.6 Tf 21.347 0 TD ( a)Tj ET BT 93.242 174.964 TD (good idea. Hence it's better to think of both arguments as being \(morally\) required, even if)Tj ET BT 93.242 164.404 TD (\(legally\) they're not.)Tj ET 0.48 w 0.004 w 1 G 1 g 76.084 255.608 448.087 295.923 re b 0 w BT /F1 4.32 Tf 0 g 0 G 1.756 0 0 1.668 118.018 285.127 Tm (i. Before )Tj /F6 4.32 Tf 18.721 0 TD (bless\($nextbug,\323Bug\323\))Tj ET 0.48 w 0.85 G 0.85 g 117.123 313.927 131.523 128.883 re b 117.363 469.451 65.041 34.801 re f 1.2 w 0.75 G 117.483 469.571 m 182.044 469.571 l S 182.044 469.571 m 182.044 504.132 l S 0.9 G 117.483 504.132 m 182.044 504.132 l S 117.483 469.571 m 117.483 504.132 l S 0 w BT /F4 7.68 Tf 0 g 0 G 1.756 0 0 1.668 117.175 507.852 Tm ($nextbug)Tj ET 0.85 g 117.363 391.689 65.041 34.801 re f 1.2 w 0.75 G 117.483 392.049 m 182.044 392.049 l S 182.044 392.049 m 182.044 426.37 l S 0.9 G 117.483 426.37 m 182.044 426.37 l S 117.483 392.049 m 117.483 426.37 l S 0 w BT 0 g 0 G 1.756 0 0 1.668 137.827 405.609 Tm (_id)Tj ET 0.85 g 183.124 391.689 64.801 34.801 re f 1.2 w 0.75 G 183.244 392.049 m 247.806 392.049 l S 247.806 392.049 m 247.806 426.37 l S 0.9 G 183.244 426.37 m 247.806 426.37 l S 183.244 392.049 m 183.244 426.37 l S 0 w BT 0 g 0 G 1.756 0 0 1.668 187.139 405.609 Tm (\32200001\323)Tj ET 0.85 g 117.363 352.808 65.041 35.041 re f 1.2 w 0.75 G 117.483 353.168 m 182.044 353.168 l S 182.044 353.168 m 182.044 387.489 l S 0.9 G 117.483 387.489 m 182.044 387.489 l S 117.483 353.168 m 117.483 387.489 l S 0 w BT 0 g 0 G 1.756 0 0 1.668 129.398 366.968 Tm (_type)Tj ET 0.85 g 183.124 352.808 64.801 35.041 re f 1.2 w 0.75 G 183.244 353.168 m 247.806 353.168 l S 247.806 353.168 m 247.806 387.489 l S 0.9 G 183.244 387.489 m 247.806 387.489 l S 183.244 353.168 m 183.244 387.489 l S 0 w BT 0 g 0 G 1.756 0 0 1.668 187.139 366.968 Tm (\322fatal\323)Tj ET 0.85 g 117.363 314.167 65.041 34.801 re f 1.2 w 0.75 G 117.483 314.287 m 182.044 314.287 l S 182.044 314.287 m 182.044 348.608 l S 0.9 G 117.483 348.608 m 182.044 348.608 l S 117.483 314.287 m 117.483 348.608 l S 0 w BT 0 g 0 G 1.756 0 0 1.668 125.605 328.088 Tm (_descr)Tj ET 0.85 g 183.124 314.167 64.801 34.801 re f 1.2 w 0.75 G 183.244 314.287 m 247.806 314.287 l S 247.806 314.287 m 247.806 348.608 l S 0.9 G 183.244 348.608 m 247.806 348.608 l S 183.244 314.287 m 183.244 348.608 l S 0 w BT 0 g 0 G 1.756 0 0 1.668 187.139 328.088 Tm (\322app...)Tj ET 1.2 w 2 j 149.643 482.051 m 149.643 450.13 l S 0 j 0.48 w 2 j 149.763 443.29 m 146.403 450.49 l 149.763 450.49 l 153.124 450.49 l 149.763 443.29 l b* 0 j 0.004 w 149.523 491.769 m 152.437 491.769 154.802 489.566 154.802 486.851 c 154.802 484.136 152.437 481.933 149.523 481.933 c 146.61 481.933 144.245 484.136 144.245 486.851 c 144.245 489.566 146.61 491.769 149.523 491.769 c b 0 w BT /F1 4.32 Tf 1.756 0 0 1.668 338.869 285.127 Tm (ii. After )Tj /F6 4.32 Tf 17.513 0 TD (bless\($nextbug,\323Bug\323\))Tj ET 0.85 g 336.488 469.451 65.041 34.801 re f 1.2 w 0.75 G 336.848 469.571 m 401.169 469.571 l S 401.169 469.571 m 401.169 504.132 l S 0.9 G 336.848 504.132 m 401.169 504.132 l S 336.848 469.571 m 336.848 504.132 l S 0 w BT /F4 7.68 Tf 0 g 0 G 1.756 0 0 1.668 336.761 507.852 Tm ($nextbug)Tj ET 0.48 w 0.85 G 0.85 g 336.488 313.927 131.763 128.883 re b 0 w 336.488 391.689 65.041 34.801 re f 1.2 w 0.75 G 336.848 392.049 m 401.169 392.049 l S 401.169 392.049 m 401.169 426.37 l S 0.9 G 336.848 426.37 m 401.169 426.37 l S 336.848 392.049 m 336.848 426.37 l S 0 w BT 0 g 0 G 1.756 0 0 1.668 357.414 405.609 Tm (_id)Tj ET 0.85 g 402.249 391.689 65.041 34.801 re f 1.2 w 0.75 G 402.369 392.049 m 466.931 392.049 l S 466.931 392.049 m 466.931 426.37 l S 0.9 G 402.369 426.37 m 466.931 426.37 l S 402.369 392.049 m 402.369 426.37 l S 0 w BT 0 g 0 G 1.756 0 0 1.668 406.726 405.609 Tm (\32200001\323)Tj ET 0.85 g 336.488 352.808 65.041 35.041 re f 1.2 w 0.75 G 336.848 353.168 m 401.169 353.168 l S 401.169 353.168 m 401.169 387.489 l S 0.9 G 336.848 387.489 m 401.169 387.489 l S 336.848 353.168 m 336.848 387.489 l S 0 w BT 0 g 0 G 1.756 0 0 1.668 348.984 366.968 Tm (_type)Tj ET 0.85 g 402.249 352.808 65.041 35.041 re f 1.2 w 0.75 G 402.369 353.168 m 466.931 353.168 l S 466.931 353.168 m 466.931 387.489 l S 0.9 G 402.369 387.489 m 466.931 387.489 l S 402.369 353.168 m 402.369 387.489 l S 0 w BT 0 g 0 G 1.756 0 0 1.668 406.726 366.968 Tm (\322fatal\323)Tj ET 0.85 g 336.488 314.167 65.041 34.801 re f 1.2 w 0.75 G 336.848 314.287 m 401.169 314.287 l S 401.169 314.287 m 401.169 348.608 l S 0.9 G 336.848 348.608 m 401.169 348.608 l S 336.848 314.287 m 336.848 348.608 l S 0 w BT 0 g 0 G 1.756 0 0 1.668 345.191 328.088 Tm (_descr)Tj ET 0.85 g 402.249 314.167 65.041 34.801 re f 1.2 w 0.75 G 402.369 314.287 m 466.931 314.287 l S 466.931 314.287 m 466.931 348.608 l S 0.9 G 402.369 348.608 m 466.931 348.608 l S 402.369 314.287 m 402.369 348.608 l S 0 w BT 0 g 0 G 1.756 0 0 1.668 406.726 328.088 Tm (\322app...)Tj ET 0.8 g 429.61 428.65 36.001 11.52 re f 1.2 w 0.75 G 430.21 439.57 m 465.251 439.57 l S 430.21 439.57 m 430.21 429.25 l S 0.9 G 430.21 429.25 m 465.251 429.25 l S 465.251 439.57 m 465.251 429.25 l S 0.004 w 0 G 0 g 369.128 491.769 m 372.042 491.769 374.407 489.566 374.407 486.851 c 374.407 484.136 372.042 481.933 369.128 481.933 c 366.215 481.933 363.85 484.136 363.85 486.851 c 363.85 489.566 366.215 491.769 369.128 491.769 c b 1.2 w 2 j 369.248 482.051 m 369.248 450.13 l S 0 j 0.48 w 2 j 369.128 443.29 m 365.768 450.49 l 369.128 450.49 l 372.729 450.49 l 369.128 443.29 l b* 0 j 0.004 w 369.128 491.769 m 372.042 491.769 374.407 489.566 374.407 486.851 c 374.407 484.136 372.042 481.933 369.128 481.933 c 366.215 481.933 363.85 484.136 363.85 486.851 c 363.85 489.566 366.215 491.769 369.128 491.769 c b 0 w BT /F6 5.76 Tf 1.756 0 0 1.668 439.179 432.49 Tm (Bug)Tj ET endstream endobj 83 0 obj 8848 endobj 84 0 obj << /Type /Page /Parent 85 0 R /Resources << /Font 88 0 R /ProcSet 2 0 R >> /Contents 86 0 R >> endobj 85 0 obj << /Kids [ 84 0 R 89 0 R 93 0 R 96 0 R 99 0 R 103 0 R ] /Count 6 /Type /Pages /Parent 214 0 R >> endobj 86 0 obj << /Length 87 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 19)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 1.821 Tw (You can check that the blessing succeeded by applying the built-in )Tj /F4 10.08 Tf 318.967 0 TD (ref )Tj /F3 10.08 Tf 26.017 0 TD (function to)Tj ET BT /F4 10.08 Tf 86.522 748.817 TD 0 Tw ($nextbug)Tj /F3 10.08 Tf 48.241 0 TD 3.215 Tw (. Normally when )Tj /F4 10.08 Tf 87.968 0 TD 0 Tw (ref)Tj /F3 10.08 Tf 18.355 0 TD 3.215 Tw ( is applied to a reference, it returns the type of that)Tj ET BT 86.522 735.617 TD 0.354 Tw (reference. Hence, before )Tj /F4 10.08 Tf 111.099 0 TD 0 Tw ($nextbug)Tj /F3 10.08 Tf 48.265 0 TD 0.354 Tw ( was blessed, )Tj /F4 10.08 Tf 61.731 0 TD 0 Tw (ref\($nextbug\))Tj /F3 10.08 Tf 78.639 0 TD 0.354 Tw ( would have returned the)Tj ET BT 86.522 722.177 TD 0 Tw (string )Tj /F4 10.08 Tf 28.469 0 TD ('HASH')Tj /F3 10.08 Tf 36.295 0 TD (.)Tj ET BT 105.722 708.736 TD 0.26 Tw (Once an object is blessed, )Tj /F4 10.08 Tf 116.403 0 TD 0 Tw (ref)Tj /F3 10.08 Tf 18.147 0 TD 0.26 Tw ( returns the name of its class instead. So after the blessing,)Tj ET BT /F4 10.08 Tf 86.522 695.296 TD 0 Tw (ref\($nextbug\))Tj /F3 10.08 Tf 78.639 0 TD 0.686 Tw ( will return )Tj /F4 10.08 Tf 55.044 0 TD 0 Tw ('Bug')Tj /F3 10.08 Tf 30.246 0 TD 0.686 Tw (. Of course the object itself still )Tj /F2 10.08 Tf 143.367 0 TD 0 Tw (is)Tj /F3 10.08 Tf 6.723 0 TD 0.686 Tw ( a hash, but now it\325s a)Tj ET BT 86.522 681.856 TD 0 Tw (hash th 2000 at )Tj /F2 10.08 Tf 43.569 0 TD (belongs)Tj /F3 10.08 Tf 30.592 0 TD ( to the Bug class.)Tj ET BT /F2 10.08 Tf 86.522 641.775 TD 1.517 Tw (Perl classes use object methods to control access to encapsulated data. Typically such methods are)Tj ET BT 86.522 628.334 TD 1.945 Tw (named after the object attributes they provide access to. They usually take an optional argument)Tj ET BT 86.522 614.894 TD 2.189 Tw (through which new values may be assigned to a particular object attribute. But some attributes)Tj ET BT 86.522 601.694 TD 1.468 Tw (shouldn't be publicly writable and, unfortunately, Perl doesn't provide any built-in mechanism to)Tj ET BT 86.522 588.253 TD 0 Tw (enforce that. You have to resort to Psychology...)Tj ET BT /F2 15.36 Tf 86.522 559.453 TD (Catching attempts to change read-only attributes)Tj ET BT /F3 10.08 Tf 86.522 539.292 TD 0.42 Tw (Of course, because users of a class are often allowed to change some of an object's attributes)Tj ET BT 86.522 525.852 TD 0.584 Tw (by passing new values to the appropriate accessor methods, they may well expect to do the)Tj ET BT 86.522 512.412 TD 3.974 Tw (same with )Tj /F2 10.08 Tf 56.401 0 TD 0 Tw (all)Tj /F3 10.08 Tf 10.075 0 TD 3.974 Tw ( the object's attribute values. This is not always the case and such a)Tj ET BT 86.522 499.211 TD 0.546 Tw (misgeneralization could lead to subtle logical errors in the program, since accessor methods)Tj ET BT 86.522 485.771 TD 0 Tw (for "read-only" attributes often simply ignore any extra parameters they are given.)Tj ET BT 105.722 472.331 TD 2.103 Tw (There are several ways to address this potential source of errors. The most obvious)Tj ET BT 86.522 458.891 TD 0.36 Tw (solution is to resort to brute force, and simply kill any program that attempts to call a "read-)Tj ET BT 86.522 445.45 TD 0 Tw (only method" with arguments. For example:)Tj ET BT /F4 7.68 Tf 86.522 429.13 TD (package CD::Music;)Tj ET BT 86.522 419.53 TD (use strict;)Tj ET BT /F6 7.68 Tf 86.522 409.929 TD (use Carp;)Tj ET BT 86.522 394.569 TD (sub read_only)Tj ET BT 86.522 384.969 TD ({)Tj ET BT 106.922 375.369 TD (croak "Can't change value of read-only attribute " . \(caller 1\)[3])Tj ET BT 127.323 365.768 TD (if @_ > 1;)Tj ET BT 86.522 356.168 TD (})Tj ET BT /F5 7.68 Tf 86.522 335.048 TD (# read-only accessors)Tj ET BT /F4 7.68 Tf 86.522 325.447 TD (sub name)Tj 74.882 0 TD ({ )Tj /F6 7.68 Tf 9.218 0 TD (&read_only;)Tj /F4 7.68 Tf 50.551 0 TD ( $_[0]->{_name})Tj 96.715 0 TD (})Tj ET BT 86.522 315.847 TD (sub artist)Tj 74.882 0 TD ({ )Tj /F6 7.68 Tf 9.218 0 TD (&read_only;)Tj /F4 7.68 Tf 50.551 0 TD ( $_[0]->{_artist})Tj 96.715 0 TD (})Tj ET BT 86.522 306.247 TD (sub publisher)Tj 74.882 0 TD ({ )Tj /F6 7.68 Tf 9.218 0 TD (&read_only;)Tj /F4 7.68 Tf 50.551 0 TD ( $_[0]->{_publisher})Tj 96.715 0 TD (})Tj ET BT 86.522 296.647 TD (sub ISBN)Tj 74.882 0 TD ({ )Tj /F6 7.68 Tf 9.218 0 TD (&read_only;)Tj /F4 7.68 Tf 50.551 0 TD ( $_[0]->{_ISBN})Tj 96.715 0 TD (})Tj ET BT /F5 7.68 Tf 86.522 277.446 TD (# read-write accessors)Tj ET BT /F4 7.68 Tf 86.522 267.846 TD (sub last_played)Tj ET BT 86.522 258.246 TD ({)Tj ET BT 106.922 248.646 TD (my \($self, $when\) = @_;)Tj ET BT 106.922 239.045 TD ($self->{_played} = $when if @_ > 1;)Tj ET BT 106.922 229.445 TD ($self->{_played};)Tj ET BT 86.522 219.845 TD (})Tj ET BT 86.522 200.645 TD (sub rating)Tj ET BT 86.522 191.044 TD ({)Tj ET BT 106.922 181.444 TD (my \($self, $rating\) = @_;)Tj ET BT 106.922 171.844 TD ($self->{_rating} = $rating if @_ > 1;)Tj ET BT 106.922 162.244 TD ($self->{_rating};)Tj ET BT 86.522 152.643 TD (})Tj ET endstream endobj 87 0 obj 5033 endobj 88 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R /F6 46 0 R >> endobj 89 0 obj << /Type /Page /Parent 85 0 R /Resources << /Font 92 0 R /ProcSet 2 0 R >> /Contents 90 0 R >> endobj 90 0 obj << /Length 91 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 20)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 2.46 Tw (Here, each read-only access method calls the subroutine )Tj /F4 10.08 Tf 271.819 0 TD 0 Tw (CD::Music::read_only)Tj /F3 10.08 Tf 120.982 0 TD (,)Tj ET BT 86.522 748.817 TD 1.148 Tw (passing its original argument list \(by using the "old-style" call syntax\321a leading )Tj /F4 10.08 Tf 372.969 0 TD (&)Tj /F3 10.08 Tf 6.049 0 TD ( and no)Tj ET BT 86.522 735.617 TD 3.637 Tw (parentheses\). The )Tj /F4 10.08 Tf 88.322 0 TD 0 Tw (read_only)Tj /F3 10.08 Tf 54.442 0 TD 3.637 Tw ( subroutine checks for extra arguments, and throws an)Tj ET BT 86.522 722.177 TD 0.412 Tw (informative exception if it finds any. Note that there will always be at least one argument to)Tj ET BT 86.522 708.736 TD 0 Tw (any method, namely the object reference through which the method was originally called.)Tj ET BT 105.722 695.296 TD 1.806 Tw (Think of this technique as a form of Pavlovian conditioning for programmers: every)Tj ET BT 86.522 681.856 TD 2.619 Tw (time their code actually attempts to assign to a read-only attribute of your class, their)Tj ET BT 86.522 668.655 TD 0 Tw (program dies. Bad programmer!)Tj ET BT 105.722 655.215 TD 0.819 Tw (As enjoyable as it may be to mess with people's minds in this way, this approach does)Tj ET BT 86.522 641.775 TD 1.219 Tw (have a drawback; it imposes an extra cost on each attempt to access a read-only attribute.)Tj ET BT 86.522 628.334 TD 1.505 Tw (Moreover, it isn't proactive in preventing users from making this type of mistake; it only)Tj ET BT 86.522 614.894 TD 0 Tw (trains them not repeat it, after the fact.)Tj ET BT 105.722 601.694 TD 0.617 Tw (Besides, psychology has a much more subtle tool to offer us, in the form of a technique)Tj ET BT 86.522 588.253 TD 0 Tw (known as )Tj /F2 10.08 Tf 46.403 0 TD (affordances)Tj /F3 6.24 Tf 45.279 3.84 TD (15)Tj /F3 10.08 Tf 6.24 -3.84 TD 0.412 Tw (. Affordances are features of a user interface that make it physically or)Tj ET BT 86.522 574.813 TD 0.722 Tw (psychologically easier to do the right thing, than to do the wrong thing. For example, good)Tj ET BT 86.522 561.373 TD 0.377 Tw (architects don't put handles on unlatched doors that can only be pushed. Instead, they put a)Tj ET BT 86.522 547.933 TD 0.405 Tw (flat plate where the handle would otherwise be. Just about the only thing you can do with a)Tj ET BT 86.522 534.732 TD 1.338 Tw (plate is to push on it, so the physical structure of the plate helps you to operate the door)Tj ET BT 86.522 521.292 TD 0.132 Tw (correctly. In contrast, if you approach a door with a fixed handle, your natural tendency is to)Tj ET BT 86.522 507.852 TD 0 Tw (pull on it, which usually proves to be the right course of action.)Tj ET BT 105.722 494.411 TD 4.268 Tw (Affordances work well in programming too. In this case, we want to make it)Tj ET BT 86.522 480.971 TD 0 Tw (psychologically awkward to attempt to change read-only object data. The best way to do that)Tj ET BT 86.522 467.771 TD (is to avoid raising the expectation that it is even possible in the first place.)Tj ET BT 105.722 454.33 TD 2.08 Tw (For instance, we could change the names of the read-only methods to ")Tj /F4 10.08 Tf 339.805 0 TD 0 Tw (get_\311)Tj /F3 10.08 Tf 30.246 0 TD 2.08 Tw (" and)Tj ET BT 86.522 440.89 TD 2.522 Tw (separate the two functions of each read-write accessor into distinct ")Tj /F4 10.08 Tf 327.841 0 TD 0 Tw (get\311)Tj /F3 10.08 Tf 24.196 0 TD 2.522 Tw (" and ")Tj /F4 10.08 Tf 34.63 0 TD 0 Tw (set\311)Tj /F3 10.08 Tf 24.196 0 TD (")Tj ET BT 86.522 427.45 TD (methods:)Tj ET BT /F4 7.68 Tf 86.522 411.129 TD (package CD::Music;)Tj ET BT 86.522 401.529 TD (use strict;)Tj ET BT /F9 7.68 Tf 86.522 380.409 TD (# read accessors)Tj ET BT /F6 7.68 Tf 86.522 370.808 TD (sub get_name)Tj 88.562 0 TD ({ $_[0]->{_name})Tj 122.403 0 TD (})Tj ET BT 86.522 361.208 TD (sub get_artist)Tj 88.562 0 TD ({ $_[0]->{_artist})Tj 122.403 0 TD (})Tj ET BT 86.522 351.608 TD (sub get_publisher)Tj 88.562 0 TD ({ $_[0]->{_publisher})Tj 122.403 0 TD (})Tj ET BT 86.522 342.008 TD (sub get_ISBN)Tj 88.562 0 TD ({ $_[0]->{_ISBN})Tj 122.403 0 TD (})Tj ET BT 86.522 332.408 TD (sub get_last_played{ $_[0]->{_publisher})Tj 210.965 0 TD (})Tj ET BT 86.522 322.807 TD (sub get_rating)Tj 88.562 0 TD ({ $_[0]- 2000 >{_ISBN})Tj 122.403 0 TD (})Tj ET BT /F9 7.68 Tf 86.522 303.607 TD (# write accessors)Tj ET BT /F6 7.68 Tf 86.522 294.007 TD (sub set_last_played{ $_[0]->{_played} = $_[1])Tj 210.965 0 TD (})Tj ET BT 86.522 284.407 TD (sub set_rating)Tj 88.562 0 TD ({ $_[0]->{_rating} = $_[1])Tj 122.403 0 TD (})Tj ET BT /F3 10.08 Tf 105.722 266.166 TD 1.445 Tw (Now the user of our class has no incentive to try to pass arguments to the read-only)Tj ET BT 86.522 252.966 TD 2.109 Tw (methods, because it doesn't make sense to do so. And because there are no )Tj /F4 10.08 Tf 363.635 0 TD 0 Tw (set_name)Tj /F3 10.08 Tf 48.393 0 TD (,)Tj ET BT /F4 10.08 Tf 86.522 239.525 TD (set_artist)Tj /F3 10.08 Tf 60.491 0 TD (, etc., it's obvious that these attributes can't be changed.)Tj ET BT 86.522 214.565 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 216.725 138.243 0.48 re f BT /F3 5.76 Tf 86.522 199.925 TD (15)Tj /F3 9.6 Tf 5.76 -3.84 TD ( The concept of affordances comes from the work of user-interface guru Donald Norman. His)Tj ET BT 93.242 185.524 TD (landmark book )Tj /F2 9.6 Tf 67.384 0 TD (The Psychology of Everyday Things)Tj /F3 9.6 Tf 138.833 0 TD ( \(later renamed )Tj /F2 9.6 Tf 67.23 0 TD (The Design of Everyday Things)Tj /F3 9.6 Tf 122.679 0 TD (\))Tj ET BT 93.242 174.964 TD (is essential reading for anyone who creates interfaces of any kind, including interfaces to)Tj ET BT 93.242 164.404 TD (classes.)Tj ET endstream endobj 91 0 obj 5785 endobj 92 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F6 46 0 R /F9 69 0 R >> endobj 93 0 obj << /Type /Page /Parent 85 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 94 0 R >> endobj 94 0 obj << /Length 95 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 21)Tj ET BT /F2 10.08 Tf 86.522 762.257 TD 0.87 Tw (Most real object-oriented Perl classes use objects based on blessed hashes. But one of Perl's defining)Tj ET BT 86.522 748.817 TD 0.423 Tw (characteristics is flexibility, and in keeping with its unofficial motto\321"There's more than one way to)Tj ET BT 86.522 735.617 TD 0 Tw (do it"\321you can just as easily use any other Perl data type as the basis for object. There are at least six)Tj ET BT 86.522 722.177 TD 1.81 Tw (alternative ways of implementing a class: basing it on arrays, pseudo-hashes, scalars, anonymous)Tj ET BT 86.522 708.736 TD 2.479 Tw (subroutines, precompiled regular expressions, and typeglobs. But before considering some of the)Tj ET BT 86.522 695.296 TD 0 Tw (alternatives, it's important to explain why hashes aren't always the right choice...)Tj ET BT /F2 15.36 Tf 86.522 666.495 TD (What's wrong with a hash?)Tj ET BT /F3 10.08 Tf 86.522 646.335 TD 2.07 Tw (Hashes are well suited to act as the basis for objects. They can store multiple values of)Tj ET BT 86.522 633.134 TD 2.272 Tw (differing types, they give each value a descriptive label, they can be expanded to store)Tj ET BT 86.522 619.694 TD 0.518 Tw (additional items at need)Tj /F3 6.24 Tf 109.203 3.84 TD 0 Tw (16)Tj /F3 10.08 Tf 6.24 -3.84 TD 0.518 Tw (, and they can be made hierarchical \(by storing references to other)Tj ET BT 86.522 606.254 TD 0 Tw (anonymous hashes in an entry\).)Tj ET BT 105.722 592.814 TD 2.293 Tw (Hashes are usually a good choice for implementing class objects, but they're by no)Tj ET BT 86.522 579.373 TD 1.553 Tw (means perfect. For a start, they are a comparatively expensive way to store collections of)Tj ET BT 86.522 566.173 TD 0.851 Tw (data, occupying more space than an equivalent array, and providing slower access as well.)Tj ET BT 86.522 552.733 TD 0.31 Tw (Often those small overheads are insignificant, but occasionally \(such as when large numbers)Tj ET BT 86.522 539.292 TD 1.146 Tw (of objects are involved, or when a much simpler data structure would do just as well\) the)Tj ET BT 86.522 525.852 TD 0 Tw (difference in performance, or in style, matters.)Tj ET BT 105.722 512.412 TD 2.408 Tw (A more serious problem with hashes has to do with an otherwise very convenient)Tj ET BT 86.522 499.211 TD 1.311 Tw (feature they possess, called )Tj /F2 10.08 Tf 128.681 0 TD 0 Tw (autovivification)Tj /F3 10.08 Tf 64.01 0 TD 1.311 Tw (. Autovivification is the name for what happens)Tj ET BT 86.522 485.771 TD 0 Tw (when you attempt to access a non-existent entry of a hash. Rather than complaining, Perl just)Tj ET BT 86.522 472.331 TD 0.464 Tw (automatically creates the missing hash entry for the key you specified, giving the new entry)Tj ET BT 86.522 458.891 TD 0 Tw (the value )Tj /F4 10.08 Tf 43.599 0 TD (undef)Tj /F3 10.08 Tf 30.246 0 TD (.)Tj ET BT 105.722 445.45 TD 1.495 Tw (And that's the problem. If you have a reference to hash-based object \(say, )Tj /F4 10.08 Tf 347.478 0 TD 0 Tw ($objref)Tj /F3 10.08 Tf 42.344 0 TD (\),)Tj ET BT 86.522 432.25 TD (and you're using an attribute such as )Tj /F4 10.08 Tf 166.773 0 TD ($objref->{_weirdness_factor})Tj /F3 10.08 Tf 169.386 0 TD (, then chances are)Tj ET BT 86.522 418.81 TD 6.254 Tw (that somewhere in the heat of coding, you'll accidentally write something like)Tj ET BT /F4 10.08 Tf 86.522 405.369 TD 0 Tw ($objref->{_wierdness_factor}++)Tj /F3 10.08 Tf 181.444 0 TD (.)Tj ET BT 105.722 391.929 TD 0.985 Tw (The first time that code is executed, Perl won't complain about the spelling mistake or)Tj ET BT 86.522 378.489 TD 2.127 Tw (the fact that it causes your code to access a non-existent entry. Instead it will try to be)Tj ET BT 86.522 365.288 TD 0.778 Tw (helpful: autovivifying the new hash entry, then silently converting its )Tj /F4 10.08 Tf 319.207 0 TD 0 Tw (undef)Tj /F3 10.08 Tf 30.246 0 TD 0.778 Tw ( value to zero,)Tj ET BT 86.522 351.848 TD 1.479 Tw (and finally incrementing it to 1. Thereafter you'll spend about a week trying to work out)Tj ET BT 86.522 338.408 TD 1.684 Tw (why that increment operator seems to increase the real world's weirdness factor, but not)Tj ET BT /F4 10.08 Tf 86.522 324.967 TD 0 Tw ($objref)Tj /F3 10.08 Tf 42.344 0 TD ('s.)Tj ET BT /F2 10.08 Tf 86.522 284.887 TD 0.463 Tw (One of those six alternate ways of implementing a class makes use of a feature only recently added to)Tj ET BT 86.522 271.446 TD 0.256 Tw (Perl\320the pseudo-hash. The standard documentation on the feature is still rather terse, so the following)Tj ET BT 86.522 258.006 TD 0 Tw (explanation may be useful...)Tj ET BT /F3 10.08 Tf 86.522 182.884 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 185.044 138.243 0.48 re f BT /F3 5.76 Tf 86.522 168.244 TD (16)Tj /F3 9.6 Tf 5.76 -3.84 TD ( ...for example, if the class is later inherited by another...)Tj ET endstream endobj 95 0 obj 4933 endobj 96 0 obj << /Type /Page /Parent 85 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 97 0 R >> endobj 97 0 obj << /Length 98 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 22)Tj ET BT /F2 19.2 Tf 86.522 757.457 TD (Blessing a pseudo-hash)Tj ET BT /F3 10.08 Tf 86.522 731.537 TD 0.879 Tw (Neither a hash nor an array seems to provide the ideal basis for a Perl object. Hash entries)Tj ET BT 86.522 718.096 TD 0.668 Tw (are accessed by comprehensible keys, but hashes are big and slow. Arrays are compact and)Tj ET BT 86.522 704.896 TD 0.467 Tw (fast, but the use of integer indices can lead to obscure code. And both approaches are prone)Tj ET BT 86.522 691.456 TD 2.207 Tw (to autovivification-induced bugs. Ideally, we'd like the best of both worlds\321fast access,)Tj ET BT 86.522 678.016 TD 0 Tw (compact storage, readable tags, and no autovivification.)Tj ET BT /F2 15.36 Tf 86.522 649.215 TD (A pseudo-what???)Tj ET BT /F3 10.08 Tf 86.522 629.054 TD 4.322 Tw (As of Perl release 5.005, that wish has been granted, in the form of a new \(and)Tj ET BT 86.522 615.614 TD 0 Tw (experimental)Tj /F3 6.24 Tf 58.801 3.84 TD (17)Tj /F3 10.08 Tf 6.24 -3.84 TD 1.755 Tw (\) data structure called a )Tj /F2 10.08 Tf 115.934 0 TD 0 Tw (pseudo-hash)Tj /F3 10.08 Tf 49.84 0 TD 1.755 Tw (, which is really just an array reference)Tj ET BT 86.522 602.414 TD 2000 0 Tw (that\325s pretending to be a hash reference.)Tj ET BT 105.722 588.973 TD 3.181 Tw (To maintain the pretense, the array that's actually being referred to must have a)Tj ET BT 86.522 575.533 TD 1.137 Tw (reference to a real hash as its first element. That real hash is used to map key names onto)Tj ET BT 86.522 562.093 TD 0.266 Tw (array indices. In other words, a pseudo-hash has a structure like that shown in Figure 5, and)Tj ET BT 86.522 548.653 TD 0 Tw (is declared like this:)Tj ET BT /F4 7.68 Tf 86.522 532.332 TD (my $pseudo_hash = [ {a=>1,b=>2,c=>3}, "val a", "val b", "val c" ];)Tj ET BT /F3 10.08 Tf 105.722 514.332 TD 0.081 Tw (Such an array can still be accessed as an array, by specifying a numerical index in square)Tj ET BT 86.522 500.891 TD 0 Tw (brackets:)Tj ET BT /F4 7.68 Tf 86.522 484.571 TD ($pseudo_hash->[1];)Tj ET BT /F1 7.68 Tf 223.565 220.325 TD (Figure 5: The structure of a pseudo-hash)Tj ET BT /F3 10.08 Tf 86.522 193.444 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 195.604 138.243 0.48 re f BT /F3 5.76 Tf 86.522 178.804 TD (17)Tj /F3 9.6 Tf 5.76 -3.84 TD ( Hence, if you're currently using a later version of Perl, you may need to check in the )Tj /F2 9.6 Tf 361.04 0 TD (perlref)Tj ET BT /F3 9.6 Tf 93.242 164.404 TD (documentation to see whether the details presented in this section are still correct.)Tj ET 0 w 0.002 w 1 G 1 g 101.763 237.606 376.327 233.043 re b 0 G 0 g 185.044 423.609 m 187.031 423.609 188.643 422.05 188.643 420.13 c 188.643 418.209 187.031 416.65 185.044 416.65 c 183.058 416.65 181.445 418.209 181.445 420.13 c 181.445 422.05 183.058 423.609 185.044 423.609 c b 0.85 g 166.564 417.13 44.161 24.961 re f 0.96 w 0.75 G 166.804 417.13 m 210.485 417.13 l S 210.485 417.13 m 210.485 441.85 l S 0.9 G 166.804 441.85 m 210.485 441.85 l S 166.804 417.13 m 166.804 441.85 l S 0 w BT /F4 7.68 Tf 0 g 0 G 1.189 0 0 1.19 166.239 445.93 Tm ($pseudo_hash)Tj ET 0.002 w 188.764 433.209 m 190.685 433.209 192.243 431.597 192.243 429.61 c 192.243 427.623 190.685 426.011 188.764 426.011 c 186.844 426.011 185.285 427.623 185.285 429.61 c 185.285 431.597 186.844 433.209 188.764 433.209 c b 0 w 0.85 g 235.925 367.448 44.161 24.961 re f 0.96 w 0.75 G 236.165 367.448 m 279.846 367.448 l S 279.846 367.448 m 279.846 392.169 l S 0.9 G 236.165 392.169 m 279.846 392.169 l S 236.165 367.448 m 236.165 392.169 l S 0 w 280.566 367.448 43.921 24.961 re f 0.96 w 0.75 G 280.806 367.448 m 324.487 367.448 l S 324.487 367.448 m 324.487 392.169 l S 0.9 G 280.806 392.169 m 324.487 392.169 l S 280.806 367.448 m 280.806 392.169 l S 0 w BT 0 g 0 G 1.189 0 0 1.19 283.575 377.529 Tm (\322val a\323)Tj ET 0.85 g 325.207 367.448 43.921 24.961 re f 0.96 w 0.75 G 325.207 367.448 m 368.888 367.448 l S 368.888 367.448 m 368.888 392.169 l S 0.9 G 325.207 392.169 m 368.888 392.169 l S 325.207 367.448 m 325.207 392.169 l S 0 w BT 0 g 0 G 1.189 0 0 1.19 328.112 377.529 Tm (\322val b\323)Tj ET 0.85 g 369.608 367.448 43.921 24.961 re f 0.96 w 0.75 G 369.848 367.448 m 413.529 367.448 l S 413.529 367.448 m 413.529 392.169 l S 0.9 G 369.848 392.169 m 413.529 392.169 l S 369.848 367.448 m 369.848 392.169 l S 0 w BT 0 g 0 G 1.189 0 0 1.19 372.648 377.529 Tm (\322val c\323)Tj ET 0.002 w 258.726 383.768 m 260.713 383.768 262.325 382.155 262.325 380.169 c 262.325 378.182 260.713 376.57 258.726 376.57 c 256.739 376.57 255.127 378.182 255.127 380.169 c 255.127 382.155 256.739 383.768 258.726 383.768 c b 0.24 w 0.85 G 0.85 g 315.247 260.046 88.802 80.402 re b 0 w 315.367 315.607 43.921 24.721 re f 0.96 w 0.75 G 315.607 315.607 m 359.288 315.607 l S 359.288 315.607 m 359.288 340.088 l S 0.9 G 315.607 340.088 m 359.288 340.088 l S 315.607 315.607 m 315.607 340.088 l S 0 w BT 0 g 0 G 1.189 0 0 1.19 329.539 325.447 Tm (\322a\323)Tj ET 0.85 g 360.008 315.607 43.921 24.721 re f 0.96 w 0.75 G 360.248 315.607 m 403.929 315.607 l S 403.929 315.607 m 403.929 340.088 l S 0.9 G 360.248 340.088 m 403.929 340.088 l S 360.248 315.607 m 360.248 340.088 l S 0 w BT 0 g 0 G 1.189 0 0 1.19 379.5 325.447 Tm (1)Tj ET 0.85 g 315.367 287.767 43.921 24.961 re f 0.96 w 0.75 G 315.607 288.007 m 359.288 288.007 l S 359.288 288.007 m 359.288 312.487 l S 0.9 G 315.607 312.487 m 359.288 312.487 l S 315.607 288.007 m 315.607 312.487 l S 0 w BT 0 g 0 G 1.189 0 0 1.19 329.539 297.847 Tm (\322c\323)Tj ET 0.85 g 360.008 287.767 43.921 24.961 re f 0.96 w 0.75 G 360.248 288.007 m 403.929 288.007 l S 403.929 288.007 m 403.929 312.487 l S 0.9 G 360.248 312.487 m 403.929 312.487 l S 360.248 288.007 m 360.248 312.487 l S 0 w BT 0 g 0 G 1.189 0 0 1.19 379.5 297.847 Tm (3)Tj ET 0.85 g 315.367 260.166 43.921 24.721 re f 0.96 w 0.75 G 315.607 260.166 m 359.288 260.166 l S 359.288 260.166 m 359.288 284.647 l S 0.9 G 315.607 284.647 m 359.288 284.647 l S 315.607 260.166 m 315.607 284.647 l S 0 w BT 0 g 0 G 1.189 0 0 1.19 329.539 270.006 Tm (\322b\323)Tj ET 0.85 g 360.008 260.166 43.921 24.721 re f 0.96 w 0.75 G 360.248 260.166 m 403.929 260.166 l S 403.929 260.166 m 403.929 284.647 l S 0.9 G 360.248 284.647 m 403.929 284.647 l S 360.248 260.166 m 360.248 284.647 l S 0 w BT 0 g 0 G 1.189 0 0 1.19 379.5 270.006 Tm (2)Tj ET 0.96 w 2 j 258.726 376.809 m 258.726 297.847 l 310.087 297.847 l S 0 j 0.24 w 2 j 315.247 297.967 m 310.207 295.567 l 310.207 297.967 l 310.207 300.367 l 315.247 297.967 l b* 0 j 0.96 w 2 j 188.884 426.01 m 188.884 379.929 l 230.885 379.929 l S 0 j 0.24 w 2 j 236.045 379.809 m 231.005 377.649 l 231.005 379.809 l 231.005 382.209 l 236.045 379.809 l b* 0 j endstream endobj 98 0 obj 7051 endobj 99 0 obj << /Type /Page /Parent 85 0 R /Resources << /Font 102 0 R /ProcSet 2 0 R >> /Contents 100 0 R >> endobj 100 0 obj << /Length 101 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 23)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD 1.057 Tw (But it can also be accessed as if it were a hash, by using one of the specified keys in curly)Tj ET BT 86.522 748.817 TD 0 Tw (braces:)Tj ET BT /F4 7.68 Tf 86.522 732.497 TD ($pseudo_hash->{"a"};)Tj ET BT /F3 10.08 Tf 105.722 714.496 TD 1.135 Tw (Whenever Perl encounters an array reference that is being used as a hash reference in)Tj ET BT 86.522 701.056 TD 0 Tw (this way, it translates the expression to something equivalent to the following:)Tj ET BT /F4 7.68 Tf 86.522 684.736 TD ($pseudo_hash->[$pseudo_hash->[0]->{"a"}];)Tj ET BT /F3 10.08 Tf 86.522 666.495 TD 2.438 Tw (In other words, it first retrieves the hash reference stored in element zero of the array)Tj ET BT 86.522 653.055 TD (\()Tj /F4 10.08 Tf 3.357 0 TD 0 Tw ($pseudo_hash->[0])Tj /F3 10.08 Tf 102.682 0 TD 1.394 Tw (\). It then uses that hash to look up the index corresponding to the)Tj ET BT 86.522 639.615 TD 1.175 Tw (specified key \()Tj /F4 10.08 Tf 66.632 0 TD 0 Tw ($pseudo_hash->[0])Tj /F6 10.08 Tf 102.835 0 TD (->{"a"})Tj /F3 10.08 Tf 42.218 0 TD 1.175 Tw (\), and finally it uses that index to access the)Tj ET BT 86.522 626.414 TD 46.52 Tw (appropriate element in the original array)Tj ET BT 86.522 612.974 TD (\()Tj /F6 10.08 Tf 3.357 0 TD 0 Tw ($pseudo_hash->[)Tj /F4 10.08 Tf 90.583 0 TD ($pseudo_hash->[0]->{"a"})Tj /F6 10.08 Tf 144.865 0 TD (])Tj /F3 10.08 Tf 6.049 0 TD (\).)Tj ET BT /F2 15.36 Tf 86.522 578.413 TD (Limitations of a pseudo-hash)Tj ET BT /F3 10.08 Tf 86.522 558.253 TD (If the first element of a pseudo-hash array isn't a hash reference:)Tj ET BT /F4 7.68 Tf 86.522 543.372 TD (my $pseudo_hash = [ "not a hash ref", "val a", "val b", "val c" ];)Tj ET BT /F5 7.68 Tf 86.522 528.012 TD (# and later\311)Tj ET BT /F4 7.68 Tf 86.522 512.652 TD ($pseudo_hash->{"a"};)Tj ET BT /F3 10.08 Tf 86.522 494.891 TD 0.988 Tw (then the program throws an exception with the message: )Tj /F7 10.08 Tf 264.432 0 TD (can't coerce array into hash)Tj /F3 10.08 Tf 137.577 0 TD 0 Tw (. If)Tj ET BT 86.522 481.451 TD 1.2 Tw (the first element )Tj /F2 10.08 Tf 78.449 0 TD 0 Tw ( 2000 is)Tj /F3 10.08 Tf 6.723 0 TD 1.2 Tw ( a hash reference, but the corresponding hash doesn't contain the given)Tj ET BT 86.522 468.251 TD 0 Tw (key:)Tj ET BT /F4 7.68 Tf 86.522 453.37 TD (my $pseudo_hash = [ {a=>1,b=>2,c=>3}, "val a", "val b", "val c" ];)Tj ET BT /F5 7.68 Tf 86.522 438.01 TD (# and later\311)Tj ET BT /F4 7.68 Tf 86.522 422.65 TD ($pseudo_hash->{"z"};)Tj ET BT /F3 10.08 Tf 86.522 404.889 TD 1.652 Tw (then the program throws an exception with the message: )Tj /F7 10.08 Tf 270.41 0 TD (no such array field)Tj /F3 6.24 Tf 94.399 3.84 TD 0 Tw (18)Tj /F3 10.08 Tf 6.24 -3.84 TD 1.652 Tw (. In other)Tj ET BT 86.522 391.449 TD 1.301 Tw (words, unlike a real hash, pseudo-hash entries aren't autovivifying; they don't spring into)Tj ET BT 86.522 378.009 TD 0 Tw (existence the first time you attempt to access them.)Tj ET BT 105.722 364.568 TD (You )Tj /F2 10.08 Tf 21.005 0 TD (can)Tj /F3 10.08 Tf 14.185 0 TD 0.181 Tw ( add new entries to a pseudo-hash, but it's a two-step procedure. First you add a)Tj ET BT 86.522 351.368 TD 0 Tw (new key-to-index mapping:)Tj ET BT /F4 7.68 Tf 86.522 335.048 TD ($pseudo_hash->[0]->{"z"} = @{$pseudo_hash};)Tj ET BT /F3 10.08 Tf 86.522 316.807 TD 0.915 Tw (which maps the key )Tj /F4 10.08 Tf 95.582 0 TD 0 Tw ("z")Tj /F3 10.08 Tf 18.147 0 TD 0.915 Tw ( on to the first unused index in the pseudo-hash array. After that,)Tj ET BT 86.522 303.367 TD 0 Tw (you can access the new entry directly, to assign it a value:)Tj ET BT /F4 7.68 Tf 86.522 287.047 TD ($pseudo_hash->{"z"} = "value z";)Tj ET BT /F3 10.08 Tf 105.722 268.806 TD 1.707 Tw (Of course, if your stomach is strong enough, you can do those two steps in a single)Tj ET BT 86.522 255.366 TD 0 Tw (statement:)Tj ET BT /F4 7.68 Tf 86.522 239.045 TD ($pseudo_hash->[$pseudo_hash->[0]{"z"} = @{$pseudo_hash}] = "value z";)Tj ET BT /F3 10.08 Tf 86.522 182.884 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 185.044 138.243 0.48 re f BT /F3 5.76 Tf 86.522 168.244 TD (18)Tj /F3 9.6 Tf 5.76 -3.84 TD ( The reason it refers to a "field" instead of an "entry" will become clear in a moment.)Tj ET endstream endobj 101 0 obj 4320 endobj 102 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R /F6 46 0 R /F7 57 0 R >> endobj 103 0 obj << /Type /Page /Parent 85 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 104 0 R >> endobj 104 0 obj << /Length 105 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 24)Tj ET BT /F2 15.36 Tf 86.522 760.337 TD (Advantages of a pseudo-hash)Tj ET BT /F3 10.08 Tf 86.522 740.177 TD 1.896 Tw (The awkwardness of having to "manually" add new keys to a pseudo-hash is actually a)Tj ET BT 86.522 726.737 TD 1.625 Tw (useful property, because it helps to prevent hard-to-detect bugs that can easily find their)Tj ET BT 86.522 713.536 TD 2.407 Tw (way into classes built on ordinary hashes. Consider the )Tj /F4 10.08 Tf 269.526 0 TD 0 Tw (Transceiver)Tj /F3 10.08 Tf 66.54 0 TD 2.407 Tw ( class defined in)Tj ET BT 86.522 700.096 TD 2.692 Tw (Figure 6. The class provides sentinel methods \()Tj /F4 10.08 Tf 227.366 0 TD 0 Tw (start_transmit)Tj /F3 10.08 Tf 84.688 0 TD 2.72 Tw ( and )Tj /F4 10.08 Tf 27.545 0 TD 0 Tw (end_transmit)Tj /F3 10.08 Tf 72.589 0 TD (,)Tj ET BT /F4 10.08 Tf 86.522 686.656 TD (start_receive)Tj /F3 10.08 Tf 78.639 0 TD 2.019 Tw ( and )Tj /F4 10.08 Tf 26.142 0 TD 0 Tw (end_receive)Tj /F3 10.08 Tf 66.54 0 TD 2.019 Tw (\) that may be used to ensure that transmission and)Tj ET BT 86.522 673.215 TD 0 Tw (reception do not overlap.)Tj ET BT /F4 7.68 Tf 86.522 631.694 TD (package Transceiver;)Tj ET 73.202 648.975 2.16 2.16 re f 73.202 648.975 2.16 2.16 re f 75.362 648.975 436.81 2.16 re f 512.172 648.975 2.16 2.16 re f 512.172 648.975 2.16 2.16 re f 73.202 629.774 2.16 19.2 re f 512.172 629.774 2.16 19.2 re f BT 86.522 622.094 TD ($VERSION = 1.00;)Tj ET 73.202 620.174 2.16 9.6 re f 512.172 620.174 2.16 9.6 re f BT 86.522 612.494 TD (use strict;)Tj ET 73.202 610.574 2.16 9.6 re f 512.172 610.574 2.16 9.6 re f 73.202 600.974 2.16 9.6 re f 512.172 600.974 2.16 9.6 re f BT 86.522 593.294 TD (sub new)Tj ET 73.202 591.374 2.16 9.6 re f 512.172 591.374 2.16 9.6 re f BT 86.522 583.693 TD ({)Tj ET 73.202 581.773 2.16 9.6 re f 512.172 581.773 2.16 9.6 re f BT 98.042 574.093 TD (my $class = ref\($_[0]\)||$_[0];)Tj ET 73.202 572.173 2.16 9.6 re f 512.172 572.173 2.16 9.6 re f BT 98.042 564.493 TD (my $self = { receive=>0, transmit=>0 };)Tj ET 73.202 562.573 2.16 9.6 re f 512.172 562.573 2.16 9.6 re f BT 98.042 554.893 TD (bless $self, $class;)Tj ET 73.202 552.973 2.16 9.6 re f 512.172 552.973 2.16 9.6 re f BT 86.522 545.292 TD (})Tj ET 73.202 543.372 2.16 9.6 re f 512.172 543.372 2.16 9.6 re f 73.202 533.772 2.16 9.6 re f 512.172 533.772 2.16 9.6 re f BT 86.522 526.092 TD (sub start_transmit)Tj ET 73.202 524.172 2.16 9.6 re f 512.172 524.172 2.16 9.6 re f BT 86.522 516.492 TD ({)Tj ET 73.202 514.572 2.16 9.6 re f 512.172 514.572 2.16 9.6 re f BT 98.042 506.892 TD (my \($self\) = @_;)Tj ET 73.202 504.972 2.16 9.6 re f 512.172 504.972 2.16 9.6 re f BT 98.042 497.291 TD (++$self->{transmit} unless $self->{recieve};)Tj ET 73.202 495.371 2.16 9.6 re f 512.172 495.371 2.16 9.6 re f BT 98.042 487.691 TD (return $self->{transmit};)Tj ET 73.202 485.771 2.16 9.6 re f 512.172 485.771 2.16 9.6 re f BT 86.522 478.091 TD (})Tj ET 73.202 476.171 2.16 9.6 re f 512.172 476.171 2.16 9.6 re f 73.202 466.571 2.16 9.6 re f 512.172 466.571 2.16 9.6 re f BT 86.522 458.891 TD (sub end_transmit)Tj ET 73.202 456.97 2.16 9.6 re f 512.172 456.97 2.16 9.6 re f BT 86.522 449.29 TD ({)Tj ET 73.202 447.37 2.16 9.6 re f 512.172 447.37 2.16 9.6 re f BT 98.042 439.69 TD (my \($self\) = @_;)Tj ET 73.202 437.77 2.16 9.6 re f 512.172 437.77 2.16 9.6 re f BT 98.042 430.09 TD (--$self->{transmit};)Tj ET 73.202 428.17 2.16 9.6 re f 512.172 428.17 2.16 9.6 re f BT 86.522 420.49 TD (})Tj ET 73.202 418.57 2.16 9.6 re f 512.172 418.57 2.16 9.6 re f 73.202 408.969 2.16 9.6 re f 512.172 408.969 2.16 9.6 re f BT 86.522 401.289 TD (sub start_receive)Tj ET 73.202 399.369 2.16 9.6 re f 512.172 399.369 2.16 9.6 re f BT 86.522 391.689 TD ({)Tj ET 73.202 389.769 2.16 9.6 re f 512.172 389.769 2.16 9.6 re f BT 98.042 382.089 TD (my \($self\) = @_;)Tj ET 73.202 380.169 2.16 9.6 re f 512.172 380.169 2.16 9.6 re f BT 98.042 372.489 TD (++$self->{receive} unless $self->{transmit};)Tj ET 73.202 370.568 2.16 9.6 re f 512.172 370.568 2.16 9.6 re f BT 98.042 362.888 TD (return $self->{receive};)Tj ET 73.202 360.968 2.16 9.6 re f 512.172 360.968 2.16 9.6 re f BT 86.522 353.288 TD (})Tj ET 73.202 351.368 2.16 9.6 re f 512.172 351.368 2.16 9.6 re f 73.202 341.768 2.16 9.6 re f 512.172 341.768 2.16 9.6 re f BT 86.522 334.088 TD (sub end_receive)Tj ET 73.202 332.168 2.16 9.6 re f 512.172 332.168 2.16 9.6 re f BT 86.522 324.487 TD ({)Tj ET 73.202 322.567 2.16 9.6 re f 512.172 322.567 2.16 9.6 re f BT 98.042 314.887 TD (my \($self\) = @_;)Tj ET 73.202 312.967 2.16 9.6 re f 512.172 312.967 2.16 9.6 re f BT 98.042 305.287 TD (--$self->{receive};)Tj ET 73.202 303.367 2.16 9.6 re f 512.172 303.367 2.16 9.6 re f BT 86.522 295.687 TD (})Tj ET 73.202 282.006 2.16 2.16 re f 73.202 282.006 2.16 2.16 re f 75.362 282.006 436.81 2.16 re f 512.172 282.006 2.16 2.16 re f 512.172 282.006 2.16 2.16 re f 73.202 284.167 2.16 19.2 re f 512.172 284.167 2.16 19.2 re f BT /F1 7.68 Tf 211.565 264.726 TD (Figure 6: A simple hash-based transceiver class)Tj ET BT /F3 10.08 Tf 105.722 240.966 TD 3.142 Tw (The problem is that the )Tj /F4 10.08 Tf 121.635 0 TD 0 Tw (Transceiver::transmit)Tj /F3 10.08 Tf 127.032 0 TD 3.142 Tw ( method has accidentally been)Tj ET BT 86.522 227.525 TD 6.989 Tw (coded to check the status of the hash entry )Tj /F4 10.08 Tf 254.429 0 TD 0 Tw ($self->{recieve})Tj /F3 10.08 Tf 96.611 0 TD 6.989 Tw ( \(instead of)Tj ET BT /F4 10.08 Tf 86.522 214.085 TD 0 Tw ($self->{receive})Tj /F3 10.08 Tf 96.786 0 TD 0.5 Tw (\). The first time it does so, this non-existent entry will produce a value)Tj ET BT 86.522 200.645 2000 TD 0 Tw (of )Tj /F4 10.08 Tf 11.661 0 TD (undef)Tj /F3 10.08 Tf 30.246 0 TD (. Hence the )Tj /F4 10.08 Tf 53.292 0 TD (unless)Tj /F3 10.08 Tf 36.295 0 TD ( test will )Tj /F2 10.08 Tf 41.551 0 TD (never)Tj /F3 10.08 Tf 22.415 0 TD 0.281 Tw ( fail and transmission will always be allowed, no)Tj ET BT 86.522 187.204 TD 0 Tw (matter what the current state of reception is.)Tj ET BT 105.722 174.004 TD (If we had implemented )Tj /F4 10.08 Tf 106.655 0 TD (Transceiver)Tj /F3 10.08 Tf 66.389 0 TD ( objects as pseudo-hashes instead:)Tj ET endstream endobj 105 0 obj 6233 endobj 106 0 obj << /Type /Page /Parent 107 0 R /Resources << /Font 110 0 R /ProcSet 2 0 R >> /Contents 108 0 R >> endobj 107 0 obj << /Kids [ 106 0 R 111 0 R 114 0 R 117 0 R 120 0 R 123 0 R ] /Count 6 /Type /Pages /Parent 214 0 R >> endobj 108 0 obj << /Length 109 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 25)Tj ET BT /F4 7.68 Tf 86.522 765.138 TD (package Transceiver;)Tj ET BT 86.522 755.537 TD (use strict;)Tj ET BT 86.522 736.337 TD (sub Transceiver::new)Tj ET BT 86.522 726.737 TD ({)Tj ET BT 98.042 717.136 TD (my $class = ref\($_[0]\)||$_[0];)Tj ET BT /F6 7.68 Tf 98.042 707.536 TD (my $self = [ {receive=>1, transmit=>2} ];)Tj ET BT 98.042 697.936 TD ($self->{transmit} = 0;)Tj ET BT 98.042 688.336 TD ($self->{receive} = 0;)Tj ET BT /F4 7.68 Tf 98.042 678.736 TD (bless $self, $class;)Tj ET BT 86.522 669.135 TD (})Tj ET BT /F5 7.68 Tf 86.522 649.935 TD (# etc. as before)Tj ET BT /F3 10.08 Tf 86.522 631.694 TD 2.906 Tw (then the first time )Tj /F4 10.08 Tf 93.122 0 TD 0 Tw (Transceiver::transmit)Tj /F3 10.08 Tf 127.032 0 TD 2.906 Tw ( was called, we would get an exception)Tj ET BT 86.522 618.254 TD 0 Tw (indicating: )Tj /F7 10.08 Tf 50.14 0 TD (No such array field\311)Tj /F3 10.08 Tf 100.832 0 TD (, which would eventually lead us to the misspelled key.)Tj ET BT /F2 10.08 Tf 86.522 564.733 TD 0.431 Tw (Another unusual, but interesting choice of datatype for building classes is the scalar variable. Scalars)Tj ET BT 86.522 551.293 TD 0.519 Tw (can only hold a single value, which would seem like a serious limitation for an object. But sometimes)Tj ET BT 86.522 538.092 TD 0 Tw (less is more....)Tj ET BT /F2 19.2 Tf 86.522 500.651 TD (Blessing a scalar)Tj ET BT /F3 10.08 Tf 86.522 474.731 TD 0.482 Tw (You almost never see a Perl class that is based on a blessed scalar value. Although there are)Tj ET BT 86.522 461.291 TD 2.479 Tw (several good reasons for that, a scalar can occasionally prove to be the best choice for)Tj ET BT 86.522 447.85 TD 0 Tw (implementing an object.)Tj ET BT 105.722 434.41 TD 0.813 Tw (The main reason that a scalar so rarely forms the basis of a Perl class, is that classes so)Tj ET BT 86.522 421.21 TD 0.146 Tw (rarely store only a single piece of information. One of the main reasons for building a class is)Tj ET BT 86.522 407.769 TD 0.449 Tw (to bind together a set of related attribute values and then provide controlled access to them.)Tj ET BT 86.522 394.329 TD 1.686 Tw (If the data is really only a single datum, then building an object-oriented shell around it)Tj ET BT 86.522 380.889 TD 0 Tw (usually seems like serious overkill.)Tj ET BT 105.722 367.448 TD 1.743 Tw (In Perl we can't even use the excuse that data ought to be encapsulated, since Perl's)Tj ET BT 86.522 354.248 TD 2.453 Tw (encapsulation is almost entirely voluntary. If we have blessed a scalar and are passing)Tj ET BT 86.522 340.808 TD 1.545 Tw (around a reference to it \(as )Tj /F4 10.08 Tf 130.713 0 TD 0 Tw ($sref)Tj /F3 10.08 Tf 30.246 0 TD 1.545 Tw (\), there's absolutely nothing to prevent any part of the)Tj ET BT 86.522 327.367 TD 1.763 Tw (program completely ignoring the lovely controlled object-oriented interface we provided,)Tj ET BT 86.522 313.927 TD 0 Tw (and just manipulating the underlying scalar directly:)Tj ET BT /F4 7.68 Tf 86.522 297.607 TD ($$sref = undef;)Tj /F5 7.68 Tf 80.642 0 TD (# Bwah-ha-ha-ha!!!)Tj ET BT /F3 10.08 Tf 105.722 279.366 TD 0.249 Tw (What's more, in those few cases where an object )Tj /F2 10.08 Tf 218.405 0 TD 0 Tw (does)Tj /F3 10.08 Tf 17.36 0 TD 0.249 Tw ( only possess a single value, it's just)Tj ET BT 86.522 266.166 TD 1.462 Tw (as easy to go with a more familiar hash-based implementation, using only a single entry.)Tj ET BT 86.522 252.726 TD 0.967 Tw (Allocating an entire hash to store a single value may be considerably less efficient \(both in)Tj ET BT 86.522 239.285 TD 0 Tw (terms of memory usage and access speed\), but it has the advantages of:)Tj ET BT 95.642 222.965 TD (\245)Tj /F2 10.08 Tf 10.08 0 TD 4.667 Tw (Familiarity to the implementer.)Tj /F3 10.08 Tf 140.883 0 TD ( The selection of a hash as the underlying object)Tj ET BT 105.722 209.525 TD 0 Tw (representation is often the automatic choice, and frequently not even a conscious one.)Tj ET BT 95.642 190.564 TD (\245)Tj /F2 10.08 Tf 10.08 0 TD 0.721 Tw (Familiarity to others.)Tj /F3 10.08 Tf 87.389 0 TD ( A better reason for choosing a hash when a scalar would suffice, is)Tj ET BT 105.722 177.124 TD 0.666 Tw (that the hash-based implementation is also likely to be far more familiar to anyone else)Tj ET BT 105.722 163.684 TD 0 Tw (attempting to understand or modify the code.)Tj ET endstream endobj 109 0 obj 4399 endobj 110 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R /F6 46 0 R /F7 57 0 R >> endobj 111 0 obj << /Type /Page /Parent 107 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 112 0 R >> endobj 112 0 obj << /Length 113 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 26)Tj ET BT /F3 10.08 Tf 95.642 762.257 TD (\245)Tj /F2 10.08 Tf 10.08 0 TD (Readability.)Tj /F3 10.08 Tf 48.619 0 TD 0.511 Tw ( If nothing else, storing the single value as a hash entry means that the value)Tj ET BT 105.722 748.817 TD 0 Tw (has to be given a meaningful key, which ought to improve the code's readability.)Tj ET BT 95.642 729.857 TD (\245)Tj /F2 10.08 Tf 10.08 0 TD 4.796 Tw (Extensibility in subclasses.)Tj /F3 10.08 Tf 119.097 0 TD ( After all, a class can never be sure that an internal)Tj ET BT 105.722 716.416 TD 0 Tw (representation sufficient to its own needs will serve derived classes equally well.)Tj ET BT /F2 15.36 Tf 86.522 684.736 TD (An object-oriented password)Tj ET BT /F3 10.08 Tf 86.522 664.575 TD 3.16 Tw (Despite all those factors against the practice, there's nothing immoral or illegal about)Tj ET BT 86.522 651.135 TD 1.517 Tw (blessing a scalar. In most cases, it's even slimming)Tj /F3 6.24 Tf 234.485 3.84 TD 0 Tw (19)Tj /F3 10.08 Tf 6.24 -3.84 TD 1.493 Tw (. For example, Figure 7 illustrates the)Tj ET BT 86.522 637.695 TD 0 Tw (simple case of a class that implements an encrypted password as a single scalar string.)Tj ET BT /F4 7.68 Tf 86.522 596.414 TD (package Password;)Tj ET 73.202 613.694 2.16 2.16 re f 73.202 613.694 2.16 2.16 re f 75.362 613.694 436.81 2.16 re f 512.172 613.694 2.16 2.16 re f 512.172 613.694 2.16 2.16 re f 73.202 594.494 2.16 19.2 re f 512.172 594.494 2.16 19.2 re f BT 86.522 586.813 TD ($VERSION = 1.00;)Tj ET 73.202 584.893 2.16 9.6 re f 512.172 584.893 2.16 9.6 re f BT 86.522 577.213 TD (use strict;)Tj ET 73.202 569.533 2.16 15.36 re f 512.172 569.533 2.16 15.36 re f BT 86.522 556.093 TD (my @salt = \("A".."Z","a".."z","0".."9","/","."\);)Tj ET 73.202 554.173 2.16 15.36 re f 512.172 554.173 2.16 15.36 re f 73.202 544.572 2.16 9.6 re f 512.172 544.572 2.16 9.6 re f BT 86.522 536.892 TD (sub new)Tj ET 73.202 534.972 2.16 9.6 re f 512.172 534.972 2.16 9.6 re f BT 86.522 527.292 TD ({)Tj ET 73.202 525.372 2.16 9.6 re f 512.172 525.372 2.16 9.6 re f BT 106.922 517.692 TD (my \($class, $cleartext\) = @_;)Tj ET 73.202 515.772 2.16 9.6 re f 512.172 515.772 2.16 9.6 re f BT 106.922 508.092 TD (my $salt = $salt[rand @salt].$salt[rand @salt];)Tj ET 73.202 506.172 2.16 9.6 re f 512.172 506.172 2.16 9.6 re f BT 106.922 498.491 TD (my $pw = crypt\($cleartext,$salt\);)Tj ET 73.202 496.571 2.16 9.6 re f 512.172 496.571 2.16 9.6 re f BT 106.922 488.891 TD (return bless \\$pw, ref\($class\)||$class;)Tj ET 73.202 486.97 2000 1 2.16 9.6 re f 512.172 486.971 2.16 9.6 re f BT 86.522 479.291 TD (})Tj ET 73.202 471.611 2.16 15.36 re f 512.172 471.611 2.16 15.36 re f BT 86.522 458.17 TD (sub verify)Tj ET 73.202 456.25 2.16 15.36 re f 512.172 456.25 2.16 15.36 re f BT 86.522 448.57 TD ({)Tj ET 73.202 446.65 2.16 9.6 re f 512.172 446.65 2.16 9.6 re f BT 106.922 438.97 TD (my \($self, $candidate\) = @_;)Tj ET 73.202 437.05 2.16 9.6 re f 512.172 437.05 2.16 9.6 re f BT 106.922 429.37 TD (my $salt = substr\($$self,0,2\);)Tj ET 73.202 427.45 2.16 9.6 re f 512.172 427.45 2.16 9.6 re f BT 106.922 419.77 TD (return crypt\($candidate,$salt\) eq $$self;)Tj ET 73.202 417.85 2.16 9.6 re f 512.172 417.85 2.16 9.6 re f BT 86.522 410.169 TD (})Tj ET 73.202 396.489 2.16 2.16 re f 73.202 396.489 2.16 2.16 re f 75.362 396.489 436.81 2.16 re f 512.172 396.489 2.16 2.16 re f 512.172 396.489 2.16 2.16 re f 73.202 398.649 2.16 19.2 re f 512.172 398.649 2.16 19.2 re f BT /F1 7.68 Tf 225.245 379.209 TD (Figure 7: A scalar-based password class)Tj ET BT /F3 10.08 Tf 105.722 355.208 TD 0.405 Tw (The only tricky part about using scalars as objects is how to create one in the first place.)Tj ET BT 86.522 341.768 TD 3.097 Tw (Unlike arrays and hashes, scalars are not provided with a special syntax for creating)Tj ET BT 86.522 328.328 TD 1.057 Tw (anonymous instances. There's no syntax corresponding to )Tj /F4 10.08 Tf 267.562 0 TD ([)Tj /F3 10.08 Tf 6.049 0 TD (\311)Tj /F4 10.08 Tf 10.08 0 TD (])Tj /F3 10.08 Tf 6.049 0 TD ( \(which creates anonymous)Tj ET BT 86.522 314.887 TD 1.186 Tw (arrays\), or to )Tj /F4 10.08 Tf 63.192 0 TD ({)Tj /F3 10.08 Tf 6.049 0 TD (\311)Tj /F4 10.08 Tf 10.08 0 TD (})Tj /F3 10.08 Tf 5.88 0 TD ( \(which creates anonymous hashes\). Instead, we have to hijack a lexical)Tj ET BT 86.522 301.687 TD 0 Tw (variable \(e.g. )Tj /F4 10.08 Tf 59.761 0 TD ($pw)Tj /F3 10.08 Tf 18 0 TD ( in the Password constructor\).)Tj ET BT 105.722 288.247 TD 1.735 Tw (The constructor takes a text string as its argument, randomly creates a "salt" value)Tj /F3 6.24 Tf 386.649 3.84 TD 0 Tw (20)Tj /F3 10.08 Tf 6.24 -3.84 TD (,)Tj ET BT 86.522 274.806 TD 0.71 Tw (encrypts the string with a call to the in-built )Tj /F4 10.08 Tf 204.034 0 TD 0 Tw (crypt)Tj /F3 10.08 Tf 30.246 0 TD 0.71 Tw ( function, assigns the encrypted version)Tj ET BT 86.522 261.366 TD 0 Tw (to a lexical variable )Tj /F4 10.08 Tf 88.286 0 TD ($pw)Tj /F3 10.08 Tf 18.147 0 TD (, and then blesses )Tj /F4 10.08 Tf 80.291 0 TD ($pw)Tj /F3 10.08 Tf 18 0 TD ( into the class.)Tj ET BT 86.522 222.965 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 225.125 138.243 0.48 re f BT /F3 5.76 Tf 86.522 208.325 TD (19)Tj /F3 9.6 Tf 5.76 -3.84 TD ( "Reads faster, less memory!")Tj ET BT /F3 5.76 Tf 86.522 189.604 TD (20)Tj /F3 9.6 Tf 5.76 -3.84 TD ( The )Tj /F4 9.6 Tf 20.869 0 TD (crypt)Tj /F3 9.6 Tf 28.805 0 TD ( function implements a family of related one-way encryption schemes. The actual)Tj ET BT 93.242 174.964 TD (scheme )Tj /F4 9.6 Tf 33.99 0 TD (crypt)Tj /F3 9.6 Tf 28.805 0 TD ( uses is determined by a two-character "salt" string that is passed as its second)Tj ET BT 93.242 164.404 TD (argument.)Tj ET endstream endobj 113 0 obj 5802 endobj 114 0 obj << /Type /Page /Parent 107 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R >> /ProcSet 2 0 R >> /Contents 115 0 R >> endobj 115 0 obj << /Length 116 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 27)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 0.162 Tw (The important point to understand is that, even though )Tj /F4 10.08 Tf 250.486 0 TD 0 Tw ($pw)Tj /F3 10.08 Tf 18.147 0 TD 0.162 Tw ( is a lexical, it does not cease)Tj ET BT 86.522 748.817 TD 0.645 Tw (to exist at the end of the call to )Tj /F4 10.08 Tf 143.978 0 TD 0 Tw (Password::new)Tj /F3 10.08 Tf 78.639 0 TD 0.645 Tw (. That's because )Tj /F4 10.08 Tf 74.03 0 TD 0 Tw (bless)Tj /F3 10.08 Tf 30.246 0 TD 0.645 Tw ( returns a reference)Tj ET BT 86.522 735.617 TD 0 Tw (to )Tj /F4 10.08 Tf 11.311 0 TD ($pw)Tj /F3 10.08 Tf 17.97 0 TD ( and that reference is then returned as the result of )Tj /F4 10.08 Tf 226.849 0 TD (new)Tj /F3 10.08 Tf 18.147 0 TD (.)Tj ET BT 105.722 722.177 TD (Assuming that the reference is immediately assigned to a variable in some outer scope:)Tj ET BT /F4 7.68 Tf 86.522 705.856 TD (my $password = Password->new\("fermat"\);)Tj ET BT /F3 10.08 Tf 86.522 687.616 TD 0.841 Tw (then the number of "live" references to the scalar remains greater than zero, and the lexical)Tj ET BT 86.522 674.175 TD 0 Tw (scalar escapes destruction at the end of the scope in which it was declared.)Tj ET BT 105.722 660.735 TD 1.898 Tw (The )Tj /F4 10.08 Tf 21.29 0 TD 0 Tw (verify)Tj /F3 10.08 Tf 36.295 0 TD 1.898 Tw ( method is equally straightforward. It encrypts the candidate string and)Tj ET BT 86.522 647.535 TD 1.392 Tw (compares the result to the password string \(i.e. to the invoking object itself\). This process)Tj ET BT 86.522 634.095 TD 0.656 Tw (takes advantage of the fact that the first two letters of a )Tj /F4 10.08 Tf 254.525 0 TD 0 Tw (crypt)Tj /F3 10.08 Tf 30.121 0 TD 0.656 Tw ('ed string are identical to the)Tj ET BT 86.522 620.654 TD 0 Tw ("salt" with which the original call to )Tj /F4 10.08 Tf 161.653 0 TD (crypt)Tj /F3 10.08 Tf 30.246 0 TD ( was seasoned.)Tj ET BT 105.722 607.214 TD 0.726 Tw (Note that accessing the object's data is slightly different when the object is a scalar. We)Tj ET BT 86.522 593.774 TD 1.129 Tw (can't use the arrow notation to access an entry or an element \(as we do with references to)Tj ET BT 86.522 580.573 TD 1.615 Tw (hashes or arrays\). With a scalar-based object, we need to explicitly dereference the scalar)Tj ET BT 86.522 567.133 TD 0.235 Tw (reference. Thus the single value stored in the object referred to by )Tj /F4 10.08 Tf 296.887 0 TD 0 Tw ($self)Tj /F3 10.08 Tf 30.246 0 TD (, is always accessed)Tj ET BT 86.522 553.693 TD (as )Tj /F4 10.08 Tf 11.832 0 TD ($$self)Tj /F3 10.08 Tf 36.169 0 TD (.)Tj ET BT 105.722 540.252 TD (The class could be used like so:)Tj ET BT /F4 7.68 Tf 86.522 523.932 TD (use Password;)Tj ET BT 86.522 504.732 TD (print "Enter password: ";)Tj ET BT 86.522 495.131 TD (my $password = Password->new\(scalar <>\);)Tj ET BT /F5 7.68 Tf 86.522 475.931 TD (# and later\311)Tj ET BT /F4 7.68 Tf 86.522 456.73 TD (while \(<>\))Tj ET BT 86.522 447.13 TD ({)Tj ET BT 98.042 437.53 TD (last if $password->verify\($_\);)Tj ET BT 98.042 427.93 TD (print "Sorry. Try again: ";)Tj ET BT 86.522 418.33 TD (})Tj ET BT /F3 10.08 Tf 105.722 400.089 TD 0.251 Tw (It could reasonably be argued that the use of object orientation in this implementation is)Tj ET BT 86.522 386.889 TD 1.603 Tw (needlessly ostentatious. However, good software engineering practice would suggest that)Tj ET BT 86.522 373.449 TD 0.542 Tw (the mechanics of password creation and verification should be encapsulated in subroutines.)Tj ET BT 86.522 360.008 TD 0.422 Tw (Suppose, for example, that we later decide that the )Tj /F4 10.08 Tf 231.879 0 TD 0 Tw (crypt)Tj /F3 10.08 Tf 30.246 0 TD 0.422 Tw ( algorithm is insufficiently secure,)Tj ET BT 86.522 346.568 TD 1.404 Tw (and that MD5 or PGP or SHA must be used instead? Clearly, we don't want raw calls to)Tj ET BT /F4 10.08 Tf 86.522 333.128 TD 0 Tw (crypt)Tj /F3 10.08 Tf 30.246 0 TD ( spread throughout the code, to be hunted down and changed one at a time.)Tj ET BT /F2 10.08 Tf 86.522 286.807 TD 2.193 Tw (Class inheritance can be very complicated in some object-oriented languages, but Perl strips the)Tj ET BT 86.522 273.366 TD 0 Tw (concept back to a surprisingly simple idea: that inheritance tells an object where to look next...)Tj ET BT /F2 19.2 Tf 86.522 235.925 TD (How Perl handles inheritance)Tj ET BT /F3 10.08 Tf 86.522 210.005 TD 1.932 Tw (Perl's approach to inheritance is typically low-key and uncomplicated. Packages that are)Tj ET BT 86.522 196.565 TD 1.571 Tw (acting as classes simply announce their "allegiance" to some other class, and dynamically)Tj ET BT 86.522 183.124 TD 0.149 Tw (inherit all its methods. Perl also provides some standard methods th 2000 at all classes inherit, and)Tj ET BT 86.522 169.924 TD 0.896 Tw (a small dose of syntactic sugar to make rewriting inherited methods easier. Let's start with)Tj ET BT 86.522 156.484 TD 0 Tw (the pledge of allegiance\311)Tj ET endstream endobj 116 0 obj 4944 endobj 117 0 obj << /Type /Page /Parent 107 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R >> /ProcSet 2 0 R >> /Contents 118 0 R >> endobj 118 0 obj << /Length 119 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 28)Tj ET BT /F2 15.36 Tf 86.522 760.337 TD (The )Tj /F5 15.36 Tf 26.881 0 TD (@ISA)Tj /F2 15.36 Tf 36.871 0 TD ( array)Tj ET BT /F3 10.08 Tf 86.522 740.177 TD 0.747 Tw (A class informs Perl that it wishes to inherit from another class by adding the name of that)Tj ET BT 86.522 726.737 TD 0 Tw (other class to its )Tj /F4 10.08 Tf 74.171 0 TD (@ISA)Tj /F3 10.08 Tf 24.196 0 TD 0.1 Tw ( package variable. For example, the class PerlGuru could specify that it)Tj ET BT 86.522 713.536 TD 0 Tw (wishes to inherit from class PerlHacker as follows:)Tj ET BT /F4 7.68 Tf 86.522 697.216 TD (package PerlGuru;)Tj ET BT 86.522 687.616 TD (@ISA = \( "PerlHacker" \);)Tj ET BT /F3 10.08 Tf 105.722 669.375 TD 0.277 Tw (And that's it. From that point on, whenever Perl needs to determine if PerlGuru has any)Tj ET BT 86.522 655.935 TD 2.541 Tw (inherited methods, it checks the contents of the array )Tj /F4 10.08 Tf 261.366 0 TD 0 Tw (@PerlGuru::ISA)Tj /F3 10.08 Tf 84.688 0 TD 2.557 Tw (. Any package)Tj ET BT 86.522 642.495 TD 0.568 Tw (whose name appears in that array is considered to be a parent class of PerlGuru. Of course,)Tj ET BT 86.522 629.054 TD 0 Tw (since it's an array, we can have many class names in )Tj /F4 10.08 Tf 234.485 0 TD (@PerlGuru::ISA)Tj /F3 10.08 Tf 84.688 0 TD (, allowing the class to)Tj ET BT 86.522 615.854 TD (inherit methods from more than one parent:)Tj ET BT /F4 7.68 Tf 86.522 599.534 TD (package PerlGuru;)Tj ET BT 86.522 589.934 TD (@ISA = qw\( PerlHacker LanguageMaestro Educator PunMeister \);)Tj ET BT /F3 10.08 Tf 105.722 571.693 TD (And, of course, if those four parent classes also inherited from other classes:)Tj ET BT /F4 7.68 Tf 86.522 555.373 TD (package PerlHacker;)Tj ET BT 86.522 545.772 TD (@ISA = qw\( Programmer Obfuscator \);)Tj ET BT 86.522 526.572 TD (package PunMeister;)Tj ET BT 86.522 516.972 TD (@ISA = qw\( Writer Humorist OneSickPuppy \);)Tj ET BT /F3 10.08 Tf 86.522 498.731 TD 1.338 Tw (then PerlGuru would also inherit methods from those "grandparents". All this inheritance)Tj ET BT 86.522 485.291 TD 0 Tw (creates the hierarchy shown in Figure 8.)Tj ET BT /F1 7.68 Tf 220.445 242.406 TD (Figure 8: PerlGuru's inheritance hierarchy)Tj ET BT /F2 15.36 Tf 86.522 203.045 TD (What inheritance means in Perl)Tj ET BT /F3 10.08 Tf 86.522 182.884 TD 1 Tw (Inheritance in Perl is a much more casual affair than in other object-oriented languages. In)Tj ET BT 86.522 169.684 TD 1.956 Tw (essence, inheritance means nothing more than: )Tj /F2 10.08 Tf 222.291 0 TD (if you can't find the method requested in an)Tj ET BT 86.522 156.244 TD 0 Tw (object's blessed class, look for it in the classes that blessed class inherits from)Tj /F3 10.08 Tf 308.746 0 TD (.)Tj ET 0.48 w 0.004 w 1 G 1 g 89.764 255.608 413.286 221.041 re b 2.4 w q 135.603 454.33 m 128.883 454.33 l 126.003 453.61 l 124.803 453.13 l 123.123 452.65 l 121.923 451.93 l 120.723 451.45 l 120.243 450.73 l 119.523 450.25 l 118.563 449.77 l 117.843 449.05 l 117.363 448.57 l 116.643 447.85 l 116.163 447.37 l 115.683 446.89 l 114.963 446.17 l 114.483 444.97 l 113.763 444.49 l 113.283 443.29 l 112.803 442.09 l 112.083 441.13 l 111.603 439.45 l 111.123 437.05 l 111.123 429.61 l 111.603 429.61 l 111.603 427.21 l 112.083 427.21 l 112.083 425.53 l 112.803 425.53 l 112.803 424.33 l 113.283 424.33 l 113.283 423.37 l 113.763 423.37 l 113.763 422.17 l 114.483 422.17 l 114.483 421.45 l 114.963 421.45 l 114.963 420.49 l 115.683 420.49 l 115.683 419.77 l 116.163 419.77 l 116.163 419.29 l 116.643 419.29 l 116.643 418.57 l 117.363 418.57 l 117.363 418.09 l 117.843 418.09 l 117.843 417.61 l 118.563 417.61 l 118.563 416.89 l 119.523 416.89 l 119.523 416.41 l 120.243 416.41 l 120.243 415.69 l 120.723 415.69 l 120.723 415.21 l 121.923 415.21 l 121.923 414.729 l 123.123 414.729 l 123.123 414.009 l 124.803 414.009 l 124.803 413.529 l 126.003 413.529 l 126.003 413.049 l 128.883 413.049 l 128.883 412.329 l 135.603 412.329 l 135.603 413.049 l 138.483 413.529 l 139.683 414.009 l 141.363 414.729 l 142.563 415.21 l 143.763 415.69 l 144.243 416.41 l 144.963 416.89 l 145.923 417.61 l 146.643 418.09 l 147.123 418.57 l 147.843 419.29 l 148.323 419.77 l 148.803 420.49 l 149.523 421.45 l 150.003 422.17 l 150.723 423.37 l 151.203 424.33 l 151.683 425.53 l 152.403 427.21 l 152.884 429.61 l 153.604 437.05 l 152.884 437.05 l 152.884 439.45 l 152.403 439.45 l 152.403 441.13 l 151.683 441.13 l 151.683 442.09 l 151.203 442.09 l 151.203 443.29 l 150.723 443.29 l 150.723 444.49 l 150.003 444.49 l 150.003 444.97 l 149.523 444.97 l 149.523 446.17 l 148.803 446.17 l 148.803 446.89 l 148.323 446.89 l 148.323 447.37 l 147.843 447.37 l 147.843 447.85 l 147.123 447.85 l 147.123 448.57 l 146.643 448.57 l 146.643 449.05 l 145.923 449.05 l 145.923 449.77 l 144.963 449.77 l 144.963 450.25 l 144.243 450.25 l 144.243 450.73 l 143.763 450.73 l 143.763 451.45 l 142.563 451.45 l 142.563 451.93 l 141.363 451.93 l 141.363 452.65 l 139.683 452.65 l 139.683 453.13 l 138.483 453.13 l 138.483 453.61 l 135.603 453.61 l 135.603 454.33 l W n 0.65 g 89.762 434.65 m 131.043 476.171 l 133.443 476.171 l 133.443 473.771 l 92.162 432.25 l 89.762 432.25 l f 0.662 g 91.442 432.97 m 132.723 474.251 l 135.123 474.251 l 135.123 471.851 l 93.842 430.57 l 91.442 430.57 l f 0.674 g 92.642 431.77 m 133.923 473.291 l 136.323 473.291 l 136.323 470.891 l 95.042 429.37 l 92.642 429.37 l f 0.685 g 93.842 430.81 m 135.123 472.091 l 137.523 472.091 l 137.523 469.691 l 96.242 428.41 l 93.842 428.41 l f 0.697 g 95.042 429.61 m 136.323 470.891 l 138.723 470.891 l 138.723 468.491 l 97.442 427.21 l 95.042 427.21 l f 0.709 g 96.002 428.41 m 137.523 469.691 l 139.923 469.691 l 139.923 467.291 l 98.402 426.01 l 96.002 426.01 l f 0.721 g 97.202 427.21 m 138.483 468.731 l 140.883 468.731 l 140.883 466.331 l 99.602 424.81 l 97.202 424.81 l f 0.732 g 98.402 426.25 m 139.683 467.531 l 142.083 467.531 l 142.083 465.131 l 100.802 423.85 l 98.402 423.85 l f 0.744 g 99.602 425.05 m 140.883 466.331 l 143.283 466.331 l 143.283 463.931 l 102.002 422.65 l 99.602 422.65 l f 0.756 g 100.562 423.85 m 142.083 465.131 l 144.483 465.131 l 144.483 462.731 l 102.962 421.45 l 100.562 421.45 l f 0.768 g 101.762 422.65 m 143.043 463.931 l 145.443 463.931 l 145.443 461.531 l 104.162 420.25 l 101.762 420.25 l f 0.779 g 102.962 421.45 m 144.243 462.971 l 146.643 462.971 l 146.643 460.571 l 105.362 419.05 l 102.962 419.05 l f 0.791 g 104.162 420.49 m 145.443 461.771 l 147.843 461.771 l 147.843 459.371 l 106.562 418.09 l 104.162 418.09 l f 0.803 g 105.362 419.29 m 146.643 460.571 l 149.043 460.571 l 149.043 458.17 l 107.762 416.89 l 105.362 416.89 l f 0.815 g 106.322 418.09 m 147.843 459.371 l 150.243 459.371 l 150.243 456.97 l 108.722 415.69 l 106.322 415.69 l f 0.826 g 107.522 416.89 m 148.803 458.17 l 151.203 458.17 l 151.203 455.77 l 109.923 414.489 l 107.522 414.489 l f 0.838 g 108.722 415.69 m 150.003 457.21 l 152.403 457.21 l 152.403 454.81 l 111.123 413.289 l 108.722 413.289 l f 0.85 g 109.923 414.729 m 151.203 456.01 l 153.604 456.01 l 153.604 453.61 l 112.323 412.329 l 109.923 412.329 l f 111.123 413.529 m 152.403 454.81 l 154.804 454.81 l 154.804 452.41 l 113.523 411.129 l 111.123 411.129 l f 0.838 g 112.803 411.849 m 154.084 453.13 l 156.484 453.13 l 156.484 450.73 l 115.203 409.449 l 112.803 409.449 l f 0.826 g 113.763 410.649 m 155.284 451.93 l 157.684 451.93 l 157. 2000 684 449.53 l 116.163 408.249 l 113.763 408.249 l f 0.815 g 114.963 409.449 m 156.244 450.73 l 158.644 450.73 l 158.644 448.33 l 117.363 407.049 l 114.963 407.049 l f 0.803 g 116.163 408.249 m 157.444 449.77 l 159.844 449.77 l 159.844 447.37 l 118.563 405.849 l 116.163 405.849 l f 0.791 g 117.363 407.289 m 158.644 448.57 l 161.044 448.57 l 161.044 446.17 l 119.763 404.889 l 117.363 404.889 l f 0.779 g 118.563 406.089 m 159.844 447.37 l 162.244 447.37 l 162.244 444.97 l 120.963 403.689 l 118.563 403.689 l f 0.768 g 119.523 404.889 m 161.044 446.17 l 163.444 446.17 l 163.444 443.77 l 121.923 402.489 l 119.523 402.489 l f 0.756 g 120.723 403.689 m 162.004 444.97 l 164.404 444.97 l 164.404 442.57 l 123.123 401.289 l 120.723 401.289 l f 0.744 g 121.923 402.489 m 163.204 444.01 l 165.604 444.01 l 165.604 441.61 l 124.323 400.089 l 121.923 400.089 l f 0.732 g 123.123 401.529 m 164.404 442.81 l 166.804 442.81 l 166.804 440.41 l 125.523 399.129 l 123.123 399.129 l f 0.721 g 124.323 400.329 m 165.604 441.61 l 168.004 441.61 l 168.004 439.21 l 126.723 397.929 l 124.323 397.929 l f 0.709 g 125.283 399.129 m 166.804 440.41 l 169.204 440.41 l 169.204 438.01 l 127.683 396.729 l 125.283 396.729 l f 0.697 g 126.483 397.929 m 167.764 439.45 l 170.164 439.45 l 170.164 437.05 l 128.883 395.529 l 126.483 395.529 l f 0.685 g 127.683 396.969 m 168.964 438.25 l 171.364 438.25 l 171.364 435.85 l 130.083 394.569 l 127.683 394.569 l f 0.674 g 128.883 395.769 m 170.164 437.05 l 172.564 437.05 l 172.564 434.65 l 131.283 393.369 l 128.883 393.369 l f 0.662 g 129.843 394.569 m 171.364 435.85 l 173.764 435.85 l 173.764 433.45 l 132.243 392.169 l 129.843 392.169 l f 0.65 g 131.043 393.369 m 172.324 434.65 l 174.724 434.65 l 174.724 432.25 l 133.443 390.969 l 131.043 390.969 l f Q 0.27 w 0.55 G 132.363 454.195 m 144.013 454.195 153.469 444.848 153.469 433.33 c 153.469 421.812 144.013 412.464 132.363 412.464 c 120.713 412.464 111.258 421.812 111.258 433.33 c 111.258 444.848 120.713 454.195 132.363 454.195 c s 0.65 G 132.243 453.475 m 143.562 453.475 152.748 444.289 152.748 432.97 c 152.748 421.651 143.562 412.464 132.243 412.464 c 120.924 412.464 111.738 421.651 111.738 432.97 c 111.738 444.289 120.924 453.475 132.243 453.475 c s 0.9 G 132.243 453.475 m 143.562 453.475 152.748 444.289 152.748 432.97 c 152.748 421.651 143.562 412.464 132.243 412.464 c 120.924 412.464 111.738 421.651 111.738 432.97 c 111.738 444.289 120.924 453.475 132.243 453.475 c s 0.65 G 132.243 453.475 m 143.297 453.475 152.268 444.45 152.268 433.33 c 152.268 422.21 143.297 413.184 132.243 413.184 c 121.189 413.184 112.218 422.21 112.218 433.33 c 112.218 444.45 121.189 453.475 132.243 453.475 c s 0.55 G 132.243 452.995 m 143.297 452.995 152.268 444.078 152.268 433.09 c 152.268 422.102 143.297 413.184 132.243 413.184 c 121.189 413.184 112.218 422.102 112.218 433.09 c 112.218 444.078 121.189 452.995 132.243 452.995 c s 0 w BT /F3 2.64 Tf 0 g 0 G 2.392 0 0 2.392 114.735 431.05 Tm (Programmer)Tj ET 0.5 w 114.735 430.654 m 150.323 430.654 l S 2.4 w q 209.285 454.33 m 201.605 454.33 l 199.445 453.61 l 197.765 453.13 l 196.565 452.65 l 195.364 451.93 l 194.164 451.45 l 193.684 450.73 l 192.484 450.25 l 192.004 449.77 l 191.284 449.05 l 190.804 448.57 l 190.324 447.85 l 189.604 447.37 l 189.124 446.89 l 188.404 446.17 l 187.924 444.97 l 187.444 444.49 l 186.724 443.29 l 186.244 442.09 l 185.524 441.13 l 185.044 439.45 l 184.564 437.05 l 184.564 429.61 l 185.044 429.61 l 185.044 427.21 l 185.524 427.21 l 185.524 425.53 l 186.244 425.53 l 186.244 424.33 l 186.724 424.33 l 186.724 423.37 l 187.444 423.37 l 187.444 422.17 l 187.924 422.17 l 187.924 421.45 l 188.404 421.45 l 188.404 420.49 l 189.124 420.49 l 189.124 419.77 l 189.604 419.77 l 189.604 419.29 l 190.324 419.29 l 190.324 418.57 l 190.804 418.57 l 190.804 418.09 l 191.284 418.09 l 191.284 417.61 l 192.004 417.61 l 192.004 416.89 l 192.484 416.89 l 192.484 416.41 l 193.684 416.41 l 193.684 415.69 l 194.164 415.69 l 194.164 415.21 l 195.364 415.21 l 195.364 414.729 l 196.565 414.729 l 196.565 414.009 l 197.765 414.009 l 197.765 413.529 l 199.445 413.529 l 199.445 413.049 l 201.605 413.049 l 201.605 412.329 l 209.285 412.329 l 209.285 413.049 l 211.445 413.529 l 213.125 414.009 l 214.325 414.729 l 215.525 415.21 l 216.725 415.69 l 217.205 416.41 l 218.405 416.89 l 218.885 417.61 l 219.605 418.09 l 220.085 418.57 l 220.565 419.29 l 221.285 419.77 l 221.765 420.49 l 222.485 421.45 l 222.965 422.17 l 223.445 423.37 l 224.165 424.33 l 224.645 425.53 l 225.365 427.21 l 225.845 429.61 l 226.325 437.05 l 225.845 437.05 l 225.845 439.45 l 225.365 439.45 l 225.365 441.13 l 224.645 441.13 l 224.645 442.09 l 224.165 442.09 l 224.165 443.29 l 223.445 443.29 l 223.445 444.49 l 222.965 444.49 l 222.965 444.97 l 222.485 444.97 l 222.485 446.17 l 221.765 446.17 l 221.765 446.89 l 221.285 446.89 l 221.285 447.37 l 220.565 447.37 l 220.565 447.85 l 220.085 447.85 l 220.085 448.57 l 219.605 448.57 l 219.605 449.05 l 218.885 449.05 l 218.885 449.77 l 218.405 449.77 l 218.405 450.25 l 217.205 450.25 l 217.205 450.73 l 216.725 450.73 l 216.725 451.45 l 215.525 451.45 l 215.525 451.93 l 214.325 451.93 l 214.325 452.65 l 213.125 452.65 l 213.125 453.13 l 211.445 453.13 l 211.445 453.61 l 209.285 453.61 l 209.285 454.33 l W n 0.65 g 163.924 434.65 m 205.205 476.171 l 207.605 476.171 l 207.605 473.771 l 166.324 432.25 l 163.924 432.25 l f 0.662 g 164.884 432.97 m 206.405 474.251 l 208.805 474.251 l 208.805 471.851 l 167.284 430.57 l 164.884 430.57 l f 0.674 g 166.084 431.77 m 207.365 473.291 l 209.765 473.291 l 209.765 470.891 l 168.484 429.37 l 166.084 429.37 l f 0.685 g 167.284 430.81 m 208.565 472.091 l 210.965 472.091 l 210.965 469.691 l 169.684 428.41 l 167.284 428.41 l f 0.697 g 168.484 429.61 m 209.765 470.891 l 212.165 470.891 l 212.165 468.491 l 170.884 427.21 l 168.484 427.21 l f 0.709 g 169.444 428.41 m 210.965 469.691 l 213.365 469.691 l 213.365 467.291 l 171.844 426.01 l 169.444 426.01 l f 0.721 g 170.644 427.21 m 211.925 468.731 l 214.325 468.731 l 214.325 466.331 l 173.044 424.81 l 170.644 424.81 l f 0.732 g 171.844 426.25 m 213.125 467.531 l 215.525 467.531 l 215.525 465.131 l 174.244 423.85 l 171.844 423.85 l f 0.744 g 173.044 425.05 m 214.325 466.331 l 216.725 466.331 l 216.725 463.931 l 175.444 422.65 l 173.044 422.65 l f 0.756 g 174.244 423.85 m 215.525 465.131 l 217.925 465.131 l 217.925 462.731 l 176.644 421.45 l 174.244 421.45 l f 0.768 g 175.204 422.65 m 216.725 463.931 l 219.125 463.931 l 219.125 461.531 l 177.604 420.25 l 175.204 420.25 l f 0.779 g 176.404 421.45 m 217.685 462.971 l 220.085 462.971 l 220.085 460.571 l 178.804 419.05 l 176.404 419.05 l f 0.791 g 177.604 420.49 m 218.885 461.771 l 221.285 461.771 l 221.285 459.371 l 180.004 418.09 l 177.604 418.09 l f 0.803 g 178.804 419.29 m 220.085 460.571 l 222.485 460.571 l 222.485 458.17 l 181.204 416.89 l 178.804 416.89 l f 0.815 g 180.004 418.09 m 221.285 459.371 l 223.685 459.371 l 223.685 456.97 l 182.404 415.69 l 180.004 415.69 l f 0.826 g 180.964 416.89 m 222.485 458.17 l 224.885 458.17 l 224.885 455.77 l 183.364 414.489 l 180.964 414.489 l f 0.838 g 182.164 415.69 m 223.445 457.21 l 225.845 457.21 l 225.845 454.81 l 184.564 413.289 l 182.164 413.289 l f 0.85 g 183.364 414.729 m 224.645 456.01 l 227.045 456.01 l 227.045 453.61 l 185.764 412.329 l 183.364 412.329 l f 184.564 413.529 m 225.845 454.81 l 228.245 454.81 l 228.245 452.41 l 186.964 411.129 l 184.564 411.129 l f 0.838 g 185.524 411.849 m 227.045 453.13 l 229.445 453.13 l 229.445 450.73 l 187.924 409.449 l 185.524 409.449 l f 0.826 g 186.724 410.649 m 228.005 451.93 l 230.405 451.93 l 230.405 449.53 l 189.124 408.249 l 186.724 408.249 l f 0.815 g 187.924 409.449 m 229.205 450.73 2000 l 231.605 450.73 l 231.605 448.33 l 190.324 407.049 l 187.924 407.049 l f 0.803 g 189.124 408.249 m 230.405 449.77 l 232.805 449.77 l 232.805 447.37 l 191.524 405.849 l 189.124 405.849 l f 0.791 g 190.324 407.289 m 231.605 448.57 l 234.005 448.57 l 234.005 446.17 l 192.724 404.889 l 190.324 404.889 l f 0.779 g 191.284 406.089 m 232.805 447.37 l 235.205 447.37 l 235.205 444.97 l 193.684 403.689 l 191.284 403.689 l f 0.768 g 192.484 404.889 m 233.765 446.17 l 236.165 446.17 l 236.165 443.77 l 194.884 402.489 l 192.484 402.489 l f 0.756 g 193.684 403.689 m 234.965 444.97 l 237.365 444.97 l 237.365 442.57 l 196.084 401.289 l 193.684 401.289 l f 0.744 g 194.884 402.489 m 236.165 444.01 l 238.565 444.01 l 238.565 441.61 l 197.285 400.089 l 194.884 400.089 l f 0.732 g 196.084 401.529 m 237.365 442.81 l 239.765 442.81 l 239.765 440.41 l 198.485 399.129 l 196.084 399.129 l f 0.721 g 197.045 400.329 m 238.565 441.61 l 240.966 441.61 l 240.966 439.21 l 199.445 397.929 l 197.045 397.929 l f 0.709 g 198.245 399.129 m 239.525 440.41 l 241.926 440.41 l 241.926 438.01 l 200.645 396.729 l 198.245 396.729 l f 0.697 g 199.445 397.929 m 240.726 439.45 l 243.126 439.45 l 243.126 437.05 l 201.845 395.529 l 199.445 395.529 l f 0.685 g 200.645 396.969 m 241.926 438.25 l 244.326 438.25 l 244.326 435.85 l 203.045 394.569 l 200.645 394.569 l f 0.674 g 201.605 395.769 m 243.126 437.05 l 245.526 437.05 l 245.526 434.65 l 204.005 393.369 l 201.605 393.369 l f 0.662 g 202.805 394.569 m 244.086 435.85 l 246.486 435.85 l 246.486 433.45 l 205.205 392.169 l 202.805 392.169 l f 0.65 g 204.005 393.369 m 245.286 434.65 l 247.686 434.65 l 247.686 432.25 l 206.405 390.969 l 204.005 390.969 l f Q 0.27 w 0.55 G 205.445 454.195 m 216.896 454.195 226.19 444.848 226.19 433.33 c 226.19 421.812 216.896 412.464 205.445 412.464 c 193.993 412.464 184.699 421.812 184.699 433.33 c 184.699 444.848 193.993 454.195 205.445 454.195 c s 0.65 G 205.445 453.475 m 216.896 453.475 226.19 444.289 226.19 432.97 c 226.19 421.651 216.896 412.464 205.445 412.464 c 193.993 412.464 184.699 421.651 184.699 432.97 c 184.699 444.289 193.993 453.475 205.445 453.475 c s 0.9 G 205.445 453.475 m 216.631 453.475 225.71 444.289 225.71 432.97 c 225.71 421.651 216.631 412.464 205.445 412.464 c 194.258 412.464 185.179 421.651 185.179 432.97 c 185.179 444.289 194.258 453.475 205.445 453.475 c s 0.65 G 205.445 453.475 m 216.631 453.475 225.71 444.45 225.71 433.33 c 225.71 422.21 216.631 413.184 205.445 413.184 c 194.258 413.184 185.179 422.21 185.179 433.33 c 185.179 444.45 194.258 453.475 205.445 453.475 c s 0.55 G 205.445 452.995 m 216.366 452.995 225.23 444.078 225.23 433.09 c 225.23 422.102 216.366 413.184 205.445 413.184 c 194.523 413.184 185.659 422.102 185.659 433.09 c 185.659 444.078 194.523 452.995 205.445 452.995 c s 0 w BT 0 G 2.392 0 0 2.392 190.513 431.05 Tm (Obfuscator)Tj ET 0.5 w 190.513 430.654 m 221.52 430.654 l S 2.4 w q 316.567 454.33 m 309.607 454.33 l 306.727 453.61 l 305.527 453.13 l 303.847 452.65 l 302.647 451.93 l 301.687 451.45 l 300.967 450.73 l 300.487 450.25 l 299.287 449.77 l 298.807 449.05 l 298.087 448.57 l 297.607 447.85 l 297.127 447.37 l 296.407 446.89 l 295.927 446.17 l 295.207 444.97 l 294.727 444.49 l 294.247 443.29 l 293.527 442.09 l 293.047 441.13 l 292.327 439.45 l 291.847 437.05 l 291.847 429.61 l 292.327 429.61 l 292.327 427.21 l 293.047 427.21 l 293.047 425.53 l 293.527 425.53 l 293.527 424.33 l 294.247 424.33 l 294.247 423.37 l 294.727 423.37 l 294.727 422.17 l 295.207 422.17 l 295.207 421.45 l 295.927 421.45 l 295.927 420.49 l 296.407 420.49 l 296.407 419.77 l 297.127 419.77 l 297.127 419.29 l 297.607 419.29 l 297.607 418.57 l 298.087 418.57 l 298.087 418.09 l 298.807 418.09 l 298.807 417.61 l 299.287 417.61 l 299.287 416.89 l 300.487 416.89 l 300.487 416.41 l 300.967 416.41 l 300.967 415.69 l 301.687 415.69 l 301.687 415.21 l 302.647 415.21 l 302.647 414.729 l 303.847 414.729 l 303.847 414.009 l 305.527 414.009 l 305.527 413.529 l 306.727 413.529 l 306.727 413.049 l 309.607 413.049 l 309.607 412.329 l 316.567 412.329 l 316.567 413.049 l 319.447 413.529 l 320.647 414.009 l 322.327 414.729 l 323.527 415.21 l 324.487 415.69 l 325.207 416.41 l 325.687 416.89 l 326.887 417.61 l 327.367 418.09 l 328.088 418.57 l 328.568 419.29 l 329.048 419.77 l 329.768 420.49 l 330.248 421.45 l 330.968 422.17 l 331.448 423.37 l 331.928 424.33 l 332.648 425.53 l 333.128 427.21 l 333.848 429.61 l 334.328 437.05 l 333.848 437.05 l 333.848 439.45 l 333.128 439.45 l 333.128 441.13 l 332.648 441.13 l 332.648 442.09 l 331.928 442.09 l 331.928 443.29 l 331.448 443.29 l 331.448 444.49 l 330.968 444.49 l 330.968 444.97 l 330.248 444.97 l 330.248 446.17 l 329.768 446.17 l 329.768 446.89 l 329.048 446.89 l 329.048 447.37 l 328.568 447.37 l 328.568 447.85 l 328.088 447.85 l 328.088 448.57 l 327.367 448.57 l 327.367 449.05 l 326.887 449.05 l 326.887 449.77 l 325.687 449.77 l 325.687 450.25 l 325.207 450.25 l 325.207 450.73 l 324.487 450.73 l 324.487 451.45 l 323.527 451.45 l 323.527 451.93 l 322.327 451.93 l 322.327 452.65 l 320.647 452.65 l 320.647 453.13 l 319.447 453.13 l 319.447 453.61 l 316.567 453.61 l 316.567 454.33 l W n 0.65 g 270.486 434.65 m 312.007 476.171 l 314.407 476.171 l 314.407 473.771 l 272.886 432.25 l 270.486 432.25 l f 0.662 g 272.406 432.97 m 313.687 474.251 l 316.087 474.251 l 316.087 471.851 l 274.806 430.57 l 272.406 430.57 l f 0.674 g 273.366 431.77 m 314.887 473.291 l 317.287 473.291 l 317.287 470.891 l 275.766 429.37 l 273.366 429.37 l f 0.685 g 274.566 430.81 m 315.847 472.091 l 318.247 472.091 l 318.247 469.691 l 276.966 428.41 l 274.566 428.41 l f 0.697 g 275.766 429.61 m 317.047 470.891 l 319.447 470.891 l 319.447 468.491 l 278.166 427.21 l 275.766 427.21 l f 0.709 g 276.966 428.41 m 318.247 469.691 l 320.647 469.691 l 320.647 467.291 l 279.366 426.01 l 276.966 426.01 l f 0.721 g 278.166 427.21 m 319.447 468.731 l 321.847 468.731 l 321.847 466.331 l 280.566 424.81 l 278.166 424.81 l f 0.732 g 279.126 426.25 m 320.647 467.531 l 323.047 467.531 l 323.047 465.131 l 281.526 423.85 l 279.126 423.85 l f 0.744 g 280.326 425.05 m 321.607 466.331 l 324.007 466.331 l 324.007 463.931 l 282.726 422.65 l 280.326 422.65 l f 0.756 g 281.526 423.85 m 322.807 465.131 l 325.207 465.131 l 325.207 462.731 l 283.927 421.45 l 281.526 421.45 l f 0.768 g 282.726 422.65 m 324.007 463.931 l 326.407 463.931 l 326.407 461.531 l 285.127 420.25 l 282.726 420.25 l f 0.779 g 283.686 421.45 m 325.207 462.971 l 327.608 462.971 l 327.608 460.571 l 286.087 419.05 l 283.686 419.05 l f 0.791 g 284.887 420.49 m 326.167 461.771 l 328.568 461.771 l 328.568 459.371 l 287.287 418.09 l 284.887 418.09 l f 0.803 g 286.087 419.29 m 327.367 460.571 l 329.768 460.571 l 329.768 458.17 l 288.487 416.89 l 286.087 416.89 l f 0.815 g 287.287 418.09 m 328.568 459.371 l 330.968 459.371 l 330.968 456.97 l 289.687 415.69 l 287.287 415.69 l f 0.826 g 288.487 416.89 m 329.768 458.17 l 332.168 458.17 l 332.168 455.77 l 290.887 414.489 l 288.487 414.489 l f 0.838 g 289.447 415.69 m 330.968 457.21 l 333.368 457.21 l 333.368 454.81 l 291.847 413.289 l 289.447 413.289 l f 0.85 g 290.647 414.729 m 331.928 456.01 l 334.328 456.01 l 334.328 453.61 l 293.047 412.329 l 290.647 412.329 l f 291.847 413.529 m 333.128 454.81 l 335.528 454.81 l 335.528 452.41 l 294.247 411.129 l 291.847 411.129 l f 0.838 g 293.527 411.849 m 334.808 453.13 l 337.208 453.13 l 337.208 450.73 l 295.927 409.449 l 293.527 409.449 l f 0.826 g 294.727 410.649 m 336.008 451.93 l 338.408 451.93 l 338.408 449.53 l 297.127 408.249 l 294.727 408.249 l f 0.815 g 295.927 409.449 m 337.208 450.73 l 339.608 450.73 l 339.608 448.33 l 298.327 407.049 l 295.927 407.049 l f 0.803 g 297.127 408.249 m 338.408 449.77 l 340 2000 .808 449.77 l 340.808 447.37 l 299.527 405.849 l 297.127 405.849 l f 0.791 g 298.087 407.289 m 339.608 448.57 l 342.008 448.57 l 342.008 446.17 l 300.487 404.889 l 298.087 404.889 l f 0.779 g 299.287 406.089 m 340.568 447.37 l 342.968 447.37 l 342.968 444.97 l 301.687 403.689 l 299.287 403.689 l f 0.768 g 300.487 404.889 m 341.768 446.17 l 344.168 446.17 l 344.168 443.77 l 302.887 402.489 l 300.487 402.489 l f 0.756 g 301.687 403.689 m 342.968 444.97 l 345.368 444.97 l 345.368 442.57 l 304.087 401.289 l 301.687 401.289 l f 0.744 g 302.647 402.489 m 344.168 444.01 l 346.568 444.01 l 346.568 441.61 l 305.047 400.089 l 302.647 400.089 l f 0.732 g 303.847 401.529 m 345.128 442.81 l 347.528 442.81 l 347.528 440.41 l 306.247 399.129 l 303.847 399.129 l f 0.721 g 305.047 400.329 m 346.328 441.61 l 348.728 441.61 l 348.728 439.21 l 307.447 397.929 l 305.047 397.929 l f 0.709 g 306.247 399.129 m 347.528 440.41 l 349.928 440.41 l 349.928 438.01 l 308.647 396.729 l 306.247 396.729 l f 0.697 g 307.447 397.929 m 348.728 439.45 l 351.128 439.45 l 351.128 437.05 l 309.847 395.529 l 307.447 395.529 l f 0.685 g 308.407 396.969 m 349.928 438.25 l 352.328 438.25 l 352.328 435.85 l 310.807 394.569 l 308.407 394.569 l f 0.674 g 309.607 395.769 m 350.888 437.05 l 353.288 437.05 l 353.288 434.65 l 312.007 393.369 l 309.607 393.369 l f 0.662 g 310.807 394.569 m 352.088 435.85 l 354.488 435.85 l 354.488 433.45 l 313.207 392.169 l 310.807 392.169 l f 0.65 g 312.007 393.369 m 353.288 434.65 l 355.688 434.65 l 355.688 432.25 l 314.407 390.969 l 312.007 390.969 l f Q 0.27 w 0.55 G 313.087 454.195 m 324.737 454.195 334.193 444.848 334.193 433.33 c 334.193 421.812 324.737 412.464 313.087 412.464 c 301.437 412.464 291.982 421.812 291.982 433.33 c 291.982 444.848 301.437 454.195 313.087 454.195 c s 0.65 G 313.087 453.475 m 324.472 453.475 333.713 444.289 333.713 432.97 c 333.713 421.651 324.472 412.464 313.087 412.464 c 301.702 412.464 292.462 421.651 292.462 432.97 c 292.462 444.289 301.702 453.475 313.087 453.475 c s 0.9 G 313.087 453.475 m 324.472 453.475 333.713 444.289 333.713 432.97 c 333.713 421.651 324.472 412.464 313.087 412.464 c 301.702 412.464 292.462 421.651 292.462 432.97 c 292.462 444.289 301.702 453.475 313.087 453.475 c s 0.65 G 313.087 453.475 m 324.075 453.475 332.993 444.45 332.993 433.33 c 332.993 422.21 324.075 413.184 313.087 413.184 c 302.099 413.184 293.182 422.21 293.182 433.33 c 293.182 444.45 302.099 453.475 313.087 453.475 c s 0.55 G 313.087 452.995 m 324.075 452.995 332.993 444.078 332.993 433.09 c 332.993 422.102 324.075 413.184 313.087 413.184 c 302.099 413.184 293.182 422.102 293.182 433.09 c 293.182 444.078 302.099 452.995 313.087 452.995 c s 0 w BT 0 G 2.392 0 0 2.392 304.182 431.05 Tm (Writer)Tj ET 0.5 w 304.182 430.654 m 322.407 430.654 l S 2.4 w q 390.489 454.33 m 383.049 454.33 l 380.889 453.61 l 379.209 453.13 l 378.009 452.65 l 376.809 451.93 l 375.609 451.45 l 375.129 450.73 l 373.929 450.25 l 373.449 449.77 l 372.729 449.05 l 372.249 448.57 l 371.529 447.85 l 371.048 447.37 l 370.568 446.89 l 369.848 446.17 l 369.368 444.97 l 368.648 444.49 l 368.168 443.29 l 367.688 442.09 l 366.968 441.13 l 366.488 439.45 l 366.008 437.05 l 366.008 429.61 l 366.488 429.61 l 366.488 427.21 l 366.968 427.21 l 366.968 425.53 l 367.688 425.53 l 367.688 424.33 l 368.168 424.33 l 368.168 423.37 l 368.648 423.37 l 368.648 422.17 l 369.368 422.17 l 369.368 421.45 l 369.848 421.45 l 369.848 420.49 l 370.568 420.49 l 370.568 419.77 l 371.048 419.77 l 371.048 419.29 l 371.529 419.29 l 371.529 418.57 l 372.249 418.57 l 372.249 418.09 l 372.729 418.09 l 372.729 417.61 l 373.449 417.61 l 373.449 416.89 l 373.929 416.89 l 373.929 416.41 l 375.129 416.41 l 375.129 415.69 l 375.609 415.69 l 375.609 415.21 l 376.809 415.21 l 376.809 414.729 l 378.009 414.729 l 378.009 414.009 l 379.209 414.009 l 379.209 413.529 l 380.889 413.529 l 380.889 413.049 l 383.049 413.049 l 383.049 412.329 l 390.489 412.329 l 390.489 413.049 l 392.889 413.529 l 394.569 414.009 l 395.769 414.729 l 396.969 415.21 l 397.929 415.69 l 398.649 416.41 l 399.849 416.89 l 400.329 417.61 l 400.809 418.09 l 401.529 418.57 l 402.009 419.29 l 402.729 419.77 l 403.209 420.49 l 403.689 421.45 l 404.409 422.17 l 404.889 423.37 l 405.609 424.33 l 406.089 425.53 l 406.569 427.21 l 407.289 429.61 l 407.769 437.05 l 407.289 437.05 l 407.289 439.45 l 406.569 439.45 l 406.569 441.13 l 406.089 441.13 l 406.089 442.09 l 405.609 442.09 l 405.609 443.29 l 404.889 443.29 l 404.889 444.49 l 404.409 444.49 l 404.409 444.97 l 403.689 444.97 l 403.689 446.17 l 403.209 446.17 l 403.209 446.89 l 402.729 446.89 l 402.729 447.37 l 402.009 447.37 l 402.009 447.85 l 401.529 447.85 l 401.529 448.57 l 400.809 448.57 l 400.809 449.05 l 400.329 449.05 l 400.329 449.77 l 399.849 449.77 l 399.849 450.25 l 398.649 450.25 l 398.649 450.73 l 397.929 450.73 l 397.929 451.45 l 396.969 451.45 l 396.969 451.93 l 395.769 451.93 l 395.769 452.65 l 394.569 452.65 l 394.569 453.13 l 392.889 453.13 l 392.889 453.61 l 390.489 453.61 l 390.489 454.33 l W n 0.65 g 345.128 434.65 m 386.649 476.171 l 389.049 476.171 l 389.049 473.771 l 347.528 432.25 l 345.128 432.25 l f 0.662 g 346.328 432.97 m 387.609 474.251 l 390.009 474.251 l 390.009 471.851 l 348.728 430.57 l 346.328 430.57 l f 0.674 g 347.528 431.77 m 388.809 473.291 l 391.209 473.291 l 391.209 470.891 l 349.928 429.37 l 347.528 429.37 l f 0.685 g 348.728 430.81 m 390.009 472.091 l 392.409 472.091 l 392.409 469.691 l 351.128 428.41 l 348.728 428.41 l f 0.697 g 349.928 429.61 m 391.209 470.891 l 393.609 470.891 l 393.609 468.491 l 352.328 427.21 l 349.928 427.21 l f 0.709 g 350.888 428.41 m 392.409 469.691 l 394.809 469.691 l 394.809 467.291 l 353.288 426.01 l 350.888 426.01 l f 0.721 g 352.088 427.21 m 393.369 468.731 l 395.769 468.731 l 395.769 466.331 l 354.488 424.81 l 352.088 424.81 l f 0.732 g 353.288 426.25 m 394.569 467.531 l 396.969 467.531 l 396.969 465.131 l 355.688 423.85 l 353.288 423.85 l f 0.744 g 354.488 425.05 m 395.769 466.331 l 398.169 466.331 l 398.169 463.931 l 356.888 422.65 l 354.488 422.65 l f 0.756 g 355.448 423.85 m 396.969 465.131 l 399.369 465.131 l 399.369 462.731 l 357.848 421.45 l 355.448 421.45 l f 0.768 g 356.648 422.65 m 397.929 463.931 l 400.329 463.931 l 400.329 461.531 l 359.048 420.25 l 356.648 420.25 l f 0.779 g 357.848 421.45 m 399.129 462.971 l 401.529 462.971 l 401.529 460.571 l 360.248 419.05 l 357.848 419.05 l f 0.791 g 359.048 420.49 m 400.329 461.771 l 402.729 461.771 l 402.729 459.371 l 361.448 418.09 l 359.048 418.09 l f 0.803 g 360.248 419.29 m 401.529 460.571 l 403.929 460.571 l 403.929 458.17 l 362.648 416.89 l 360.248 416.89 l f 0.815 g 361.208 418.09 m 402.729 459.371 l 405.129 459.371 l 405.129 456.97 l 363.608 415.69 l 361.208 415.69 l f 0.826 g 362.408 416.89 m 403.689 458.17 l 406.089 458.17 l 406.089 455.77 l 364.808 414.489 l 362.408 414.489 l f 0.838 g 363.608 415.69 m 404.889 457.21 l 407.289 457.21 l 407.289 454.81 l 366.008 413.289 l 363.608 413.289 l f 0.85 g 364.808 414.729 m 406.089 456.01 l 408.489 456.01 l 408.489 453.61 l 367.208 412.329 l 364.808 412.329 l f 366.008 413.529 m 407.289 454.81 l 409.689 454.81 l 409.689 452.41 l 368.408 411.129 l 366.008 411.129 l f 0.838 g 366.968 411.849 m 408.489 453.13 l 410.889 453.13 l 410.889 450.73 l 369.368 409.449 l 366.968 409.449 l f 0.826 g 368.168 410.649 m 409.449 451.93 l 411.849 451.93 l 411.849 449.53 l 370.568 408.249 l 368.168 408.249 l f 0.815 g 369.368 409.449 m 410.649 450.73 l 413.049 450.73 l 413.049 448.33 l 371.769 407.049 l 369.368 407.049 l f 0.803 g 370.568 408.249 m 411.849 449.77 l 414.249 449.77 l 414.249 447.37 l 372.969 405.849 l 370.568 405.849 l f 0.791 g 371.529 407.289 m 413.049 448.57 l 2000 415.45 448.57 l 415.45 446.17 l 373.929 404.889 l 371.529 404.889 l f 0.779 g 372.729 406.089 m 414.009 447.37 l 416.41 447.37 l 416.41 444.97 l 375.129 403.689 l 372.729 403.689 l f 0.768 g 373.929 404.889 m 415.21 446.17 l 417.61 446.17 l 417.61 443.77 l 376.329 402.489 l 373.929 402.489 l f 0.756 g 375.129 403.689 m 416.41 444.97 l 418.81 444.97 l 418.81 442.57 l 377.529 401.289 l 375.129 401.289 l f 0.744 g 376.329 402.489 m 417.61 444.01 l 420.01 444.01 l 420.01 441.61 l 378.729 400.089 l 376.329 400.089 l f 0.732 g 377.289 401.529 m 418.81 442.81 l 421.21 442.81 l 421.21 440.41 l 379.689 399.129 l 377.289 399.129 l f 0.721 g 378.489 400.329 m 419.77 441.61 l 422.17 441.61 l 422.17 439.21 l 380.889 397.929 l 378.489 397.929 l f 0.709 g 379.689 399.129 m 420.97 440.41 l 423.37 440.41 l 423.37 438.01 l 382.089 396.729 l 379.689 396.729 l f 0.697 g 380.889 397.929 m 422.17 439.45 l 424.57 439.45 l 424.57 437.05 l 383.289 395.529 l 380.889 395.529 l f 0.685 g 382.089 396.969 m 423.37 438.25 l 425.77 438.25 l 425.77 435.85 l 384.489 394.569 l 382.089 394.569 l f 0.674 g 383.049 395.769 m 424.57 437.05 l 426.97 437.05 l 426.97 434.65 l 385.449 393.369 l 383.049 393.369 l f 0.662 g 384.249 394.569 m 425.53 435.85 l 427.93 435.85 l 427.93 433.45 l 386.649 392.169 l 384.249 392.169 l f 0.65 g 385.449 393.369 m 426.73 434.65 l 429.13 434.65 l 429.13 432.25 l 387.849 390.969 l 385.449 390.969 l f Q 0.27 w 0.55 G 386.889 454.195 m 398.34 454.195 407.634 444.848 407.634 433.33 c 407.634 421.812 398.34 412.464 386.889 412.464 c 375.437 412.464 366.143 421.812 366.143 433.33 c 366.143 444.848 375.437 454.195 386.889 454.195 c s 0.65 G 386.649 453.475 m 397.968 453.475 407.154 444.289 407.154 432.97 c 407.154 421.651 397.968 412.464 386.649 412.464 c 375.33 412.464 366.143 421.651 366.143 432.97 c 366.143 444.289 375.33 453.475 386.649 453.475 c s 0.9 G 386.649 453.475 m 397.968 453.475 407.154 444.289 407.154 432.97 c 407.154 421.651 397.968 412.464 386.649 412.464 c 375.33 412.464 366.143 421.651 366.143 432.97 c 366.143 444.289 375.33 453.475 386.649 453.475 c s 0.65 G 386.889 453.475 m 398.075 453.475 407.154 444.45 407.154 433.33 c 407.154 422.21 398.075 413.184 386.889 413.184 c 375.702 413.184 366.623 422.21 366.623 433.33 c 366.623 444.45 375.702 453.475 386.889 453.475 c s 0.55 G 386.529 452.995 m 397.517 452.995 406.434 444.078 406.434 433.09 c 406.434 422.102 397.517 413.184 386.529 413.184 c 375.541 413.184 366.623 422.102 366.623 433.09 c 366.623 444.078 375.541 452.995 386.529 452.995 c s 0 w BT 0 G 2.392 0 0 2.392 373.071 431.05 Tm (Humorist)Tj ET 0.5 w 373.071 430.654 m 400.224 430.654 l S 2.4 w q 464.171 454.33 m 456.49 454.33 l 454.33 453.61 l 452.65 453.13 l 451.45 452.65 l 450.25 451.93 l 449.05 451.45 l 448.57 450.73 l 447.37 450.25 l 446.89 449.77 l 446.17 449.05 l 445.69 448.57 l 445.21 447.85 l 444.49 447.37 l 444.01 446.89 l 443.29 446.17 l 442.81 444.97 l 442.33 444.49 l 441.61 443.29 l 441.13 442.09 l 440.41 441.13 l 439.93 439.45 l 439.45 437.05 l 439.45 429.61 l 439.93 429.61 l 439.93 427.21 l 440.41 427.21 l 440.41 425.53 l 441.13 425.53 l 441.13 424.33 l 441.61 424.33 l 441.61 423.37 l 442.33 423.37 l 442.33 422.17 l 442.81 422.17 l 442.81 421.45 l 443.29 421.45 l 443.29 420.49 l 444.01 420.49 l 444.01 419.77 l 444.49 419.77 l 444.49 419.29 l 445.21 419.29 l 445.21 418.57 l 445.69 418.57 l 445.69 418.09 l 446.17 418.09 l 446.17 417.61 l 446.89 417.61 l 446.89 416.89 l 447.37 416.89 l 447.37 416.41 l 448.57 416.41 l 448.57 415.69 l 449.05 415.69 l 449.05 415.21 l 450.25 415.21 l 450.25 414.729 l 451.45 414.729 l 451.45 414.009 l 452.65 414.009 l 452.65 413.529 l 454.33 413.529 l 454.33 413.049 l 456.49 413.049 l 456.49 412.329 l 464.171 412.329 l 464.171 413.049 l 466.331 413.529 l 468.011 414.009 l 469.211 414.729 l 470.411 415.21 l 471.611 415.69 l 472.091 416.41 l 473.291 416.89 l 473.771 417.61 l 474.491 418.09 l 474.971 418.57 l 475.451 419.29 l 476.171 419.77 l 476.651 420.49 l 477.371 421.45 l 477.851 422.17 l 478.331 423.37 l 479.051 424.33 l 479.531 425.53 l 480.251 427.21 l 480.731 429.61 l 481.211 437.05 l 480.731 437.05 l 480.731 439.45 l 480.251 439.45 l 480.251 441.13 l 479.531 441.13 l 479.531 442.09 l 479.051 442.09 l 479.051 443.29 l 478.331 443.29 l 478.331 444.49 l 477.851 444.49 l 477.851 444.97 l 477.371 444.97 l 477.371 446.17 l 476.651 446.17 l 476.651 446.89 l 476.171 446.89 l 476.171 447.37 l 475.451 447.37 l 475.451 447.85 l 474.971 447.85 l 474.971 448.57 l 474.491 448.57 l 474.491 449.05 l 473.771 449.05 l 473.771 449.77 l 473.291 449.77 l 473.291 450.25 l 472.091 450.25 l 472.091 450.73 l 471.611 450.73 l 471.611 451.45 l 470.411 451.45 l 470.411 451.93 l 469.211 451.93 l 469.211 452.65 l 468.011 452.65 l 468.011 453.13 l 466.331 453.13 l 466.331 453.61 l 464.171 453.61 l 464.171 454.33 l W n 0.65 g 418.81 434.65 m 460.091 476.171 l 462.491 476.171 l 462.491 473.771 l 421.21 432.25 l 418.81 432.25 l f 0.662 g 419.77 432.97 m 461.291 474.251 l 463.691 474.251 l 463.691 471.851 l 422.17 430.57 l 419.77 430.57 l f 0.674 g 420.97 431.77 m 462.251 473.291 l 464.651 473.291 l 464.651 470.891 l 423.37 429.37 l 420.97 429.37 l f 0.685 g 422.17 430.81 m 463.451 472.091 l 465.851 472.091 l 465.851 469.691 l 424.57 428.41 l 422.17 428.41 l f 0.697 g 423.37 429.61 m 464.651 470.891 l 467.051 470.891 l 467.051 468.491 l 425.77 427.21 l 423.37 427.21 l f 0.709 g 424.57 428.41 m 465.851 469.691 l 468.251 469.691 l 468.251 467.291 l 426.97 426.01 l 424.57 426.01 l f 0.721 g 425.53 427.21 m 467.051 468.731 l 469.451 468.731 l 469.451 466.331 l 427.93 424.81 l 425.53 424.81 l f 0.732 g 426.73 426.25 m 468.011 467.531 l 470.411 467.531 l 470.411 465.131 l 429.13 423.85 l 426.73 423.85 l f 0.744 g 427.93 425.05 m 469.211 466.331 l 471.611 466.331 l 471.611 463.931 l 430.33 422.65 l 427.93 422.65 l f 0.756 g 429.13 423.85 m 470.411 465.131 l 472.811 465.131 l 472.811 462.731 l 431.53 421.45 l 429.13 421.45 l f 0.768 g 430.09 422.65 m 471.611 463.931 l 474.011 463.931 l 474.011 461.531 l 432.49 420.25 l 430.09 420.25 l f 0.779 g 431.29 421.45 m 472.571 462.971 l 474.971 462.971 l 474.971 460.571 l 433.69 419.05 l 431.29 419.05 l f 0.791 g 432.49 420.49 m 473.771 461.771 l 476.171 461.771 l 476.171 459.371 l 434.89 418.09 l 432.49 418.09 l f 0.803 g 433.69 419.29 m 474.971 460.571 l 477.371 460.571 l 477.371 458.17 l 436.09 416.89 l 433.69 416.89 l f 0.815 g 434.89 418.09 m 476.171 459.371 l 478.571 459.371 l 478.571 456.97 l 437.29 415.69 l 434.89 415.69 l f 0.826 g 435.85 416.89 m 477.371 458.17 l 479.771 458.17 l 479.771 455.77 l 438.25 414.489 l 435.85 414.489 l f 0.838 g 437.05 415.69 m 478.331 457.21 l 480.731 457.21 l 480.731 454.81 l 439.45 413.289 l 437.05 413.289 l f 0.85 g 438.25 414.729 m 479.531 456.01 l 481.931 456.01 l 481.931 453.61 l 440.65 412.329 l 438.25 412.329 l f 439.45 413.529 m 480.731 454.81 l 483.131 454.81 l 483.131 452.41 l 441.85 411.129 l 439.45 411.129 l f 0.838 g 440.41 411.849 m 481.931 453.13 l 484.331 453.13 l 484.331 450.73 l 442.81 409.449 l 440.41 409.449 l f 0.826 g 441.61 410.649 m 482.891 451.93 l 485.291 451.93 l 485.291 449.53 l 444.01 408.249 l 441.61 408.249 l f 0.815 g 442.81 409.449 m 484.091 450.73 l 486.491 450.73 l 486.491 448.33 l 445.21 407.049 l 442.81 407.049 l f 0.803 g 444.01 408.249 m 485.291 449.77 l 487.691 449.77 l 487.691 447.37 l 446.41 405.849 l 444.01 405.849 l f 0.791 g 445.21 407.289 m 486.491 448.57 l 488.891 448.57 l 488.891 446.17 l 447.61 404.889 l 445.21 404.889 l f 0.779 g 446.17 406.089 m 487.691 447.37 l 490.091 447.37 l 490.091 444.97 l 448.57 403.689 l 446.17 403.689 l f 0.768 g 447.37 404.889 m 488.651 446.17 l 491.051 446.17 l 491.051 443.77 l 449.77 402.489 l 2000 447.37 402.489 l f 0.756 g 448.57 403.689 m 489.851 444.97 l 492.251 444.97 l 492.251 442.57 l 450.97 401.289 l 448.57 401.289 l f 0.744 g 449.77 402.489 m 491.051 444.01 l 493.451 444.01 l 493.451 441.61 l 452.17 400.089 l 449.77 400.089 l f 0.732 g 450.97 401.529 m 492.251 442.81 l 494.651 442.81 l 494.651 440.41 l 453.37 399.129 l 450.97 399.129 l f 0.721 g 451.93 400.329 m 493.451 441.61 l 495.851 441.61 l 495.851 439.21 l 454.33 397.929 l 451.93 397.929 l f 0.709 g 453.13 399.129 m 494.411 440.41 l 496.811 440.41 l 496.811 438.01 l 455.53 396.729 l 453.13 396.729 l f 0.697 g 454.33 397.929 m 495.611 439.45 l 498.011 439.45 l 498.011 437.05 l 456.73 395.529 l 454.33 395.529 l f 0.685 g 455.53 396.969 m 496.811 438.25 l 499.211 438.25 l 499.211 435.85 l 457.93 394.569 l 455.53 394.569 l f 0.674 g 456.49 395.769 m 498.011 437.05 l 500.411 437.05 l 500.411 434.65 l 458.891 393.369 l 456.49 393.369 l f 0.662 g 457.69 394.569 m 498.971 435.85 l 501.371 435.85 l 501.371 433.45 l 460.091 392.169 l 457.69 392.169 l f 0.65 g 458.891 393.369 m 500.171 434.65 l 502.572 434.65 l 502.572 432.25 l 461.291 390.969 l 458.891 390.969 l f Q 0.27 w 0.55 G 460.331 454.195 m 471.782 454.195 481.076 444.848 481.076 433.33 c 481.076 421.812 471.782 412.464 460.331 412.464 c 448.879 412.464 439.585 421.812 439.585 433.33 c 439.585 444.848 448.879 454.195 460.331 454.195 c s 0.65 G 460.331 453.475 m 471.782 453.475 481.076 444.289 481.076 432.97 c 481.076 421.651 471.782 412.464 460.331 412.464 c 448.879 412.464 439.585 421.651 439.585 432.97 c 439.585 444.289 448.879 453.475 460.331 453.475 c s 0.9 G 460.331 453.475 m 471.517 453.475 480.596 444.289 480.596 432.97 c 480.596 421.651 471.517 412.464 460.331 412.464 c 449.144 412.464 440.065 421.651 440.065 432.97 c 440.065 444.289 449.144 453.475 460.331 453.475 c s 0.65 G 460.331 453.475 m 471.517 453.475 480.596 444.45 480.596 433.33 c 480.596 422.21 471.517 413.184 460.331 413.184 c 449.144 413.184 440.065 422.21 440.065 433.33 c 440.065 444.45 449.144 453.475 460.331 453.475 c s 0.55 G 460.331 452.995 m 471.252 452.995 480.116 444.078 480.116 433.09 c 480.116 422.102 471.252 413.184 460.331 413.184 c 449.409 413.184 440.545 422.102 440.545 433.09 c 440.545 444.078 449.409 452.995 460.331 452.995 c s 0 w BT 0 G 2.392 0 0 2.392 448.276 434.65 Tm (OneSick-)Tj ET 0.5 w 448.276 434.254 m 473.51 434.254 l S 0 w BT 2.392 0 0 2.392 451.721 427.69 Tm (Puppy)Tj ET 0.5 w 451.721 427.294 m 470.446 427.294 l S 0.405 w 2 j 277.686 299.047 m 254.166 341.528 l S 0 j 2 j 251.286 346.568 m 259.926 339.848 l 254.646 341.048 l 252.966 335.768 l 251.286 346.568 l b* 0 j 2 j 277.686 299.047 m 189.844 349.448 l S 0 j 2 j 184.804 352.328 m 195.604 350.648 l 190.564 348.968 l 191.524 343.928 l 184.804 352.328 l b* 0 j 2 j 277.686 299.047 m 301.927 341.528 l S 0 j 2 j 304.807 346.568 m 302.887 335.768 l 301.207 341.048 l 296.167 339.848 l 304.807 346.568 l b* 0 j 2 j 277.686 299.047 m 365.528 349.448 l S 0 j 2 j 370.808 352.328 m 363.848 343.928 l 365.048 348.968 l 359.768 350.648 l 370.808 352.328 l b* 0 j 2 j 168.724 366.728 m 145.203 409.209 l S 0 j 2 j 142.323 414.489 m 150.963 407.529 l 145.683 408.729 l 144.003 403.449 l 142.323 414.489 l b* 0 j 2 j 168.724 366.728 m 192.724 409.209 l S 0 j 2 j 195.604 414.489 m 193.924 403.449 l 192.244 408.729 l 186.964 407.529 l 195.604 414.489 l b* 0 j 2 j 386.889 366.248 m 332.168 414.97 l S 0 j 2 j 327.608 419.05 m 337.928 414.97 l 332.888 414.489 l 332.888 409.209 l 327.608 419.05 l b* 0 j 2 j 386.169 366.248 m 440.65 414.97 l S 0 j 2 j 445.45 419.05 m 440.17 409.209 l 440.17 414.489 l 435.13 414.97 l 445.45 419.05 l b* 0 j 2 j 386.889 386.889 m 386.889 406.329 l S 0 j 2 j 386.889 412.809 m 390.729 402.249 l 386.889 405.849 l 382.809 402.249 l 386.889 412.809 l b* 0 j 2.4 w q 281.526 319.927 m 274.086 319.927 l 271.686 319.447 l 270.006 318.727 l 268.806 318.247 l 267.846 317.527 l 266.646 317.047 l 265.926 316.567 l 264.966 315.847 l 264.246 315.367 l 263.766 314.887 l 263.046 314.167 l 262.566 313.687 l 262.086 312.967 l 261.366 312.487 l 260.886 312.007 l 260.166 310.807 l 259.686 310.087 l 259.206 309.127 l 258.486 307.927 l 258.006 306.727 l 257.286 305.047 l 256.806 302.647 l 256.806 295.207 l 257.286 295.207 l 257.286 293.047 l 258.006 293.047 l 258.006 291.127 l 258.486 291.127 l 258.486 290.167 l 259.206 290.167 l 259.206 288.967 l 259.686 288.967 l 259.686 287.767 l 260.166 287.767 l 260.166 287.287 l 260.886 287.287 l 260.886 286.087 l 261.366 286.087 l 261.366 285.607 l 262.086 285.607 l 262.086 284.887 l 262.566 284.887 l 262.566 284.407 l 263.046 284.407 l 263.046 283.686 l 263.766 283.686 l 263.766 283.206 l 264.246 283.206 l 264.246 282.726 l 264.966 282.726 l 264.966 282.006 l 265.926 282.006 l 265.926 281.526 l 266.646 281.526 l 266.646 280.806 l 267.846 280.806 l 267.846 280.326 l 268.806 280.326 l 268.806 279.846 l 270.006 279.846 l 270.006 279.126 l 271.686 279.126 l 271.686 278.646 l 274.086 278.646 l 274.086 277.926 l 281.526 277.926 l 281.526 278.646 l 283.686 279.126 l 285.607 279.846 l 286.567 280.326 l 287.767 280.806 l 288.967 281.526 l 289.447 282.006 l 290.647 282.726 l 291.367 283.206 l 291.847 283.686 l 292.327 284.407 l 293.047 284.887 l 293.527 285.607 l 294.247 286.087 l 294.727 287.287 l 295.207 287.767 l 295.927 288.967 l 296.407 290.167 l 297.127 291.127 l 297.607 293.047 l 298.087 295.207 l 298.807 302.647 l 298.087 302.647 l 298.087 305.047 l 297.607 305.047 l 297.607 306.727 l 297.127 306.727 l 297.127 307.927 l 296.407 307.927 l 296.407 309.127 l 295.927 309.127 l 295.927 310.087 l 295.207 310.087 l 295.207 310.807 l 294.727 310.807 l 294.727 312.007 l 294.247 312.007 l 294.247 312.487 l 293.527 312.487 l 293.527 312.967 l 293.047 312.967 l 293.047 313.687 l 292.327 313.687 l 292.327 314.167 l 291.847 314.167 l 291.847 314.887 l 291.367 314.887 l 291.367 315.367 l 290.647 315.367 l 290.647 315.847 l 289.447 315.847 l 289.447 316.567 l 288.967 316.567 l 288.967 317.047 l 287.767 317.047 l 287.767 317.527 l 286.567 317.527 l 286.567 318.247 l 285.607 318.247 l 285.607 318.727 l 283.686 318.727 l 283.686 319.447 l 281.526 319.447 l 281.526 319.927 l W n 0.65 g 236.165 300.487 m 277.446 341.768 l 279.846 341.768 l 279.846 339.368 l 238.565 298.087 l 236.165 298.087 l f 0.662 g 237.365 298.807 m 278.646 340.088 l 281.046 340.088 l 281.046 337.688 l 239.765 296.407 l 237.365 296.407 l f 0.674 g 238.565 297.607 m 279.846 338.888 l 282.246 338.888 l 282.246 336.488 l 240.966 295.207 l 238.565 295.207 l f 0.685 g 239.525 296.407 m 281.046 337.688 l 283.446 337.688 l 283.446 335.288 l 241.926 294.007 l 239.525 294.007 l f 0.697 g 240.726 295.207 m 282.006 336.488 l 284.407 336.488 l 284.407 334.088 l 243.126 292.807 l 240.726 292.807 l f 0.709 g 241.926 294.007 m 283.206 335.528 l 285.607 335.528 l 285.607 333.128 l 244.326 291.607 l 241.926 291.607 l f 0.721 g 243.126 293.047 m 284.407 334.328 l 286.807 334.328 l 286.807 331.928 l 245.526 290.647 l 243.126 290.647 l f 0.732 g 244.086 291.847 m 285.607 333.128 l 288.007 333.128 l 288.007 330.728 l 246.486 289.447 l 244.086 289.447 l f 0.744 g 245.286 290.647 m 286.567 331.928 l 288.967 331.928 l 288.967 329.528 l 247.686 288.247 l 245.286 288.247 l f 0.756 g 246.486 289.447 m 287.767 330.728 l 290.167 330.728 l 290.167 328.328 l 248.886 287.047 l 246.486 287.047 l f 0.768 g 247.686 288.487 m 288.967 329.768 l 291.367 329.768 l 291.367 327.367 l 250.086 286.087 l 247.686 286.087 l f 0.779 g 248.886 287.287 m 290.167 328.568 l 292.567 328.568 l 292.567 326.167 l 251.286 284.887 l 248.886 284.887 l f 0.791 g 249.846 286.087 m 291.367 327.367 l 293.767 327.367 l 293.767 324.967 l 252.246 283.686 l 249.846 283.686 l f 0.803 g 251.046 28 2000 4.887 m 292.327 326.167 l 294.727 326.167 l 294.727 323.767 l 253.446 282.486 l 251.046 282.486 l f 0.815 g 252.246 283.686 m 293.527 325.207 l 295.927 325.207 l 295.927 322.807 l 254.646 281.286 l 252.246 281.286 l f 0.826 g 253.446 282.726 m 294.727 324.007 l 297.127 324.007 l 297.127 321.607 l 255.846 280.326 l 253.446 280.326 l f 0.838 g 254.406 281.526 m 295.927 322.807 l 298.327 322.807 l 298.327 320.407 l 256.806 279.126 l 254.406 279.126 l f 0.85 g 255.606 280.326 m 297.127 321.607 l 299.527 321.607 l 299.527 319.207 l 258.006 277.926 l 255.606 277.926 l f 256.806 279.126 m 298.087 320.407 l 300.487 320.407 l 300.487 318.007 l 259.206 276.726 l 256.806 276.726 l f 0.838 g 258.006 277.446 m 299.287 318.727 l 301.687 318.727 l 301.687 316.327 l 260.406 275.046 l 258.006 275.046 l f 0.826 g 259.206 276.246 m 300.487 317.527 l 302.887 317.527 l 302.887 315.127 l 261.606 273.846 l 259.206 273.846 l f 0.815 g 260.166 275.046 m 301.687 316.567 l 304.087 316.567 l 304.087 314.167 l 262.566 272.646 l 260.166 272.646 l f 0.803 g 261.366 274.086 m 302.647 315.367 l 305.047 315.367 l 305.047 312.967 l 263.766 271.686 l 261.366 271.686 l f 0.791 g 262.566 272.886 m 303.847 314.167 l 306.247 314.167 l 306.247 311.767 l 264.966 270.486 l 262.566 270.486 l f 0.779 g 263.766 271.686 m 305.047 312.967 l 307.447 312.967 l 307.447 310.567 l 266.166 269.286 l 263.766 269.286 l f 0.768 g 264.966 270.486 m 306.247 312.007 l 308.647 312.007 l 308.647 309.607 l 267.366 268.086 l 264.966 268.086 l f 0.756 g 265.926 269.526 m 307.447 310.807 l 309.847 310.807 l 309.847 308.407 l 268.326 267.126 l 265.926 267.126 l f 0.744 g 267.126 268.326 m 308.407 309.607 l 310.807 309.607 l 310.807 307.207 l 269.526 265.926 l 267.126 265.926 l f 0.732 g 268.326 267.126 m 309.607 308.407 l 312.007 308.407 l 312.007 306.007 l 270.726 264.726 l 268.326 264.726 l f 0.721 g 269.526 265.926 m 310.807 307.207 l 313.207 307.207 l 313.207 304.807 l 271.926 263.526 l 269.526 263.526 l f 0.709 g 270.486 264.726 m 312.007 306.247 l 314.407 306.247 l 314.407 303.847 l 272.886 262.326 l 270.486 262.326 l f 0.697 g 271.686 263.766 m 312.967 305.047 l 315.367 305.047 l 315.367 302.647 l 274.086 261.366 l 271.686 261.366 l f 0.685 g 272.886 262.566 m 314.167 303.847 l 316.567 303.847 l 316.567 301.447 l 275.286 260.166 l 272.886 260.166 l f 0.674 g 274.086 261.366 m 315.367 302.647 l 317.767 302.647 l 317.767 300.247 l 276.486 258.966 l 274.086 258.966 l f 0.662 g 275.286 260.166 m 316.567 301.687 l 318.967 301.687 l 318.967 299.287 l 277.686 257.766 l 275.286 257.766 l f 0.65 g 276.246 259.206 m 317.767 300.487 l 320.167 300.487 l 320.167 298.087 l 278.646 256.806 l 276.246 256.806 l f Q 0.27 w 0.55 G 277.806 319.792 m 289.324 319.792 298.672 310.445 298.672 298.927 c 298.672 287.409 289.324 278.061 277.806 278.061 c 266.289 278.061 256.941 287.409 256.941 298.927 c 256.941 310.445 266.289 319.792 277.806 319.792 c s 0.65 G 277.806 319.792 m 289.324 319.792 298.672 310.606 298.672 299.287 c 298.672 287.968 289.324 278.781 277.806 278.781 c 266.289 278.781 256.941 287.968 256.941 299.287 c 256.941 310.606 266.289 319.792 277.806 319.792 c s 0.9 G 277.686 319.792 m 288.873 319.792 297.952 310.606 297.952 299.287 c 297.952 287.968 288.873 278.781 277.686 278.781 c 266.5 278.781 257.421 287.968 257.421 299.287 c 257.421 310.606 266.5 319.792 277.686 319.792 c s 0.65 G 277.686 319.312 m 288.873 319.312 297.952 310.233 297.952 299.047 c 297.952 287.86 288.873 278.781 277.686 278.781 c 266.5 278.781 257.421 287.86 257.421 299.047 c 257.421 310.233 266.5 319.312 277.686 319.312 c s 0.55 G 278.046 319.312 m 289.034 319.312 297.952 310.341 297.952 299.287 c 297.952 288.233 289.034 279.261 278.046 279.261 c 267.059 279.261 258.141 288.233 258.141 299.287 c 258.141 310.341 267.059 319.312 278.046 319.312 c s 0 w BT /F3 3.6 Tf 0 G 2.392 0 0 2.392 260.551 296.887 Tm (PerlGuru)Tj ET 0.5 w 260.551 296.347 m 296.143 296.347 l S 2.4 w q 317.767 387.129 m 310.807 387.129 l 307.927 386.409 l 306.727 385.929 l 305.047 385.449 l 303.847 384.729 l 302.647 384.249 l 302.167 383.769 l 301.687 383.049 l 300.487 382.569 l 299.767 381.849 l 299.287 381.369 l 298.807 380.889 l 298.087 380.169 l 297.607 379.689 l 297.127 378.969 l 296.407 378.009 l 295.927 377.289 l 295.207 376.089 l 294.727 375.129 l 294.247 373.929 l 293.527 372.249 l 293.047 369.848 l 293.047 362.408 l 293.527 362.408 l 293.527 360.008 l 294.247 360.008 l 294.247 358.328 l 294.727 358.328 l 294.727 357.368 l 295.207 357.368 l 295.207 356.168 l 295.927 356.168 l 295.927 354.968 l 296.407 354.968 l 296.407 354.488 l 297.127 354.488 l 297.127 353.288 l 297.607 353.288 l 297.607 352.568 l 298.087 352.568 l 298.087 352.088 l 298.807 352.088 l 298.807 351.608 l 299.287 351.608 l 299.287 350.888 l 299.767 350.888 l 299.767 350.408 l 300.487 350.408 l 300.487 349.688 l 301.687 349.688 l 301.687 349.208 l 302.167 349.208 l 302.167 348.728 l 302.647 348.728 l 302.647 348.008 l 303.847 348.008 l 303.847 347.528 l 305.047 347.528 l 305.047 346.808 l 306.727 346.808 l 306.727 346.328 l 307.927 346.328 l 307.927 345.848 l 310.807 345.848 l 310.807 345.128 l 317.767 345.128 l 317.767 345.848 l 320.647 346.328 l 321.607 346.808 l 323.527 347.528 l 324.487 348.008 l 325.687 348.728 l 326.167 349.208 l 326.887 349.688 l 328.088 350.408 l 328.568 350.888 l 329.048 351.608 l 329.768 352.088 l 330.248 352.568 l 330.968 353.288 l 331.448 354.488 l 331.928 354.968 l 332.648 356.168 l 333.128 357.368 l 333.848 358.328 l 334.328 360.008 l 334.808 362.408 l 335.528 369.848 l 334.808 369.848 l 334.808 372.249 l 334.328 372.249 l 334.328 373.929 l 333.848 373.929 l 333.848 375.129 l 333.128 375.129 l 333.128 376.089 l 332.648 376.089 l 332.648 377.289 l 331.928 377.289 l 331.928 378.009 l 331.448 378.009 l 331.448 378.969 l 330.968 378.969 l 330.968 379.689 l 330.248 379.689 l 330.248 380.169 l 329.768 380.169 l 329.768 380.889 l 329.048 380.889 l 329.048 381.369 l 328.568 381.369 l 328.568 381.849 l 328.088 381.849 l 328.088 382.569 l 326.887 382.569 l 326.887 383.049 l 326.167 383.049 l 326.167 383.769 l 325.687 383.769 l 325.687 384.249 l 324.487 384.249 l 324.487 384.729 l 323.527 384.729 l 323.527 385.449 l 321.607 385.449 l 321.607 385.929 l 320.647 385.929 l 320.647 386.409 l 317.767 386.409 l 317.767 387.129 l W n 0.65 g 271.686 367.688 m 312.967 408.969 l 315.367 408.969 l 315.367 406.569 l 274.086 365.288 l 271.686 365.288 l f 0.662 g 273.366 365.768 m 314.887 407.289 l 317.287 407.289 l 317.287 404.889 l 275.766 363.368 l 273.366 363.368 l f 0.674 g 274.566 364.808 m 315.847 406.089 l 318.247 406.089 l 318.247 403.689 l 276.966 362.408 l 274.566 362.408 l f 0.685 g 275.766 363.608 m 317.047 404.889 l 319.447 404.889 l 319.447 402.489 l 278.166 361.208 l 275.766 361.208 l f 0.697 g 276.966 362.408 m 318.247 403.689 l 320.647 403.689 l 320.647 401.289 l 279.366 360.008 l 276.966 360.008 l f 0.709 g 278.166 361.208 m 319.447 402.489 l 321.847 402.489 l 321.847 400.089 l 280.566 358.808 l 278.166 358.808 l f 0.721 g 279.126 360.008 m 320.647 401.529 l 323.047 401.529 l 323.047 399.129 l 281.526 357.608 l 279.126 357.608 l f 0.732 g 280.326 359.048 m 321.607 400.329 l 324.007 400.329 l 324.007 397.929 l 282.726 356.648 l 280.326 356.648 l f 0.744 g 281.526 357.848 m 322.807 399.129 l 325.207 399.129 l 325.207 396.729 l 283.927 355.448 l 281.526 355.448 l f 0.756 g 282.726 356.648 m 324.007 397.929 l 326.407 397.929 l 326.407 395.529 l 285.127 354.248 l 282.726 354.248 l f 0.768 g 283.686 355.448 m 325.207 396.969 l 327.608 396.969 l 327.608 394.569 l 286.087 353.048 l 283.686 353.048 l f 0.779 g 284.887 354.488 m 326.167 395.769 l 328.568 395.769 l 328.568 393.369 l 287.287 352.088 l 284.887 352.088 l f 0.791 g 286.087 2000 353.288 m 327.367 394.569 l 329.768 394.569 l 329.768 392.169 l 288.487 350.888 l 286.087 350.888 l f 0.803 g 287.287 352.088 m 328.568 393.369 l 330.968 393.369 l 330.968 390.969 l 289.687 349.688 l 287.287 349.688 l f 0.815 g 288.487 350.888 m 329.768 392.169 l 332.168 392.169 l 332.168 389.769 l 290.887 348.488 l 288.487 348.488 l f 0.826 g 289.447 349.688 m 330.968 391.209 l 333.368 391.209 l 333.368 388.809 l 291.847 347.288 l 289.447 347.288 l f 0.838 g 290.647 348.728 m 331.928 390.009 l 334.328 390.009 l 334.328 387.609 l 293.047 346.328 l 290.647 346.328 l f 0.85 g 291.847 347.528 m 333.128 388.809 l 335.528 388.809 l 335.528 386.409 l 294.247 345.128 l 291.847 345.128 l f 293.047 346.328 m 334.328 387.609 l 336.728 387.609 l 336.728 385.209 l 295.447 343.928 l 293.047 343.928 l f 0.838 g 294.727 344.648 m 336.008 385.929 l 338.408 385.929 l 338.408 383.529 l 297.127 342.248 l 294.727 342.248 l f 0.826 g 295.927 343.448 m 337.208 384.729 l 339.608 384.729 l 339.608 382.329 l 298.327 341.048 l 295.927 341.048 l f 0.815 g 297.127 342.248 m 338.408 383.769 l 340.808 383.769 l 340.808 381.369 l 299.527 339.848 l 297.127 339.848 l f 0.803 g 298.087 341.288 m 339.608 382.569 l 342.008 382.569 l 342.008 380.169 l 300.487 338.888 l 298.087 338.888 l f 0.791 g 299.287 340.088 m 340.568 381.369 l 342.968 381.369 l 342.968 378.969 l 301.687 337.688 l 299.287 337.688 l f 0.779 g 300.487 338.888 m 341.768 380.169 l 344.168 380.169 l 344.168 377.769 l 302.887 336.488 l 300.487 336.488 l f 0.768 g 301.687 337.688 m 342.968 378.969 l 345.368 378.969 l 345.368 376.569 l 304.087 335.288 l 301.687 335.288 l f 0.756 g 302.647 336.488 m 344.168 378.009 l 346.568 378.009 l 346.568 375.609 l 305.047 334.088 l 302.647 334.088 l f 0.744 g 303.847 335.528 m 345.128 376.809 l 347.528 376.809 l 347.528 374.409 l 306.247 333.128 l 303.847 333.128 l f 0.732 g 305.047 334.328 m 346.328 375.609 l 348.728 375.609 l 348.728 373.209 l 307.447 331.928 l 305.047 331.928 l f 0.721 g 306.247 333.128 m 347.528 374.409 l 349.928 374.409 l 349.928 372.009 l 308.647 330.728 l 306.247 330.728 l f 0.709 g 307.447 331.928 m 348.728 373.209 l 351.128 373.209 l 351.128 370.808 l 309.847 329.528 l 307.447 329.528 l f 0.697 g 308.407 330.728 m 349.928 372.249 l 352.328 372.249 l 352.328 369.848 l 310.807 328.328 l 308.407 328.328 l f 0.685 g 309.607 329.768 m 350.888 371.048 l 353.288 371.048 l 353.288 368.648 l 312.007 327.367 l 309.607 327.367 l f 0.674 g 310.807 328.568 m 352.088 369.848 l 354.488 369.848 l 354.488 367.448 l 313.207 326.167 l 310.807 326.167 l f 0.662 g 312.007 327.367 m 353.288 368.648 l 355.688 368.648 l 355.688 366.248 l 314.407 324.967 l 312.007 324.967 l f 0.65 g 312.967 326.167 m 354.488 367.688 l 356.888 367.688 l 356.888 365.288 l 315.367 323.767 l 312.967 323.767 l f Q 0.27 w 0.55 G 313.927 386.994 m 325.379 386.994 334.673 377.646 334.673 366.128 c 334.673 354.611 325.379 345.263 313.927 345.263 c 302.476 345.263 293.182 354.611 293.182 366.128 c 293.182 377.646 302.476 386.994 313.927 386.994 c s 0.65 G 314.167 386.994 m 325.486 386.994 334.673 377.646 334.673 366.128 c 334.673 354.611 325.486 345.263 314.167 345.263 c 302.848 345.263 293.662 354.611 293.662 366.128 c 293.662 377.646 302.848 386.994 314.167 386.994 c s 0.9 G 314.167 386.274 m 325.486 386.274 334.673 377.249 334.673 366.128 c 334.673 355.008 325.486 345.983 314.167 345.983 c 302.848 345.983 293.662 355.008 293.662 366.128 c 293.662 377.249 302.848 386.274 314.167 386.274 c s 0.65 G 314.287 386.274 m 325.275 386.274 334.193 377.249 334.193 366.128 c 334.193 355.008 325.275 345.983 314.287 345.983 c 303.299 345.983 294.382 355.008 294.382 366.128 c 294.382 377.249 303.299 386.274 314.287 386.274 c s 0.55 G 314.287 385.794 m 325.275 385.794 334.193 376.876 334.193 365.888 c 334.193 354.901 325.275 345.983 314.287 345.983 c 303.299 345.983 294.382 354.901 294.382 365.888 c 294.382 376.876 303.299 385.794 314.287 385.794 c s 0 w BT /F3 2.64 Tf 0 G 2.392 0 0 2.392 301.885 364.088 Tm (Educator)Tj ET 0.5 w 301.885 363.692 m 327.369 363.692 l S 2.4 w q 245.286 387.129 m 237.845 387.129 l 235.685 386.409 l 233.765 385.929 l 232.805 385.449 l 231.605 384.729 l 230.405 384.249 l 229.925 383.769 l 228.725 383.049 l 228.005 382.569 l 227.525 381.849 l 227.045 381.369 l 226.325 380.889 l 225.845 380.169 l 225.365 379.689 l 224.645 378.969 l 224.165 378.009 l 223.445 377.289 l 222.965 376.089 l 222.485 375.129 l 221.765 373.929 l 221.285 372.249 l 220.565 369.848 l 220.565 362.408 l 221.285 362.408 l 221.285 360.008 l 221.765 360.008 l 221.765 358.328 l 222.485 358.328 l 222.485 357.368 l 222.965 357.368 l 222.965 356.168 l 223.445 356.168 l 223.445 354.968 l 224.165 354.968 l 224.165 354.488 l 224.645 354.488 l 224.645 353.288 l 225.365 353.288 l 225.365 352.568 l 225.845 352.568 l 225.845 352.088 l 226.325 352.088 l 226.325 351.608 l 227.045 351.608 l 227.045 350.888 l 227.525 350.888 l 227.525 350.408 l 228.005 350.408 l 228.005 349.688 l 228.725 349.688 l 228.725 349.208 l 229.925 349.208 l 229.925 348.728 l 230.405 348.728 l 230.405 348.008 l 231.605 348.008 l 231.605 347.528 l 232.805 347.528 l 232.805 346.808 l 233.765 346.808 l 233.765 346.328 l 235.685 346.328 l 235.685 345.848 l 237.845 345.848 l 237.845 345.128 l 245.286 345.128 l 245.286 345.848 l 247.686 346.328 l 249.366 346.808 l 250.566 347.528 l 251.766 348.008 l 252.726 348.728 l 253.446 349.208 l 254.406 349.688 l 255.126 350.408 l 255.606 350.888 l 256.326 351.608 l 256.806 352.088 l 257.286 352.568 l 258.006 353.288 l 258.486 354.488 l 259.206 354.968 l 259.686 356.168 l 260.166 357.368 l 260.886 358.328 l 261.366 360.008 l 262.086 362.408 l 262.566 369.848 l 262.086 369.848 l 262.086 372.249 l 261.366 372.249 l 261.366 373.929 l 260.886 373.929 l 260.886 375.129 l 260.166 375.129 l 260.166 376.089 l 259.686 376.089 l 259.686 377.289 l 259.206 377.289 l 259.206 378.009 l 258.486 378.009 l 258.486 378.969 l 258.006 378.969 l 258.006 379.689 l 257.286 379.689 l 257.286 380.169 l 256.806 380.169 l 256.806 380.889 l 256.326 380.889 l 256.326 381.369 l 255.606 381.369 l 255.606 381.849 l 255.126 381.849 l 255.126 382.569 l 254.406 382.569 l 254.406 383.049 l 253.446 383.049 l 253.446 383.769 l 252.726 383.769 l 252.726 384.249 l 251.766 384.249 l 251.766 384.729 l 250.566 384.729 l 250.566 385.449 l 249.366 385.449 l 249.366 385.929 l 247.686 385.929 l 247.686 386.409 l 245.286 386.409 l 245.286 387.129 l W n 0.65 g 199.925 367.688 m 241.206 408.969 l 243.606 408.969 l 243.606 406.569 l 202.325 365.288 l 199.925 365.288 l f 0.662 g 201.125 365.768 m 242.406 407.289 l 244.806 407.289 l 244.806 404.889 l 203.525 363.368 l 201.125 363.368 l f 0.674 g 202.325 364.808 m 243.606 406.089 l 246.006 406.089 l 246.006 403.689 l 204.725 362.408 l 202.325 362.408 l f 0.685 g 203.525 363.608 m 244.806 404.889 l 247.206 404.889 l 247.206 402.489 l 205.925 361.208 l 203.525 361.208 l f 0.697 g 204.485 362.408 m 246.006 403.689 l 248.406 403.689 l 248.406 401.289 l 206.885 360.008 l 204.485 360.008 l f 0.709 g 205.685 361.208 m 246.966 402.489 l 249.366 402.489 l 249.366 400.089 l 208.085 358.808 l 205.685 358.808 l f 0.721 g 206.885 360.008 m 248.166 401.529 l 250.566 401.529 l 250.566 399.129 l 209.285 357.608 l 206.885 357.608 l f 0.732 g 208.085 359.048 m 249.366 400.329 l 251.766 400.329 l 251.766 397.929 l 210.485 356.648 l 208.085 356.648 l f 0.744 g 209.285 357.848 m 250.566 399.129 l 252.966 399.129 l 252.966 396.729 l 211.685 355.448 l 209.285 355.448 l f 0.756 g 210.245 356.648 m 251.766 397.929 l 254.166 397.929 l 254.166 395.529 l 212.645 354.248 l 210.245 354.248 l f 0.768 g 211.445 355.448 m 252.726 396.969 l 255.126 396.969 l 255.126 394.569 l 213.845 353.048 l 211.445 353.048 l f 0. 2000 779 g 212.645 354.488 m 253.926 395.769 l 256.326 395.769 l 256.326 393.369 l 215.045 352.088 l 212.645 352.088 l f 0.791 g 213.845 353.288 m 255.126 394.569 l 257.526 394.569 l 257.526 392.169 l 216.245 350.888 l 213.845 350.888 l f 0.803 g 214.805 352.088 m 256.326 393.369 l 258.726 393.369 l 258.726 390.969 l 217.205 349.688 l 214.805 349.688 l f 0.815 g 216.005 350.888 m 257.286 392.169 l 259.686 392.169 l 259.686 389.769 l 218.405 348.488 l 216.005 348.488 l f 0.826 g 217.205 349.688 m 258.486 391.209 l 260.886 391.209 l 260.886 388.809 l 219.605 347.288 l 217.205 347.288 l f 0.838 g 218.405 348.728 m 259.686 390.009 l 262.086 390.009 l 262.086 387.609 l 220.805 346.328 l 218.405 346.328 l f 0.85 g 219.605 347.528 m 260.886 388.809 l 263.286 388.809 l 263.286 386.409 l 222.005 345.128 l 219.605 345.128 l f 220.565 346.328 m 262.086 387.609 l 264.486 387.609 l 264.486 385.209 l 222.965 343.928 l 220.565 343.928 l f 0.838 g 221.765 344.648 m 263.046 385.929 l 265.446 385.929 l 265.446 383.529 l 224.165 342.248 l 221.765 342.248 l f 0.826 g 222.965 343.448 m 264.246 384.729 l 266.646 384.729 l 266.646 382.329 l 225.365 341.048 l 222.965 341.048 l f 0.815 g 224.165 342.248 m 265.446 383.769 l 267.846 383.769 l 267.846 381.369 l 226.565 339.848 l 224.165 339.848 l f 0.803 g 225.365 341.288 m 266.646 382.569 l 269.046 382.569 l 269.046 380.169 l 227.765 338.888 l 225.365 338.888 l f 0.791 g 226.325 340.088 m 267.846 381.369 l 270.246 381.369 l 270.246 378.969 l 228.725 337.688 l 226.325 337.688 l f 0.779 g 227.525 338.888 m 268.806 380.169 l 271.206 380.169 l 271.206 377.769 l 229.925 336.488 l 227.525 336.488 l f 0.768 g 228.725 337.688 m 270.006 378.969 l 272.406 378.969 l 272.406 376.569 l 231.125 335.288 l 228.725 335.288 l f 0.756 g 229.925 336.488 m 271.206 378.009 l 273.606 378.009 l 273.606 375.609 l 232.325 334.088 l 229.925 334.088 l f 0.744 g 230.885 335.528 m 272.406 376.809 l 274.806 376.809 l 274.806 374.409 l 233.285 333.128 l 230.885 333.128 l f 0.732 g 232.085 334.328 m 273.366 375.609 l 275.766 375.609 l 275.766 373.209 l 234.485 331.928 l 232.085 331.928 l f 0.721 g 233.285 333.128 m 274.566 374.409 l 276.966 374.409 l 276.966 372.009 l 235.685 330.728 l 233.285 330.728 l f 0.709 g 234.485 331.928 m 275.766 373.209 l 278.166 373.209 l 278.166 370.808 l 236.885 329.528 l 234.485 329.528 l f 0.697 g 235.685 330.728 m 276.966 372.249 l 279.366 372.249 l 279.366 369.848 l 238.085 328.328 l 235.685 328.328 l f 0.685 g 236.645 329.768 m 278.166 371.048 l 280.566 371.048 l 280.566 368.648 l 239.045 327.367 l 236.645 327.367 l f 0.674 g 237.845 328.568 m 279.126 369.848 l 281.526 369.848 l 281.526 367.448 l 240.246 326.167 l 237.845 326.167 l f 0.662 g 239.045 327.367 m 280.326 368.648 l 282.726 368.648 l 282.726 366.248 l 241.446 324.967 l 239.045 324.967 l f 0.65 g 240.246 326.167 m 281.526 367.688 l 283.927 367.688 l 283.927 365.288 l 242.646 323.767 l 240.246 323.767 l f Q 0.27 w 0.55 G 241.566 386.994 m 253.083 386.994 262.431 377.646 262.431 366.128 c 262.431 354.611 253.083 345.263 241.566 345.263 c 230.048 345.263 220.7 354.611 220.7 366.128 c 220.7 377.646 230.048 386.994 241.566 386.994 c s 0.65 G 241.566 386.994 m 253.083 386.994 262.431 377.646 262.431 366.128 c 262.431 354.611 253.083 345.263 241.566 345.263 c 230.048 345.263 220.7 354.611 220.7 366.128 c 220.7 377.646 230.048 386.994 241.566 386.994 c s 0.9 G 241.686 386.274 m 252.872 386.274 261.951 377.249 261.951 366.128 c 261.951 355.008 252.872 345.983 241.686 345.983 c 230.499 345.983 221.42 355.008 221.42 366.128 c 221.42 377.249 230.499 386.274 241.686 386.274 c s 0.65 G 241.686 386.274 m 252.872 386.274 261.951 377.249 261.951 366.128 c 261.951 355.008 252.872 345.983 241.686 345.983 c 230.499 345.983 221.42 355.008 221.42 366.128 c 221.42 377.249 230.499 386.274 241.686 386.274 c s 0.55 G 241.566 385.794 m 252.421 385.794 261.231 376.876 261.231 365.888 c 261.231 354.901 252.421 345.983 241.566 345.983 c 230.71 345.983 221.9 354.901 221.9 365.888 c 221.9 376.876 230.71 385.794 241.566 385.794 c s 0 w BT 0 G 2.392 0 0 2.392 226.681 367.448 Tm (Language-)Tj ET 0.5 w 226.681 367.052 m 256.487 367.052 l S 0 w BT 2.392 0 0 2.392 230.125 360.488 Tm (Maestro)Tj ET 0.5 w 230.125 360.092 m 252.957 360.092 l S 2.4 w q 172.324 387.129 m 165.604 387.129 l 162.724 386.409 l 161.524 385.929 l 159.844 385.449 l 158.644 384.729 l 157.444 384.249 l 156.964 383.769 l 156.244 383.049 l 155.284 382.569 l 154.564 381.849 l 154.084 381.369 l 153.604 380.889 l 152.884 380.169 l 152.403 379.689 l 151.683 378.969 l 151.203 378.009 l 150.723 377.289 l 150.003 376.089 l 149.523 375.129 l 148.803 373.929 l 148.323 372.249 l 147.843 369.848 l 147.843 362.408 l 148.323 362.408 l 148.323 360.008 l 148.803 360.008 l 148.803 358.328 l 149.523 358.328 l 149.523 357.368 l 150.003 357.368 l 150.003 356.168 l 150.723 356.168 l 150.723 354.968 l 151.203 354.968 l 151.203 354.488 l 151.683 354.488 l 151.683 353.288 l 152.403 353.288 l 152.403 352.568 l 152.884 352.568 l 152.884 352.088 l 153.604 352.088 l 153.604 351.608 l 154.084 351.608 l 154.084 350.888 l 154.564 350.888 l 154.564 350.408 l 155.284 350.408 l 155.284 349.688 l 156.244 349.688 l 156.244 349.208 l 156.964 349.208 l 156.964 348.728 l 157.444 348.728 l 157.444 348.008 l 158.644 348.008 l 158.644 347.528 l 159.844 347.528 l 159.844 346.808 l 161.524 346.808 l 161.524 346.328 l 162.724 346.328 l 162.724 345.848 l 165.604 345.848 l 165.604 345.128 l 172.324 345.128 l 172.324 345.848 l 175.204 346.328 l 176.404 346.808 l 178.084 347.528 l 179.284 348.008 l 180.484 348.728 l 180.964 349.208 l 181.684 349.688 l 182.644 350.408 l 183.364 350.888 l 183.844 351.608 l 184.564 352.088 l 185.044 352.568 l 185.524 353.288 l 186.244 354.488 l 186.724 354.968 l 187.444 356.168 l 187.924 357.368 l 188.404 358.328 l 189.124 360.008 l 189.604 362.408 l 190.324 369.848 l 189.604 369.848 l 189.604 372.249 l 189.124 372.249 l 189.124 373.929 l 188.404 373.929 l 188.404 375.129 l 187.924 375.129 l 187.924 376.089 l 187.444 376.089 l 187.444 377.289 l 186.724 377.289 l 186.724 378.009 l 186.244 378.009 l 186.244 378.969 l 185.524 378.969 l 185.524 379.689 l 185.044 379.689 l 185.044 380.169 l 184.564 380.169 l 184.564 380.889 l 183.844 380.889 l 183.844 381.369 l 183.364 381.369 l 183.364 381.849 l 182.644 381.849 l 182.644 382.569 l 181.684 382.569 l 181.684 383.049 l 180.964 383.049 l 180.964 383.769 l 180.484 383.769 l 180.484 384.249 l 179.284 384.249 l 179.284 384.729 l 178.084 384.729 l 178.084 385.449 l 176.404 385.449 l 176.404 385.929 l 175.204 385.929 l 175.204 386.409 l 172.324 386.409 l 172.324 387.129 l W n 0.65 g 126.483 367.688 m 167.764 408.969 l 170.164 408.969 l 170.164 406.569 l 128.883 365.288 l 126.483 365.288 l f 0.662 g 128.163 365.768 m 169.444 407.289 l 171.844 407.289 l 171.844 404.889 l 130.563 363.368 l 128.163 363.368 l f 0.674 g 129.363 364.808 m 170.644 406.089 l 173.044 406.089 l 173.044 403.689 l 131.763 362.408 l 129.363 362.408 l f 0.685 g 130.563 363.608 m 171.844 404.889 l 174.244 404.889 l 174.244 402.489 l 132.963 361.208 l 130.563 361.208 l f 0.697 g 131.763 362.408 m 173.044 403.689 l 175.444 403.689 l 175.444 401.289 l 134.163 360.008 l 131.763 360.008 l f 0.709 g 132.723 361.208 m 174.244 402.489 l 176.644 402.489 l 176.644 400.089 l 135.123 358.808 l 132.723 358.808 l f 0.721 g 133.923 360.008 m 175.204 401.529 l 177.604 401.529 l 177.604 399.129 l 136.323 357.608 l 133.923 357.608 l f 0.732 g 135.123 359.048 m 176.404 400.329 l 178.804 400.329 l 178.804 397.929 l 137.523 356.648 l 135.123 356.648 l f 0.744 g 136.323 357.848 m 177.604 399.129 l 180.004 399.129 l 180.004 396.729 l 138.723 355.448 l 136.323 355.448 l f 0.756 g 137.523 356.648 m 178.804 397.929 l 2000 181.204 397.929 l 181.204 395.529 l 139.923 354.248 l 137.523 354.248 l f 0.768 g 138.483 355.448 m 180.004 396.969 l 182.404 396.969 l 182.404 394.569 l 140.883 353.048 l 138.483 353.048 l f 0.779 g 139.683 354.488 m 180.964 395.769 l 183.364 395.769 l 183.364 393.369 l 142.083 352.088 l 139.683 352.088 l f 0.791 g 140.883 353.288 m 182.164 394.569 l 184.564 394.569 l 184.564 392.169 l 143.283 350.888 l 140.883 350.888 l f 0.803 g 142.083 352.088 m 183.364 393.369 l 185.764 393.369 l 185.764 390.969 l 144.483 349.688 l 142.083 349.688 l f 0.815 g 143.043 350.888 m 184.564 392.169 l 186.964 392.169 l 186.964 389.769 l 145.443 348.488 l 143.043 348.488 l f 0.826 g 144.243 349.688 m 185.524 391.209 l 187.924 391.209 l 187.924 388.809 l 146.643 347.288 l 144.243 347.288 l f 0.838 g 145.443 348.728 m 186.724 390.009 l 189.124 390.009 l 189.124 387.609 l 147.843 346.328 l 145.443 346.328 l f 0.85 g 146.643 347.528 m 187.924 388.809 l 190.324 388.809 l 190.324 386.409 l 149.043 345.128 l 146.643 345.128 l f 147.843 346.328 m 189.124 387.609 l 191.524 387.609 l 191.524 385.209 l 150.243 343.928 l 147.843 343.928 l f 0.838 g 149.523 344.648 m 190.804 385.929 l 193.204 385.929 l 193.204 383.529 l 151.923 342.248 l 149.523 342.248 l f 0.826 g 150.723 343.448 m 192.004 384.729 l 194.404 384.729 l 194.404 382.329 l 153.124 341.048 l 150.723 341.048 l f 0.815 g 151.683 342.248 m 193.204 383.769 l 195.604 383.769 l 195.604 381.369 l 154.084 339.848 l 151.683 339.848 l f 0.803 g 152.884 341.288 m 194.164 382.569 l 196.565 382.569 l 196.565 380.169 l 155.284 338.888 l 152.884 338.888 l f 0.791 g 154.084 340.088 m 195.364 381.369 l 197.765 381.369 l 197.765 378.969 l 156.484 337.688 l 154.084 337.688 l f 0.779 g 155.284 338.888 m 196.565 380.169 l 198.965 380.169 l 198.965 377.769 l 157.684 336.488 l 155.284 336.488 l f 0.768 g 156.244 337.688 m 197.765 378.969 l 200.165 378.969 l 200.165 376.569 l 158.644 335.288 l 156.244 335.288 l f 0.756 g 157.444 336.488 m 198.725 378.009 l 201.125 378.009 l 201.125 375.609 l 159.844 334.088 l 157.444 334.088 l f 0.744 g 158.644 335.528 m 199.925 376.809 l 202.325 376.809 l 202.325 374.409 l 161.044 333.128 l 158.644 333.128 l f 0.732 g 159.844 334.328 m 201.125 375.609 l 203.525 375.609 l 203.525 373.209 l 162.244 331.928 l 159.844 331.928 l f 0.721 g 161.044 333.128 m 202.325 374.409 l 204.725 374.409 l 204.725 372.009 l 163.444 330.728 l 161.044 330.728 l f 0.709 g 162.004 331.928 m 203.525 373.209 l 205.925 373.209 l 205.925 370.808 l 164.404 329.528 l 162.004 329.528 l f 0.697 g 163.204 330.728 m 204.485 372.249 l 206.885 372.249 l 206.885 369.848 l 165.604 328.328 l 163.204 328.328 l f 0.685 g 164.404 329.768 m 205.685 371.048 l 208.085 371.048 l 208.085 368.648 l 166.804 327.367 l 164.404 327.367 l f 0.674 g 165.604 328.568 m 206.885 369.848 l 209.285 369.848 l 209.285 367.448 l 168.004 326.167 l 165.604 326.167 l f 0.662 g 166.804 327.367 m 208.085 368.648 l 210.485 368.648 l 210.485 366.248 l 169.204 324.967 l 166.804 324.967 l f 0.65 g 167.764 326.167 m 209.285 367.688 l 211.685 367.688 l 211.685 365.288 l 170.164 323.767 l 167.764 323.767 l f Q 0.27 w 0.55 G 169.084 386.994 m 180.734 386.994 190.189 377.646 190.189 366.128 c 190.189 354.611 180.734 345.263 169.084 345.263 c 157.434 345.263 147.978 354.611 147.978 366.128 c 147.978 377.646 157.434 386.994 169.084 386.994 c s 0.65 G 168.964 386.994 m 180.283 386.994 189.469 377.646 189.469 366.128 c 189.469 354.611 180.283 345.263 168.964 345.263 c 157.645 345.263 148.458 354.611 148.458 366.128 c 148.458 377.646 157.645 386.994 168.964 386.994 c s 0.9 G 168.964 386.274 m 180.283 386.274 189.469 377.249 189.469 366.128 c 189.469 355.008 180.283 345.983 168.964 345.983 c 157.645 345.983 148.458 355.008 148.458 366.128 c 148.458 377.249 157.645 386.274 168.964 386.274 c s 0.65 G 168.964 386.274 m 180.018 386.274 188.989 377.249 188.989 366.128 c 188.989 355.008 180.018 345.983 168.964 345.983 c 157.91 345.983 148.938 355.008 148.938 366.128 c 148.938 377.249 157.91 386.274 168.964 386.274 c s 0.55 G 168.964 385.794 m 180.018 385.794 188.989 376.876 188.989 365.888 c 188.989 354.901 180.018 345.983 168.964 345.983 c 157.91 345.983 148.938 354.901 148.938 365.888 c 148.938 376.876 157.91 385.794 168.964 385.794 c s 0 w BT 0 G 2.392 0 0 2.392 153.772 364.088 Tm (PerlHacker)Tj ET 0.5 w 153.772 363.692 m 185.189 363.692 l S 2.4 w q 390.489 387.129 m 383.049 387.129 l 380.889 386.409 l 379.209 385.929 l 378.009 385.449 l 376.809 384.729 l 375.609 384.249 l 375.129 383.769 l 373.929 383.049 l 373.449 382.569 l 372.729 381.849 l 372.249 381.369 l 371.529 380.889 l 371.048 380.169 l 370.568 379.689 l 369.848 378.969 l 369.368 378.009 l 368.648 377.289 l 368.168 376.089 l 367.688 375.129 l 366.968 373.929 l 366.488 372.249 l 366.008 369.848 l 366.008 362.408 l 366.488 362.408 l 366.488 360.008 l 366.968 360.008 l 366.968 358.328 l 367.688 358.328 l 367.688 357.368 l 368.168 357.368 l 368.168 356.168 l 368.648 356.168 l 368.648 354.968 l 369.368 354.968 l 369.368 354.488 l 369.848 354.488 l 369.848 353.288 l 370.568 353.288 l 370.568 352.568 l 371.048 352.568 l 371.048 352.088 l 371.529 352.088 l 371.529 351.608 l 372.249 351.608 l 372.249 350.888 l 372.729 350.888 l 372.729 350.408 l 373.449 350.408 l 373.449 349.688 l 373.929 349.688 l 373.929 349.208 l 375.129 349.208 l 375.129 348.728 l 375.609 348.728 l 375.609 348.008 l 376.809 348.008 l 376.809 347.528 l 378.009 347.528 l 378.009 346.808 l 379.209 346.808 l 379.209 346.328 l 380.889 346.328 l 380.889 345.848 l 383.049 345.848 l 383.049 345.128 l 390.489 345.128 l 390.489 345.848 l 392.889 346.328 l 394.569 346.808 l 395.769 347.528 l 396.969 348.008 l 397.929 348.728 l 398.649 349.208 l 399.849 349.688 l 400.329 350.408 l 400.809 350.888 l 401.529 351.608 l 402.009 352.088 l 402.729 352.568 l 403.209 353.288 l 403.689 354.488 l 404.409 354.968 l 404.889 356.168 l 405.609 357.368 l 406.089 358.328 l 406.569 360.008 l 407.289 362.408 l 407.769 369.848 l 407.289 369.848 l 407.289 372.249 l 406.569 372.249 l 406.569 373.929 l 406.089 373.929 l 406.089 375.129 l 405.609 375.129 l 405.609 376.089 l 404.889 376.089 l 404.889 377.289 l 404.409 377.289 l 404.409 378.009 l 403.689 378.009 l 403.689 378.969 l 403.209 378.969 l 403.209 379.689 l 402.729 379.689 l 402.729 380.169 l 402.009 380.169 l 402.009 380.889 l 401.529 380.889 l 401.529 381.369 l 400.809 381.369 l 400.809 381.849 l 400.329 381.849 l 400.329 382.569 l 399.849 382.569 l 399.849 383.049 l 398.649 383.049 l 398.649 383.769 l 397.929 383.769 l 397.929 384.249 l 396.969 384.249 l 396.969 384.729 l 395.769 384.729 l 395.769 385.449 l 394.569 385.449 l 394.569 385.929 l 392.889 385.929 l 392.889 386.409 l 390.489 386.409 l 390.489 387.129 l W n 0.65 g 345.128 367.688 m 386.649 408.969 l 389.049 408.969 l 389.049 406.569 l 347.528 365.288 l 345.128 365.288 l f 0.662 g 346.328 365.768 m 387.609 407.289 l 390.009 407.289 l 390.009 404.889 l 348.728 363.368 l 346.328 363.368 l f 0.674 g 347.528 364.808 m 388.809 406.089 l 391.209 406.089 l 391.209 403.689 l 349.928 362.408 l 347.528 362.408 l f 0.685 g 348.728 363.608 m 390.009 404.889 l 392.409 404.889 l 392.409 402.489 l 351.128 361.208 l 348.728 361.208 l f 0.697 g 349.928 362.408 m 391.209 403.689 l 393.609 403.689 l 393.609 401.289 l 352.328 360.008 l 349.928 360.008 l f 0.709 g 350.888 361.208 m 392.409 402.489 l 394.809 402.489 l 394.809 400.089 l 353.288 358.808 l 350.888 358.808 l f 0.721 g 352.088 360.008 m 393.369 401.529 l 395.769 401.529 l 395.769 399.129 l 354.488 357.608 l 352.088 357.608 l f 0.732 g 353.288 359.048 m 394.569 400.329 l 396.969 400.329 l 396.969 397.929 l 355.688 356.648 l 353.288 356.648 l f 0.744 g 354.488 357.848 m 395.769 399.129 l 2000 398.169 399.129 l 398.169 396.729 l 356.888 355.448 l 354.488 355.448 l f 0.756 g 355.448 356.648 m 396.969 397.929 l 399.369 397.929 l 399.369 395.529 l 357.848 354.248 l 355.448 354.248 l f 0.768 g 356.648 355.448 m 397.929 396.969 l 400.329 396.969 l 400.329 394.569 l 359.048 353.048 l 356.648 353.048 l f 0.779 g 357.848 354.488 m 399.129 395.769 l 401.529 395.769 l 401.529 393.369 l 360.248 352.088 l 357.848 352.088 l f 0.791 g 359.048 353.288 m 400.329 394.569 l 402.729 394.569 l 402.729 392.169 l 361.448 350.888 l 359.048 350.888 l f 0.803 g 360.248 352.088 m 401.529 393.369 l 403.929 393.369 l 403.929 390.969 l 362.648 349.688 l 360.248 349.688 l f 0.815 g 361.208 350.888 m 402.729 392.169 l 405.129 392.169 l 405.129 389.769 l 363.608 348.488 l 361.208 348.488 l f 0.826 g 362.408 349.688 m 403.689 391.209 l 406.089 391.209 l 406.089 388.809 l 364.808 347.288 l 362.408 347.288 l f 0.838 g 363.608 348.728 m 404.889 390.009 l 407.289 390.009 l 407.289 387.609 l 366.008 346.328 l 363.608 346.328 l f 0.85 g 364.808 347.528 m 406.089 388.809 l 408.489 388.809 l 408.489 386.409 l 367.208 345.128 l 364.808 345.128 l f 366.008 346.328 m 407.289 387.609 l 409.689 387.609 l 409.689 385.209 l 368.408 343.928 l 366.008 343.928 l f 0.838 g 366.968 344.648 m 408.489 385.929 l 410.889 385.929 l 410.889 383.529 l 369.368 342.248 l 366.968 342.248 l f 0.826 g 368.168 343.448 m 409.449 384.729 l 411.849 384.729 l 411.849 382.329 l 370.568 341.048 l 368.168 341.048 l f 0.815 g 369.368 342.248 m 410.649 383.769 l 413.049 383.769 l 413.049 381.369 l 371.769 339.848 l 369.368 339.848 l f 0.803 g 370.568 341.288 m 411.849 382.569 l 414.249 382.569 l 414.249 380.169 l 372.969 338.888 l 370.568 338.888 l f 0.791 g 371.529 340.088 m 413.049 381.369 l 415.45 381.369 l 415.45 378.969 l 373.929 337.688 l 371.529 337.688 l f 0.779 g 372.729 338.888 m 414.009 380.169 l 416.41 380.169 l 416.41 377.769 l 375.129 336.488 l 372.729 336.488 l f 0.768 g 373.929 337.688 m 415.21 378.969 l 417.61 378.969 l 417.61 376.569 l 376.329 335.288 l 373.929 335.288 l f 0.756 g 375.129 336.488 m 416.41 378.009 l 418.81 378.009 l 418.81 375.609 l 377.529 334.088 l 375.129 334.088 l f 0.744 g 376.329 335.528 m 417.61 376.809 l 420.01 376.809 l 420.01 374.409 l 378.729 333.128 l 376.329 333.128 l f 0.732 g 377.289 334.328 m 418.81 375.609 l 421.21 375.609 l 421.21 373.209 l 379.689 331.928 l 377.289 331.928 l f 0.721 g 378.489 333.128 m 419.77 374.409 l 422.17 374.409 l 422.17 372.009 l 380.889 330.728 l 378.489 330.728 l f 0.709 g 379.689 331.928 m 420.97 373.209 l 423.37 373.209 l 423.37 370.808 l 382.089 329.528 l 379.689 329.528 l f 0.697 g 380.889 330.728 m 422.17 372.249 l 424.57 372.249 l 424.57 369.848 l 383.289 328.328 l 380.889 328.328 l f 0.685 g 382.089 329.768 m 423.37 371.048 l 425.77 371.048 l 425.77 368.648 l 384.489 327.367 l 382.089 327.367 l f 0.674 g 383.049 328.568 m 424.57 369.848 l 426.97 369.848 l 426.97 367.448 l 385.449 326.167 l 383.049 326.167 l f 0.662 g 384.249 327.367 m 425.53 368.648 l 427.93 368.648 l 427.93 366.248 l 386.649 324.967 l 384.249 324.967 l f 0.65 g 385.449 326.167 m 426.73 367.688 l 429.13 367.688 l 429.13 365.288 l 387.849 323.767 l 385.449 323.767 l f Q 0.27 w 0.55 G 386.889 386.994 m 398.34 386.994 407.634 377.646 407.634 366.128 c 407.634 354.611 398.34 345.263 386.889 345.263 c 375.437 345.263 366.143 354.611 366.143 366.128 c 366.143 377.646 375.437 386.994 386.889 386.994 c s 0.65 G 386.649 386.994 m 397.968 386.994 407.154 377.646 407.154 366.128 c 407.154 354.611 397.968 345.263 386.649 345.263 c 375.33 345.263 366.143 354.611 366.143 366.128 c 366.143 377.646 375.33 386.994 386.649 386.994 c s 0.9 G 386.649 386.274 m 397.968 386.274 407.154 377.249 407.154 366.128 c 407.154 355.008 397.968 345.983 386.649 345.983 c 375.33 345.983 366.143 355.008 366.143 366.128 c 366.143 377.249 375.33 386.274 386.649 386.274 c s 0.65 G 386.889 386.274 m 398.075 386.274 407.154 377.249 407.154 366.128 c 407.154 355.008 398.075 345.983 386.889 345.983 c 375.702 345.983 366.623 355.008 366.623 366.128 c 366.623 377.249 375.702 386.274 386.889 386.274 c s 0.55 G 386.529 385.794 m 397.517 385.794 406.434 376.876 406.434 365.888 c 406.434 354.901 397.517 345.983 386.529 345.983 c 375.541 345.983 366.623 354.901 366.623 365.888 c 366.623 376.876 375.541 385.794 386.529 385.794 c s 0 w BT 0 G 2.392 0 0 2.392 370.775 364.088 Tm (PunMeister)Tj ET 0.5 w 370.775 363.692 m 403.163 363.692 l S endstream endobj 119 0 obj 86163 endobj 120 0 obj << /Type /Page /Parent 107 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 121 0 R >> endobj 121 0 obj << /Length 122 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 29)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD (In other words, if we call:)Tj ET BT /F4 7.68 Tf 86.522 747.377 TD (my $guru = PerlGuru->new\(\);)Tj ET BT 86.522 732.017 TD (# and later\311)Tj ET BT 86.522 716.656 TD (my $question = <>;)Tj ET BT 86.522 708.976 TD (print $guru->answer\($question\);)Tj ET BT /F3 10.08 Tf 86.522 691.216 TD 0.325 Tw (then, if class PerlGuru doesn't provide a )Tj /F4 10.08 Tf 183.444 0 TD 0 Tw (PerlGuru::answer)Tj /F3 10.08 Tf 96.643 0 TD 0.325 Tw ( method, Perl starts trying the)Tj ET BT 86.522 678.016 TD 0 Tw (various parent classes \(as specified by the current value of the )Tj /F4 10.08 Tf 278.553 0 TD (@PerlGuru::ISA)Tj /F3 10.08 Tf 84.815 0 TD ( array\). The)Tj ET BT 86.522 664.575 TD 0.685 Tw (parents are searched in a depth-first recursive sequence)Tj /F3 6.24 Tf 252.246 3.84 TD 0 Tw (21)Tj /F3 10.08 Tf 6.24 -3.84 TD 0.685 Tw (, so Perl would look for one of the)Tj ET BT 86.522 651.135 TD 0 Tw (following \(in this order\):)Tj ET BT 95.642 634.815 TD (\245)Tj /F4 10.08 Tf 10.08 0 TD (&PerlGuru::answer)Tj /F3 10.08 Tf 102.835 0 TD ( \(look in the actual class of )Tj /F4 10.08 Tf 122.553 0 TD ($guru)Tj /F3 10.08 Tf 30.246 0 TD (\),)Tj ET BT 110.523 615.614 TD (\245)Tj /F4 10.08 Tf 10.08 0 TD (&PerlHacker::answer)Tj /F3 10.08 Tf 114.933 0 TD 0.295 Tw ( \(look in the class specified by the first entry in the variable)Tj ET BT /F4 10.08 Tf 120.603 602.414 TD 0 Tw (@PerlGuru::ISA)Tj /F3 10.08 Tf 84.688 0 TD (\),)Tj ET BT 124.203 583.213 TD (\245)Tj /F4 10.08 Tf 10.08 0 TD (&Programmer::answer)Tj /F3 10.08 Tf 114.933 0 TD 2.577 Tw ( \(look in the class specified by the first entry in the)Tj ET BT 134.283 569.773 TD 0 Tw (variable )Tj /F4 10.08 Tf 38.549 0 TD (@PerlHacker::ISA)Tj /F3 10.08 Tf 96.786 0 TD (\))Tj ET BT 124.203 550.573 TD (\245)Tj /F4 10.08 Tf 10.08 0 TD (&Obfuscator::answer)Tj /F3 10.08 Tf 114.933 0 TD 1.384 Tw ( \(look in the class specified by the second entry in the)Tj ET BT 134.283 537.132 TD 0 Tw (variable )Tj /F4 10.08 Tf 38.549 0 TD (@PerlHacker::ISA)Tj /F3 10.08 Tf 96.786 0 TD (\),)Tj ET BT 110.523 518.172 TD (\245)Tj /F4 10.08 Tf 10.08 0 TD (&LanguageMaestro::answer)Tj /F3 10.08 Tf 145.179 0 TD 1.504 Tw ( \(look in the class specified by the second entry in)Tj ET BT 120.603 504.732 TD 0 Tw (the variable )Tj /F4 10.08 Tf 55.052 0 TD (@PerlGuru::ISA)Tj /F3 10.08 Tf 84.548 0 TD (\),)Tj ET BT 110.523 485.531 TD (\245)Tj /F4 10.08 Tf 10.08 0 TD (&Educator::answer)Tj /F3 10.08 Tf 102.835 0 TD 0.941 Tw ( \(look in the class specified by the third entry in the variable)Tj ET BT /F4 10.08 Tf 120.603 472.091 TD 0 Tw (@PerlGuru::ISA)Tj /F3 10.08 Tf 84.688 0 TD (\),)Tj ET BT 110.523 452.89 TD (\245)Tj /F4 10.08 Tf 10.08 0 TD (&PunMeister::answer)Tj /F3 10.08 Tf 114.933 0 TD 2.898 Tw ( \(look in the class specified by the fourth entry in the)Tj ET BT 120.603 439.69 TD 0 Tw (variable )Tj /F4 10.08 Tf 38.549 0 TD (@PerlGuru::ISA)Tj /F3 10.08 Tf 84.814 0 TD (\),)Tj ET BT 124.203 420.49 TD (\245)Tj /F4 10.08 Tf 10.08 0 TD (&Writer::answer)Tj /F3 10.08 Tf 90.737 0 TD 1.175 Tw ( \(look in the class specified by the first entry in the variable)Tj ET BT /F4 10.08 Tf 134.283 407.049 2000 TD 0 Tw (@PunMeister::ISA)Tj /F3 10.08 Tf 96.786 0 TD (\),)Tj ET BT 124.203 387.849 TD (\245)Tj /F4 10.08 Tf 10.08 0 TD (&Humorist::answer)Tj /F3 10.08 Tf 102.835 0 TD 2.496 Tw ( \(look in the class specified by the second entry in the)Tj ET BT 134.283 374.409 TD 0 Tw (variable in )Tj /F4 10.08 Tf 49.87 0 TD (@PunMeister::ISA)Tj /F3 10.08 Tf 96.786 0 TD (\),)Tj ET BT 124.203 355.448 TD (\245)Tj /F4 10.08 Tf 10.08 0 TD (&OneSickPuppy::answer)Tj /F3 10.08 Tf 127.032 0 TD 1.101 Tw ( \(look in the class specified by the third entry in the)Tj ET BT 134.283 342.008 TD 0 Tw (variable )Tj /F4 10.08 Tf 38.549 0 TD (@PunMeister::ISA)Tj /F3 10.08 Tf 96.786 0 TD (\).)Tj ET BT 105.722 325.687 TD ( If any of these methods is defined, the search terminates at once and that method is)Tj -19.2 -13.44 TD 2.042 Tw (immediately called)Tj /F3 6.24 Tf 87.122 3.84 TD 0 Tw (22)Tj /F3 10.08 Tf 6.24 -3.84 TD 2.042 Tw (. This process of searching for the right method to call is known as)Tj ET BT /F2 10.08 Tf 86.522 298.807 TD 0 Tw (method dispatch)Tj /F3 10.08 Tf 65.974 0 TD (.)Tj ET BT 86.522 275.286 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 277.446 138.243 0.48 re f BT /F3 5.76 Tf 86.522 260.646 TD (21)Tj /F3 9.6 Tf 5.76 -3.84 TD ( Sean M. Burke's Class::ISA module \(available from the CPAN\) allows you to extract the exact)Tj ET BT 93.242 246.246 TD (sequence in which a class's parent's are searched, as a list of class names.)Tj ET BT /F3 5.76 Tf 86.522 231.845 TD (22)Tj /F3 9.6 Tf 6.72 -3.84 TD (Note that, when looking in a parent class, Perl checks the left-most parent first, and then checks)Tj ET BT 93.242 217.445 TD (the left-most parent of that class, and the left-most parent of )Tj /F2 9.6 Tf 256.234 0 TD (that)Tj /F3 9.6 Tf 15.455 0 TD ( class etc. Hence, if a class's left-)Tj ET BT 93.242 206.645 TD (most great-great-great-grandparent has a method of the right name \(e.g. )Tj /F4 9.6 Tf 308.505 0 TD (answer)Tj /F3 9.6 Tf 34.566 0 TD (\) then that)Tj ET BT 93.242 196.084 TD (method will be called, even if another of the object's direct parents also has a suitable method.)Tj ET BT 93.242 185.524 TD (In other words, you don't necessarily get the method that is "closest" up the inheritance)Tj ET BT 93.242 174.964 TD (hierarchy; you get the method that was inherited through the left-most inheritance chain. This)Tj ET BT 93.242 164.404 TD (is known as "left-most ancestor wins".)Tj ET endstream endobj 122 0 obj 5683 endobj 123 0 obj << /Type /Page /Parent 107 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F7 57 0 R >> /ProcSet 2 0 R >> /Contents 124 0 R >> endobj 124 0 obj << /Length 125 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 30)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 1.616 Tw (If you're used to the complicated inheritance semantics in some other object-oriented)Tj ET BT 86.522 748.817 TD 2.058 Tw (language, it's important to realize that inheritance in Perl is merely a way of specifying)Tj ET BT 86.522 735.617 TD 0.635 Tw (where else to look for a method, )Tj /F2 10.08 Tf 150.003 0 TD (and nothing else!)Tj /F3 10.08 Tf 71.279 0 TD ( There is no direct inheritance of attributes)Tj ET BT 86.522 722.177 TD 0.36 Tw (\(unless you arrange for it\), nor any hierarchical calling of constructors or destructors \(unless)Tj ET BT 86.522 708.736 TD 0 Tw (you explicitly write those methods that way\), nor any compile-time consistency checks of the)Tj ET BT 86.522 695.296 TD (interface or implementation of derived classes.)Tj ET BT 105.722 681.856 TD 1.479 Tw (This process of finding the correct method to call also explains why Perl ignores any)Tj ET BT 86.522 668.655 TD 2.073 Tw (prototype associated with a method, and why you can't use prototypes to constrain the)Tj ET BT 86.522 655.215 TD 0.149 Tw (number of arguments given to a method. The prototype check occurs when the code is being)Tj ET BT 86.522 641.775 TD 1.144 Tw (compiled, but at that point the compiler has no idea which of the many potential )Tj /F4 10.08 Tf 378.321 0 TD 0 Tw (answer)Tj ET BT /F3 10.08 Tf 86.522 628.334 TD 0.552 Tw (subroutines will actually be called \(since it will depend on the contents of the various )Tj /F4 10.08 Tf 390.281 0 TD 0 Tw (@ISA)Tj ET BT /F3 10.08 Tf 86.522 614.894 TD 0.422 Tw (arrays at the time the method is actually called\). So the compiler has no way of determining)Tj ET BT 86.522 601.694 TD 0 Tw (which subroutine's prototype to check the argument list against.)Tj ET BT /F2 15.36 Tf 86.522 572.893 TD (Where the call goes)Tj ET BT /F3 10.08 Tf 86.522 552.733 TD 1.807 Tw (The exact semantics of where \(and in what order\) Perl looks for a method are relatively)Tj ET BT 86.522 539.292 TD 3.137 Tw (straightforward, but warrant a brief discussion. The rules for handling a call such as)Tj ET BT /F4 10.08 Tf 86.522 525.852 TD 0 Tw ($obj->method\(\))Tj /F3 10.08 Tf 84.688 0 TD ( can be summarized as follows:)Tj ET BT 90.362 509.532 TD (1.)Tj 15.36 0 TD 3.136 Tw (If the class into which )Tj /F4 10.08 Tf 115.443 0 TD 0 Tw ($obj)Tj /F3 10.08 Tf 24.196 0 TD 3.165 Tw ('s referent is blessed \(say MyClass\) has a subroutine)Tj ET BT /F4 10.08 Tf 105.722 496.331 TD 0 Tw (method)Tj /F3 10.08 Tf 36.295 0 TD (, call that.)Tj ET BT 90.362 477.131 TD (2.)Tj 15.36 0 TD 1.055 Tw (Otherwise, if MyClass has an )Tj /F4 10.08 Tf 137.906 0 TD 0 Tw (@ISA)Tj /F3 10.08 Tf 24.338 0 TD 1.055 Tw ( array, step through each parent class in that array)Tj ET BT 105.722 463.691 TD 0.606 Tw (and apply steps 1 and 2 to it \(i.e. recursively search in depth-first, left-to-right order up)Tj ET BT 105.722 450.25 TD 0 Tw (the hierarchy\). If a suitable )Tj /F4 10.08 Tf 122.65 0 TD (method)Tj /F3 10.08 Tf 36.295 0 TD 0.173 Tw ( subroutine is found in any package in the hierarchy,)Tj ET BT 105.722 436.81 TD 0 Tw (call that.)Tj ET BT 90.362 417.85 TD (3.)Tj 15.36 0 TD (Otherwise, if the UNIVERSAL class has a subroutine )Tj /F4 10.08 Tf 237.978 0 TD (method)Tj /F3 10.08 Tf 36.295 0 TD (, call that.)Tj ET BT 90.362 398.649 TD (4.)Tj 15.36 0 TD (Otherwise, if MyClass has an )Tj /F4 10.08 Tf 132.633 0 TD (AUTOLOAD)Tj /F3 10.08 Tf 48.571 0 TD ( method, call that.)Tj ET BT 90.362 379.449 TD (5.)Tj 15.36 0 TD 2.13 Tw (Otherwise, if one of the ancestral classes of )Tj /F4 10.08 Tf 210.063 0 TD 0 Tw ($obj)Tj /F3 10.08 Tf 24.196 0 TD 2.13 Tw ('s referent \(once again searched in)Tj ET BT 105.722 366.008 TD 0 Tw (depth-first, left-to-right order\) has an )Tj /F4 10.08 Tf 167.992 0 TD (AUTOLOAD)Tj /F3 10.08 Tf 48.393 0 TD ( method, call that.)Tj ET BT 90.362 346.808 TD (6.)Tj 15.36 0 TD (Otherwise, if the UNIVERSAL class has an )Tj /F4 10.08 Tf 192.917 0 TD (AUTOLOAD)Tj /F3 10.08 Tf 48.528 0 TD ( method, call that.)Tj ET BT 90.362 327.848 TD (7.)Tj 15.36 0 TD 0.278 Tw (Otherwise, give up and throw an exception: )Tj /F7 10.08 Tf 200.163 0 TD (Can't locate object method "method" via)Tj ET BT 105.722 314.407 TD 0 Tw (package "MyClass")Tj /F3 10.08 Tf 93.606 0 TD (.)Tj ET BT 105.722 298.087 TD 0.535 Tw (Once a suitable method has been found for an object of a particular class, a reference to)Tj ET BT 86.522 284.647 TD 1.467 Tw (it is cached within the class. Thereafter, any subsequent call to the same method through)Tj ET BT 86.522 271.206 TD 2.568 Tw (objects of the same class doesn't need to repeat the search. Instead, it uses the cached)Tj ET BT 86.522 258.006 TD 0 Tw (reference to go directly to the appropriate method.)Tj ET BT 105.722 244.566 TD 0.737 Tw (If the class's )Tj /F4 10.08 Tf 57.868 0 TD 0 Tw (@ISA)Tj /F3 10.08 Tf 24.196 0 TD 0.737 Tw ( array \(or that of any of its ancestors\) is modified, or if new methods)Tj ET BT 86.522 231.125 TD 0.71 Tw (are defined somewhere in the hierarchy, then the cached method may no longer be correct.)Tj ET BT 86.522 217.685 TD 0.261 Tw (In such cases, the cache is automatically cleared and the next method call simply does a new)Tj ET BT 86.522 204.245 TD 0 Tw (search \(and, of course, re-caches the resulting subroutine reference\).)Tj ET endstream endobj 125 0 obj 5346 endobj 126 0 obj << /Type /Page /Parent 127 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 2000 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 128 0 R >> endobj 127 0 obj << /Kids [ 126 0 R 130 0 R 133 0 R 136 0 R 139 0 R 142 0 R ] /Count 6 /Type /Pages /Parent 214 0 R >> endobj 128 0 obj << /Length 129 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 31)Tj ET BT /F2 10.08 Tf 86.522 762.257 TD 2.252 Tw (The biggest hurdle that most budding object-oriented programmers face is coming to grips with)Tj ET BT 86.522 748.817 TD 0 Tw (polymorphism. But Perl removes the mystery \(and the misery\) with its straightforward and pragmatic)Tj ET BT 86.522 735.617 TD (approach...)Tj ET BT /F2 19.2 Tf 86.522 698.176 TD (Polymorphism in Perl)Tj ET BT /F3 10.08 Tf 86.522 672.255 TD 0.649 Tw (Those of us who hate having injections usually appreciate when our doctor says: "Okay, I'll)Tj ET BT 86.522 658.815 TD 0 Tw (count to 3: \3111\3112\311)Tj /F2 10.08 Tf 89.442 0 TD ()Tj /F3 10.08 Tf 27.68 0 TD (\3113", and the nastiness is over before it begins.)Tj ET BT 105.722 645.375 TD (Guess what.)Tj ET BT 105.722 631.934 TD 6.16 Tw (If you've been apprehensive about this section\321either because you've heard)Tj ET BT 86.522 618.734 TD 0.847 Tw (polymorphism is "difficult", or because you've had trouble with it in other languages\321you)Tj ET BT 86.522 605.294 TD 0.88 Tw (can relax. The nastiness is over. If you've read this far, you've already seen everything you)Tj ET BT 86.522 591.854 TD 2.226 Tw (need to know about polymorphism. Whilst some object-oriented languages have special)Tj ET BT 86.522 578.413 TD 2.133 Tw (syntaxes and a long list of rules, constraints, and conditions on the use of polymorphic)Tj ET BT 86.522 564.973 TD 0 Tw (methods, as you'll have realized by now, Perl has a different attitude.)Tj ET BT 105.722 551.773 TD 4.914 Tw (In Perl, every method of every class is \(potentially\) polymorphic, as a direct)Tj ET BT 86.522 538.332 TD 1.115 Tw (consequence of the way that methods are automatically dispatched up the class hierarchy.)Tj ET BT 86.522 524.892 TD 1.293 Tw (There's no special syntax, no requirement for type-compatibility of method arguments, no)Tj ET BT 86.522 511.452 TD 1.412 Tw (need for inheritance relationships between classes. Just define your method, redefine it in)Tj ET BT 86.522 498.011 TD 3.285 Tw (any derived classes that need to act differently, and without even knowing it you're)Tj ET BT 86.522 484.811 TD 0 Tw (polymorphizing.)Tj ET BT /F2 15.36 Tf 86.522 456.01 TD (Interface polymorphism)Tj ET BT /F3 10.08 Tf 86.522 435.85 TD 0.763 Tw (Suppose we have an object reference \(say, )Tj /F4 10.08 Tf 194.441 0 TD 0 Tw ($datum)Tj /F3 10.08 Tf 36.295 0 TD 0.763 Tw (\) and we call a method \(say, )Tj /F4 10.08 Tf 132.152 0 TD 0 Tw (print_me)Tj /F3 10.08 Tf 48.393 0 TD (\))Tj ET BT 86.522 422.41 TD (on it:)Tj ET BT /F4 7.68 Tf 86.522 406.089 TD (foreach my $datum \( @data \))Tj ET BT 86.522 396.489 TD ({)Tj ET BT 98.042 386.889 TD ($datum->print_me\(\);)Tj ET BT 86.522 377.289 TD (})Tj ET BT /F3 10.08 Tf 105.722 359.048 TD ( The method dispatch mechanism determines the class of the invoking object \(i.e. of)Tj /F4 10.08 Tf -19.2 -13.44 TD ($datum)Tj /F3 10.08 Tf 36.295 0 TD 2.043 Tw (\), and then looks in the corresponding package for a method of the appropriate)Tj ET BT 86.522 332.408 TD 3.476 Tw (name \(i.e. )Tj /F4 10.08 Tf 52.785 0 TD 0 Tw (print_me)Tj /F3 10.08 Tf 48.393 0 TD 3.476 Tw (\). Provided the object belongs to a class with a method named)Tj ET BT /F4 10.08 Tf 86.522 318.967 TD 0 Tw (print_me)Tj /F3 10.08 Tf 48.393 0 TD 0.874 Tw (, the method call succeeds and some action is taken. That action depends on the)Tj ET BT 86.522 305.527 TD 0 Tw (class of the invoking object, even though the call syntax is always the same.)Tj ET BT 105.722 292.087 TD 1.662 Tw (The elements in the )Tj /F4 10.08 Tf 96.13 0 TD 0 Tw (@data)Tj /F3 10.08 Tf 30.246 0 TD 1.662 Tw ( array might have been blessed into completely unrelated)Tj ET BT 86.522 278.646 TD 0 Tw (classes:)Tj ET BT /F4 7.68 Tf 86.522 262.326 TD (my @data =)Tj 57.601 0 TD (\()Tj ET BT 155.644 252.726 TD (GIF_Image->new\(file=>"camelopard.gif", format=>"interlaced"\),)Tj ET BT 155.644 243.126 TD (XML::File->new\("./lamasery.xml"\),)Tj ET BT 155.644 233.525 TD (PGP_Coded->new\("Software is *not* a munition!"\),)Tj ET BT 155.644 223.925 TD (HTTP::Get->new\("http://www.perl.org/news.html"\),)Tj ET BT 155.644 214.325 TD (Signature->new\(\),)Tj ET BT 144.123 204.725 TD (\);)Tj ET BT /F3 10.08 Tf 86.522 186.724 TD 1.312 Tw (but the same method call \(i.e. )Tj /F4 10.08 Tf 141.044 0 TD 0 Tw ($datum->print_me\(\))Tj /F3 10.08 Tf 108.884 0 TD 1.312 Tw (\) handles them all appropriately, so)Tj ET BT 86.522 173.284 TD 0.165 Tw (long as each object's class's interface provides a )Tj /F4 10.08 Tf 213.742 0 TD 0 Tw (print_me)Tj /F3 10.08 Tf 48.584 0 TD ( method. That's known as )Tj /F2 10.08 Tf 117.603 0 TD (interface)Tj ET BT 86.522 159.844 TD (polymorphism)Tj /F3 10.08 Tf 58.237 0 TD (.)Tj ET endstream endobj 129 0 obj 4745 endobj 130 0 obj << /Type /Page /Parent 127 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R >> /ProcSet 2 0 R >> /Contents 131 0 R >> endobj 131 0 obj << /Length 132 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 32)Tj ET BT /F2 15.36 Tf 86.522 760.337 TD (Inheritance polymorphism)Tj ET BT /F3 10.08 Tf 86.522 740.177 TD 0.965 Tw (Of course, the dispatch mechanism also has a fall-back strategy if the class of the invoking)Tj ET BT 86.522 726.737 TD 2.248 Tw (object )Tj /F2 10.08 Tf 30.796 0 TD 0 Tw (doesn't)Tj /F3 10.08 Tf 29.68 0 TD 2.248 Tw ( provide a matching method. As explained earlier, it immediately searches)Tj ET BT 86.522 713.536 TD 1.837 Tw (through the object's ancestor classes, trying to find an inherited method with the correct)Tj ET BT 86.522 700.096 TD 0 Tw (name.)Tj ET BT 105.722 686.656 TD 0.4 Tw (This means that if the object belongs to a class that )Tj /F2 10.08 Tf 230.954 0 TD 0 Tw (inherits)Tj /F3 10.08 Tf 31.373 0 TD 0.4 Tw ( a method named )Tj /F4 10.08 Tf 82.055 0 TD 0 Tw (print_me)Tj /F3 10.08 Tf 48.393 0 TD (,)Tj ET BT 86.522 673.215 TD 0.891 Tw (the method call succeeds and some action is taken. Once again, that action depends on the)Tj ET BT 86.522 659.775 TD 2.301 Tw (class of the invoking object \(or more accurately, on the "genealogy" of that class\), even)Tj ET BT 86.522 646.575 TD 0 Tw (though the call syntax is still always the same. That's known as )Tj /F2 10.08 Tf 282.803 0 TD (inheritance polymorphism)Tj /F3 10.08 Tf 106.315 0 TD (.)Tj ET BT /F2 10.08 Tf 86.522 597.614 TD 2.601 Tw (Like some other object-oriented languages, Perl has a mechanism that allows class designers to)Tj ET BT 86.522 584.173 TD 3.504 Tw (redefine the behaviour of its standard arithmetic, logical, and other operators. Some software)Tj ET BT 86.522 570.733 TD 0 Tw (engineering purists decry such facilities, but there are good reasons for wanting them...)Tj ET BT /F2 19.2 Tf 86.522 533.292 TD (The problem)Tj ET BT /F3 10.08 Tf 86.522 507.612 TD 0.118 Tw (One aspect of object-oriented programming that seems to turn some people away is the need)Tj ET BT 86.522 494.171 TD 0.283 Tw (to call methods on objects, rather than manipulating the objects directly. It's not so much the)Tj ET BT 86.522 480.731 TD 2.391 Tw (efficiency of so many function calls \(although that can be a concern too\); it's the sheer)Tj ET BT 86.522 467.291 TD 0 Tw (ugliness of the code they produce.)Tj ET BT 105.722 453.85 TD 3.564 Tw (Take Mark Biggar's standard Math::BigFloat module for example)Tj /F3 6.24 Tf 314.887 3.84 TD 0 Tw (23)Tj /F3 10.08 Tf 6.24 -3.84 TD 3.564 Tw (. Math::BigFloat)Tj ET BT 86.522 440.65 TD 0.252 Tw (objects store floating point numbers as character strings, and provide a range of methods for)Tj ET BT 86.522 427.21 TD 0.27 Tw (manipulating those string representations: )Tj /F4 10.08 Tf 192.964 0 TD 0 Tw (fneg)Tj /F3 10.08 Tf 24.196 0 TD 0.27 Tw ( to negate them, )Tj /F4 10.08 Tf 74.686 0 TD 0 Tw (fadd)Tj /F3 10.08 Tf 24.196 0 TD 0.27 Tw ( to add them, )Tj /F4 10.08 Tf 62.926 0 TD 0 Tw (fmul)Tj /F3 10.08 Tf 24.196 0 TD ( to)Tj ET BT 86.522 413.769 TD (multiply 2000 them, etc.)Tj ET BT 105.722 400.329 TD 1.72 Tw (We could use those methods to work out some calculation involving large numbers,)Tj ET BT 86.522 386.889 TD 0.361 Tw (such as the expected difference in per-capita gross domestic product between China and the)Tj ET BT 86.522 373.689 TD 0 Tw (USA in 1998)Tj /F3 6.24 Tf 54.961 3.84 TD (24)Tj /F3 10.08 Tf 6.24 -3.84 TD (. Given the most recent available statistics \(i.e. for 1997\):)Tj ET BT /F4 7.68 Tf 86.522 357.368 TD (%China =)Tj ET BT 86.522 347.768 TD (\()Tj ET BT 98.042 338.168 TD (pop)Tj 49.681 0 TD (=> Math::BigFloat->new\("1 221 591 778"\),)Tj /F5 7.68 Tf 217.685 0 TD (# people)Tj ET BT /F4 7.68 Tf 98.042 328.568 TD (gdp)Tj 49.681 0 TD (=> Math::BigFloat->new\("3 390 000 000 000"\),)Tj /F5 7.68 Tf 217.685 0 TD (# US dollars)Tj ET BT /F4 7.68 Tf 98.042 318.967 TD (pop_incr)Tj 49.681 0 TD (=> Math::BigFloat->new\("1.0093"\),)Tj /F5 7.68 Tf 217.685 0 TD (# annual % change)Tj ET BT /F4 7.68 Tf 98.042 309.367 TD (gdp_incr)Tj 49.681 0 TD (=> Math::BigFloat->new\("1.097"\),)Tj /F5 7.68 Tf 217.685 0 TD (# annual % change)Tj ET BT /F4 7.68 Tf 86.522 299.767 TD (\);)Tj ET BT 86.522 280.566 TD (%USA =)Tj ET BT 86.522 270.966 TD (\()Tj ET BT 98.042 261.366 TD (pop)Tj 49.681 0 TD (=> Math::BigFloat->new\("267 954 764"\),)Tj /F5 7.68 Tf 217.685 0 TD (# people)Tj ET BT /F4 7.68 Tf 98.042 251.766 TD (gdp)Tj 49.681 0 TD (=> Math::BigFloat->new\("7 610 000 000 000"\),)Tj /F5 7.68 Tf 217.685 0 TD (# US dollars)Tj ET BT /F4 7.68 Tf 98.042 242.166 TD (pop_incr)Tj 49.681 0 TD (=> Math::BigFloat->new\("1.0087"\),)Tj /F5 7.68 Tf 217.685 0 TD (# annual % change)Tj ET BT /F3 10.08 Tf 86.522 222.485 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 224.645 138.243 0.48 re f BT /F3 5.76 Tf 86.522 207.605 TD (23)Tj /F3 9.6 Tf 5.76 -3.84 TD ( Not that there's anything inherently wrong with the )Tj /F4 9.6 Tf 225.155 0 TD (Math::BigFloat)Tj /F3 9.6 Tf 80.655 0 TD ( package! On the)Tj ET BT 93.242 193.204 TD (contrary, it's well-implemented and very useful. We're just going to )Tj /F2 9.6 Tf 288.949 0 TD (use)Tj /F3 9.6 Tf 12.811 0 TD ( it inappropriately in)Tj ET BT 93.242 182.644 TD (order to make a point about method-based operations in general.)Tj ET BT /F3 5.76 Tf 86.522 168.244 TD (24)Tj /F3 9.6 Tf 5.76 -3.84 TD ( US$25,814.89, in case you actually needed to know.)Tj ET endstream endobj 132 0 obj 5345 endobj 133 0 obj << /Type /Page /Parent 127 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R >> /ProcSet 2 0 R >> /Contents 134 0 R >> endobj 134 0 obj << /Length 135 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 33)Tj ET BT /F4 7.68 Tf 98.042 765.138 TD (gdp_incr)Tj 49.681 0 TD (=> Math::BigFloat->new\("1.024"\),)Tj /F5 7.68 Tf 217.685 0 TD (# annual % change)Tj ET BT /F4 7.68 Tf 86.522 755.537 TD (\);)Tj ET BT /F3 10.08 Tf 86.522 737.297 TD (the following calculation is required:)Tj ET BT /F4 7.68 Tf 86.522 707.536 TD ($diff =)Tj 40.801 0 TD (Math::BigFloat->new\(\(Math::BigFloat->new\(\(Math::BigFloat->)Tj ET BT 127.323 697.936 TD (new\(\(Math::BigFloat->new\($China{gdp}->fmul\($China{gdp_incr}\)\))Tj ET BT 127.323 688.336 TD (\)->fdiv\(Math::BigFloat->new\($China{pop}->fmul\($China{pop_incr})Tj ET BT 127.323 678.736 TD (\)\)\)\)\)->fsub\(Math::BigFloat->new\(\(Math::BigFloat->new\($USA{gdp})Tj ET BT 127.323 669.135 TD (->fmul\($USA{gdp_incr}\)\)\)->fdiv\(Math::BigFloat->new\($USA{pop}->)Tj ET BT 127.323 659.535 TD (fmul\($USA{pop_incr}\)\)\)\)\)\)\)->fabs\(\)\);)Tj ET BT /F3 10.08 Tf 105.722 641.535 TD (Yuck. Even breaking up the computation doesn't help the readability much:)Tj ET BT /F4 7.68 Tf 86.522 625.214 TD ($cpop)Tj 40.801 0 TD (= Math::BigFloat->new\( $China{pop}->fmul\($China{pop_incr}\))Tj 279.126 0 TD (\);)Tj ET BT 86.522 615.614 TD ($cgdp)Tj 40.801 0 TD (= Math::BigFloat->new\( $China{gdp}->fmul\($China{gdp_incr}\))Tj 279.126 0 TD (\);)Tj ET BT 86.522 606.014 TD ($upop)Tj 40.801 0 TD (= Math::BigFloat->new\( $USA{pop}->fmul\($USA{pop_incr}\))Tj 279.126 0 TD (\);)Tj ET BT 86.522 596.414 TD ($ugdp)Tj 40.801 0 TD (= Math::BigFloat->new\( $USA{gdp}->fmul\($USA{gdp_incr}\))Tj 279.126 0 TD (\);)Tj ET BT 86.522 586.813 TD ($cgdp_pc)Tj 40.801 0 TD (= Math::BigFloat->new\( $cgdp->fdiv\($cpop\))Tj 279.126 0 TD (\);)Tj ET BT 86.522 577.213 TD ($ugdp_pc)Tj 40.801 0 TD (= Math::BigFloat->new\( $ugdp->fdiv\($upop\))Tj 279.126 0 TD (\);)Tj ET BT 86.522 567.613 TD ($sdiff)Tj 40.801 0 TD (= Math::BigFloat->new\( $cgdb_pc->fsub\($ugdb_pc\))Tj 279.126 0 TD (\);)Tj ET BT 86.522 558.013 TD ($diff)Tj 40.801 0 TD (= Math::BigFloat->new\( $sdiff->fabs\(\))Tj 279.126 0 TD (\);)Tj ET BT /F3 10.08 Tf 105.722 539.772 TD 0.185 Tw (The standard method-based object-oriented interface just doesn't work here, because the)Tj ET BT 86.522 526.332 TD 0.298 Tw (numerous method calls swamp the meaning of the code in a sea of arrows, parentheses, and)Tj ET BT 86.522 512.892 TD 0 Tw (constructors. What we'd really )Tj /F2 10.08 Tf 138.672 0 TD (like)Tj /F3 10.08 Tf 13.998 0 TD ( to be able to write is something like:)Tj ET BT /F4 7.68 Tf 86.522 496.571 TD ($diff =)Tj ET BT 100.202 486.971 TD 0.029 Tc (abs\(\($China{gdp} * $China{gdp_incr}\) / \($China{pop} * $China{pop_incr}\))Tj ET BT 120.603 477.371 TD 0 Tc (- \($USA{gdp} * $USA{gdp_incr}\) / \($USA{pop} * $USA{pop_incr}\) \);)Tj ET BT /F3 10.08 Tf 86.522 459.131 TD (which is at least )Tj /F2 10.08 Tf 73.525 0 TD (decipherable)Tj /F3 10.08 Tf 49.658 0 TD ( by normal humans.)Tj ET BT 105.722 445.93 TD 0.466 Tw (To make that possible, we have to be able to change the meaning of operations \(such as)Tj ET BT /F4 10.08 Tf 86.522 432.49 TD 0 Tw ($cpop * $cpop_incr)Tj /F3 10.08 Tf 108.884 0 TD 2.671 Tw (, or )Tj /F4 10.08 Tf 22.386 0 TD 0 Tw ($cgdp_pc - $ugdp_pc)Tj /F3 10.08 Tf 114.735 0 TD 2.671 Tw (, or )Tj /F4 10.08 Tf 22.386 0 TD 0 Tw (abs\($sdiff\))Tj /F3 10.08 Tf 66.416 0 TD 2.671 Tw (\) on objects of a)Tj ET BT 86.522 419.05 TD 0 Tw (given class. Fortunately, Perl provides a simple mechanism to do exactly that.)Tj ET BT 105.722 405.609 TD (Changing the way a Perl's in-built operators behave when applied to a user-defined type)Tj ET BT 86.522 392.169 TD (is known as )Tj /F2 10.08 Tf 55.965 0 TD (operator overloading)Tj /F3 10.08 Tf 83.916 0 TD 0.212 Tw (. By overloading them, operators can be given new semantics)Tj ET BT 86.522 378.969 TD 0 Tw (when applied to objects of a specific class. For example, given:)Tj ET BT /F4 7.68 Tf 86.522 362.648 TD ($six = Math::BigFloat->new\("6"\);)Tj ET BT 86.522 353.048 TD ($seven = Math::BigFloat->new\("7"\);)Tj ET BT 86.522 343.448 TD ($forty_two = $six * $seven;)Tj ET BT /F3 10.08 Tf 86.522 325.207 TD 0.973 Tw (to evaluate the last statement Perl might attempt to multiply the integer representations of)Tj ET BT 86.522 311.767 TD 1.375 Tw (the two references stored in )Tj /F4 10.08 Tf 132.735 0 TD 0 Tw ($six)Tj /F3 10.08 Tf 24.196 0 TD 1.375 Tw ( and )Tj /F4 10.08 Tf 24.993 0 TD 0 Tw ($seven)Tj /F3 10.08 Tf 36.295 0 TD 1.375 Tw ( \(i.e. the internal memory addresses of the)Tj ET BT 86.522 298.327 TD 0 Tw (two Math::BigFloat objects\). That's unlikely to produce the desired result.)Tj ET BT 105.722 284.887 TD 4.346 Tw (However, by overloading the multiplication operator, we could arrange for the)Tj ET BT 86.522 271.686 TD 2.107 Tw (multiplication of any two Math::BigFloat objects to produce a new Math::BigFloat object)Tj ET BT 86.522 258.246 TD 0 Tw (containing the correct value)Tj /F3 6.24 Tf 124.083 3.84 TD (25)Tj /F3 10.08 Tf 6.24 -3.84 TD (.)Tj ET BT 86.522 193.444 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 195.604 138.243 0.48 re f BT /F3 5.76 Tf 86.522 178.804 TD (25)Tj /F3 9.6 Tf 5.76 -3.84 TD ( The Math::BigFloat module actually )Tj /F2 9.6 Tf 157.241 0 TD (does)Tj /F3 9.6 Tf 16.533 0 TD ( overload the basic arithmetic operators in this way, so)Tj ET BT 93.242 164.404 TD (operations on Math::BigFloat objects )Tj /F2 9.6 Tf 157.011 0 TD (do)Tj /F3 9.6 Tf 9.061 0 TD ( work as expected.)Tj ET endstream endobj 135 0 obj 5464 endobj 136 0 obj << /Type /Page /Parent 127 0 R /Resou 2000 rces << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F10 71 0 R >> /ProcSet 2 0 R >> /Contents 137 0 R >> endobj 137 0 obj << /Length 138 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 34)Tj ET BT /F2 19.2 Tf 86.522 757.457 TD (Perl's operator overloading mechanism)Tj ET BT /F3 10.08 Tf 86.522 731.537 TD 1.469 Tw (Ilya Zakharevich's )Tj /F10 10.08 Tf 87.379 0 TD 0 Tw (overload.pm)Tj /F3 10.08 Tf 55.471 0 TD 1.469 Tw ( module, which comes with the standard Perl distribution,)Tj ET BT 86.522 718.096 TD 4.257 Tw (provides access to Perl's built-in mechanism for overloading operators. To overload)Tj ET BT 86.522 704.896 TD 2.736 Tw (operators for a given class, you )Tj /F4 10.08 Tf 157.507 0 TD (use )Tj /F3 10.08 Tf 27.057 0 TD (the module, passing the )Tj /F4 10.08 Tf 119.763 0 TD 0 Tw (use)Tj /F3 10.08 Tf 18.147 0 TD 2.736 Tw ( statement a list of)Tj ET BT 86.522 691.456 TD 0 Tw (operator/implementation pairs:)Tj ET BT /F4 7.68 Tf 86.522 675.135 TD (package Math::BigFloat;)Tj ET BT 86.522 655.935 TD (use overload)Tj 61.201 0 TD ("*")Tj 27.361 0 TD (=> \\&fmul,)Tj ET BT 147.723 646.335 TD ("+")Tj 27.361 0 TD (=> "fadd",)Tj ET BT 147.723 636.735 TD ("neg")Tj 27.361 0 TD (=> sub { Math::BigInt->new\($_[0]->fneg\(\)\) };)Tj ET BT /F3 10.08 Tf 105.722 618.494 TD 0.92 Tw (Each pair consists of a keyword \(which specifies the operator that is to be overloaded\))Tj ET BT 86.522 605.054 TD 1.072 Tw (and a subroutine reference \(which specifies a subroutine that is to be performed when the)Tj ET BT 86.522 591.614 TD 0 Tw (specified operator is encountered\).)Tj ET BT 105.722 578.413 TD 0.806 Tw (The keyword must be one from the list shown in Table 1. These are the only operators)Tj ET BT 86.522 564.973 TD 0 Tw (that may be overloaded. Note that simple assignment isn't one of them.)Tj ET BT /F1 10.08 Tf 82.202 533.052 TD (Category)Tj ET BT 180.124 533.052 TD (Operators/)Tj ET BT 181.084 523.452 TD (Keywords)Tj ET BT 381.969 533.052 TD (Notes)Tj ET 59.281 546.493 2.16 2.16 re f 59.281 546.493 2.16 2.16 re f 61.441 546.493 83.762 2.16 re f 145.203 546.493 2.16 2.16 re f 147.363 546.493 116.403 2.16 re f 263.766 546.493 2.16 2.16 re f 265.926 546.493 259.926 2.16 re f 525.852 546.493 2.16 2.16 re f 525.852 546.493 2.16 2.16 re f 59.281 515.772 2.16 30.721 re f 145.203 515.772 0.48 30.721 re f 263.766 515.772 0.48 30.721 re f 525.852 515.772 2.16 30.721 re f BT /F3 10.08 Tf 78.602 500.891 TD (Arithmetic)Tj ET BT /F4 10.08 Tf 155.884 500.891 TD ("+" "-" "*" "/")Tj ET BT 153.004 491.291 TD ("%" "**" "x" ".")Tj ET BT 186.124 472.091 TD ("neg")Tj ET BT 268.926 500.891 TD ("neg")Tj /F3 10.08 Tf 30.246 0 TD ( implements unary negation. There is no)Tj ET BT 268.926 491.291 TD (overloading for unary identity \(i.e. )Tj /F4 10.08 Tf 157.125 0 TD (+$obj)Tj /F3 10.08 Tf 30.246 0 TD (\).)Tj ET 59.281 514.332 2.16 1.44 re f 61.441 515.292 83.522 0.48 re f 61.441 514.332 83.522 0.48 re f 144.963 515.292 1.44 0.48 re f 144.963 514.332 1.44 0.48 re f 145.443 515.292 1.44 0.48 re f 145.443 514.332 1.44 0.48 re f 146.883 515.292 116.643 0.48 re f 146.883 514.332 116.643 0.48 re f 263.526 515.292 1.44 0.48 re f 263.526 514.332 1.44 0.48 re f 264.006 515.292 1.44 0.48 re f 264.006 514.332 1.44 0.48 re f 265.446 515.292 260.406 0.48 re f 265.446 514.332 260.406 0.48 re f 525.852 514.332 2.16 1.44 re f 59.281 464.411 2.16 49.921 re f 144.963 464.411 0.48 49.921 re f 263.526 464.411 0.48 49.921 re f 525.852 464.411 2.16 49.921 re f BT 86.282 450.49 TD (Bitwise)Tj ET BT /F4 10.08 Tf 174.124 450.49 TD ("<<" ">>")Tj ET BT 168.124 440.89 TD ("&" "|" "^")Tj ET BT 192.124 421.69 TD ("~")Tj ET BT 268.926 450.49 TD ("^")Tj /F4 7.68 Tf 18.147 0 TD ( )Tj /F3 10.08 Tf 4.609 0 TD (is bitwise exclusive OR, not exponentiation.)Tj ET 59.281 463.931 2.16 0.48 re f 61.441 463.931 83.522 0.48 re f 144.963 463.931 0.48 0.48 re f 145.443 463.931 118.083 0.48 re f 263.526 463.931 0.48 0.48 re f 264.006 463.931 261.846 0.48 re f 525.852 463.931 2.16 0.48 re f 59.281 414.009 2.16 49.921 re f 144.963 414.009 0.48 49.921 re f 263.526 414.009 0.48 49.921 re f 525.852 414.009 2.16 49.921 re f BT 75.962 400.089 TD (Assignment)Tj ET BT /F4 10.08 Tf 159.004 400.089 TD ("+=" "-=" "*=")Tj ET BT 155.884 390.489 TD ("/=" "%=" "**=")Tj ET BT 153.004 380.889 TD ("<<=" ">>=" "x=")Tj ET BT 189.244 371.289 TD (".=")Tj ET BT 174.124 352.088 TD ("++" "--")Tj ET BT 268.926 400.089 TD ("++")Tj /F3 10.08 Tf 24.196 0 TD ( and )Tj /F4 10.08 Tf 22.105 0 TD ("--")Tj /F3 10.08 Tf 24.196 0 TD ( are mutators and their handler is)Tj ET BT 268.926 390.489 TD (expected to actually change the value of its first)Tj ET BT 268.926 380.889 TD (argument \(e.g. )Tj /F4 10.08 Tf 67.461 0 TD ($_[0]->{val}++)Tj /F3 10.08 Tf 84.517 0 TD ( for )Tj /F4 10.08 Tf 17.882 0 TD ("++")Tj /F3 10.08 Tf 24.196 0 TD (\). Handlers)Tj ET BT 268.926 371.289 TD (for other assignment operators may alter the first)Tj ET BT 268.926 361.688 TD (argument, but there's little point since the argument is)Tj ET BT 268.926 352.088 TD (always assigned the return value.)Tj ET 59.281 413.529 2.16 0.48 re f 61.441 413.529 83.522 0.48 re f 144.963 413.529 0.48 0.48 re f 145.443 413.529 118.083 0.48 re f 263.526 413.529 0.48 0.48 re f 264.006 413.529 261.846 0.48 re f 525.852 413.529 2.16 0.48 re f 59.281 344.408 2.16 69.122 re f 144.963 344.408 0.48 69.122 re f 263.526 344.408 0.48 69.122 re f 525.852 344.408 2.16 69.122 re f BT 75.242 330.488 TD (Comparison)Tj ET BT /F4 10.08 Tf 149.883 330.488 TD ("<" "<=" ">" ">=")Tj ET BT 155.884 320.887 TD ("==" "!=" "<=>")Tj ET BT 159.004 311.287 TD ("lt" "le" "gt")Tj ET BT 159.004 301.687 TD ("ge" "eq" "ne")Tj ET BT 186.124 292.087 TD ("cmp")Tj ET BT /F3 10.08 Tf 268.926 330.488 TD (All other operators may be automatically generated)Tj ET BT 268.926 320.887 TD (from the )Tj /F4 10.08 Tf 40.764 0 TD ("<=>")Tj /F3 10.08 Tf 30.246 0 TD ( and )Tj /F4 10.08 Tf 22.105 0 TD ("cmp")Tj /F3 10.08 Tf 30.246 0 TD ( operators.)Tj ET 59.281 343.928 2.16 0.48 re f 61.441 343.928 83.522 0.48 re f 144.963 343.928 0.48 0.48 re f 145.443 343.928 118.083 0.48 re f 263.526 343.928 0.48 0.48 re f 264.006 343.928 261.846 0.48 re f 525.852 343.928 2.16 0.48 re f 59.281 284.407 2.16 59.521 re f 144.963 284.407 0.48 59.521 re f 263.526 284.407 0.48 59.521 re f 525.852 284.407 2.16 59.521 re f BT 86.042 270.486 TD (Built-in)Tj ET BT 81.962 260.886 TD (functions)Tj ET BT /F4 10.08 Tf 180.124 270.486 TD ("atan2")Tj ET BT 149.883 251.286 TD ("cos" "sin" "exp")Tj ET BT 147.003 241.686 TD ("abs" "log" "sqrt")Tj ET BT /F3 10.08 Tf 268.926 270.486 TD (These override the equivalent built-in function for a)Tj ET BT 268.926 260.886 TD (specific class only.)Tj ET 59.281 283.927 2.16 0.48 re f 61.441 283.927 83.522 0.48 re f 144.963 283.927 0.48 0.48 re f 145.443 283.927 118.083 0.48 re f 263.526 283.927 0.48 0.48 re f 264.006 283.927 261.846 0.48 re f 525.852 283.927 2.16 0.48 re f 59.281 234.005 2.16 49.921 re f 144.963 234.005 0.48 49.921 re f 263.526 234.005 0.48 49.921 re f 525.852 234.005 2.16 49.921 re f BT 74.762 220.085 TD (Conversions)Tj ET BT /F4 10.08 Tf 149.883 220.085 TD (q{""} "0+" "bool")Tj ET BT /F3 10.08 Tf 268.926 220.085 TD (Automatically called when the context requires a string,)Tj ET BT 268.926 210.485 TD (number, or boolean.)Tj ET 59.281 233.525 2.16 0.48 re f 61.441 233.525 83.522 0.48 re f 144.963 233.525 0.48 0.48 re f 145.443 233.525 118.083 0.48 re f 263.526 233.525 0.48 0.48 re f 264.006 233.525 261.846 0.48 re f 525.852 233.525 2.16 0.48 re f 59.281 202.805 2.16 30.721 re f 144.963 202.805 0.48 30.721 re f 263.526 202.805 0.48 30.721 re f 525.852 202.805 2.16 30.721 re f BT 84.602 188.884 TD (Pseudo-)Tj ET BT 81.482 179.284 TD (operators)Tj ET BT /F4 10.08 Tf 171.004 188.884 TD ("nomethod")Tj ET BT 159.004 179.284 TD ("fallback" "=")Tj ET BT 268.926 188.884 TD ("=")Tj /F3 10.08 Tf 18.147 0 TD ( does )Tj /F2 10.08 Tf 26.014 0 TD (not)Tj /F3 10.08 Tf 13.437 0 TD ( overload the assignment operation.)Tj ET 59.281 202.325 2.16 0.48 re f 61.441 202.325 83.522 0.48 re f 144.963 202.325 0.48 0.48 re f 145.443 202.325 1 2000 18.083 0.48 re f 263.526 202.325 0.48 0.48 re f 264.006 202.325 261.846 0.48 re f 525.852 202.325 2.16 0.48 re f 59.281 171.604 2.16 30.721 re f 59.281 169.444 2.16 2.16 re f 59.281 169.444 2.16 2.16 re f 61.441 169.444 83.522 2.16 re f 144.963 171.604 0.48 30.721 re f 144.963 169.444 2.16 2.16 re f 147.123 169.444 116.403 2.16 re f 263.526 171.604 0.48 30.721 re f 263.526 169.444 2.16 2.16 re f 265.686 169.444 260.166 2.16 re f 525.852 171.604 2.16 30.721 re f 525.852 169.444 2.16 2.16 re f 525.852 169.444 2.16 2.16 re f BT /F1 7.68 Tf 225.005 157.924 TD (Table 1: Overloadable operators in Perl)Tj ET endstream endobj 138 0 obj 8653 endobj 139 0 obj << /Type /Page /Parent 127 0 R /Resources << /Font << /F1 7 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R >> /ProcSet 2 0 R >> /Contents 140 0 R >> endobj 140 0 obj << /Length 141 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 35)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 0.138 Tw (The subroutine reference may either be a reference to a named subroutine, or a symbolic)Tj ET BT 86.522 748.817 TD 0.404 Tw (reference \(i.e. the name of the subroutine\), or a reference to an anonymous subroutine. Note)Tj ET BT 86.522 735.617 TD 0 Tw (that all three alternatives may be used in the same )Tj /F4 10.08 Tf 225.491 0 TD (use overload)Tj /F3 10.08 Tf 72.589 0 TD ( statement.)Tj ET BT 105.722 722.177 TD 3.198 Tw (The implementation subroutine is called any time a reference to an object of the)Tj ET BT 86.522 708.736 TD 0.453 Tw (corresponding class \(in the above examples, Math::BigFloat\) is an operand of corresponding)Tj ET BT 86.522 695.296 TD 0.99 Tw (operator. If the operation was specified as a subroutine reference, then it's called as a non-)Tj ET BT 86.522 681.856 TD 0.153 Tw (method subroutine. If it is specified as a symbolic reference \(i.e. a name\), then it is called as a)Tj ET BT 86.522 668.655 TD 0 Tw (method.)Tj ET BT 105.722 655.215 TD 1.57 Tw (In other words, if )Tj /F4 10.08 Tf 86.224 0 TD 0 Tw ($six)Tj /F3 10.08 Tf 24.197 0 TD 1.57 Tw ( and )Tj /F4 10.08 Tf 25.245 0 TD 0 Tw ($seven)Tj /F3 10.08 Tf 36.295 0 TD 1.57 Tw ( store Math::BigFloat objects, and multiplication,)Tj ET BT 86.522 641.775 TD 0 Tw (addition and negation are overloaded as shown above, the following series of operations:)Tj ET BT /F4 7.68 Tf 86.522 625.454 TD ($six * $seven;)Tj ET BT 86.522 615.854 TD ($six + $seven;)Tj ET BT 86.522 606.254 TD (-$six;)Tj ET BT /F3 10.08 Tf 86.522 588.013 TD (is automatically translated to:)Tj ET BT /F4 7.68 Tf 86.522 571.693 TD (Math::BigFloat::fmul\($six,$seven,""\);)Tj ET BT 86.522 562.093 TD ($six->fadd\($seven,""\);)Tj ET BT 86.522 552.493 TD (\(sub { Math::BigInt->new\($_[0]->fneg\(\)\) }\)->\($six,undef,""\);)Tj ET BT /F3 10.08 Tf 105.722 534.252 TD 1.562 Tw (Regardless of how it is invoked, each implementation subroutine is called with three)Tj ET BT 86.522 521.052 TD 0 Tw (arguments:)Tj ET BT 95.642 504.732 TD (\245)Tj 10.08 0 TD (The first operand of the operation,)Tj ET BT 95.642 485.531 TD (\245)Tj 10.08 0 TD 1.16 Tw (The second operand of the operation \(or )Tj /F4 10.08 Tf 189.604 0 TD 0 Tw (undef)Tj /F3 10.08 Tf 30.246 0 TD 1.16 Tw ( if the operation is unary, as for )Tj /F4 10.08 Tf 151.171 0 TD 0 Tw (fneg)Tj ET BT /F3 10.08 Tf 105.722 472.091 TD (above\),)Tj ET BT 95.642 452.89 TD (\245)Tj 10.08 0 TD (A flag indicating whether the operands were reversed.)Tj ET BT 105.722 436.81 TD (The flag is needed because\321as in all other object methods\321the first argument must be a)Tj ET BT 86.522 423.37 TD 4.926 Tw (reference to an object of the appropriate class \(i.e. in this case a reference to a)Tj ET BT 86.522 409.929 TD 0 Tw (Math::BigFloat\). If Perl detects an operation such as:)Tj ET BT /F4 7.68 Tf 86.522 393.609 TD (6 + $seven;)Tj ET BT /F3 10.08 Tf 86.522 375.369 TD (it obviously can't translate that to:)Tj ET BT /F4 7.68 Tf 86.522 359.048 TD (6->fadd\($seven,""\);)Tj /F5 7.68 Tf 92.162 0 TD (# huh?)Tj ET BT /F3 10.08 Tf 86.522 340.808 TD (so it translates it to:)Tj ET BT /F4 7.68 Tf 86.522 324.487 TD ($seven->fadd\(6,1\);)Tj ET BT /F3 10.08 Tf 86.522 306.487 TD (and sets the third argument to a true value, to indicate that the arguments had to be reversed)Tj ET BT 86.522 293.047 TD 1.011 Tw (Notice that in all the earlier examples, this argument was an empty string \(i.e. false\), since)Tj ET BT 86.522 279.606 TD 2.382 Tw (the first operand was always a Math::BigNum and so the arguments didn't need to be)Tj ET BT 86.522 266.166 TD 0 Tw (reversed.)Tj ET BT 105.722 252.726 TD 1.213 Tw (Hence, for operations where the order of the operands matters \(e.g. for subtraction or)Tj ET BT 86.522 239.525 TD 0 Tw (division\), it's common to see implementation subroutines implemented like this:)Tj ET BT /F4 7.68 Tf 86.522 223.205 TD (sub subtract)Tj ET BT 86.522 213.605 TD ({)Tj ET BT 98.042 204.005 TD (my \($op1, $op2, $reversed\) = @_;)Tj ET BT 98.042 194.404 TD (\($op2,$op1\) = \($op1,$op2\) if $reversed;)Tj ET BT /F5 7.68 Tf 98.042 184.804 TD (# then perform $op1 - $op2 as appropriate)Tj ET BT /F4 7.68 Tf 86.522 175.204 TD (})Tj ET BT 86.522 156.004 TD (use overload "-" => \\&subtract;)Tj ET endstream endobj 141 0 obj 4323 endobj 142 0 obj << /Type /Page /Parent 127 0 R /Resources << /Font 145 0 R /ProcSet 2 0 R >> /Contents 143 0 R >> endobj 143 0 obj << /Length 144 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 36)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 1.844 Tw (It's important to bear in mind that problems may arise if both operands of a binary)Tj ET BT 86.522 748.817 TD 0.995 Tw (operator are references to objects. If the object's classes have both overloaded the operator,)Tj ET BT 86.522 735.617 TD 2.29 Tw (it's the overloading in the )Tj /F2 10.08 Tf 127.458 0 TD 0 Tw (first)Tj /F3 10.08 Tf 16.804 0 TD 2.29 Tw ( operand's class that is invoked. In such cases it may be)Tj ET BT 86.522 722.177 TD 0.205 Tw (necessary to resort to multiple dispatch techniques to ensure that the appropriate subroutine)Tj ET BT 86.522 708.736 TD 0 Tw (is invoked regardless of the order of operands.)Tj ET BT /F2 10.08 Tf 86.522 655.215 TD 0.84 Tw (Of course, just because the operator overloading facility is sometimes useful, doesn't mean it should)Tj ET BT /F3 10.08 Tf 86.522 641.775 TD 0 Tw (always)Tj /F2 10.08 Tf 31.299 0 TD ( be used...)Tj ET BT /F2 19.2 Tf 86.522 604.334 TD (The use and abuse of operators)Tj ET BT /F3 10.08 Tf 86.522 578.413 TD 0.498 Tw (The operator overloading mechanism gives you a powerful mechanism with which you can)Tj ET BT 86.522 564.973 TD 2.069 Tw (alter the normal behaviour of expressions and conversions involving any new class you)Tj ET BT 86.522 551.773 TD 0 Tw (create. The question is: )Tj /F2 10.08 Tf 104.056 0 TD (should)Tj /F3 10.08 Tf 26.884 0 TD ( you?)Tj ET BT 105.722 538.332 TD 3.307 Tw (Clearly, there are cases when overloading certain operations makes perfect sense,)Tj ET BT 86.522 524.892 TD 1.265 Tw (especially if you're creating a class to represent something that has a well-defined algebra)Tj ET BT 86.522 511.452 TD 1.146 Tw (\(such as large integers, or complex numbers, or vectors, or matrices\). As illustrated by the)Tj ET BT 86.522 498.011 TD 2.437 Tw (GDP calculation at the start of this section, an appropriate set of operators can greatly)Tj ET BT 86.522 484.811 TD 0 Tw (improve the usability of such classes and the readability of the code that uses them.)Tj ET BT 105.722 471.371 TD 2.465 Tw (Likewise, it's often useful to overload the stringification conversion for a class. For)Tj ET BT 86.522 457.93 TD 0 Tw (example:)Tj ET BT /F4 7.68 Tf 86.522 441.61 TD (package CD::Music;)Tj ET BT 86.522 422.41 TD (use overload)Tj ET BT 98.042 403.209 TD (q{""} => sub { qq\("$_[0]->{name}" by $_[0]->{artist}\) };)Tj ET BT /F3 10.08 Tf 86.522 363.848 TD (That way, if someone writes:)Tj ET BT /F4 7.68 Tf 86.522 347.528 TD (my $cd = CD::Music->new\(@messiah_data\);)Tj ET BT /F5 7.68 Tf 86.522 328.328 TD (# and later\311)Tj ET BT /F4 7.68 Tf 86.522 309.127 TD (print $cd, "\\n";)Tj ET BT /F3 10.08 Tf 86.522 290.887 TD (they get something useful like:)Tj ET BT /F7 7.68 Tf 86.522 274 2000 .566 TD ("Messiah" by George Frideric Handel)Tj ET BT /F3 10.08 Tf 86.522 256.566 TD (rather than something merely accurate like:)Tj ET BT /F7 7.68 Tf 86.522 240.246 TD (CD::Music=HASH\(0x1001c3e0\))Tj ET BT /F3 10.08 Tf 105.722 222.005 TD 0.384 Tw (Then there are cases where the "appropriateness" of specific overloadings is less certain.)Tj ET BT 86.522 208.565 TD 2.581 Tw (Consider a class implementing three-dimensional vectors, such as might be found in a)Tj ET BT 86.522 195.124 TD 0 Tw (graphics package:)Tj ET endstream endobj 144 0 obj 3318 endobj 145 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R /F7 57 0 R >> endobj 146 0 obj << /Type /Page /Parent 147 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 148 0 R >> endobj 147 0 obj << /Kids [ 146 0 R 150 0 R 153 0 R 156 0 R 159 0 R 163 0 R ] /Count 6 /Type /Pages /Parent 215 0 R >> endobj 148 0 obj << /Length 149 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 37)Tj ET BT /F4 7.68 Tf 86.522 765.138 TD ($view_dir = Vector->new\(x=>100,y=>0,z=>-50\);)Tj ET BT 86.522 755.537 TD ($move_dir = Vector->new\(x=>20,y=>20,z=>0\);)Tj ET BT 86.522 736.337 TD ($motion_normal)Tj 68.162 0 TD (= $view_dir x $move_dir;)Tj ET BT 86.522 726.737 TD ($motion_angle)Tj 68.162 0 TD (= $view_dir * $move_dir;)Tj ET BT /F3 10.08 Tf 105.722 708.496 TD 0.751 Tw (Clearly for such a class )Tj /F4 10.08 Tf 108.391 0 TD 0 Tw ("x")Tj /F3 10.08 Tf 18.147 0 TD 0.751 Tw ( is an appropriate operator for the cross-product operation,)Tj ET BT 86.522 695.056 TD 0 Tw (but is )Tj /F4 10.08 Tf 27.629 0 TD ("*")Tj /F3 10.08 Tf 18.021 0 TD 0.232 Tw ( the right choice for the dot-product? It certainly conveys the multiplicative nature)Tj ET BT 86.522 681.856 TD 1.217 Tw (of the operation, and it looks somewhat like a dot \(albeit a big, hairy one\), but would the)Tj ET BT 86.522 668.415 TD 2.845 Tw (actual "dot" operator \(i.e. )Tj /F4 10.08 Tf 125.086 0 TD 0 Tw (".")Tj /F3 10.08 Tf 18.006 0 TD 2.845 Tw (\) be a better choice? That operator already has a strong)Tj ET BT 86.522 654.975 TD 0 Tw (association with concatenation in regular Perl, but a vector algebraist might well find:)Tj ET BT /F4 7.68 Tf 86.522 638.655 TD ($motion_angle = $view_dir . $move_dir;)Tj ET BT /F3 10.08 Tf 86.522 620.414 TD 1.287 Tw (more "intuitive". Or perhaps not. It certainly )Tj /F2 10.08 Tf 208.534 0 TD 0 Tw (won't)Tj /F3 10.08 Tf 24.073 0 TD 1.32 Tw ( be intuitive when the "dot" operator is)Tj ET BT 86.522 606.974 TD 2.133 Tw (called to concatenate two string-interpolated variables \(e.g. )Tj /F4 10.08 Tf 280.568 0 TD 0 Tw ("$vector1$vector2")Tj /F3 10.08 Tf 108.884 0 TD 2.133 Tw (\) and)Tj ET BT 86.522 593.774 TD 0.298 Tw (produces their dot-product instead. And what would such mathematicians then make of the)Tj ET BT /F4 10.08 Tf 86.522 580.333 TD 0 Tw ("^")Tj /F3 10.08 Tf 18 0 TD ( operator? Would they expect:)Tj ET BT /F4 7.68 Tf 86.522 564.013 TD ($unit_view_dir = ^$view_dir;)Tj ET BT /F3 10.08 Tf 86.522 545.772 TD (to create a unit vector? How will they react when it produces a syntax error instead?)Tj ET BT 105.722 532.332 TD 1.22 Tw (The problem is that, having provided some overloaded operators for a class, we have)Tj ET BT 86.522 518.892 TD 0.692 Tw (also set up an expectation in the mind of the users of that class. Because objects of the class)Tj ET BT 86.522 505.692 TD 0 Tw (can )Tj /F2 10.08 Tf 18.012 0 TD (sometimes )Tj /F3 10.08 Tf 44.87 0 TD 0.11 Tw (be used in the "natural" way, clients may expect that such objects can )Tj /F2 10.08 Tf 310.807 0 TD 0 Tw (always)Tj /F3 10.08 Tf 27.991 0 TD ( be)Tj ET BT 86.522 492.251 TD 2.376 Tw (used that way. That will probably not be the case, so it's vital to document where the)Tj ET BT 86.522 478.811 TD 0 Tw (metaphor breaks down.)Tj ET BT 105.722 465.371 TD 1.655 Tw (Sometimes operator overloading is used purely to provide coding expediency, rather)Tj ET BT 86.522 451.93 TD 0.61 Tw (than to promote clarity. For example, suppose we created a database class that was entirely)Tj ET BT 86.522 438.73 TD 0 Tw (operator-driven:)Tj ET BT /F4 7.68 Tf 86.522 422.41 TD (use OpDBM;)Tj ET BT 86.522 403.209 TD (my $db = OpDBM->new\($dbfile\);)Tj ET BT 86.522 384.009 TD ($db += [item=>"oatmeal",)Tj 115.203 0 TD (category=>"breakfast"];)Tj ET BT 86.522 374.409 TD ($db += [item=>"marmalade",)Tj 126.723 0 TD (category=>"breakfast"];)Tj ET BT 86.522 364.808 TD ($db += [item=>"potatoes",)Tj 126.723 0 TD (category=>"dinner"];)Tj ET BT 86.522 345.608 TD (my $relation = sqrt\( ~$db * [category=>"breakfast"] \);)Tj ET BT 86.522 326.407 TD (print "$_->{item}\\n" while \($relation++\);)Tj ET BT /F3 10.08 Tf 105.722 308.167 TD 0.902 Tw (The dozen or so people on the planet who are well-versed in abstract database theory,)Tj ET BT 86.522 294.727 TD 3.829 Tw (may rejoice in the decision to overload )Tj /F4 10.08 Tf 200.885 0 TD 0 Tw ("+=")Tj /F3 10.08 Tf 24.196 0 TD 3.829 Tw ( to handle insertions, "~" for database)Tj ET BT 86.522 281.286 TD 2.222 Tw (normalization, )Tj /F4 10.08 Tf 70.322 0 TD 0 Tw ("*")Tj /F3 10.08 Tf 18.147 0 TD 2.222 Tw ( to perform selections, )Tj /F4 10.08 Tf 110.256 0 TD 0 Tw ("++")Tj /F3 10.08 Tf 24.196 0 TD 2.222 Tw ( to iterate a set of records, and )Tj /F4 10.08 Tf 154.128 0 TD 0 Tw (sqrt)Tj /F3 10.08 Tf 24.196 0 TD 2.222 Tw ( to)Tj ET BT 86.522 267.846 TD 0 Tw (implement the ")Tj /F2 10.08 Tf 71.3 0 TD (Sort, Quashing Repeated Tuples)Tj /F3 10.08 Tf 131.624 0 TD (" operation:)Tj ET BT /F4 7.68 Tf 86.522 251.526 TD (package OpDBM;)Tj ET BT 86.522 241.926 TD (use overload)Tj ET BT 98.042 232.325 TD ('+=')Tj 29.281 0 TD (=> sub { $_[0]->insert_tuple\( @{$_[1]} \) },)Tj ET BT 98.042 222.725 TD ('~')Tj 29.281 0 TD (=> sub { $_[0]->normalize\(\) },)Tj ET BT 98.042 213.125 TD ('*')Tj 29.281 0 TD (=> sub {)Tj 39.841 0 TD (if \($_[2]\))Tj 48.721 0 TD ({ $_[1]->insert_tuple\( @{$_[0]} \) })Tj ET BT 167.164 203.525 TD (else )Tj 48.721 0 TD ({ $_[0]->insert_tuple\( @{$_[1]} \) } };)Tj ET BT 86.522 184.324 TD (package OpDBM::Relation;)Tj ET BT 86.522 174.724 TD (use overload)Tj ET BT 98.042 165.124 TD ('++')Tj 29.281 0 TD (=> sub { $_[0]->next\(\) },)Tj ET BT 98.042 155.524 TD 0.039 Tc ('sqrt'=> sub { $_[0]->sort_quash_reps\(\) };)Tj ET endstream endobj 149 0 obj 5315 endobj 150 0 obj << /Type /Page /Parent 147 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 151 0 R >> endobj 151 0 obj << /Length 152 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 38)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 3.254 Tw (To database theoreticians, the resulting code may be obvious, intuitive, and even)Tj ET BT 86.522 748.817 TD 0.902 Tw (elegant. But it's also likely to make the task of developing and maintaining such code very)Tj ET BT 86.522 735.617 TD 0 Tw (much harder for the rest of us.)Tj ET BT 105.722 722.177 TD 0.621 Tw (So when should you overload? Clearly it's a least partially a "religious issue", so there's)Tj ET BT 86.522 708.736 TD 1.307 Tw (no correct answer)Tj /F3 6.24 Tf 82.082 3.84 TD 0 Tw (26)Tj /F3 10.08 Tf 6.24 -3.84 TD 1.307 Tw (. As a general rule of thumb, overloading the algebraic operators for a)Tj ET BT 86.522 695.296 TD 1.591 Tw (class is appropriate when the same operators are used in the normal \(non-programming\))Tj ET BT 86.522 681.856 TD 0.181 Tw (notation for whatever the class represents. Numerical and other mathematical classes are the)Tj ET BT 86.522 668.655 TD 0 Tw (usual candidates here.)Tj ET BT 105.722 655.215 TD 0.183 Tw (Overloading conversion operations is also often a good idea, as it allows objects to act in)Tj ET BT 86.522 641.775 TD 4.95 Tw (standard ways the programmers may expect, especially when they are stringified.)Tj ET BT 86.522 628.334 TD 2.904 Tw (Comparison operators are another reasonable candidate for overloading in most cases,)Tj ET BT 86.522 614.894 TD 0 Tw (provided the values represented by objects have an obvious ordering.)Tj ET BT 105.722 601.694 TD 0.881 Tw (A few operators are sufficiently generalized in their meaning \(e.g. )Tj /F4 10.08 Tf 304.3 0 TD 0 Tw ("+=")Tj 2000 /F3 10.08 Tf 24.317 0 TD 0.881 Tw ( meaning "add)Tj ET BT 86.522 588.253 TD 0 Tw (to"\) that they can reasonably be overloaded in almost any suitable context. Code like:)Tj ET BT /F4 7.68 Tf 86.522 571.933 TD ($db += [item=>"oatmeal", category=>"breakfast"];)Tj ET BT /F3 10.08 Tf 86.522 553.693 TD (or:)Tj ET BT /F4 7.68 Tf 86.522 537.372 TD ($dictionary += "algebraist";)Tj ET BT /F3 10.08 Tf 86.522 519.132 TD (or:)Tj ET BT /F4 7.68 Tf 86.522 502.812 TD ($process_group += $new_process;)Tj ET BT /F3 10.08 Tf 86.522 484.571 TD (will probably be readily intelligible to almost any programmer.)Tj ET BT 105.722 471.371 TD 1.463 Tw (Apart from that, it's probably best to use operator overloading sparingly, the way an)Tj ET BT 86.522 457.93 TD 0.807 Tw (expert chef uses salt. Without it, your creations may be bland and indigestible, but using it)Tj ET BT 86.522 444.49 TD 0 Tw (indiscriminately or too often will only raise your clients' blood pressure.)Tj ET BT /F2 10.08 Tf 86.522 390.969 TD 0.143 Tw (Encapsulation is one of the cornerstones of object orientation, but it's the area in which Perl's support)Tj ET BT 86.522 377.529 TD 0.123 Tw (for object-oriented programming is weakest. Many would argue that enforced encapsulation is against)Tj ET BT 86.522 364.088 TD 0.506 Tw (Perl's philosophy of freedom and flexibility in programming. But there are situations when too much)Tj ET BT 86.522 350.648 TD 0 Tw (freedom becomes a trap, and too much flexibility makes it hard to build solid code...)Tj ET BT /F2 19.2 Tf 86.522 313.207 TD (The perils of trust)Tj ET BT /F3 10.08 Tf 86.522 287.527 TD 0.516 Tw (In practice, the lack of an in-built encapsulation mechanism rarely seems to be a problem in)Tj ET BT 86.522 274.086 TD 0.346 Tw (Perl. Most Perl programmers build classes out of standard hashes, and they and the users of)Tj ET BT 86.522 260.646 TD 0.075 Tw (their classes get by quite happily with the principle of "encapsulation by good manners". The)Tj ET BT 86.522 247.206 TD 1.388 Tw (lack of formal encapsulation doesn't matter because everybody plays nicely, keeps off the)Tj ET BT 86.522 233.765 TD 0.664 Tw (grass, and respects the "official" interface of objects. Those who don't play by the rules, and)Tj ET BT 86.522 220.565 TD 1.067 Tw (directly access a method or attribute that is supposed to be private, get what they deserve)Tj ET BT 86.522 207.125 TD 0 Tw (\(i.e. either better performance or a nasty surprise\).)Tj ET BT 86.522 193.444 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 195.604 138.243 0.48 re f BT /F3 5.76 Tf 86.522 178.804 TD (26)Tj /F3 9.6 Tf 5.76 -3.84 TD ( Or perhaps: '\311so there are nothing )Tj /F2 9.6 Tf 154.002 0 TD (but)Tj /F3 9.6 Tf 12.98 0 TD ( "correct" answers, most of which are mutually)Tj ET BT 93.242 164.404 TD (exclusive'.)Tj ET endstream endobj 152 0 obj 4502 endobj 153 0 obj << /Type /Page /Parent 147 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R >> /ProcSet 2 0 R >> /Contents 154 0 R >> endobj 154 0 obj << /Length 155 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 39)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 1.142 Tw (The only problem is, this convivial arrangement doesn't scale very well. Leaving your)Tj ET BT 86.522 748.817 TD 1.816 Tw (front door open may be fine in a small town, but it's madness in the big city. Likewise,)Tj ET BT 86.522 735.617 TD 1.164 Tw (informal mechanisms that are suitable for a few hundred lines of code written by a single)Tj ET BT 86.522 722.177 TD 0.294 Tw (programmer, don't work nearly as well when the code is tens of thousands of lines long and)Tj ET BT 86.522 708.736 TD 3.417 Tw (developed by a team. Even if you could trust the entire team to maintain sufficient)Tj ET BT 86.522 695.296 TD 3.381 Tw (programming discipline to respect the notional encapsulation of attributes \(a dubious)Tj ET BT 86.522 681.856 TD 1.379 Tw (proposition\), accidents and mistakes happen, especially in rarely-used parts of the system)Tj ET BT 86.522 668.655 TD 0 Tw (that only ever get used when demonstrating to important clients.)Tj ET BT 105.722 655.215 TD 2.199 Tw (Moreover, deliberate decisions to circumvent the rules \(usually taken in the heat of)Tj ET BT 86.522 641.775 TD 1.753 Tw (hacking, out of laziness, or for efficiency\) are often inadequately documented, leading to)Tj ET BT 86.522 628.334 TD 2.58 Tw (problems later in the development cycle. For example, consider a \(notionally\) "private")Tj ET BT 86.522 614.894 TD 0.279 Tw (attribute of an object, which for efficiency reasons is accessed directly in an obscure part of a)Tj ET BT 86.522 601.694 TD 0 Tw (system. If the implementation of the object's class changes, that attribute may cease to exist.)Tj ET BT 105.722 588.253 TD 0.902 Tw (In a more static language, this would generate an error message to be generated when)Tj ET BT 86.522 574.813 TD 1.431 Tw (next the external code attempts to access the now non-existent attribute. However, Perl's)Tj ET BT 86.522 561.373 TD 2.309 Tw (autovivification of hash entries may well "resurrect" the former attribute whenever it is)Tj ET BT 86.522 547.933 TD 1.311 Tw (accessed, so the now-incorrect access proceeds silently. Bugs such as this can be painfully)Tj ET BT 86.522 534.732 TD 0.164 Tw (difficult to diagnose and track down, especially if the original programmer has moved on by)Tj ET BT 86.522 521.292 TD 0 Tw (the time the problem is discovered.)Tj ET BT /F2 10.08 Tf 86.522 485.771 TD 1.448 Tw (Fortunately Perl's very flexibility can be turned against itself, to provide several different ways of)Tj ET BT 86.522 472.331 TD 0.566 Tw (building objects that )Tj /F3 10.08 Tf 87.095 0 TD 0 Tw (do)Tj /F2 10.08 Tf 11.787 0 TD 0.566 Tw ( respect the encapsulation imposed by their classes. Here's one approach that)Tj ET BT 86.522 459.131 TD 0 Tw (also demonstrates an interesting application of scalar-based objects...)Tj ET BT /F2 19.2 Tf 86.522 423.61 TD (Encapsulation via scalars)Tj ET BT /F3 10.08 Tf 86.522 400.569 TD 1.051 Tw (An interesting, but less well-known approach to encapsulation uses scalar-based objects to)Tj ET BT 86.522 387.129 TD 1.866 Tw (implement a technique called the)Tj /F2 10.08 Tf 155.282 0 TD ( flyweight pattern)Tj /F3 10.08 Tf 76.324 0 TD (. In the flyweight pattern, objects don't)Tj ET BT 86.522 373.689 TD 1.387 Tw (carry around their own information, so that information can't be accessed directly via the)Tj ET BT 86.522 360.248 TD 1.985 Tw (object. Instead, flyweight objects merely serve as an index into a shared table of values,)Tj ET BT 86.522 347.048 TD 1.315 Tw (stored within the class itself. For example, an object might be an integer that indexes into)Tj ET BT 86.522 333.608 TD 0 Tw (some table of values stored as a class attribute.)Tj ET BT 105.722 320.167 TD (Flyweight objects are most frequently used in object-oriented languages that pass objects)Tj ET BT 86.522 306.727 TD 1.341 Tw (around by value, because flyweight objects remain extremely small \(no matter how much)Tj ET BT 86.522 293.287 TD 0.298 Tw (data they "contain"\), and hence are cheap to pass around. Because Perl objects are invariably)Tj ET BT 86.522 280.086 TD 0 Tw (accessed via references, this advantage is not significant.)Tj ET BT 105.722 266.646 TD 0.251 Tw (However, the flyweight pattern still has something to offer in Perl, because it provides a)Tj ET BT 86.522 253.206 TD 3.737 Tw (simple mechanism for preventing direct access to object attributes, thereby enforcing)Tj ET BT 86.522 239.765 TD 0.262 Tw (encapsulation. As a bonus, it also provides a means of easily keeping track of every object in)Tj ET BT 86.522 226.325 TD 0 Tw (a class.)Tj ET BT /F2 15.36 Tf 86.522 197.525 TD (Name, rank, and serial number)Tj ET BT /F3 10.08 Tf 86.522 177.604 TD 0.374 Tw (Figure 9 shows a flyweight implementation of the Soldier class. The entire class is contained)Tj ET BT 86.522 164.164 TD 0.697 Tw (in a pair of curly braces, to ensure that any lexical variables declared within their scope are)Tj ET endstream endobj 155 0 obj 4984 endobj 156 0 obj << /Type /Page /Parent 147 0 R /Resources << /Font << /F1 7 0 R /F3 11 0 R 2000 /F4 20 0 R /F5 25 0 R >> /ProcSet 2 0 R >> /Contents 157 0 R >> endobj 157 0 obj << /Length 158 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 40)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD 0.252 Tw (not directly accessible outside that scope. Not surprisingly then, the first thing the class does)Tj ET BT 86.522 748.817 TD 0 Tw (is declare some lexical variables.)Tj ET BT /F4 7.68 Tf 86.522 724.577 TD (package Soldier;)Tj ET 73.202 738.017 2.16 2.16 re f 73.202 738.017 2.16 2.16 re f 75.362 738.017 436.81 2.16 re f 512.172 738.017 2.16 2.16 re f 512.172 738.017 2.16 2.16 re f 73.202 722.657 2.16 15.36 re f 512.172 722.657 2.16 15.36 re f BT 86.522 714.976 TD ($VERSION = 2.00;)Tj ET 73.202 713.056 2.16 9.6 re f 512.172 713.056 2.16 9.6 re f BT 86.522 705.376 TD (use strict;)Tj ET 73.202 703.456 2.16 9.6 re f 512.172 703.456 2.16 9.6 re f 73.202 693.856 2.16 9.6 re f 512.172 693.856 2.16 9.6 re f BT 86.522 686.176 TD ({)Tj ET 73.202 684.256 2.16 9.6 re f 512.172 684.256 2.16 9.6 re f BT /F5 7.68 Tf 106.922 676.575 TD (# Table storing references to hashes containing object data)Tj ET 73.202 674.655 2.16 9.6 re f 512.172 674.655 2.16 9.6 re f BT /F4 7.68 Tf 106.922 666.975 TD (my @_soldiers;)Tj ET 73.202 665.055 2.16 9.6 re f 512.172 665.055 2.16 9.6 re f 73.202 655.455 2.16 9.6 re f 512.172 655.455 2.16 9.6 re f BT /F5 7.68 Tf 106.922 647.775 TD (# Allowable attributes and their default values)Tj ET 73.202 645.855 2.16 9.6 re f 512.172 645.855 2.16 9.6 re f BT /F4 7.68 Tf 106.922 638.175 TD (my %_fields = \(name=>'???', rank=>'???', serial_num=>-1\);)Tj ET 73.202 636.255 2.16 9.6 re f 512.172 636.255 2.16 9.6 re f 73.202 626.654 2.16 9.6 re f 512.172 626.654 2.16 9.6 re f BT /F5 7.68 Tf 106.922 618.974 TD (# Constructor adds object data to table and blessed a scalar)Tj ET 73.202 617.054 2.16 9.6 re f 512.172 617.054 2.16 9.6 re f BT 106.922 609.374 TD (# storing the index of that data)Tj ET 73.202 607.454 2.16 9.6 re f 512.172 607.454 2.16 9.6 re f 73.202 597.854 2.16 9.6 re f 512.172 597.854 2.16 9.6 re f BT /F4 7.68 Tf 106.922 590.174 TD (sub new)Tj ET 73.202 588.253 2.16 9.6 re f 512.172 588.253 2.16 9.6 re f BT 106.922 580.573 TD ({)Tj ET 73.202 578.653 2.16 9.6 re f 512.172 578.653 2.16 9.6 re f BT 127.323 570.973 TD (my \($class, %args\) = @_;)Tj ET 73.202 569.053 2.16 9.6 re f 512.172 569.053 2.16 9.6 re f BT 127.323 561.373 TD (my $dataref = {%_fields};)Tj ET 73.202 559.453 2.16 9.6 re f 512.172 559.453 2.16 9.6 re f BT 127.323 551.773 TD (foreach my $field \( keys %_fields \))Tj ET 73.202 549.853 2.16 9.6 re f 512.172 549.853 2.16 9.6 re f BT 127.323 542.172 TD ({)Tj ET 73.202 540.252 2.16 9.6 re f 512.172 540.252 2.16 9.6 re f BT 147.723 532.572 TD ($dataref->{$field} = $args{$field})Tj ET 73.202 530.652 2.16 9.6 re f 512.172 530.652 2.16 9.6 re f BT 168.124 522.972 TD (if defined $args{$field};)Tj ET 73.202 521.052 2.16 9.6 re f 512.172 521.052 2.16 9.6 re f BT 127.323 513.372 TD (})Tj ET 73.202 511.452 2.16 9.6 re f 512.172 511.452 2.16 9.6 re f BT 127.323 503.772 TD (push @_soldiers, $dataref;)Tj ET 73.202 501.851 2.16 9.6 re f 512.172 501.851 2.16 9.6 re f BT 127.323 494.171 TD (my $object = $#_soldiers;)Tj ET 73.202 492.251 2.16 9.6 re f 512.172 492.251 2.16 9.6 re f BT 127.323 484.571 TD (bless \\$object, $class;)Tj ET 73.202 482.651 2.16 9.6 re f 512.172 482.651 2.16 9.6 re f BT 106.922 474.971 TD (})Tj ET 73.202 467.291 2.16 15.36 re f 512.172 467.291 2.16 15.36 re f BT /F5 7.68 Tf 106.922 459.611 TD (# These methods provide the only means of accessing object attributes)Tj ET 73.202 457.69 2.16 9.6 re f 512.172 457.69 2.16 9.6 re f BT 106.922 450.01 TD (# \(note that only rank can be changed\))Tj ET 73.202 448.09 2.16 9.6 re f 512.172 448.09 2.16 9.6 re f 73.202 438.49 2.16 9.6 re f 512.172 438.49 2.16 9.6 re f BT /F4 7.68 Tf 106.922 430.81 TD (sub get_name)Tj 88.562 0 TD ({ return $_soldiers[${$_[0]}]->{name} })Tj ET 73.202 428.89 2.16 9.6 re f 512.172 428.89 2.16 9.6 re f BT 106.922 421.21 TD (sub get_rank)Tj 88.562 0 TD ({ return $_soldiers[${$_[0]}]->{rank} })Tj ET 73.202 419.29 2.16 9.6 re f 512.172 419.29 2.16 9.6 re f BT 106.922 411.609 TD (sub get_serial_num)Tj 88.562 0 TD ({ return $_soldiers[${$_[0]}]->{serial_num} })Tj ET 73.202 409.689 2.16 9.6 re f 512.172 409.689 2.16 9.6 re f 73.202 400.089 2.16 9.6 re f 512.172 400.089 2.16 9.6 re f BT 106.922 392.409 TD (sub set_rank)Tj ET 73.202 390.489 2.16 9.6 re f 512.172 390.489 2.16 9.6 re f BT 106.922 382.809 TD ({)Tj ET 73.202 380.889 2.16 9.6 re f 512.172 380.889 2.16 9.6 re f BT 127.323 373.209 TD (my \($indexref, $newrank\) = @_;)Tj ET 73.202 371.289 2.16 9.6 re f 512.172 371.289 2.16 9.6 re f BT 127.323 363.608 TD ($_soldiers[$$indexref]->{rank} = $newrank)Tj ET 73.202 361.688 2.16 9.6 re f 512.172 361.688 2.16 9.6 re f BT 106.922 354.008 TD (})Tj ET 73.202 346.328 2.16 15.36 re f 512.172 346.328 2.16 15.36 re f BT /F5 7.68 Tf 106.922 338.648 TD (# This class method provides an iterator over every object)Tj ET 73.202 336.728 2.16 9.6 re f 512.172 336.728 2.16 9.6 re f 73.202 327.127 2.16 9.6 re f 512.172 327.127 2.16 9.6 re f BT /F4 7.68 Tf 106.922 319.447 TD (my $_cursor = -1;)Tj ET 73.202 317.527 2.16 9.6 re f 512.172 317.527 2.16 9.6 re f BT 106.922 309.847 TD (sub each)Tj ET 73.202 307.927 2.16 9.6 re f 512.172 307.927 2.16 9.6 re f BT 106.922 300.247 TD ({)Tj ET 73.202 298.327 2.16 9.6 re f 512.172 298.327 2.16 9.6 re f BT 127.323 290.647 TD (my $nextindex = ++$_cursor;)Tj ET 73.202 288.727 2.16 9.6 re f 512.172 288.727 2.16 9.6 re f BT 127.323 281.046 TD (if \($nextindex < @_soldiers\))Tj ET 73.202 279.126 2.16 9.6 re f 512.172 279.126 2.16 9.6 re f BT 127.323 271.446 TD ({)Tj ET 73.202 269.526 2.16 9.6 re f 512.172 269.526 2.16 9.6 re f BT 147.723 261.846 TD (return bless \\$nextindex, ref\($_[0]\)||$_[0];)Tj ET 73.202 259.926 2.16 9.6 re f 512.172 259.926 2.16 9.6 re f BT 127.323 252.246 TD (})Tj ET 73.202 250.326 2.16 9.6 re f 512.172 250.326 2.16 9.6 re f BT 127.323 242.646 TD (else)Tj ET 73.202 240.726 2.16 9.6 re f 512.172 240.726 2.16 9.6 re f BT 127.323 233.045 TD ({)Tj ET 73.202 231.125 2.16 9.6 re f 512.172 231.125 2.16 9.6 re f BT 147.723 223.445 TD ($_cursor = -1;)Tj ET 73.202 221.525 2.16 9.6 re f 512.172 221.525 2.16 9.6 re f BT 147.723 213.845 TD (return undef;)Tj ET 73.202 211.925 2.16 9.6 re f 512.172 211.925 2.16 9.6 re f BT 127.323 204.245 TD (})Tj ET 73.202 202.325 2.16 9.6 re f 512.172 202.325 2.16 9.6 re f BT 106.922 194.644 TD (})Tj ET 73.202 192.724 2.16 9.6 re f 512.172 192.724 2.16 9.6 re f BT 86.522 185.044 TD (})Tj ET 73.202 175.204 2.16 2.16 re f 73.202 175.204 2.16 2.16 re f 75.362 175.204 436.81 2.16 re f 512.172 175.204 2.16 2.16 re f 512.172 175.204 2.16 2.16 re f 73.202 177.364 2.16 15.36 re f 512.172 177.364 2.16 15.36 re f BT /F1 7.68 Tf 204.365 157.924 TD (Figure 9: The Soldier class implemented via scalars)Tj ET endstream endobj 158 0 obj 6895 endobj 159 0 obj << /Type /Page /Parent 147 0 R /Resources << /Font 162 0 R /ProcSet 2 0 R >> /Contents 160 0 R >> endobj 160 0 obj << /Length 161 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 41)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 1.804 Tw (The lexical array )Tj /F4 10.08 Tf 81.839 0 TD 0 Tw (@_soldiers)Tj /F3 10.08 Tf 60.491 0 TD 1.804 Tw ( is used to store the data for each object. That data is)Tj ET BT 86.522 748.817 TD 1.093 Tw (directly accessible to the methods declared within the curly braces, but nowhere else. This)Tj ET BT 86.522 735.617 TD 0 Tw (restriction will eventually provide the desired encapsulation of object data.)Tj ET BT 105.722 722.177 TD 1.767 Tw (The lexical hash )Tj /F4 10.08 Tf 79.127 0 TD 0 Tw (%_fields)Tj /F3 10.08 Tf 48.556 0 TD 1.767 Tw ( performs the dual function of recording \(in its keys\) the)Tj ET BT 86.522 708.736 TD 0.411 Tw (names of valid attributes of a Soldier object, and storing \(in its values\) the default values for)Tj ET BT 86.522 695.296 TD 0 Tw (those attributes.)Tj ET BT 105.722 681.856 TD 0.238 Tw (The constructor begins like most others we've 2000 seen so far, by creating a new anonymous)Tj ET BT 86.522 668.655 TD 0.83 Tw (hash and initializing it with the default attribute values for the class. It then loops over the)Tj ET BT 86.522 655.215 TD 0.668 Tw (valid fields of the class, overwriting those default values with any corresponding argument)Tj ET BT 86.522 641.775 TD 0 Tw (that was passed to the constructor.)Tj ET BT 105.722 628.334 TD 1.606 Tw (At this point a typical constructor would bless and return the reference in )Tj /F4 10.08 Tf 350.678 0 TD 0 Tw ($objref)Tj /F3 10.08 Tf 42.211 0 TD (,)Tj ET BT 86.522 614.894 TD 1.172 Tw (thereby making the anonymous hash into the new object. Instead, )Tj /F4 10.08 Tf 307.113 0 TD 0 Tw (Soldier::new)Tj /F3 10.08 Tf 72.589 0 TD 1.172 Tw ( pushes)Tj ET BT 86.522 601.694 TD 1.046 Tw (the hash onto the end of the encapsulated )Tj /F4 10.08 Tf 196.268 0 TD 0 Tw (@_soldiers)Tj /F3 10.08 Tf 60.491 0 TD 1.046 Tw ( array, and blesses a scalar storing)Tj ET BT 86.522 588.253 TD 0 Tw (the index of that newly added array element instead.)Tj ET BT 105.722 574.813 TD (Thus a constructor call such as:)Tj ET BT /F4 7.68 Tf 86.522 558.493 TD (my $grunt = Soldier->new\(name => "Smith, J.",)Tj ET BT 202.205 548.893 TD (rank => "private",)Tj ET BT 202.205 539.292 TD (serial_num => 149162536\);)Tj ET BT /F3 10.08 Tf 86.522 521.052 TD 2.229 Tw (leaves )Tj /F4 10.08 Tf 32.161 0 TD 0 Tw ($grunt)Tj /F3 10.08 Tf 36.295 0 TD 2.229 Tw ( with a reference to a scalar \(i.e. to the index of the data\), rather than a)Tj ET BT 86.522 507.612 TD 0 Tw (reference to a hash \(i.e. to the data itself\). Figure 10 illustrates the process.)Tj ET BT 105.722 494.411 TD 1.065 Tw (Theoretically, the effect is the same, since we have the index and know which array it)Tj ET BT 86.522 480.971 TD 2.07 Tw (refers to, so we can still find the actual data. In practice, however, there's an important)Tj ET BT 86.522 467.531 TD 3.623 Tw (difference. Outside the curly braces surrounding the class, the )Tj /F4 10.08 Tf 310.943 0 TD 0 Tw (@_soldiers)Tj /F3 10.08 Tf 60.491 0 TD 3.623 Tw ( array is)Tj ET BT 86.522 454.09 TD 0.182 Tw (inaccessible, so even though we have the index for the object's data, we can't access that data)Tj ET BT 86.522 440.65 TD 0 Tw (directly.)Tj ET BT /F2 15.36 Tf 86.522 413.769 TD (Controlled access)Tj ET BT /F3 10.08 Tf 86.522 394.809 TD 0.169 Tw (Instead, it's up to the accessor methods of the class to provide the required access. Since they)Tj ET BT 86.522 381.369 TD 1.071 Tw (are all defined within the encapsulating curly braces, they )Tj /F2 10.08 Tf 270.006 0 TD 0 Tw (do)Tj /F3 10.08 Tf 9.514 0 TD 1.071 Tw ( have access to )Tj /F4 10.08 Tf 72.088 0 TD 0 Tw (@_soldiers)Tj /F3 10.08 Tf 60.491 0 TD (,)Tj ET BT 86.522 367.928 TD 0.653 Tw (and so they can dereference the blessed index \(i.e. )Tj /F6 10.08 Tf 230.326 0 TD 0 Tw (${$_[0]})Tj /F3 10.08 Tf 48.561 0 TD 0.653 Tw (\), index into the array to get a)Tj ET BT 86.522 354.488 TD 2.378 Tw (reference to the appropriate hash data \()Tj /F6 10.08 Tf 189.837 0 TD 0 Tw ($_soldiers[)Tj /F4 10.08 Tf 66.54 0 TD (${$_[0]})Tj /F6 10.08 Tf 48.393 0 TD (])Tj /F3 10.08 Tf 6.049 0 TD 2.378 Tw (\), and then access the)Tj ET BT 86.522 341.048 TD 0 Tw (correct field of that data using the arrow notation \()Tj /F4 10.08 Tf 225.589 0 TD ($_soldiers[${$_[0]}])Tj /F6 10.08 Tf 120.982 0 TD (->{name})Tj /F3 10.08 Tf 48.237 0 TD (\).)Tj ET BT 105.722 327.848 TD 0.621 Tw (Note that the implementation shown in Figure 9 doesn't provide "write" accessors for a)Tj ET BT 86.522 314.407 TD 0.183 Tw (Soldier's name or serial number. This provides real data security, since without the accessors)Tj ET BT 86.522 300.967 TD 0 Tw (there is no way of modifying these attributes, once they are set.)Tj ET BT 105.722 287.527 TD (We could try to impose a new method on the class:)Tj ET BT /F4 7.68 Tf 86.522 272.646 TD (package main;)Tj ET BT 86.522 264.966 TD (use Soldiers;)Tj ET BT 86.522 249.606 TD (my $general = Soldier->new\()Tj 129.363 0 TD (name => "Caesar, G.J.",)Tj ET BT 215.885 241.926 TD (rank => "Prodictator",)Tj ET BT 215.885 234.245 TD (serial_num => "MMXLVIII"\);)Tj ET BT /F5 7.68 Tf 86.522 218.885 TD (# Oops, that serial number was out by one.)Tj ET BT 86.522 211.205 TD (# Strange, there's no method to change it.)Tj ET BT 86.522 203.525 TD (# Oh well, let's just add one ourselves\311)Tj ET BT 86.522 195.844 TD (Figure )Tj /F4 7.68 Tf 32.262 0 TD (sub Soldiers::set_serial_num { $_soldiers[${$_[0]}]->{serial_num} = $_[1] })Tj ET BT /F5 7.68 Tf 86.522 180.484 TD (# \311and use it\311)Tj ET BT /F4 7.68 Tf 86.522 165.124 TD ($general->set_serial_num\("MMXLIX"\);)Tj ET endstream endobj 161 0 obj 5629 endobj 162 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R /F6 46 0 R >> endobj 163 0 obj << /Type /Page /Parent 147 0 R /Resources << /Font << /F1 7 0 R /F3 11 0 R /F4 20 0 R /F6 46 0 R >> /ProcSet 2 0 R >> /Contents 164 0 R >> endobj 164 0 obj << /Length 165 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 42)Tj ET BT 218.285 167.044 TD ( Figure 10: Construction of a Soldier object)Tj ET 0.48 w 0.004 w 1 G 1 g 83.044 179.766 408.006 618.49 re b 0 w BT /F3 5.76 Tf 0 g 0 G 1.528 0 0 1.528 207.161 611.774 Tm (i. After)Tj /F4 5.76 Tf 17.861 0 TD -0.097 Tc ( my $dataref = {%_fields};)Tj ET q 180.244 600.254 214.085 18.24 re W n BT 1.528 0 0 1.528 367.918 611.774 Tm ( )Tj /F3 5.76 Tf -91.784 -5.97 TD 0 Tc (and )Tj /F4 5.76 Tf 11.19 0 TD -0.097 Tc (foreach my $field...)Tj ET Q 0.85 g 113.523 732.977 56.401 31.921 re f 1.2 w 0.75 G 113.643 733.097 m 169.804 733.097 l S 169.804 733.097 m 169.804 764.537 l S 0.9 G 113.643 764.537 m 169.804 764.537 l S 113.643 733.097 m 113.643 764.537 l S 0 w BT /F4 7.68 Tf 0 g 0 G 1.528 0 0 1.528 112.926 768.018 Tm 0 Tc ($grunt)Tj ET 0.85 g 214.325 696.976 56.401 31.921 re f 1.2 w 0.75 G 214.445 697.096 m 270.606 697.096 l S 270.606 697.096 m 270.606 728.777 l S 0.9 G 214.445 728.777 m 270.606 728.777 l S 214.445 697.096 m 214.445 728.777 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 214.128 731.537 Tm ($dataref)Tj ET 0.85 g 265.926 753.137 42.721 23.761 re f 0.81 w 0.75 G 266.331 752.972 m 308.332 752.972 l S 308.332 752.972 m 308.332 776.493 l S 0.9 G 266.331 776.493 m 308.332 776.493 l S 266.331 752.972 m 266.331 776.493 l S 0 w 308.887 753.137 42.481 23.761 re f 0.81 w 0.75 G 309.292 752.972 m 351.053 752.972 l S 351.053 752.972 m 351.053 776.493 l S 0.9 G 309.292 776.493 m 351.053 776.493 l S 309.292 752.972 m 309.292 776.493 l S 0 w 351.848 753.137 42.481 23.761 re f 0.81 w 0.75 G 352.253 752.972 m 394.014 752.972 l S 394.014 752.972 m 394.014 776.493 l S 0.9 G 352.253 776.493 m 394.014 776.493 l S 352.253 752.972 m 352.253 776.493 l S 0 w 394.809 753.137 42.481 23.761 re f 0.81 w 0.75 G 395.214 752.972 m 436.975 752.972 l S 436.975 752.972 m 436.975 776.493 l S 0.9 G 395.214 776.493 m 436.975 776.493 l S 395.214 752.972 m 395.214 776.493 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 265.462 780.258 Tm (@_soldiers)Tj ET BT /F4 4.32 Tf 1.528 0 0 1.528 268.762 770.178 Tm ([0])Tj ET BT 1.528 0 0 1.528 311.663 770.178 Tm ([1])Tj ET BT 1.528 0 0 1.528 354.564 770.178 Tm ([2])Tj ET BT 1.528 0 0 1.528 397.464 770.178 Tm ([3])Tj ET 0.48 w 0.85 G 0.85 g 347.768 625.694 113.763 103.442 re b 0 w 347.768 696.976 56.401 31.921 re f 1.2 w 0.75 G 348.128 697.096 m 404.049 697.096 l S 404.049 697.096 m 404.049 728.777 l S 0.9 G 348.128 728.777 m 404.049 728.777 l S 348.128 697.096 m 348.128 728.777 l S 0 w BT /F6 4.32 Tf 0 g 0 G 1.528 0 0 1.528 364.097 711.616 Tm (\322name\323)Tj ET 0.85 g 404.889 696.976 56.641 31.921 re f 1.2 w 0.75 G 405.249 697.096 m 461.411 697.096 l S 461.411 697.096 m 461.411 728.777 l S 0.9 G 405.249 728.777 m 461.411 728.777 l S 405.249 697.096 m 405.249 728.777 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 413.231 711.616 Tm (\322Smith, J\323)Tj ET 0.85 g 347.768 661.455 56.401 31.921 re f 1.2 w 0.75 G 348.128 661.575 m 404.049 661.575 l S 404.049 661.575 m 404.049 693.016 l S 0.9 G 348.128 693 2000 .016 m 404.049 693.016 l S 348.128 661.575 m 348.128 693.016 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 364.097 676.335 Tm (\322rank\323)Tj ET 0.85 g 404.889 661.455 56.641 31.921 re f 1.2 w 0.75 G 405.249 661.575 m 461.411 661.575 l S 461.411 661.575 m 461.411 693.016 l S 0.9 G 405.249 693.016 m 461.411 693.016 l S 405.249 661.575 m 405.249 693.016 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 415.065 676.335 Tm (\322private\323)Tj ET 0.85 g 347.768 625.934 56.401 31.921 re f 1.2 w 0.75 G 348.128 626.054 m 404.049 626.054 l S 404.049 626.054 m 404.049 657.495 l S 0.9 G 348.128 657.495 m 404.049 657.495 l S 348.128 626.054 m 348.128 657.495 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 351.997 639.135 Tm (\322serial_num\323)Tj ET 0.85 g 404.889 625.934 56.641 31.921 re f 1.2 w 0.75 G 405.249 626.054 m 461.411 626.054 l S 461.411 626.054 m 461.411 657.495 l S 0.9 G 405.249 657.495 m 461.411 657.495 l S 405.249 626.054 m 405.249 657.495 l S 2 j 0 G 246.846 712.936 m 297.007 712.936 l 297.007 712.936 l 341.168 712.936 l S 0 j 0.48 w 2 j 0 g 347.768 712.816 m 341.048 709.936 l 341.048 712.816 l 341.048 715.936 l 347.768 712.816 l b* 0 j 0.004 w 242.406 717.615 m 244.922 717.615 246.964 715.572 246.964 713.056 c 246.964 710.54 244.922 708.498 242.406 708.498 c 239.889 708.498 237.847 710.54 237.847 713.056 c 237.847 715.572 239.889 717.615 242.406 717.615 c b 0 w BT 1.528 0 0 1.528 417.998 639.855 Tm (14914253)Tj ET 1 g 413.769 782.898 m 413.763 782.886 414.323 782.246 415.45 780.978 c 416.563 779.686 418.523 778.126 421.33 776.298 c 424.123 774.446 425.523 772.366 425.53 770.058 c 425.523 767.726 425.043 766.206 424.09 765.498 c 423.123 764.766 422.083 764.166 420.97 763.697 c 419.843 763.206 418.803 762.526 417.85 761.657 c 416.883 760.766 416.323 759.446 416.17 757.697 c 416.003 755.926 416.683 754.046 418.21 752.057 c 419.723 750.046 422.243 748.006 425.77 745.937 c 429.283 743.846 433.363 742.446 438.01 741.737 c 442.643 741.006 446.923 742.246 450.85 745.457 c 454.764 748.646 456.763 752.326 456.85 756.497 c 456.923 760.646 456.244 764.966 454.81 769.458 c 453.363 773.926 451.284 777.646 448.57 780.618 c 445.843 783.566 442.843 785.646 439.57 786.858 c 436.283 788.046 433.163 788.966 430.21 789.618 c 427.243 790.246 424.483 790.486 421.93 790.338 c 419.363 790.166 417.323 789.526 415.81 788.418 c 414.283 787.286 413.523 786.126 413.529 784.938 c 413.523 783.726 413.643 783.126 413.889 783.138 c 414.123 783.126 414.363 783.126 414.61 783.138 c 414.843 783.126 414.963 783.126 414.97 783.138 c f* 1.2 w 1 G 414.369 782.298 m 414.363 782.286 414.923 781.646 416.05 780.378 c 417.163 779.086 419.123 777.526 421.93 775.698 c 424.723 773.846 426.123 771.766 426.13 769.458 c 426.123 767.126 425.643 765.606 424.69 764.898 c 423.723 764.166 422.683 763.566 421.57 763.097 c 420.443 762.606 419.403 761.926 418.45 761.057 c 417.483 760.166 416.923 758.846 416.77 757.097 c 416.603 755.326 417.283 753.446 418.81 751.457 c 420.323 749.446 422.843 747.406 426.37 745.337 c 429.883 743.246 433.963 741.846 438.61 741.137 c 443.244 740.406 447.523 741.646 451.45 744.857 c 455.364 748.046 457.363 751.726 457.45 755.897 c 457.524 760.046 456.844 764.366 455.41 768.858 c 453.963 773.326 451.884 777.046 449.17 780.018 c 446.443 782.966 443.443 785.046 440.17 786.258 c 436.883 787.446 433.763 788.366 430.81 789.018 c 427.843 789.646 425.083 789.886 422.53 789.738 c 419.963 789.566 417.923 788.926 416.41 787.818 c 414.883 786.686 414.123 785.526 414.129 784.338 c 414.123 783.126 414.243 782.526 414.49 782.538 c 414.723 782.526 414.963 782.526 415.21 782.538 c 415.443 782.526 415.563 782.526 415.57 782.538 c S 0 w BT /F3 5.76 Tf 0 g 0 G 1.528 0 0 1.528 203.127 408.729 Tm (ii. After)Tj /F4 5.76 Tf 19.536 0 TD -0.097 Tc ( push @_soldiers, $dataref;)Tj ET q 180.244 397.209 214.085 18.24 re W n BT 1.528 0 0 1.528 371.577 408.729 Tm ( )Tj /F3 5.76 Tf -103.299 -5.97 TD 0 Tc (and )Tj /F4 5.76 Tf 12.63 0 TD -0.097 Tc (my $object = $#_soldiers;)Tj ET Q 0.85 g 215.525 432.01 56.401 31.921 re f 1.2 w 0.75 G 215.645 432.13 m 271.806 432.13 l S 271.806 432.13 m 271.806 463.571 l S 0.9 G 215.645 463.571 m 271.806 463.571 l S 215.645 432.13 m 215.645 463.571 l S 0 w BT /F4 7.68 Tf 0 g 0 G 1.528 0 0 1.528 214.494 467.051 Tm 0 Tc ($object)Tj ET BT 1.528 0 0 1.528 240.161 444.73 Tm (0)Tj ET 0.85 g 113.523 532.812 56.401 31.921 re f 1.2 w 0.75 G 113.643 532.932 m 169.804 532.932 l S 169.804 532.932 m 169.804 564.373 l S 0.9 G 113.643 564.373 m 169.804 564.373 l S 113.643 532.932 m 113.643 564.373 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 112.926 567.853 Tm ($grunt)Tj ET 0.85 g 214.325 496.811 56.401 31.921 re f 1.2 w 0.75 G 214.445 496.931 m 270.606 496.931 l S 270.606 496.931 m 270.606 528.372 l S 0.9 G 214.445 528.372 m 270.606 528.372 l S 214.445 496.931 m 214.445 528.372 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 214.128 531.132 Tm ($dataref)Tj ET 0.48 w 0.85 G 0.85 g 347.768 425.53 113.763 103.202 re b 0 w 347.768 496.811 56.401 31.921 re f 1.2 w 0.75 G 348.128 496.931 m 404.049 496.931 l S 404.049 496.931 m 404.049 528.372 l S 0.9 G 348.128 528.372 m 404.049 528.372 l S 348.128 496.931 m 348.128 528.372 l S 0 w BT /F6 4.32 Tf 0 g 0 G 1.528 0 0 1.528 364.097 511.452 Tm (\322name\323)Tj ET 0.85 g 404.889 496.811 56.641 31.921 re f 1.2 w 0.75 G 405.249 496.931 m 461.411 496.931 l S 461.411 496.931 m 461.411 528.372 l S 0.9 G 405.249 528.372 m 461.411 528.372 l S 405.249 496.931 m 405.249 528.372 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 413.231 511.452 Tm (\322Smith, J\323)Tj ET 0.85 g 347.768 461.291 56.401 31.921 re f 1.2 w 0.75 G 348.128 461.411 m 404.049 461.411 l S 404.049 461.411 m 404.049 492.851 l S 0.9 G 348.128 492.851 m 404.049 492.851 l S 348.128 461.411 m 348.128 492.851 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 364.097 476.171 Tm (\322rank\323)Tj ET 0.85 g 404.889 461.291 56.641 31.921 re f 1.2 w 0.75 G 405.249 461.411 m 461.411 461.411 l S 461.411 461.411 m 461.411 492.851 l S 0.9 G 405.249 492.851 m 461.411 492.851 l S 405.249 461.411 m 405.249 492.851 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 415.065 476.171 Tm (\322private\323)Tj ET 0.85 g 347.768 425.77 56.401 31.921 re f 1.2 w 0.75 G 348.128 425.89 m 404.049 425.89 l S 404.049 425.89 m 404.049 457.33 l S 0.9 G 348.128 457.33 m 404.049 457.33 l S 348.128 425.89 m 348.128 457.33 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 351.997 438.73 Tm (\322serial_num\323)Tj ET 0.85 g 404.889 425.77 56.641 31.921 re f 1.2 w 0.75 G 405.249 425.89 m 461.411 425.89 l S 461.411 425.89 m 461.411 457.33 l S 0.9 G 405.249 457.33 m 461.411 457.33 l S 405.249 425.89 m 405.249 457.33 l S 2 j 0 G 246.846 512.772 m 297.007 512.772 l 297.007 512.772 l 341.168 512.772 l S 0 j 0.48 w 2 j 0 g 347.768 512.652 m 341.048 509.772 l 341.048 512.652 l 341.048 515.532 l 347.768 512.652 l b* 0 j 0.004 w 242.406 517.45 m 244.922 517.45 246.964 515.354 246.964 512.772 c 246.964 510.189 244.922 508.094 242.406 508.094 c 239.889 508.094 237.847 510.189 237.847 512.772 c 237.847 515.354 239.889 517.45 242.406 517.45 c b 0 w BT 1.528 0 0 1.528 417.998 439.45 Tm (14914253)Tj ET 0.85 g 265.926 552.973 42.721 23.761 re f 0.81 w 0.75 G 266.331 552.808 m 308.332 552.808 l S 308.332 552.808 m 308.332 576.328 l S 0.9 G 266.331 576.328 m 308.332 576.328 l S 266.331 552.808 m 266.331 576.328 l S 0 w 308.887 552.973 42.481 23.761 re f 0.81 w 0.75 G 309.292 552.808 m 351.053 552.808 l S 351.053 552.808 m 351.053 576.328 l S 0.9 G 309.292 576.328 m 351.053 576.328 l S 309.292 552.808 m 309.292 576.328 l S 0 w 351.848 552.973 42.481 23.761 re f 0.81 w 0.75 G 352.253 552.808 m 394.014 552.808 l S 394.014 552.808 m 394.014 576.328 l S 0.9 G 352.253 576.328 m 394.014 576.328 l S 352.253 552.808 m 352.253 576.328 l S 0 w 394.809 552.973 42.481 23.761 re f 0.81 w 0.75 G 395.214 552.808 m 436.975 552.808 l S 436.975 552.808 m 4 2000 36.975 576.328 l S 0.9 G 395.214 576.328 m 436.975 576.328 l S 395.214 552.808 m 395.214 576.328 l S 0 w BT /F4 7.68 Tf 0 g 0 G 1.528 0 0 1.528 265.462 580.093 Tm (@_soldiers)Tj ET BT /F4 4.32 Tf 1.528 0 0 1.528 268.762 570.013 Tm ([0])Tj ET BT 1.528 0 0 1.528 311.663 570.013 Tm ([1])Tj ET BT 1.528 0 0 1.528 354.564 570.013 Tm ([2])Tj ET BT 1.528 0 0 1.528 397.464 570.013 Tm ([3])Tj ET 0.004 w 287.047 569.531 m 289.563 569.531 291.605 567.435 291.605 564.853 c 291.605 562.271 289.563 560.175 287.047 560.175 c 284.53 560.175 282.488 562.271 282.488 564.853 c 282.488 567.435 284.53 569.531 287.047 569.531 c b 1.2 w 2 j 287.167 560.293 m 287.167 521.892 l 341.168 521.892 l S 0 j 0.48 w 2 j 347.768 521.772 m 341.048 518.892 l 341.048 521.772 l 341.048 524.892 l 347.768 521.772 l b* 0 j 0 w 1 g 413.769 583.453 m 413.763 583.444 414.323 582.804 415.45 581.533 c 416.563 580.244 418.523 578.684 421.33 576.853 c 424.123 575.004 425.523 572.924 425.53 570.613 c 425.523 568.284 425.043 566.764 424.09 566.053 c 423.123 565.324 422.083 564.724 420.97 564.253 c 419.843 563.764 418.803 563.084 417.85 562.213 c 416.883 561.324 416.323 559.964 416.17 558.133 c 416.003 556.284 416.683 554.404 418.21 552.493 c 419.723 550.564 422.243 548.564 425.77 546.493 c 429.283 544.404 433.363 543.004 438.01 542.292 c 442.643 541.564 446.923 542.804 450.85 546.013 c 454.764 549.204 456.763 552.884 456.85 557.053 c 456.923 561.204 456.244 565.524 454.81 570.013 c 453.363 574.484 451.284 578.204 448.57 581.173 c 445.843 584.125 442.843 586.204 439.57 587.413 c 436.283 588.605 433.163 589.524 430.21 590.174 c 427.243 590.805 424.483 591.045 421.93 590.894 c 419.363 590.725 417.323 590.085 415.81 588.973 c 414.283 587.844 413.523 586.685 413.529 585.493 c 413.523 584.284 413.643 583.684 413.889 583.693 c 414.123 583.684 414.363 583.684 414.61 583.693 c 414.843 583.684 414.963 583.684 414.97 583.693 c f* 1.2 w 1 G 414.369 582.853 m 414.363 582.844 414.923 582.204 416.05 580.933 c 417.163 579.644 419.123 578.084 421.93 576.253 c 424.723 574.404 426.123 572.324 426.13 570.013 c 426.123 567.684 425.643 566.164 424.69 565.453 c 423.723 564.724 422.683 564.124 421.57 563.653 c 420.443 563.164 419.403 562.484 418.45 561.613 c 417.483 560.724 416.923 559.364 416.77 557.533 c 416.603 555.684 417.283 553.804 418.81 551.893 c 420.323 549.964 422.843 547.964 426.37 545.893 c 429.883 543.804 433.963 542.404 438.61 541.692 c 443.244 540.964 447.523 542.204 451.45 545.412 c 455.364 548.604 457.363 552.284 457.45 556.453 c 457.524 560.604 456.844 564.924 455.41 569.413 c 453.963 573.884 451.884 577.604 449.17 580.573 c 446.443 583.525 443.443 585.604 440.17 586.813 c 436.883 588.005 433.763 588.924 430.81 589.574 c 427.843 590.205 425.083 590.445 422.53 590.294 c 419.963 590.125 417.923 589.485 416.41 588.373 c 414.883 587.244 414.123 586.085 414.129 584.893 c 414.123 583.684 414.243 583.084 414.49 583.093 c 414.723 583.084 414.963 583.084 415.21 583.093 c 415.443 583.084 415.563 583.084 415.57 583.093 c S 0 w BT /F3 5.76 Tf 0 g 0 G 1.528 0 0 1.528 209.728 202.085 Tm (iii. After)Tj /F4 5.76 Tf 21.211 0 TD -0.097 Tc ( bless \\$object, $class;)Tj ET q 180.244 190.324 214.085 18.24 re W n BT 1.528 0 0 1.528 365.335 202.085 Tm ( )Tj /F3 5.76 Tf -80.973 -6.127 TD 0 Tc (and constructor returns)Tj ET Q 0.85 g 113.523 326.647 56.401 31.921 re f 1.2 w 0.75 G 113.643 326.767 m 169.804 326.767 l S 169.804 326.767 m 169.804 358.448 l S 0.9 G 113.643 358.448 m 169.804 358.448 l S 113.643 326.767 m 113.643 358.448 l S 0 w BT /F4 7.68 Tf 0 g 0 G 1.528 0 0 1.528 112.926 361.928 Tm 0 Tc ($grunt)Tj ET 0.48 w 0.85 G 0.85 g 347.768 219.605 113.763 103.202 re b 0 w 347.768 290.647 56.401 31.921 re f 1.2 w 0.75 G 348.128 291.007 m 404.049 291.007 l S 404.049 291.007 m 404.049 322.447 l S 0.9 G 348.128 322.447 m 404.049 322.447 l S 348.128 291.007 m 348.128 322.447 l S 0 w BT /F6 4.32 Tf 0 g 0 G 1.528 0 0 1.528 364.097 305.287 Tm (\322name\323)Tj ET 0.85 g 404.889 290.647 56.641 31.921 re f 1.2 w 0.75 G 405.249 291.007 m 461.411 291.007 l S 461.411 291.007 m 461.411 322.447 l S 0.9 G 405.249 322.447 m 461.411 322.447 l S 405.249 291.007 m 405.249 322.447 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 413.231 305.287 Tm (\322Smith, J\323)Tj ET 0.85 g 347.768 255.126 56.401 31.921 re f 1.2 w 0.75 G 348.128 255.246 m 404.049 255.246 l S 404.049 255.246 m 404.049 286.927 l S 0.9 G 348.128 286.927 m 404.049 286.927 l S 348.128 255.246 m 348.128 286.927 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 364.097 270.246 Tm (\322rank\323)Tj ET 0.85 g 404.889 255.126 56.641 31.921 re f 1.2 w 0.75 G 405.249 255.246 m 461.411 255.246 l S 461.411 255.246 m 461.411 286.927 l S 0.9 G 405.249 286.927 m 461.411 286.927 l S 405.249 255.246 m 405.249 286.927 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 415.065 270.246 Tm (\322private\323)Tj ET 0.85 g 347.768 219.605 56.401 31.921 re f 1.2 w 0.75 G 348.128 219.725 m 404.049 219.725 l S 404.049 219.725 m 404.049 251.406 l S 0.9 G 348.128 251.406 m 404.049 251.406 l S 348.128 219.725 m 348.128 251.406 l S 0 w BT 0 g 0 G 1.528 0 0 1.528 351.997 232.805 Tm (\322serial_num\323)Tj ET 0.85 g 404.889 219.605 56.641 31.921 re f 1.2 w 0.75 G 405.249 219.725 m 461.411 219.725 l S 461.411 219.725 m 461.411 251.406 l S 0.9 G 405.249 251.406 m 461.411 251.406 l S 405.249 219.725 m 405.249 251.406 l S 2 j 0 G 143.163 338.288 m 143.163 241.086 l 208.685 241.086 l S 0 j 0.48 w 2 j 0 g 215.285 240.966 m 208.805 238.085 l 208.805 240.966 l 208.805 243.846 l 215.285 240.966 l b* 0 j 0.004 w 143.043 347.286 m 145.559 347.286 147.602 345.244 147.602 342.728 c 147.602 340.212 145.559 338.17 143.043 338.17 c 140.527 338.17 138.485 340.212 138.485 342.728 c 138.485 345.244 140.527 347.286 143.043 347.286 c b 0 w BT 1.528 0 0 1.528 417.998 233.525 Tm (14914253)Tj ET 0.85 g 265.926 346.808 42.721 24.001 re f 0.81 w 0.75 G 266.331 346.883 m 308.332 346.883 l S 308.332 346.883 m 308.332 370.403 l S 0.9 G 266.331 370.403 m 308.332 370.403 l S 266.331 346.883 m 266.331 370.403 l S 1.2 w 2 j 0 G 287.167 354.368 m 287.167 315.727 l 341.168 315.727 l S 0 j 0.48 w 2 j 0 g 347.768 315.847 m 341.048 312.967 l 341.048 315.847 l 341.048 318.727 l 347.768 315.847 l b* 0 j 0 w 0.85 g 308.887 346.808 42.481 24.001 re f 0.81 w 0.75 G 309.292 346.883 m 351.053 346.883 l S 351.053 346.883 m 351.053 370.403 l S 0.9 G 309.292 370.403 m 351.053 370.403 l S 309.292 346.883 m 309.292 370.403 l S 0 w 351.848 346.808 42.481 24.001 re f 0.81 w 0.75 G 352.253 346.883 m 394.014 346.883 l S 394.014 346.883 m 394.014 370.403 l S 0.9 G 352.253 370.403 m 394.014 370.403 l S 352.253 346.883 m 352.253 370.403 l S 0 w 394.809 346.808 42.481 24.001 re f 0.81 w 0.75 G 395.214 346.883 m 436.975 346.883 l S 436.975 346.883 m 436.975 370.403 l S 0.9 G 395.214 370.403 m 436.975 370.403 l S 395.214 346.883 m 395.214 370.403 l S 0 w BT /F4 7.68 Tf 0 g 0 G 1.528 0 0 1.528 265.462 373.929 Tm (@_soldiers)Tj ET BT /F4 4.32 Tf 1.528 0 0 1.528 268.029 364.088 Tm ([0])Tj ET BT 1.528 0 0 1.528 311.663 364.088 Tm ([1])Tj ET BT 1.528 0 0 1.528 354.564 364.088 Tm ([2])Tj ET BT 1.528 0 0 1.528 397.464 364.088 Tm ([3])Tj ET 0.004 w 287.047 363.366 m 289.563 363.366 291.605 361.324 291.605 358.808 c 291.605 356.292 289.563 354.25 287.047 354.25 c 284.53 354.25 282.488 356.292 282.488 358.808 c 282.488 361.324 284.53 363.366 287.047 363.366 c b 0 w 0.85 g 215.525 225.125 56.401 31.921 re f 1.2 w 0.75 G 215.645 225.245 m 271.806 225.245 l S 271.806 225.245 m 271.806 256.686 l S 0.9 G 215.645 256.686 m 271.806 256.686 l S 215.645 225.245 m 215.645 256.686 l S 0 w BT /F4 7.68 Tf 0 g 0 G 1.528 0 0 1.528 240.161 232.805 Tm (0)Tj ET 0.8 g 235.925 245.286 32.641 8.4 re f 1.2 w 0.75 G 236.525 253.086 m 267.966 253.086 l S 236.525 253.086 m 236.525 245.886 l S 0.9 G 236.525 245.886 m 267.966 245.886 l S 267.966 2 2000 53.086 m 267.966 245.886 l S 0 w BT /F4 4.32 Tf 0 g 0 G 1.528 0 0 1.528 238.695 246.966 Tm (Soldier)Tj ET [ 7 4 ] 0 d []0 d 0.84 w 259.146 365.828 m 256.986 365.828 l S 255.066 365.828 m 252.906 365.828 l S 250.986 365.828 m 248.826 365.828 l S 246.906 365.828 m 244.746 365.828 l S [ 7 4 ] 0 d []0 d 243.306 257.346 m 243.306 259.506 l S 243.306 261.426 m 243.306 263.586 l S 243.306 265.506 m 243.306 267.666 l S 243.306 269.346 m 243.306 271.746 l S 243.306 273.426 m 243.306 275.586 l S 243.306 277.506 m 243.306 279.666 l S 243.306 281.586 m 243.306 283.746 l S 243.306 285.667 m 243.306 287.827 l S 243.306 289.507 m 243.306 291.907 l S 243.306 293.587 m 243.306 295.747 l S 243.306 297.667 m 243.306 299.827 l S 243.306 301.747 m 243.306 303.907 l S 243.306 305.827 m 243.306 307.987 l S 243.306 309.667 m 243.306 312.067 l S 243.306 313.747 m 243.306 315.907 l S 243.306 317.827 m 243.306 319.987 l S 243.306 321.907 m 243.306 324.067 l S 243.306 325.987 m 243.306 328.148 l S 243.306 329.828 m 243.306 332.228 l S 243.306 333.908 m 243.306 336.068 l S 243.306 337.988 m 243.306 340.148 l S 243.306 342.068 m 243.306 344.228 l S 243.306 346.148 m 243.306 348.308 l S 243.306 349.988 m 243.306 352.388 l S 243.306 354.068 m 243.306 356.228 l S 243.306 358.148 m 243.306 360.308 l S 243.306 362.228 m 243.306 364.388 l S 0.48 w 2 j 265.926 365.768 m 259.206 362.648 l 259.206 365.768 l 259.206 368.648 l 265.926 365.768 l b* 0 j 0 w 1 g 413.769 375.849 m 413.763 375.843 414.323 375.243 415.45 374.049 c 416.563 372.843 418.523 371.323 421.33 369.488 c 424.123 367.643 425.523 365.563 425.53 363.248 c 425.523 360.923 425.043 359.403 424.09 358.688 c 423.123 357.963 422.083 357.323 420.97 356.768 c 419.843 356.203 418.803 355.523 417.85 354.728 c 416.883 353.923 416.323 352.603 416.17 350.768 c 416.003 348.923 416.683 347.003 418.21 345.008 c 419.723 343.003 422.243 340.963 425.77 338.888 c 429.283 336.803 433.363 335.403 438.01 334.688 c 442.643 333.963 446.923 335.202 450.85 338.408 c 454.764 341.603 456.763 345.283 456.85 349.448 c 456.923 353.603 456.244 357.923 454.81 362.408 c 453.363 366.883 451.284 370.603 448.57 373.569 c 445.843 376.523 442.843 378.603 439.57 379.809 c 436.283 381.003 433.163 381.923 430.21 382.569 c 427.243 383.203 424.483 383.443 421.93 383.289 c 419.363 383.123 417.323 382.523 415.81 381.489 c 414.283 380.443 413.523 379.283 413.529 378.009 c 413.523 376.723 413.643 376.083 413.889 376.089 c 414.123 376.083 414.363 376.083 414.61 376.089 c 414.843 376.083 414.963 376.083 414.97 376.089 c f* 1.2 w 1 G 414.369 375.249 m 414.363 375.243 414.923 374.643 416.05 373.449 c 417.163 372.243 419.123 370.723 421.93 368.888 c 424.723 367.043 426.123 364.963 426.13 362.648 c 426.123 360.323 425.643 358.803 424.69 358.088 c 423.723 357.363 422.683 356.723 421.57 356.168 c 420.443 355.603 419.403 354.923 418.45 354.128 c 417.483 353.323 416.923 352.003 416.77 350.168 c 416.603 348.323 417.283 346.403 418.81 344.408 c 420.323 342.403 422.843 340.363 426.37 338.288 c 429.883 336.203 433.963 334.803 438.61 334.088 c 443.244 333.363 447.523 334.602 451.45 337.808 c 455.364 341.003 457.363 344.683 457.45 348.848 c 457.524 353.003 456.844 357.323 455.41 361.808 c 453.963 366.283 451.884 370.003 449.17 372.969 c 446.443 375.923 443.443 378.003 440.17 379.209 c 436.883 380.403 433.763 381.323 430.81 381.969 c 427.843 382.603 425.083 382.843 422.53 382.689 c 419.963 382.523 417.923 381.923 416.41 380.889 c 414.883 379.843 414.123 378.683 414.129 377.409 c 414.123 376.123 414.243 375.483 414.49 375.489 c 414.723 375.483 414.963 375.483 415.21 375.489 c 415.443 375.483 415.563 375.483 415.57 375.489 c S 0.48 w 0.75 G 111.123 595.694 m 463.211 595.694 l S 0.5 G 111.123 595.214 m 463.211 595.214 l S 0.75 G 111.123 390.249 m 463.211 390.249 l S 0.5 G 111.123 389.769 m 463.211 389.769 l S 0 w q 213.845 258.246 52.801 11.52 re W n BT /F4 7.68 Tf 0.4 g 0.4 G 1.528 0 0 1.528 214.128 260.886 Tm ($object)Tj ET Q endstream endobj 165 0 obj 23734 endobj 166 0 obj << /Type /Page /Parent 167 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 168 0 R >> endobj 167 0 obj << /Kids [ 166 0 R 170 0 R 173 0 R 176 0 R 179 0 R 183 0 R ] /Count 6 /Type /Pages /Parent 215 0 R >> endobj 168 0 obj << /Length 169 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 43)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD 0.55 Tw (but that wouldn't circumvent encapsulation. Although the new method )Tj /F2 10.08 Tf 326.407 0 TD 0 Tw (will)Tj /F3 10.08 Tf 15.681 0 TD 0.55 Tw ( be in the class's)Tj ET BT 86.522 748.817 TD 1.509 Tw (namespace \(and hence, callable through its objects\), it )Tj /F2 10.08 Tf 252.966 0 TD 0 Tw (won't)Tj /F3 10.08 Tf 24.073 0 TD 1.509 Tw ( be in the lexical scope of the)Tj ET BT 86.522 735.617 TD 0 Tw (original encapsulating curly braces, so it won't have access to the lexical )Tj /F4 10.08 Tf 322.164 0 TD (@_soldiers)Tj /F3 10.08 Tf 60.491 0 TD ( array.)Tj ET BT 105.722 722.177 TD 0.706 Tw (It's worth noting that Perl will visit a satisfying form of Instant Justice on the author of)Tj ET BT 86.522 708.736 TD 1.837 Tw (this code. Since the code doesn't )Tj /F4 10.08 Tf 156.004 0 TD (use strict)Tj /F3 10.08 Tf 62.328 0 TD (, Perl will conclude that the )Tj /F4 10.08 Tf 135.676 0 TD 0 Tw (@_soldiers)Tj ET BT /F3 10.08 Tf 86.522 695.296 TD 7.939 Tw (array being modified in )Tj /F4 10.08 Tf 139.867 0 TD 0 Tw (Soldier::set_serial_num)Tj /F3 10.08 Tf 139.259 0 TD 7.939 Tw ( is the package variable)Tj ET BT /F4 10.08 Tf 86.522 681.856 TD 0 Tw (@main::_soldiers)Tj /F3 10.08 Tf 96.786 0 TD 1.044 Tw (. Thus, the code will execute without complaint, yet mysteriously fail)Tj ET BT 86.522 668.655 TD 0 Tw (to update any soldier's serial number, leading to happy hours of fruitless debugging.)Tj ET BT /F2 15.36 Tf 86.522 639.855 TD (Roll call)Tj ET BT /F3 10.08 Tf 86.522 619.694 TD 0.088 Tw (The other advantage of a scalar-based object representation like this is that the class itself has)Tj ET BT 86.522 606.254 TD 1.202 Tw (direct and continuing access to the data of every object blessed into it. That makes it very)Tj ET BT 86.522 592.814 TD 0 Tw (easy to provide class methods to iterate that data.)Tj ET BT 105.722 572.653 TD 0.216 Tw (The Soldier class demonstrates this by providing an iterator method \()Tj /F4 10.08 Tf 311.007 0 TD 0 Tw (Soldier::each)Tj /F3 10.08 Tf 78.762 0 TD (\),)Tj ET BT 86.522 559.213 TD 1.404 Tw (which steps through the indices of the )Tj /F4 10.08 Tf 182.219 0 TD 0 Tw (@_soldiers)Tj /F3 10.08 Tf 60.491 0 TD 1.404 Tw ( array, returning a blessed version of)Tj ET BT 86.522 545.772 TD 0 Tw (each index \(i.e. a Soldier object\). The method can be used like this:)Tj ET BT /F4 7.68 Tf 86.522 529.452 TD (while \(my $soldier = Soldier->each\))Tj ET BT 86.522 519.852 TD ({)Tj ET BT 98.042 510.252 TD (printf "name: %s\\nrank: %s\\n s/n: %d\\n\\n",)Tj ET BT 109.563 500.651 TD ($soldier->get_name\(\),)Tj ET BT 109.563 491.051 TD ($soldier->get_rank\(\),)Tj ET BT 109.563 481.451 TD ($soldier->get_serial_num\(\);)Tj ET BT 86.522 471.851 TD (})Tj ET BT /F3 10.08 Tf 105.722 453.61 TD (By the way, as elegant as it might look, don\325t be tempted to write:)Tj ET BT /F4 7.68 Tf 86.522 437.29 TD (while \(my $soldier = each Soldier\) {\311})Tj ET BT /F3 10.08 Tf 86.522 419.29 TD 0.303 Tw (hoping that this is one of the few places where the "indirect object" syntax will work. It isn\325t.)Tj ET BT 86.522 405.849 TD 0.14 Tw (Instead, Perl will assume you wanted to use the built-in )Tj /F4 10.08 Tf 252.246 0 TD 0 Tw (each)Tj /F3 10.08 Tf 24.196 0 TD ( function to iterate the package)Tj ET BT 86.522 392.409 TD (hash )Tj /F4 10.08 Tf 24.354 0 TD (%Soldier)Tj /F3 10.08 Tf 48.393 0 TD 0.788 Tw (, and just forgot the ")Tj /F4 10.08 Tf 97.081 0 TD 0 Tw (%")Tj /F3 10.08 Tf 12.098 0 TD 0.788 Tw ( prefix. Once again, )Tj /F4 10.08 Tf 92.214 0 TD 0 Tw (use strict)Tj /F3 10.08 Tf 61.147 0 TD 0.788 Tw ( will prevent Perl)Tj ET B 2000 T 86.522 378.969 TD 0 Tw (from helping you cut your own throat like this.)Tj ET BT /F2 10.08 Tf 86.522 325.447 TD 2.088 Tw (Generic programming is an important tool in the object-oriented armory. But Perl's support for)Tj ET BT 86.522 312.007 TD 4.437 Tw (closures, dynamic typing of variables, and run-time code evaluation makes explicit generic)Tj ET BT 86.522 298.567 TD 0 Tw (mechanisms largely irrelevant...)Tj ET BT /F2 19.2 Tf 86.522 261.126 TD (Why Perl doesn't need special generic mechanisms)Tj ET BT /F3 10.08 Tf 86.522 235.445 TD 0.775 Tw (The ability to specify generic code structures, independent of the details of class type, is an)Tj ET BT 86.522 222.005 TD 2.795 Tw (important component of most object-oriented languages. Anyone who has ever had to)Tj ET BT 86.522 208.565 TD 4.324 Tw (rewrite the List class to cater for various different types of elements \(List_of_CDs,)Tj ET BT 86.522 195.124 TD 2.007 Tw (List_of_Soldiers, List_of_Bugs, List_of_List_of_BigInts, etc.\) knows that generic types and)Tj ET BT 86.522 181.684 TD 5.589 Tw (subroutines are a powerful means of reducing code duplication, and simplifying)Tj ET BT 86.522 168.484 TD 4.905 Tw (maintenance. In fact, some would contend that genericity is more important than)Tj ET BT 86.522 155.044 TD 0 Tw (hierarchical abstraction in this respect.)Tj ET endstream endobj 169 0 obj 5014 endobj 170 0 obj << /Type /Page /Parent 167 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 171 0 R >> endobj 171 0 obj << /Length 172 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 44)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 0.435 Tw (Surprisingly, then, Perl offers no explicit built-in mechanism for creating generic classes)Tj ET BT 86.522 748.817 TD 1.078 Tw (or generic subroutines)Tj /F3 6.24 Tf 102.002 3.84 TD 0 Tw (27)Tj /F3 10.08 Tf 6.24 -3.84 TD 1.05 Tw (. There are no "templates", no "metaclasses", no "parametric types",)Tj ET BT 86.522 735.617 TD 0 Tw (no "class generators". The reason is simple: they aren't needed.)Tj ET BT 105.722 722.177 TD 1.736 Tw (Explicit mechanisms for specifying generic structures are usually found in languages)Tj ET BT 86.522 708.736 TD 2.425 Tw (with static typing \(i.e. where the type of each object is determined\321and fixed\321during)Tj ET BT 86.522 695.296 TD 0.884 Tw (compilation\). Such languages need a way of separating the generic )Tj /F2 10.08 Tf 308.387 0 TD 0 Tw (form)Tj /F3 10.08 Tf 19.038 0 TD 0.884 Tw ( of a data structure)Tj ET BT 86.522 681.856 TD 2.757 Tw (from the type-specific implementation of that data structure, for a given set of classes)Tj ET BT 86.522 668.655 TD 0 Tw (\(usually called its )Tj /F2 10.08 Tf 80.721 0 TD (type parameters)Tj /F3 10.08 Tf 64.483 0 TD (\).)Tj ET BT 105.722 655.215 TD 1.175 Tw (In other words, such languages need a way of indicating a place-holder for a type, so)Tj ET BT 86.522 641.775 TD 0 Tw (that it's possible to specify something general like:)Tj ET BT /F3 9.12 Tf 120.603 622.574 TD 0.652 Tw ("Let L be a list of objects of type )Tj /F2 9.12 Tf 135.724 0 TD 0 Tw ()Tj /F3 9.12 Tf 44.492 0 TD 0.652 Tw (. To insert a new element E \(also of type)Tj ET BT /F2 9.12 Tf 120.603 609.134 TD 0 Tw ()Tj /F3 9.12 Tf 44.492 0 TD 0.52 Tw (\), for each object O already in the L, use a subroutine S to compare O and)Tj ET BT 120.603 595.934 TD 1.634 Tw (E. The first time the comparison is false, insert E before O in the list, and set the)Tj ET BT 120.603 582.493 TD 0 Tw (current element pointer to the newly inserted element.")Tj ET BT /F3 10.08 Tf 105.722 563.293 TD 2.652 Tw (Then the compiler can fill in the place-holders with actual types, usually with the)Tj ET BT 86.522 549.853 TD 0 Tw (assistance of some additional syntax to bind specified types to the place-holder )Tj /F2 10.08 Tf 353.98 0 TD ()Tj /F3 10.08 Tf 49.176 0 TD (.)Tj ET BT 105.722 536.412 TD 1.558 Tw (Perl's type system is completely different from this. Perl objects don't have statically-)Tj ET BT 86.522 523.212 TD 1.081 Tw (associated class types; objects can be reblessed at any time. Perl variables don't have static)Tj ET BT 86.522 509.772 TD 0.783 Tw (types either; they can store objects blessed into any class \(or into no class at all\). So in Perl,)Tj ET BT 86.522 496.331 TD 0 Tw (we can get away with specifying a generic list insertion as follows:)Tj ET BT /F3 9.12 Tf 120.603 477.131 TD 1.003 Tw ("Let L be a list of objects \(of any type, as usual\). To insert a new element E \(of any)Tj ET BT 120.603 463.691 TD 0.394 Tw (type\), for each object O already in the L, use a subroutine S to compare O and E. The)Tj ET BT 120.603 450.49 TD 1.492 Tw (first time the comparison is false, insert E before O in the list, and set the current)Tj ET BT 120.603 437.05 TD 0 Tw (element pointer to the newly inserted element.")Tj ET BT /F3 10.08 Tf 86.522 417.85 TD (Or, in actual Perl code:)Tj ET BT /F4 7.68 Tf 86.522 401.529 TD (sub List::insert)Tj ET BT 86.522 391.929 TD ({)Tj ET BT 98.042 382.329 TD (my \($L, $E, $S\) = @_;)Tj ET BT 98.042 372.729 TD (my $index;)Tj ET BT 98.042 363.128 TD (for \($index=0; $index < @{$L->{elements}}; $index++\))Tj ET BT 98.042 353.528 TD ({)Tj ET BT 109.563 343.928 TD (my $O = $L->{elements}->[$index];)Tj ET BT 109.563 334.328 TD (last unless $S->\($O, $E\);)Tj ET BT 98.042 324.727 TD (})Tj ET BT 98.042 315.127 TD (splice @{$L->{elements}}, $index, 0, $E;)Tj ET BT 98.042 305.527 TD ($L->{current} = $index;)Tj ET BT 86.522 295.927 TD (})Tj ET BT /F3 10.08 Tf 105.722 277.686 TD (The dynamic typing of Perl variables means that there is no need for place-holders, since)Tj ET BT 86.522 264.246 TD 0.596 Tw (any scalar variable will happily hold a reference to an object of any class, and arguments of)Tj ET BT 86.522 251.046 TD 0 Tw (any type\(s\) may be passed to any subroutine.)Tj ET BT 105.722 237.605 TD 0.771 Tw (Of course, there's a price to pay. The earlier statically-typed version has access to more)Tj ET BT 86.522 224.165 TD 0.254 Tw (information \(namely the type of object the list is supposed to store\). With this information, it)Tj ET BT 86.522 204.245 TD 0 Tw ( )Tj 72.002 0 TD ( )Tj ET 86.402 206.405 138.243 0.48 re f BT /F3 5.76 Tf 86.522 189.364 TD (27)Tj /F3 9.6 Tf 5.76 -3.84 TD ( \311except, perhaps, the )Tj /F4 9.6 Tf 99.021 0 TD (AUTOLOAD)Tj /F3 9.6 Tf 46.089 0 TD ( mechanism, which could be viewed as a run-time generic)Tj ET BT 93.242 174.964 TD (method that reproduces the functionality, and to some extent the internal structure, of the)Tj ET BT 93.242 164.404 TD (specific methods it replaces.)Tj ET endstream endobj 172 0 obj 5133 endobj 173 0 obj << /Type /Page /Parent 167 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F6 46 0 R >> /ProcSet 2 0 R >> /Contents 174 0 R >> endobj 174 0 obj << /Length 175 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 45)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD 0.144 Tw (can pick up errors at compile-time \(e.g. attempting to insert an object E of the wrong type, or)Tj ET BT 86.522 748.817 TD 2.009 Tw (using the wrong comparison subroutine\). In the Perl version, these problems would not)Tj ET BT 86.522 735.617 TD 0 Tw (surface until the code is actually executed \(and perhaps not even then\).)Tj ET BT 105.722 722.177 TD 0.93 Tw (Another reason why Perl has no need for explicit genericity is Perl's excellent range of)Tj ET BT 86.522 708.736 TD 1.984 Tw (built-in datatypes. As the above code example illustrates, Perl's powerful arrays, hashes,)Tj ET BT 86.522 695.296 TD 2.219 Tw (references to data and subroutines, etc., are already generic, in that they are capable of)Tj ET BT 86.522 681.856 TD 4.132 Tw (storing \(or referring to\) any Perl data-type. Thus, when implementing the insertion)Tj ET BT 86.522 668.655 TD 0.899 Tw (subroutine for our generic list class, we can just use a regular Perl array as the basis of the)Tj ET BT 86.522 655.215 TD 0 Tw (class, confident that it will be able to store whatever kind of objects we choose to store.)Tj ET BT /F2 10.08 Tf 86. 2000 522 601.694 TD 0.179 Tw (Of course, there's always more than one way to do things in Perl, so it's not hard to whip up a proper)Tj ET BT 86.522 588.253 TD 0 Tw (generic class when you need it...)Tj ET BT /F2 19.2 Tf 86.522 550.813 TD (Using specific mechanisms anyway)Tj ET BT /F3 10.08 Tf 86.522 524.892 TD 3.166 Tw (Yet another reason why Perl doesn't need explicit genericity is that it provides other)Tj ET BT 86.522 511.452 TD 0.338 Tw (powerful mechanisms that can achieve the same effects. Closures, for example, are a general)Tj ET BT 86.522 498.011 TD 0.969 Tw (means of binding specific data \(and hence data-types\) into a generic subroutine. The )Tj /F4 10.08 Tf 390.249 0 TD 0 Tw (eval)Tj ET BT /F3 10.08 Tf 86.522 484.811 TD 0.54 Tw (function provides an even more powerful code-generation mechanism, allowing us to build)Tj ET BT 86.522 471.371 TD 0.212 Tw (an entire class, using interpolated variables in a string as place-holders. This section explains)Tj ET BT 86.522 457.93 TD 0 Tw (both of these techniques.)Tj ET BT /F2 15.36 Tf 86.522 429.13 TD (Closures as generic methods)Tj ET BT /F3 10.08 Tf 86.522 408.969 TD (One problem with the generic )Tj /F4 10.08 Tf 136.803 0 TD (List::insert)Tj /F3 10.08 Tf 72.589 0 TD 0.131 Tw ( code shown above is that the user has to pass)Tj ET BT 86.522 395.529 TD 0.145 Tw (a reference to some comparison subroutine \(which is accessed via )Tj /F4 10.08 Tf 296.025 0 TD 0 Tw ($S)Tj /F3 10.08 Tf 11.902 0 TD (\) each time they wish to)Tj ET BT 86.522 382.329 TD (do an insertion. That's tedious and unnecessary.)Tj ET BT 105.722 368.888 TD 4.24 Tw (A better solution would be to provide a method that )Tj /F2 10.08 Tf 278.109 0 TD 0 Tw (generates)Tj /F3 10.08 Tf 38.218 0 TD 4.24 Tw ( variants of the)Tj ET BT /F4 10.08 Tf 86.522 355.448 TD 0 Tw (List::insert)Tj /F3 10.08 Tf 72.589 0 TD 1.068 Tw ( method, with the appropriate comparison subroutine "hard-wired" in. For)Tj ET BT 86.522 342.008 TD 0 Tw (example, we could write:)Tj ET BT /F6 7.68 Tf 86.522 325.687 TD (sub List::generate_insert)Tj ET BT 86.522 316.087 TD ({)Tj ET BT 98.042 306.487 TD (my \($class, $S\) = @_;)Tj ET BT 98.042 296.887 TD (return sub)Tj ET BT /F4 7.68 Tf 98.042 287.287 TD ({)Tj ET BT 109.563 277.686 TD (my \($L, $E\) = @_;)Tj ET BT 109.563 268.086 TD (my $index;)Tj ET BT 109.563 258.486 TD (for \($index=0; $index < @{$L->{elements}}; $index++\))Tj ET BT 109.563 248.886 TD ({)Tj ET BT 121.083 239.285 TD (my $O = $L->{elements}[$index];)Tj ET BT 121.083 229.685 TD (last unless $S->\($O, $E\);)Tj ET BT 109.563 220.085 TD (})Tj ET BT 109.563 210.485 TD (splice @{$L->{elements}}, $index, 0, $E;)Tj ET BT 98.042 200.885 TD (})Tj ET BT /F6 7.68 Tf 86.522 191.284 TD (})Tj ET BT /F4 10.08 Tf 105.722 173.044 TD (List::generate_insert)Tj /F3 10.08 Tf 127.032 0 TD 4.803 Tw ( takes a single argument, which is a reference to a)Tj ET BT 86.522 159.844 TD 1.937 Tw (subroutine. It then creates and returns a new anonymous subroutine that is functionally)Tj ET endstream endobj 175 0 obj 4225 endobj 176 0 obj << /Type /Page /Parent 167 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F6 46 0 R >> /ProcSet 2 0 R >> /Contents 177 0 R >> endobj 177 0 obj << /Length 178 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 46)Tj ET BT /F3 10.08 Tf 86.522 762.257 TD (identical to )Tj /F4 10.08 Tf 52.802 0 TD (List::insert)Tj /F3 10.08 Tf 72.589 0 TD 0.258 Tw (, except that it no longer requires a third \()Tj /F4 10.08 Tf 187.172 0 TD 0 Tw ($S)Tj /F3 10.08 Tf 11.924 0 TD (\) argument. Instead,)Tj ET BT 86.522 748.817 TD 0.42 Tw (the lexical variable )Tj /F4 10.08 Tf 87.362 0 TD 0 Tw ($S)Tj /F3 10.08 Tf 12.098 0 TD 0.42 Tw (, which was created in the first line of )Tj /F4 10.08 Tf 175.586 0 TD 0 Tw (List::generate_insert)Tj /F3 10.08 Tf 127.032 0 TD (, is)Tj ET BT 86.522 735.617 TD 1.597 Tw (used. It is still in scope when the anonymous subroutine is created, so it's okay to use it)Tj ET BT 86.522 722.177 TD 0.58 Tw (within that subroutine. And because the subroutine uses it, it survives the end of the call to)Tj ET BT /F4 10.08 Tf 86.522 708.736 TD 0 Tw (List::generate_insert)Tj /F3 10.08 Tf 127.032 0 TD (.)Tj ET BT 105.722 695.296 TD 1.453 Tw (Of course, to make it usable, we still have to associate the newly created anonymous)Tj ET BT 86.522 681.856 TD 3.718 Tw (subroutine with the )Tj /F4 10.08 Tf 101.6 0 TD 0 Tw (insert)Tj /F3 10.08 Tf 36.163 0 TD 3.718 Tw ( method of a specific class. If, for example, we wanted)Tj ET BT /F4 10.08 Tf 86.522 668.655 TD 0 Tw (List_of_Employee::insert)Tj /F3 10.08 Tf 145.179 0 TD 1.19 Tw ( to use the anonymous subroutine we could simply assign)Tj ET BT 86.522 655.215 TD 0 Tw (the result of the call to )Tj /F4 10.08 Tf 101.501 0 TD (List::generate_insert)Tj /F3 10.08 Tf 127.032 0 TD ( to the appropriate typeglob:)Tj ET BT /F4 7.68 Tf 86.522 638.895 TD (*List_of_Employee::insert = List->generate_insert\(\\&List_of_Employee::_compare\);)Tj ET BT /F3 10.08 Tf 105.722 620.654 TD 12.594 Tw (We passed )Tj /F4 10.08 Tf 75.766 0 TD 0 Tw (List::generate_insert)Tj /F3 10.08 Tf 127.032 0 TD 12.594 Tw ( a reference to the subroutine)Tj ET BT /F4 10.08 Tf 86.522 607.214 TD 0 Tw (List_of_Employee::_compare)Tj /F3 10.08 Tf 157.277 0 TD 1.979 Tw (, so that the new class's )Tj /F4 10.08 Tf 117.049 0 TD 0 Tw (insert)Tj /F3 10.08 Tf 36.295 0 TD 1.979 Tw ( method used its own)Tj ET BT /F4 10.08 Tf 86.522 593.774 TD 0 Tw (_compare)Tj /F3 10.08 Tf 48.393 0 TD 4.972 Tw (. This approach gives us some flexibility in deciding which comparison)Tj ET BT 86.522 580.573 TD 0 Tw (subroutine is used by which )Tj /F4 10.08 Tf 128.403 0 TD (insert)Tj /F3 10.08 Tf 36.295 0 TD (. For instance we might want to ensure the same sorting)Tj ET BT 86.522 567.133 TD (order for both general employees and management level staff:)Tj ET BT /F4 7.68 Tf 86.522 550.813 TD (*List_of_Manager::insert = List->generate_insert\(\\&List_of_Employee::_compare\);)Tj ET BT /F3 10.08 Tf 105.722 532.572 TD 0.477 Tw (On the other hand, this might be a coding error \(and a difficult one to detect, at that\). If)Tj ET BT 86.522 519.132 TD 1.826 Tw (each specific list class's )Tj /F4 10.08 Tf 111.843 0 TD 0 Tw (insert)Tj /F3 10.08 Tf 36.295 0 TD 1.826 Tw ( should )Tj /F2 10.08 Tf 39.307 0 TD 0 Tw (always)Tj /F3 10.08 Tf 27.991 0 TD 1.826 Tw ( use the same class's )Tj /F4 10.08 Tf 101.296 0 TD 0 Tw (_compare)Tj /F3 10.08 Tf 48.557 0 TD 1.826 Tw (, we could)Tj ET BT 86.522 505.692 TD 0 Tw (rewrite the )Tj /F4 10.08 Tf 51.272 0 TD (List::generate_insert)Tj /F3 10.08 Tf 127.032 0 TD ( method to produce a safer generator method:)Tj ET BT /F6 7.68 Tf 86.522 489.371 TD (sub List::generate_insert_for)Tj ET BT /F4 7.68 Tf 86.522 479.771 TD ({)Tj ET BT /F6 7.68 Tf 98.042 470.171 TD (my \($class, $newclass\) = @_;)Tj ET BT 98.042 460.571 TD (no strict "refs";)Tj ET BT 98.042 450.97 TD (my $S = \\&{"${newclass}::_compare"};)Tj ET BT 98.042 441.37 TD (*{"${newclass}::insert"} = sub)Tj ET BT /F4 7.68 Tf 98.042 431.77 TD ({)Tj ET BT 109.563 422.17 TD (my \($L, $E\) = @_;)Tj ET BT 109.563 412.569 TD (my $index;)Tj ET BT 109.563 402.969 TD (for \($index=0; $index < @{$L->{elements}}; $index++\))Tj ET BT 109.563 393.369 TD ({)Tj ET BT 121.083 383.769 TD (my $O = $L->{elements}[$index];)Tj ET BT 121.083 374.169 TD (last unless $S->\($O, $E\);)Tj ET BT 109.563 364.568 TD (})Tj ET BT 109.563 354.968 TD (splice @{$L->{elements}}, $index, 0, $E;)Tj ET BT 98.042 345.368 TD (})Tj ET BT 86.522 335.768 TD (})Tj ET BT /F3 10.08 Tf 105.722 317.767 TD 0.114 Tw (Instead of a reference to the comparison function, this version takes the name of the new)Tj ET BT 86.522 304.327 TD 1.986 Tw (class as its argument. It then uses that class name to build the name of the appropriate)Tj ET BT 86.522 290.887 TD 4.673 Tw (comparison subroutine \(i.e. )Tj /F6 10.08 Tf 138.483 0 TD 0 Tw ("${newclass}::_compare")Tj /F3 10.08 Tf 139.13 0 TD 4.673 Tw (\). That name is used as a)Tj ET BT 86.522 277.446 TD 2.424 Tw (symbolic reference to the subroutine itself \()Tj /F6 10.08 Tf 207.125 0 TD 0 Tw (&{)Tj /F4 10.08 Tf 12.098 0 TD ("${newclass}::_compare")Tj /F6 10.08 Tf 139.13 0 TD (})Tj /F3 10 2000 .08 Tf 6.049 0 TD 2.424 Tw (\), which is)Tj ET BT 86.522 264.006 TD 4.856 Tw (converted via a leading backslash \()Tj /F6 10.08 Tf 180.019 0 TD (\\)Tj /F4 10.08 Tf 6.049 0 TD 0 Tw (&{"${newclass}::_compare"})Tj /F3 10.08 Tf 157.14 0 TD 4.856 Tw (\) to a normal)Tj ET BT 86.522 250.806 TD 1.688 Tw (reference. The anonymous subroutine is then constructed exactly as before, but now it is)Tj ET BT 86.522 237.365 TD 2.372 Tw (automatically assigned it to the correct typeglob, which is also accessed via a symbolic)Tj ET BT 86.522 223.925 TD 0 Tw (reference \()Tj /F6 10.08 Tf 46.852 0 TD (*{"${newclass}::insert"})Tj /F3 10.08 Tf 145.179 0 TD (\).)Tj ET BT 105.722 210.485 TD (So now, to create a suitable )Tj /F4 10.08 Tf 123.434 0 TD (List_of_Manager::insert)Tj /F3 10.08 Tf 139.13 0 TD ( method, we write:)Tj ET BT /F4 7.68 Tf 86.522 194.164 TD (List->generate_insert_for\("List_of_Employee"\);)Tj ET BT /F3 10.08 Tf 86.522 175.924 TD 0.606 Tw (This same approach could easily be extended to generate the other necessary methods for a)Tj ET BT 86.522 162.724 TD 0 Tw (list class:)Tj ET endstream endobj 178 0 obj 6029 endobj 179 0 obj << /Type /Page /Parent 167 0 R /Resources << /Font 182 0 R /ProcSet 2 0 R >> /Contents 180 0 R >> endobj 180 0 obj << /Length 181 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 47)Tj ET BT /F4 7.68 Tf 86.522 765.138 TD (List->generate_first_for\("List_of_Employee"\);)Tj ET BT 86.522 755.537 TD (List->generate_next_for\("List_of_Employee"\);)Tj ET BT 86.522 745.937 TD (List->generate_insert_for\("List_of_Employee"\);)Tj ET BT 86.522 736.337 TD (List->generate_delete_for\("List_of_Employee"\);)Tj ET BT /F3 10.08 Tf 86.522 718.096 TD (and, better still, aggregated into a single subroutine:)Tj ET BT /F4 7.68 Tf 86.522 701.776 TD (sub List::generate_methods_for)Tj ET BT 86.522 692.176 TD ({)Tj ET BT 98.042 682.576 TD (my \($class, $newclass\) = @_;)Tj ET BT 98.042 672.975 TD (List->generate_first_for\($newclass\);)Tj ET BT 98.042 663.375 TD (List->generate_next_for\($newclass\);)Tj ET BT 98.042 653.775 TD (List->generate_insert_for\($newclass\);)Tj ET BT 98.042 644.175 TD (List->generate_delete_for\($newclass\);)Tj ET BT 86.522 634.575 TD (})Tj ET BT /F3 10.08 Tf 105.722 616.334 TD 8.943 Tw (Even better, that subroutine could be called )Tj /F4 10.08 Tf 258.726 0 TD 0 Tw (List::import)Tj /F3 10.08 Tf 72.589 0 TD 8.943 Tw ( instead of)Tj ET BT /F4 10.08 Tf 86.522 603.134 TD 0 Tw (List::generate_methods_for)Tj /F3 10.08 Tf 157.277 0 TD 7.171 Tw (. Remember that )Tj /F4 10.08 Tf 97.369 0 TD 0 Tw (import)Tj /F3 10.08 Tf 36.295 0 TD 7.171 Tw ( is automatically called)Tj ET BT 86.522 589.694 TD 0 Tw (whenever a module is )Tj /F4 10.08 Tf 101.484 0 TD (use)Tj /F3 10.08 Tf 18.278 0 TD 0.114 Tw ('d, so we could put the various generic method generators of class)Tj ET BT 86.522 576.253 TD 0 Tw (List into a )Tj /F10 10.08 Tf 46.843 0 TD (List.pm)Tj /F3 10.08 Tf 32.359 0 TD ( module, and then create list classes whenever they are needed like so:)Tj ET BT /F4 7.68 Tf 86.522 559.933 TD (use List "List_of_Employee";)Tj ET BT 86.522 550.333 TD (use List "List_of_Tasks";)Tj ET BT 86.522 540.732 TD (use List "ClientList";)Tj ET BT /F5 7.68 Tf 86.522 531.132 TD (# etc.)Tj ET BT /F3 10.08 Tf 105.722 512.892 TD 0.82 Tw (Of course, we'd need to declare the various )Tj /F4 10.08 Tf 201.354 0 TD 0 Tw (_compare)Tj /F3 10.08 Tf 48.393 0 TD 0.82 Tw ( subroutines in )Tj /F4 10.08 Tf 71.501 0 TD 0 Tw (BEGIN)Tj /F3 10.08 Tf 30.246 0 TD 0.961 Tw ( blocks to)Tj ET BT 86.522 499.451 TD 3.157 Tw (makes sure each is available when each new list type is )Tj /F4 10.08 Tf 282.382 0 TD 0 Tw (use)Tj /F3 10.08 Tf 18.345 0 TD 3.157 Tw ('d into existence during)Tj ET BT 86.522 486.251 TD 0 Tw (compilation:)Tj ET BT /F4 7.68 Tf 86.522 469.931 TD (BEGIN)Tj ET BT 86.522 460.331 TD ({)Tj ET BT 98.042 450.73 TD (sub List_of_Employee::_compare)Tj ET BT 98.042 441.13 TD ({)Tj ET BT 109.563 431.53 TD (return $_[0]->{ID} < $_[1]->{ID})Tj ET BT 98.042 421.93 TD (})Tj ET BT 86.522 412.329 TD (})Tj ET BT 86.522 391.209 TD (use List "List_of_Employee";)Tj ET BT /F3 10.08 Tf 86.522 372.969 TD 4.82 Tw (Otherwise, there would be no way to create the necessary reference to it within)Tj ET BT /F4 10.08 Tf 86.522 359.528 TD 0 Tw (List::generate_insert_for)Tj /F3 10.08 Tf 151.228 0 TD (.)Tj ET BT 105.722 346.088 TD 1.406 Tw (Alternatively, we could go back to passing the comparison subroutine explicitly \(as a)Tj ET BT 86.522 332.648 TD 0 Tw (second argument to )Tj /F4 10.08 Tf 91.042 0 TD (List::generate_insert_for)Tj /F3 10.08 Tf 151.228 0 TD (\):)Tj ET BT /F4 7.68 Tf 86.522 316.327 TD (sub List::generate_insert_for)Tj ET BT 86.522 306.727 TD ({)Tj ET BT /F6 7.68 Tf 98.042 297.127 TD (my \($class, $newclass, $S\) = @_;)Tj ET BT /F4 7.68 Tf 98.042 287.527 TD (no strict "refs";)Tj ET BT 98.042 277.926 TD (*{"${newclass}::insert"} = sub)Tj ET BT 98.042 268.326 TD ({)Tj ET BT 109.563 258.726 TD (my \($L, $E\) = @_;)Tj ET BT 109.563 249.126 TD (my $index;)Tj ET BT 109.563 239.525 TD (for \($index=0; $index < @{$L->{elements}}; $index++\))Tj ET BT 109.563 229.925 TD ({)Tj ET BT 121.083 220.325 TD (my $O = $L->{elements}[$index];)Tj ET BT /F6 7.68 Tf 121.083 210.725 TD (last unless $S->\($O, $E\);)Tj ET BT /F4 7.68 Tf 109.563 201.125 TD (})Tj ET BT 109.563 191.524 TD (splice @{$L->{elements}}, $index, 0, $E;)Tj ET BT 98.042 181.924 TD (})Tj ET BT 86.522 172.324 TD (})Tj ET BT /F3 10.08 Tf 86.522 154.324 TD (modify )Tj /F4 10.08 Tf 34.976 0 TD (List::import)Tj /F3 10.08 Tf 72.589 0 TD ( accordingly:)Tj ET endstream endobj 181 0 obj 4296 endobj 182 0 obj << /F1 7 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R /F6 46 0 R /F10 71 0 R >> endobj 183 0 obj << /Type /Page /Parent 167 0 R /Resources << /Font 186 0 R /ProcSet 2 0 R >> /Contents 184 0 R >> endobj 184 0 obj << /Length 185 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 48)Tj ET BT /F4 7.68 Tf 86.522 765.138 TD (sub List::import)Tj ET BT 86.522 755.537 TD ({)Tj ET BT 98.042 745.937 TD (my \($class, $newclass,)Tj /F6 7.68 Tf 101.522 0 TD ( $comparison_sub)Tj /F4 7.68 Tf 73.742 0 TD (\) = @_;)Tj ET BT 98.042 736.337 TD (List->generate_first_for\($newclass\);)Tj ET BT 98.042 726.737 TD (List->generate_next_for\($newclass\);)Tj ET BT 98.042 717.136 TD (List->generate_insert_for\($newclass)Tj /F6 7.68 Tf 161.31 0 TD (,$comparison_sub)Tj /F4 7.68 Tf 73.742 0 TD (\);)Tj ET BT 98.042 707.536 TD (List->generate_delete_for\($newclass\);)Tj ET BT 86.522 697.936 TD (})Tj ET BT /F3 10.08 Tf 86.522 679.696 TD (and then create entire classes in a single line:)Tj ET BT /F4 7.68 Tf 86.522 663.375 TD (use List "List_Employee", sub {$_[0]->{ID} < $_[1]->{ID}};)Tj ET BT 86.522 653.775 TD (use List "Manager::List", sub {$_[0]->{revenue} > $_[1]->{revenue}};)Tj ET BT /F5 7.68 Tf 86.522 634.575 TD (# and later\311)Tj ET BT /F4 7.68 Tf 86.522 615.374 TD (my $minions = List_Employee->new\(\);)Tj ET BT 86.522 605.774 TD (my $masters = Manager::List->new\(\);)Tj ET BT /F3 10.08 Tf 86.522 587.533 TD 2.114 Tw (Figure 11 shows the complete generic List class, as it would be specified in the )Tj /F10 10.08 Tf 382.072 0 TD 0 Tw (List.pm)Tj ET BT /F3 10.08 Tf 86.522 574.333 TD (module.)Tj ET BT 105.722 560.893 TD 3.593 Tw (The same approach could be adapted to any generic class that required specific)Tj ET BT 86.522 547.453 TD 1.364 Tw (subroutine references, or class name strings, or other class-specific data to be interpolated)Tj ET BT 86.522 534.012 TD 2.031 Tw (into some place-holder within the generic code. The values to be interpolated would be)Tj ET BT 86.522 520.572 TD 3.569 Tw (passed as arguments to )Tj /F4 10.08 Tf 120.723 0 TD 0 Tw (use)Tj /F3 10.08 Tf 18.147 0 TD 3.569 Tw (, and would be distributed to the appropriate generator)Tj ET BT 86.522 507.372 TD 0 Tw (subroutines by the generic class's )Tj /F4 10.08 Tf 150.327 0 TD (import)Tj /F3 10.08 Tf 36.157 0 TD ( method.)Tj ET BT /F5 15.36 Tf 86.522 478.571 TD (eval)Tj /F2 15.36 Tf 36.871 0 TD ('ing generic classes)Tj ET BT /F3 10.08 Tf 86.522 458.41 TD 1.467 Tw (There are two main drawbacks to the approach described in the previous section. First 2000 ly,)Tj ET BT 86.522 444.97 TD 0.44 Tw (invoking the comparison subroutine through a reference \(i.e. )Tj /F4 10.08 Tf 276.977 0 TD 0 Tw ($S)Tj /F3 10.08 Tf 12.098 0 TD 0.405 Tw (\) is relatively slow, which is)Tj ET BT 86.522 431.53 TD 2.099 Tw (unfortunate in a fundamental data structure like a list. Secondly, the use of the various)Tj ET BT /F4 10.08 Tf 86.522 418.09 TD 0 Tw (generate_\311)Tj /F3 10.08 Tf 60.491 0 TD 3.191 Tw ( methods, each with an embedded anonymous subroutine representing a)Tj ET BT 86.522 404.889 TD 0.174 Tw (single generic method, fragments the generic class and makes it more difficult to understand)Tj ET BT 86.522 391.449 TD 0 Tw (and maintain.)Tj ET BT 105.722 378.009 TD 0.202 Tw (Both problems can be overcome at once by changing the way the individual subroutines)Tj ET BT 86.522 364.568 TD 0.097 Tw (are generated. Instead of creating an anonymous subroutine and assigning it into a typeglob,)Tj ET BT 86.522 351.128 TD 0.784 Tw (we could use an )Tj /F4 10.08 Tf 77.685 0 TD 0 Tw (eval)Tj /F3 10.08 Tf 24.317 0 TD 0.784 Tw ( to convert a block of text \(containing the specification of the generic)Tj ET BT 86.522 337.928 TD 0.143 Tw (class\) into actual Perl code. Figure 12 shows the generic List class from Figure 11 modified in)Tj ET BT 86.522 324.487 TD 0 Tw (this way.)Tj ET BT 105.722 311.047 TD (The )Tj /F4 10.08 Tf 19.68 0 TD (_replace)Tj /F3 10.08 Tf 48.393 0 TD 0.414 Tw ( subroutine takes a reference to an anonymous hash as its first argument)Tj ET BT 86.522 297.607 TD 1.846 Tw (and a string as its second. The hash specifies a series of substitutions to perform on the)Tj ET BT 86.522 284.167 TD 0.522 Tw (string. Each key of the hash is a literal pattern, each value is the corresponding replacement)Tj ET BT 86.522 270.966 TD 0 Tw (text.)Tj ET BT 105.722 257.526 TD 1.32 Tw (The )Tj /F4 10.08 Tf 20.713 0 TD 0 Tw (List::import)Tj /F3 10.08 Tf 72.41 0 TD 1.32 Tw ( subroutine does effectively the same job as the previous version,)Tj ET BT 86.522 244.086 TD 0.783 Tw (but in a very different way. It first extracts the name of the new class and the code for that)Tj ET BT 86.522 230.645 TD 0 Tw (class's )Tj /F4 10.08 Tf 29.881 0 TD (_compare)Tj /F3 10.08 Tf 48.6 0 TD ( subroutine from the argument list.)Tj ET BT 105.722 217.205 TD 0.913 Tw (Then, if necessary, it reads in the "template" for the List class that is specified after the)Tj ET BT /F4 10.08 Tf 86.522 204.005 TD 0 Tw (__DATA__)Tj /F3 10.08 Tf 48.393 0 TD 0.529 Tw ( token, and stores it in the package lexical variable )Tj /F4 10.08 Tf 231.349 0 TD 0 Tw ($code)Tj /F3 10.08 Tf 30.246 0 TD 0.529 Tw (. This read will only be)Tj ET BT 86.522 190.564 TD 1.427 Tw (performed the very first time a )Tj /F4 10.08 Tf 148.323 0 TD (use List)Tj /F3 10.08 Tf 49.82 0 TD ( is issued in a program, after which the text is)Tj ET BT 86.522 177.124 TD 0 Tw (cached in )Tj /F4 10.08 Tf 44.881 0 TD ($code)Tj /F3 10.08 Tf 30.246 0 TD (.)Tj ET endstream endobj 185 0 obj 5254 endobj 186 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R /F6 46 0 R /F10 71 0 R >> endobj 187 0 obj << /Type /Page /Parent 188 0 R /Resources << /Font << /F1 7 0 R /F4 20 0 R /F5 25 0 R >> /ProcSet 2 0 R >> /Contents 189 0 R >> endobj 188 0 obj << /Kids [ 187 0 R 191 0 R 194 0 R 198 0 R 201 0 R 204 0 R ] /Count 6 /Type /Pages /Parent 215 0 R >> endobj 189 0 obj << /Length 190 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 49)Tj ET BT /F4 7.68 Tf 86.522 747.617 TD (package List;)Tj ET 73.202 764.898 2.16 2.16 re f 73.202 764.898 2.16 2.16 re f 75.362 764.898 436.81 2.16 re f 512.172 764.898 2.16 2.16 re f 512.172 764.898 2.16 2.16 re f 73.202 745.697 2.16 19.2 re f 512.172 745.697 2.16 19.2 re f BT 86.522 738.017 TD ($VERSION = 1.00;)Tj ET 73.202 736.097 2.16 9.6 re f 512.172 736.097 2.16 9.6 re f 73.202 726.497 2.16 9.6 re f 512.172 726.497 2.16 9.6 re f BT 86.522 718.816 TD (sub List::import {)Tj ET 73.202 716.896 2.16 9.6 re f 512.172 716.896 2.16 9.6 re f BT 106.922 709.216 TD (my \($class, $newclass, $comparison_sub\) = @_;)Tj ET 73.202 707.296 2.16 9.6 re f 512.172 707.296 2.16 9.6 re f BT 106.922 699.616 TD (List->generate_new_for\($newclass\);)Tj ET 73.202 697.696 2.16 9.6 re f 512.172 697.696 2.16 9.6 re f BT 106.922 690.016 TD (List->generate_first_for\($newclass\);)Tj ET 73.202 688.096 2.16 9.6 re f 512.172 688.096 2.16 9.6 re f BT 106.922 680.416 TD (List->generate_next_for\($newclass\);)Tj ET 73.202 678.496 2.16 9.6 re f 512.172 678.496 2.16 9.6 re f BT 106.922 670.815 TD (List->generate_insert_for\($newclass,$comparison_sub\);)Tj ET 73.202 668.895 2.16 9.6 re f 512.172 668.895 2.16 9.6 re f BT 106.922 661.215 TD (List->generate_delete_for\($newclass\);)Tj ET 73.202 659.295 2.16 9.6 re f 512.172 659.295 2.16 9.6 re f BT 86.522 651.615 TD (})Tj ET 73.202 649.695 2.16 9.6 re f 512.172 649.695 2.16 9.6 re f 73.202 640.095 2.16 9.6 re f 512.172 640.095 2.16 9.6 re f BT 86.522 632.414 TD (sub List::generate_new_for {)Tj ET 73.202 630.494 2.16 9.6 re f 512.172 630.494 2.16 9.6 re f BT 106.922 622.814 TD (my \($class, $newclass\) = @_;)Tj ET 73.202 620.894 2.16 9.6 re f 512.172 620.894 2.16 9.6 re f BT 106.922 613.214 TD (*{"${newclass}::new"} = sub {)Tj ET 73.202 611.294 2.16 9.6 re f 512.172 611.294 2.16 9.6 re f BT 134.283 603.614 TD (my \($class, @data\) = @_;)Tj ET 73.202 601.694 2.16 9.6 re f 512.172 601.694 2.16 9.6 re f BT 134.283 594.014 TD (bless)Tj 27.121 0 TD ({ current)Tj 47.521 0 TD (=>)Tj 15.84 0 TD (0, data)Tj 34.561 0 TD (=>)Tj 34.561 0 TD ([@data], }, ref\($class\)||$class;)Tj ET 73.202 592.094 2.16 9.6 re f 512.172 592.094 2.16 9.6 re f BT 106.922 584.413 TD (})Tj ET 73.202 582.493 2.16 9.6 re f 512.172 582.493 2.16 9.6 re f BT 86.522 574.813 TD (})Tj ET 73.202 572.893 2.16 9.6 re f 512.172 572.893 2.16 9.6 re f 73.202 563.293 2.16 9.6 re f 512.172 563.293 2.16 9.6 re f BT 86.522 555.613 TD (sub List::generate_first_for {)Tj ET 73.202 553.693 2.16 9.6 re f 512.172 553.693 2.16 9.6 re f BT 106.922 546.013 TD (my \($class, $newclass\) = @_;)Tj ET 73.202 544.092 2.16 9.6 re f 512.172 544.092 2.16 9.6 re f BT 106.922 536.412 TD (*{"${newclass}::first"} = sub {)Tj ET 73.202 534.492 2.16 9.6 re f 512.172 534.492 2.16 9.6 re f BT 134.283 526.812 TD (my \($self\) = @_;)Tj ET 73.202 524.892 2.16 9.6 re f 512.172 524.892 2.16 9.6 re f BT 134.283 517.212 TD (return \\$self->{data}[$self->{current}])Tj ET 73.202 515.292 2.16 9.6 re f 512.172 515.292 2.16 9.6 re f BT 161.404 507.612 TD (if \($self->{current}=0\) < @{$self->{data}};)Tj ET 73.202 505.692 2.16 9.6 re f 512.172 505.692 2.16 9.6 re f BT 106.922 498.011 TD (})Tj ET 73.202 496.091 2.16 9.6 re f 512.172 496.091 2.16 9.6 re f BT 86.522 488.411 TD (})Tj ET 73.202 486.491 2.16 9.6 re f 512.172 486.491 2.16 9.6 re f 73.202 476.891 2.16 9.6 re f 512.172 476.891 2.16 9.6 re f BT 86.522 469.211 TD (sub List::generate_next_for {)Tj ET 73.202 467.291 2.16 9.6 re f 512.172 467.291 2.16 9.6 re f BT 106.922 459.611 TD (my \($class, $newclass\) = @_;)Tj ET 73.202 457.69 2.16 9.6 re f 512.172 457.69 2.16 9.6 re f BT 106.922 450.01 TD (*{"${newclass}::next"} = sub {)Tj ET 73.202 448.09 2.16 9.6 re f 512.172 448.09 2.16 9.6 re f BT 134.283 440.41 TD (my \($self\) = @_;)Tj ET 73.202 438.49 2.16 9.6 re f 512.172 438.49 2.16 9.6 re f BT 134.283 430.81 TD (return \\$self->{data}[$self->{current}])Tj ET 73.202 428.89 2.16 9.6 re f 512.172 428.89 2.16 9.6 re f BT 161.404 421.21 TD (if \(++$self->{current}\) < @{$self->{data}};)Tj ET 73.202 419.29 2.16 9.6 re f 512.172 419.29 2.16 9.6 re f BT 106.922 411.609 TD (})Tj ET 73.202 409.689 2.16 9.6 re f 512.172 409.689 2.16 9.6 re f BT 86.522 402.009 TD (})Tj ET 73.202 400.089 2.16 9.6 re f 512.172 400.089 2.16 9.6 re f 73.202 390.489 2.16 9.6 re f 512.172 390.489 2.16 9.6 re f BT 86.522 382.809 TD (sub List::generate_insert_for {)Tj ET 73.202 380.889 2.16 9.6 re f 512.172 380.889 2.16 9.6 re f BT 106.922 373.209 TD (my \($class, $newclass, $compare\) = @_;)Tj ET 73.202 371.289 2.16 9.6 re f 512.172 371.289 2.16 9.6 re f BT 106.922 363.608 TD (*{"${newclass}::insert"} = sub {) 2000 Tj ET 73.202 361.688 2.16 9.6 re f 512.172 361.688 2.16 9.6 re f BT 134.283 354.008 TD (my \($self, $newelem\) = @_;)Tj ET 73.202 352.088 2.16 9.6 re f 512.172 352.088 2.16 9.6 re f BT 134.283 344.408 TD (my $index;)Tj ET 73.202 342.488 2.16 9.6 re f 512.172 342.488 2.16 9.6 re f BT 134.283 334.808 TD (for \($index=0; $index < @{$self->{data}}; $index++\) {)Tj ET 73.202 332.888 2.16 9.6 re f 512.172 332.888 2.16 9.6 re f BT 161.404 325.207 TD (my $nextelem = $self->{data}[$index];)Tj ET 73.202 323.287 2.16 9.6 re f 512.172 323.287 2.16 9.6 re f BT 161.404 315.607 TD (last unless $compare->\($nextelem, $newelem\);)Tj ET 73.202 313.687 2.16 9.6 re f 512.172 313.687 2.16 9.6 re f BT 134.283 306.007 TD (})Tj ET 73.202 304.087 2.16 9.6 re f 512.172 304.087 2.16 9.6 re f BT 134.283 296.407 TD (splice @{$self->{data}}, $index, 0, $newelem;)Tj ET 73.202 294.487 2.16 9.6 re f 512.172 294.487 2.16 9.6 re f BT 134.283 286.807 TD ($self->{current} = $index;)Tj ET 73.202 284.887 2.16 9.6 re f 512.172 284.887 2.16 9.6 re f BT 106.922 277.206 TD (})Tj ET 73.202 275.286 2.16 9.6 re f 512.172 275.286 2.16 9.6 re f BT 86.522 267.606 TD (})Tj ET 73.202 265.686 2.16 9.6 re f 512.172 265.686 2.16 9.6 re f 73.202 256.086 2.16 9.6 re f 512.172 256.086 2.16 9.6 re f BT 86.522 248.406 TD (sub List::generate_delete_for {)Tj ET 73.202 246.486 2.16 9.6 re f 512.172 246.486 2.16 9.6 re f BT 106.922 238.805 TD (my \($class, $newclass\) = @_;)Tj ET 73.202 236.885 2.16 9.6 re f 512.172 236.885 2.16 9.6 re f BT 106.922 229.205 TD (*{"${newclass}::delete"} = sub {)Tj ET 73.202 227.285 2.16 9.6 re f 512.172 227.285 2.16 9.6 re f BT 134.283 219.605 TD (my \($self\) = @_;)Tj ET 73.202 217.685 2.16 9.6 re f 512.172 217.685 2.16 9.6 re f BT 134.283 210.005 TD (splice @{$self->{data}}, $self->{current}, 1;)Tj ET 73.202 208.085 2.16 9.6 re f 512.172 208.085 2.16 9.6 re f BT 106.922 200.405 TD (})Tj ET 73.202 198.485 2.16 9.6 re f 512.172 198.485 2.16 9.6 re f BT 86.522 190.804 TD (})Tj ET 73.202 186.964 2.16 11.52 re f 512.172 186.964 2.16 11.52 re f BT 86.522 177.364 TD (1;)Tj /F5 7.68 Tf 20.4 0 TD (# to ensure the "use" succeeds)Tj ET 73.202 163.684 2.16 2.16 re f 73.202 163.684 2.16 2.16 re f 75.362 163.684 436.81 2.16 re f 512.172 163.684 2.16 2.16 re f 512.172 163.684 2.16 2.16 re f 73.202 165.844 2.16 21.12 re f 512.172 165.844 2.16 21.12 re f BT /F1 7.68 Tf 247.086 153.124 TD (Figure 11: The List module)Tj ET endstream endobj 190 0 obj 7244 endobj 191 0 obj << /Type /Page /Parent 188 0 R /Resources << /Font << /F1 7 0 R /F4 20 0 R /F5 25 0 R >> /ProcSet 2 0 R >> /Contents 192 0 R >> endobj 192 0 obj << /Length 193 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 50)Tj ET BT /F4 7.68 Tf 86.522 753.377 TD (package List;)Tj ET 73.202 770.658 2.16 2.16 re f 73.202 770.658 2.16 2.16 re f 75.362 770.658 436.81 2.16 re f 512.172 770.658 2.16 2.16 re f 512.172 770.658 2.16 2.16 re f 73.202 751.457 2.16 19.2 re f 512.172 751.457 2.16 19.2 re f BT 86.522 743.777 TD ($VERSION = 2.00;)Tj ET 73.202 741.857 2.16 9.6 re f 512.172 741.857 2.16 9.6 re f BT 86.522 734.177 TD (use strict;)Tj ET 73.202 732.257 2.16 9.6 re f 512.172 732.257 2.16 9.6 re f 73.202 722.657 2.16 9.6 re f 512.172 722.657 2.16 9.6 re f BT 86.522 714.976 TD (sub _replace {)Tj ET 73.202 713.056 2.16 9.6 re f 512.172 713.056 2.16 9.6 re f BT 106.922 705.376 TD (my \($substitute, $text\) = @_;)Tj ET 73.202 703.456 2.16 9.6 re f 512.172 703.456 2.16 9.6 re f BT 106.922 695.776 TD ($text =~ s/\\Q$_/$substitute->{$_}/g foreach \(keys %$substitute\);)Tj ET 73.202 693.856 2.16 9.6 re f 512.172 693.856 2.16 9.6 re f BT 106.922 686.176 TD (return $text;)Tj ET 73.202 684.256 2.16 9.6 re f 512.172 684.256 2.16 9.6 re f BT 86.522 676.575 TD (})Tj ET 73.202 674.655 2.16 9.6 re f 512.172 674.655 2.16 9.6 re f 73.202 665.055 2.16 9.6 re f 512.172 665.055 2.16 9.6 re f BT 86.522 657.375 TD (my $code;)Tj ET 73.202 655.455 2.16 9.6 re f 512.172 655.455 2.16 9.6 re f BT 86.522 647.775 TD (sub import {)Tj ET 73.202 645.855 2.16 9.6 re f 512.172 645.855 2.16 9.6 re f BT 106.922 638.175 TD (my \($class, $newclass, $compare\) = @_;)Tj ET 73.202 636.255 2.16 9.6 re f 512.172 636.255 2.16 9.6 re f BT 106.922 628.574 TD (unless \(defined $code\) { local $/; $code = })Tj ET 73.202 626.654 2.16 9.6 re f 512.172 626.654 2.16 9.6 re f BT 106.922 618.974 TD (eval _replace {'<>'=>$newclass, '<>'=>$compare} => $code;)Tj ET 73.202 617.054 2.16 9.6 re f 512.172 617.054 2.16 9.6 re f BT 86.522 609.374 TD (})Tj ET 73.202 601.694 2.16 15.36 re f 512.172 601.694 2.16 15.36 re f BT 86.522 588.253 TD (1;)Tj /F5 7.68 Tf 20.4 0 TD (# to ensure the "use" succeeds)Tj ET 73.202 586.333 2.16 15.36 re f 512.172 586.333 2.16 15.36 re f 73.202 576.733 2.16 9.6 re f 512.172 576.733 2.16 9.6 re f BT /F4 7.68 Tf 86.522 569.053 TD (__DATA__)Tj ET 73.202 567.133 2.16 9.6 re f 512.172 567.133 2.16 9.6 re f BT 86.522 559.453 TD (package <>;)Tj ET 73.202 557.533 2.16 9.6 re f 512.172 557.533 2.16 9.6 re f 73.202 547.933 2.16 9.6 re f 512.172 547.933 2.16 9.6 re f BT 86.522 540.252 TD (sub new {)Tj ET 73.202 538.332 2.16 9.6 re f 512.172 538.332 2.16 9.6 re f BT 106.922 530.652 TD (my \($class, @data\) = @_;)Tj ET 73.202 528.732 2.16 9.6 re f 512.172 528.732 2.16 9.6 re f BT 106.922 521.052 TD (bless { current => 0, data => [@data] }, ref\($class\)||$class;)Tj ET 73.202 519.132 2.16 9.6 re f 512.172 519.132 2.16 9.6 re f BT 86.522 511.452 TD (})Tj ET 73.202 509.532 2.16 9.6 re f 512.172 509.532 2.16 9.6 re f 73.202 499.931 2.16 9.6 re f 512.172 499.931 2.16 9.6 re f BT 86.522 492.251 TD (sub compare { <> })Tj ET 73.202 490.331 2.16 9.6 re f 512.172 490.331 2.16 9.6 re f 73.202 480.731 2.16 9.6 re f 512.172 480.731 2.16 9.6 re f BT 86.522 473.051 TD (sub first {)Tj ET 73.202 471.131 2.16 9.6 re f 512.172 471.131 2.16 9.6 re f BT 106.922 463.451 TD (my \($self\) = @_;)Tj ET 73.202 461.531 2.16 9.6 re f 512.172 461.531 2.16 9.6 re f BT 106.922 453.85 TD (return \\\($self->{data}[$self->{current}]\))Tj ET 73.202 451.93 2.16 9.6 re f 512.172 451.93 2.16 9.6 re f BT 134.283 444.25 TD (if \($self->{current}=0\) < @{$self->{data}};)Tj ET 73.202 442.33 2.16 9.6 re f 512.172 442.33 2.16 9.6 re f BT 86.522 434.65 TD (})Tj ET 73.202 432.73 2.16 9.6 re f 512.172 432.73 2.16 9.6 re f 73.202 423.13 2.16 9.6 re f 512.172 423.13 2.16 9.6 re f BT 86.522 415.45 TD (sub next {)Tj ET 73.202 413.529 2.16 9.6 re f 512.172 413.529 2.16 9.6 re f BT 106.922 405.849 TD (my \($self\) = @_;)Tj ET 73.202 403.929 2.16 9.6 re f 512.172 403.929 2.16 9.6 re f BT 106.922 396.249 TD (return \\\($self->{data}[$self->{current}]\))Tj ET 73.202 394.329 2.16 9.6 re f 512.172 394.329 2.16 9.6 re f BT 134.283 386.649 TD (if \(++$self->{current}\) < @{$self->{data}};)Tj ET 73.202 384.729 2.16 9.6 re f 512.172 384.729 2.16 9.6 re f BT 86.522 377.049 TD (})Tj ET 73.202 375.129 2.16 9.6 re f 512.172 375.129 2.16 9.6 re f 73.202 365.528 2.16 9.6 re f 512.172 365.528 2.16 9.6 re f BT 86.522 357.848 TD (sub insert {)Tj ET 73.202 355.928 2.16 9.6 re f 512.172 355.928 2.16 9.6 re f BT 106.922 348.248 TD (my \($self, $newelem\) = @_;)Tj ET 73.202 346.328 2.16 9.6 re f 512.172 346.328 2.16 9.6 re f BT 106.922 338.648 TD (my $index;)Tj ET 73.202 336.728 2.16 9.6 re f 512.172 336.728 2.16 9.6 re f BT 106.922 329.048 TD (for \($index=0; $index < @{$self->{data}}; $index++\) {)Tj ET 73.202 327.127 2.16 9.6 re f 512.172 327.127 2.16 9.6 re f BT 134.283 319.447 TD (my $nextelem = $self->{data}[$index];)Tj ET 73.202 317.527 2.16 9.6 re f 512.172 317.527 2.16 9.6 re f BT 134.283 309.847 TD (last unless compare\($nextelem, $newelem\);)Tj ET 73.202 307.927 2.16 9.6 re f 512.172 307.927 2.16 9.6 re f BT 106.922 300.247 TD (})Tj ET 73.202 298.327 2.16 9.6 re f 512.172 298.327 2.16 9.6 re f BT 106.922 290.647 TD (splice @{$self->{data}}, $index, 0, $newelem;)Tj ET 73.202 288.727 2.16 9.6 re f 512.172 288.727 2.16 9.6 re f BT 106.922 281.046 TD ($self->{current} = $index;)Tj ET 73.202 279.126 2.16 9.6 re f 512.172 279.126 2.16 2000 9.6 re f BT 86.522 271.446 TD (})Tj ET 73.202 269.526 2.16 9.6 re f 512.172 269.526 2.16 9.6 re f 73.202 259.926 2.16 9.6 re f 512.172 259.926 2.16 9.6 re f BT 86.522 252.246 TD (sub delete {)Tj ET 73.202 250.326 2.16 9.6 re f 512.172 250.326 2.16 9.6 re f BT 106.922 242.646 TD (my \($self\) = @_;)Tj ET 73.202 240.726 2.16 9.6 re f 512.172 240.726 2.16 9.6 re f BT 106.922 233.045 TD (splice @{$self->{data}}, $self->{current}, 1;)Tj ET 73.202 231.125 2.16 9.6 re f 512.172 231.125 2.16 9.6 re f BT 86.522 223.445 TD (})Tj ET 73.202 209.765 2.16 2.16 re f 73.202 209.765 2.16 2.16 re f 75.362 209.765 436.81 2.16 re f 512.172 209.765 2.16 2.16 re f 512.172 209.765 2.16 2.16 re f 73.202 211.925 2.16 19.2 re f 512.172 211.925 2.16 19.2 re f BT /F1 7.68 Tf 228.125 192.484 TD (Figure 12: The List module using eval)Tj ET endstream endobj 193 0 obj 6337 endobj 194 0 obj << /Type /Page /Parent 188 0 R /Resources << /Font 197 0 R /ProcSet 2 0 R >> /Contents 195 0 R >> endobj 195 0 obj << /Length 196 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 51)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 0.533 Tw (To generate the specific code needed we could also have used a "here document", or an)Tj ET BT 86.522 748.817 TD 3.913 Tw (interpolation module such as Interpolation or Text::Template)Tj /F3 6.24 Tf 295.687 3.84 TD 0 Tw (28)Tj /F3 10.08 Tf 6.24 -3.84 TD 3.913 Tw (, or even the standard)Tj ET BT /F4 10.08 Tf 86.522 735.617 TD 0 Tw (sprintf)Tj /F3 10.08 Tf 42.344 0 TD 0.252 Tw ( function. However reading from )Tj /F4 10.08 Tf 151.535 0 TD 0 Tw ()Tj /F3 10.08 Tf 36.295 0 TD 0.293 Tw ( allows us to cleanly distinguish between)Tj ET BT 86.522 722.177 TD 1.469 Tw (the actual code implementing the )Tj /F10 10.08 Tf 158.674 0 TD 0 Tw (List.pm)Tj /F3 10.08 Tf 32.49 0 TD 1.469 Tw ( module \(everything before )Tj /F4 10.08 Tf 130.291 0 TD 0 Tw (__DATA__)Tj /F3 10.08 Tf 48.393 0 TD 1.469 Tw (\), and the)Tj ET BT 86.522 708.736 TD 0 Tw (code template it uses \(everything after )Tj /F4 10.08 Tf 173.274 0 TD (__DATA__)Tj /F3 10.08 Tf 48.393 0 TD (\).)Tj ET BT 105.722 695.296 TD 1.462 Tw (The template code is passed through )Tj /F4 10.08 Tf 174.724 0 TD 0 Tw (_replace)Tj /F3 10.08 Tf 48.393 0 TD 1.462 Tw ( to put the new class's name and the)Tj ET BT 86.522 681.856 TD 0.297 Tw (comparison code into the appropriate place-holders. Once these slots have been filled in, the)Tj ET BT 86.522 668.655 TD 0 Tw (\(now-specific\) code is )Tj /F4 10.08 Tf 98.907 0 TD (eval)Tj /F3 10.08 Tf 24.196 0 TD ('ed into the current program.)Tj ET BT 105.722 655.215 TD 0.076 Tw (The remainder of the file consists of the code template for the generic list class. Note that)Tj ET BT 86.522 641.775 TD 0.622 Tw (the entire class is laid out together\321with the place-holders )Tj /F4 10.08 Tf 270.246 0 TD 0 Tw (<>)Tj /F3 10.08 Tf 54.442 0 TD 0.622 Tw ( and )Tj /F4 10.08 Tf 23.348 0 TD 0 Tw (<>)Tj ET BT /F3 10.08 Tf 86.522 628.334 TD 0.193 Tw (for the generic bits\321making the structure, function, and level of genericity of the class much)Tj ET BT 86.522 614.894 TD 0 Tw (clearer.)Tj ET BT 105.722 601.694 TD 0.124 Tw (This version of the List class is used in much the same "one-line" manner as the previous)Tj ET BT 86.522 588.253 TD 0.946 Tw (one\321the only difference is that the comparison code is now specified as a string \(in single)Tj ET BT 86.522 574.813 TD 0 Tw (quotes to avoid the embarrassment of premature interpolation\):)Tj ET BT /F4 7.68 Tf 86.522 558.493 TD (use List "List_Employee", '$_[0]->{ID} < $_[1]->{ID}';)Tj ET BT 86.522 548.893 TD (use List "Manager::List", '$_[0]->{revenue} > $_[1]->{revenue}';)Tj ET BT /F5 7.68 Tf 86.522 529.692 TD (# and later\311)Tj ET BT /F4 7.68 Tf 86.522 510.492 TD (my $minions = List_Employee->new\(\);)Tj ET BT 86.522 500.891 TD (my $masters = Manager::List->new\(\);)Tj ET BT /F3 10.08 Tf 105.722 482.651 TD 2.148 Tw (Once again, the technique can be easily adapted to generate generic classes for any)Tj ET BT 86.522 469.211 TD 0 Tw (purpose and with any number of place-holders.)Tj ET BT /F2 10.08 Tf 86.522 415.69 TD 1.839 Tw (Many people come to Perl on the rebound from a bad experience with some other object-oriented)Tj ET BT 86.522 402.249 TD 1.448 Tw (language. With a little guidance, the transition can be surprisingly painless. Here, for example, is)Tj ET BT 86.522 389.049 TD 0 Tw (object-oriented Perl from a C++ perspective...)Tj ET BT /F2 19.2 Tf 86.522 351.608 TD (Perl and C++)Tj ET BT /F3 10.08 Tf 86.522 325.687 TD 5.444 Tw (For better or worse, to much of the programming world C++ )Tj /F2 10.08 Tf 333.161 0 TD 0 Tw (is)Tj /F3 10.08 Tf 6.723 0 TD 5.444 Tw ( object-oriented)Tj ET BT 86.522 312.247 TD 1.279 Tw (programming. Devised by Bjarne Stroustrup at the Bell Research Laboratories in the early)Tj ET BT 86.522 298.807 TD 1.648 Tw (80's as an object-oriented successor to the C programming language, C++ has undergone)Tj ET BT 86.522 285.367 TD 4.075 Tw (perhaps the most public and collaborative evolution of any programming language,)Tj ET BT 86.522 272.166 TD 0 Tw (culminating in the recent ANSI C++ standard.)Tj ET BT 105.722 258.726 TD 2.956 Tw (Like Perl, C++ is a hybrid language with object-oriented features layered over an)Tj ET BT 86.522 245.286 TD 5.693 Tw (original imperative language. Syntactically and semantically, its non-object-oriented)Tj ET BT 86.522 231.845 TD 4.705 Tw (components are almost completely backwards compatible with the C programming)Tj ET BT 86.522 218.405 TD 0 Tw (language, whilst its object-oriented features draw most heavily on Simula.)Tj ET BT 86.522 182.884 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 185.044 138.243 0.48 re f BT /F3 5.76 Tf 86.522 168.244 TD (28)Tj /F3 9.6 Tf 5.76 -3.84 TD ( \311both by Mark-Jason Dominus, and available from the CPAN\311)Tj ET endstream endobj 196 0 obj 4870 endobj 197 0 obj << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R /F10 71 0 R >> endobj 198 0 obj << /Type /Page /Parent 188 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 199 0 R >> endobj 199 0 obj << /Length 200 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 52)Tj ET BT /F2 15.36 Tf 86.522 760.337 TD (Objects)Tj ET BT /F3 10.08 Tf 86.522 740.177 TD (C++ objects are structured regions of memory that store one or more typed data members. In)Tj ET BT 86.522 726.737 TD 0.143 Tw (other words, every object is a record of various fields. In Perl, objects may also be record-like)Tj ET BT 86.522 713.536 TD 0.868 Tw (structures \(i.e. hashes\), but they may also be arrays, scalar variables, subroutine references,)Tj ET BT 86.522 700.096 TD 0 Tw (or a any other Perl datatype.)Tj ET BT 105.722 686.656 TD 0.689 Tw (C++ objects may be stored directly in statically-typed variables, or dynamically created)Tj ET BT 86.522 673.215 TD 1.975 Tw (and accessed via typed pointers or references. Perl objects may similarly be variables or)Tj ET BT 86.522 659.775 TD 2.802 Tw (unnamed values, and are always accessed via references)Tj /F3 6.24 Tf 270.966 3.84 TD 0 Tw (29)Tj /F3 10.08 Tf 6.24 -3.84 TD 2.802 Tw ( stored in dynamically-typed)Tj ET BT 86.522 646.575 TD 1.531 Tw (variables. Unlike C++, in Perl there is no need for a manual deallocation mechanism like)Tj ET BT /F4 10.08 Tf 86.522 633.134 TD 0 Tw (delete)Tj /F3 10.08 Tf 36.295 0 TD (, since all objects in Perl are automatically garbage-collected.)Tj ET BT 105.722 619.694 TD 0.872 Tw (C++ also permits the definition of "static" data members that are \(conceptually\) shared)Tj ET BT 86.522 606.254 TD 0.772 Tw (by all objects of a given class. Perl has no equivalent construct, but it is easy to set up such)Tj ET BT 86.522 592.814 TD 0 Tw (shared attributes using lexical variables of appropriately restricted scope.)Tj ET BT 105.722 579.613 TD 1.109 Tw (C++ objects are created either by static declaration or by dynamic allocation using the)Tj ET BT /F4 10.08 Tf 86.522 566.173 TD 0 Tw (new)Tj /F3 10.08 Tf 18.147 0 TD 0.766 Tw ( operator. Perl objects are almost always created dy 2000 namically, in a method that is often)Tj ET BT 86.522 552.733 TD 0 Tw (called )Tj /F4 10.08 Tf 28.887 0 TD (new)Tj /F3 10.08 Tf 18.147 0 TD (.)Tj ET BT /F2 15.36 Tf 86.522 523.932 TD (Classes)Tj ET BT /F3 10.08 Tf 86.522 503.772 TD 0.715 Tw (A class in C++ is a specification of the data and function members \(i.e. methods\) possessed)Tj ET BT 86.522 490.331 TD 0.419 Tw (by a particular kind of object. Classes in Perl also define the methods of a type of object, but)Tj ET BT 86.522 477.131 TD 3.742 Tw (do not normally directly specify the attributes possessed by such objects)Tj /F3 6.24 Tf 358.328 3.84 TD 0 Tw (30)Tj /F3 10.08 Tf 6.24 -3.84 TD 3.742 Tw (. Attribute)Tj ET BT 86.522 463.691 TD 0 Tw (specification is typically arranged by the constructor method \(e.g. )Tj /F4 10.08 Tf 294.478 0 TD (new)Tj /F3 10.08 Tf 18.147 0 TD (\).)Tj ET BT 105.722 450.25 TD 1.091 Tw (In C++, a class specifies a local namespace in which data and function members exist,)Tj ET BT 86.522 436.81 TD 1.17 Tw (but C++ also has a separate higher-level )Tj /F4 10.08 Tf 189.105 0 TD 0 Tw (namespace)Tj /F3 10.08 Tf 54.442 0 TD 1.17 Tw ( mechanism with which two or more)Tj ET BT 86.522 423.37 TD 1.354 Tw (classes can be grouped. Perl's )Tj /F4 10.08 Tf 144.06 0 TD 0 Tw (package)Tj /F3 10.08 Tf 42.184 0 TD 1.354 Tw ( construct does double-duty as both a namespace)Tj ET BT 86.522 410.169 TD 2.066 Tw (and a class specification mechanism, so there is no such ability to construct hierarchical)Tj ET BT 86.522 396.729 TD 0 Tw (namespaces.)Tj ET BT 105.722 383.289 TD 0.695 Tw (Perl provides better resources for run-time type information than does C++. Whereas a)Tj ET BT 86.522 369.848 TD 2.507 Tw (C++ program is restricted to the data provided by the standard )Tj /F4 10.08 Tf 311.557 0 TD 0 Tw (typeid)Tj /F3 10.08 Tf 36.295 0 TD 2.507 Tw ( function, and)Tj ET BT 86.522 356.408 TD 0.634 Tw (limited to using dynamic casts to verify class compatibility, Perl allows almost every aspect)Tj ET BT 86.522 343.208 TD 0.792 Tw (of a class's structure and capabilities to be interrogated at run-time: class name via the )Tj /F4 10.08 Tf 396.249 0 TD 0 Tw (ref)Tj ET BT /F3 10.08 Tf 86.522 329.768 TD 3.697 Tw (function, hierarchical relationships via the )Tj /F4 10.08 Tf 208.757 0 TD 0 Tw (UNIVERSAL::isa)Tj /F3 10.08 Tf 84.688 0 TD 3.697 Tw ( subroutine, and method)Tj ET BT 86.522 316.327 TD 0 Tw (compatibility via the )Tj /F4 10.08 Tf 94.679 0 TD (UNIVERSAL::can)Tj /F3 10.08 Tf 84.688 0 TD ( subroutine.)Tj ET BT 105.722 302.887 TD 0.458 Tw (Perl does not directly support generic classes such as those provided by C++ templates.)Tj ET BT 86.522 289.447 TD 3.122 Tw (In practice this presents very few problems because the combination of Perl's closure)Tj ET BT 86.522 276.246 TD 3.542 Tw (mechanism, interface polymorphism, and dynamic-typing makes generic types largely)Tj ET BT 86.522 262.806 TD 0 Tw (unnecessary.)Tj ET BT 86.522 232.805 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 234.965 138.243 0.48 re f BT /F3 5.76 Tf 86.522 218.165 TD (29)Tj /F3 9.6 Tf 5.76 -3.84 TD ( A Perl reference is semantically closer to a C++ pointer than to a C++ reference. In Perl,)Tj ET BT 93.242 203.765 TD (references are not automatically dereferenced as they are in C++, nor must they be permanently)Tj ET BT 93.242 193.204 TD (bound to a given variable.)Tj ET BT /F3 5.76 Tf 86.522 178.804 TD (30)Tj /F3 9.6 Tf 5.76 -3.84 TD ( Although there )Tj /F2 9.6 Tf 69.845 0 TD (are)Tj /F3 9.6 Tf 11.733 0 TD ( various modules that make it possible to declaratively specify a class's)Tj ET BT 93.242 164.404 TD (attributes.)Tj ET endstream endobj 200 0 obj 5599 endobj 201 0 obj << /Type /Page /Parent 188 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R >> /ProcSet 2 0 R >> /Contents 202 0 R >> endobj 202 0 obj << /Length 203 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 53)Tj ET BT /F2 15.36 Tf 86.522 760.337 TD (Methods)Tj ET BT /F3 10.08 Tf 86.522 740.177 TD 1.797 Tw (C++ and Perl are both hybrid languages that allow code to be executed in "stand-alone")Tj ET BT 86.522 726.737 TD 0 Tw (subroutines as well as methods.)Tj ET BT 105.722 713.536 TD 1.525 Tw (In C++, a class's function members are declared as part of the class specification and)Tj ET BT 86.522 700.096 TD 0.452 Tw (may be defined at the same point or anywhere else, provided the appropriate class qualifier)Tj ET BT 86.522 686.656 TD 0.684 Tw (is used \(i.e. )Tj /F4 10.08 Tf 54.314 0 TD 0 Tw (ClassName::functionName)Tj /F3 10.08 Tf 139.13 0 TD 0.684 Tw (\). Perl is even more liberal in this respect: a class)Tj ET BT 86.522 673.215 TD 0.802 Tw (method may be declared )Tj /F2 10.08 Tf 116.182 0 TD 0 Tw (and)Tj /F3 10.08 Tf 15.12 0 TD 0.802 Tw ( defined anywhere, provided it is suitably qualified \(using the)Tj ET BT 86.522 659.775 TD 0 Tw (same qualification syntax as C++\).)Tj ET BT 105.722 646.575 TD 1.394 Tw (Every C++ member function has a specific signature determined by its name and the)Tj ET BT 86.522 633.134 TD 0 Tw (number and types of arguments it takes. C++ methods may be overloaded, may have default)Tj ET BT 86.522 619.694 TD 2.615 Tw (argument values, and may also pass arbitrary arguments \(using the ")Tj /F4 10.08 Tf 333.437 0 TD (\311)Tj /F3 10.08 Tf 6.049 0 TD (" specifier\). Perl)Tj ET BT 86.522 606.254 TD 1.664 Tw (methods have no static checking of parameter types, and Perl unifies the many "variable)Tj ET BT 86.522 592.814 TD 0.124 Tw (argument list" mechanisms of C++ by simply passing arguments as an actual variable-length)Tj ET BT 86.522 579.613 TD 0.753 Tw (list. There is no signature-based method selection \(like C++ overloading\), but the effect can)Tj ET BT 86.522 566.173 TD 0 Tw (be achieved using multimethod techniques.)Tj ET BT 105.722 552.733 TD 2.968 Tw (C++ member functions are called on an object or object reference using the "dot")Tj ET BT 86.522 539.292 TD 2.229 Tw (operator \()Tj /F5 10.08 Tf 46.561 0 TD 0 Tw (varOrRef)Tj /F4 10.08 Tf 48.393 0 TD (.)Tj /F5 10.08 Tf 6.049 0 TD (method)Tj /F4 10.08 Tf 36.295 0 TD (\()Tj /F5 10.08 Tf 6.049 0 TD (args)Tj /F4 10.08 Tf 24.196 0 TD (\))Tj /F3 10.08 Tf 6.049 0 TD 2.229 Tw (\). Methods may also be invoked through a pointer)Tj ET BT 86.522 525.852 TD 1.574 Tw (using the "arrow" operator \()Tj /F5 10.08 Tf 131.283 0 TD 0 Tw (ptr)Tj /F4 10.08 Tf 18.147 0 TD (->)Tj /F5 10.08 Tf 12.098 0 TD (method)Tj /F4 10.08 Tf 36.295 0 TD (\()Tj /F5 10.08 Tf 6.049 0 TD (args)Tj /F4 10.08 Tf 24.197 0 TD (\))Tj /F3 10.08 Tf 6.049 0 TD 1.574 Tw (\). In)Tj 1 0 0 rg 1 0 0 RG 19.088 0 TD ( )Tj 0 g 0 G 4.32 0 TD (Perl, methods are always invoked)Tj ET BT 86.522 512.652 TD 0.426 Tw (through a reference to an object, using the arrow operator \()Tj /F4 10.08 Tf 267.108 0 TD ($)Tj /F5 10.08 Tf 6.049 0 TD 0 Tw (ref)Tj /F4 10.08 Tf 18.147 0 TD (->)Tj /F5 10.08 Tf 12.098 0 TD (method)Tj /F4 10.08 Tf 36.295 0 TD (\()Tj /F5 10.08 Tf 5.91 0 TD (args)Tj /F4 10.08 Tf 24.196 0 TD (\))Tj /F3 10.08 Tf 6.049 0 TD (\). Unlike)Tj ET BT 86.522 499.211 TD 3.381 Tw (C++, in Perl if the method takes no arguments, the trailing parentheses indicating a)Tj ET BT 86.522 485.771 TD 0 Tw (subroutine call may be omitted.)Tj ET BT 105.722 472.331 TD 0.204 Tw (C++ allows pointers or references to member functions to be used to call those functions)Tj ET BT 86.522 458.891 TD 1.012 Tw (on specific objects using the )Tj /F4 10.08 Tf 131.4 0 TD 0 Tw (ptr->*funcptr\(\))Tj /F3 10.08 Tf 90.566 0 TD 1.012 Tw ( syntax. Perl allows references to methods)Tj ET BT 86.522 445.69 TD 1.29 Tw (to be used in the same way, using the )Tj /F4 10.08 Tf 180.962 0 TD 0 Tw ($ref->$methodRef\(\))Tj /F3 10.08 Tf 108.884 0 TD 1.29 Tw ( notation. Unlike C++, Perl)Tj ET BT 86.522 432.25 TD 1.406 Tw (also allows methods to be called "by name", by storing a suitable character string\321rather)Tj ET BT 86.522 418.81 TD 0 Tw (than a reference\321in the )Tj /F4 10.08 Tf 109.022 0 TD ($methodRef)Tj /F3 10.08 Tf 60.491 0 TD ( variable.)Tj ET BT 105.722 405.369 TD 2.301 Tw (In both languages a method may act like a procedure or a function, depending on)Tj ET BT 86 2000 .522 391.929 TD 0.423 Tw (whether it chooses to return a value. Both languages provide a )Tj /F4 10.08 Tf 285.847 0 TD 0 Tw (return)Tj /F3 10.08 Tf 36.295 0 TD 0.423 Tw ( statement to specify)Tj ET BT 86.522 378.729 TD 0.841 Tw (such return values. However, unlike C++, where a member function that does not return a)Tj ET BT 86.522 365.288 TD 0.336 Tw (value must have a return type of )Tj /F4 10.08 Tf 150.244 0 TD 0 Tw (void)Tj /F3 10.08 Tf 24.196 0 TD 0.336 Tw (, Perl methods do not require \(nor allow\) any form of)Tj ET BT 86.522 351.848 TD 0 Tw (return-type specification.)Tj ET BT 105.722 338.408 TD 2.83 Tw (C++ provides the special constant )Tj /F4 10.08 Tf 167.524 0 TD 0 Tw (this)Tj /F3 10.08 Tf 24.196 0 TD 2.83 Tw ( within each member function, which is a)Tj ET BT 86.522 324.967 TD 1.295 Tw (pointer to the object on which the method was called. In Perl, a reference to the invoking)Tj ET BT 86.522 311.767 TD 1.453 Tw (object is instead passed as the first argument to the call. It is typically extracted from the)Tj ET BT 86.522 298.327 TD 0 Tw (argument list and stored in a variable called )Tj /F4 10.08 Tf 198.509 0 TD ($self)Tj /F3 10.08 Tf 30.246 0 TD (.)Tj ET BT 105.722 284.887 TD 2.33 Tw (Both C++ and Perl allow class methods to be defined within a class. In C++, such)Tj ET BT 86.522 271.446 TD 1.667 Tw (member functions are defined with the )Tj /F4 10.08 Tf 186.004 0 TD 0 Tw (static)Tj /F3 10.08 Tf 36.295 0 TD 1.667 Tw ( qualifier and are called using the syntax)Tj ET BT /F5 10.08 Tf 86.522 258.006 TD 0 Tw (ClassName)Tj /F4 10.08 Tf 54.442 0 TD (::)Tj /F5 10.08 Tf 12.098 0 TD (method)Tj /F4 10.08 Tf 36.295 0 TD (\()Tj /F5 10.08 Tf 5.887 0 TD (args)Tj /F4 10.08 Tf 24.196 0 TD (\))Tj /F3 10.08 Tf 6.049 0 TD 1.887 Tw (. In Perl, such methods are defined like all other methods,)Tj ET BT 86.522 244.806 TD 0.594 Tw (and differ only in that they expect the class name\321rather than an object reference\321as their)Tj ET BT 86.522 231.365 TD 0 Tw (first argument. They are called using the syntax )Tj /F5 10.08 Tf 214.815 0 TD (ClassName)Tj /F4 10.08 Tf 54.442 0 TD (->)Tj /F5 10.08 Tf 12.098 0 TD (method)Tj /F4 10.08 Tf 36.172 0 TD (\()Tj /F5 10.08 Tf 6.049 0 TD (args)Tj /F4 10.08 Tf 24.196 0 TD (\))Tj /F3 10.08 Tf 6.049 0 TD (.)Tj ET BT 105.722 217.925 TD 0.807 Tw (Both languages also support the definition of class-specific versions of the standard set)Tj ET BT 86.522 204.485 TD 1.549 Tw (of operators \(i.e. operator overloading\), and as in C++, overloaded operators in Perl may)Tj ET BT 86.522 191.044 TD 0 Tw (either be regular subroutines or specific object methods.)Tj ET endstream endobj 203 0 obj 6901 endobj 204 0 obj << /Type /Page /Parent 188 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R >> /ProcSet 2 0 R >> /Contents 205 0 R >> endobj 205 0 obj << /Length 206 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 54)Tj ET BT /F2 15.36 Tf 86.522 760.337 TD (Constructors and destructors)Tj ET BT /F3 10.08 Tf 86.522 740.177 TD 1.166 Tw (C++ classes typically provide a special member function \(with the same name as the class)Tj ET BT 86.522 726.737 TD 0 Tw (itself\) that may be used to initialize objects when they are created. Perl has no comparable in-)Tj ET BT 86.522 713.536 TD 0.548 Tw (built initialization mechanism. Instead, a regular class method \(typically called )Tj /F4 10.08 Tf 358.328 0 TD 0 Tw (new)Tj /F3 10.08 Tf 18.147 0 TD 0.548 Tw (\) is used)Tj ET BT 86.522 700.096 TD 0 Tw (to both create and initialize objects.)Tj ET BT 105.722 686.656 TD 0.74 Tw (C++ also provides for destructor functions, which are automatically called on an object)Tj ET BT 86.522 673.215 TD 1.084 Tw (just before it goes out of scope or is otherwise deallocated. Perl also allows for destructor)Tj ET BT 86.522 659.775 TD 0 Tw (methods to be defined using the special method name )Tj /F4 10.08 Tf 243.279 0 TD (DESTROY)Tj /F3 10.08 Tf 42.344 0 TD (.)Tj ET BT /F2 15.36 Tf 86.522 630.974 TD (Encapsulation)Tj ET BT /F3 10.08 Tf 86.522 611.054 TD 3.07 Tw (Every data and function member of a C++ class has some associated "accessibility" \320)Tj ET BT /F4 10.08 Tf 86.522 597.614 TD 0 Tw (public)Tj /F3 10.08 Tf 36.295 0 TD 2.098 Tw (, )Tj /F4 10.08 Tf 7.138 0 TD 0 Tw (protected)Tj /F3 10.08 Tf 54.442 0 TD 2.098 Tw (, or )Tj /F4 10.08 Tf 21.408 0 TD 0 Tw (private)Tj /F3 10.08 Tf 42.344 0 TD 2.098 Tw ( \320 which determines the scopes from which it can be)Tj ET BT 86.522 584.173 TD 3.529 Tw (directly accessed. Perl has no equivalent concept, and does not enforce any form of)Tj ET BT 86.522 570.733 TD 0.304 Tw (encapsulation on attributes or methods of objects. There are, however, several programming)Tj ET BT 86.522 557.293 TD 3.773 Tw (techniques that permit both attributes and methods to be appropriately restricted in)Tj ET BT 86.522 544.092 TD 0 Tw (accessibility.)Tj ET BT /F2 15.36 Tf 86.522 515.292 TD (Inheritance)Tj ET BT /F3 10.08 Tf 86.522 495.131 TD 3.009 Tw (Both C++ and Perl support optional multiple inheritance of superclasses, but in quite)Tj ET BT 86.522 481.691 TD 2.259 Tw (different ways. In C++, the classes from which a given class inherits are determined at)Tj ET BT 86.522 468.251 TD 2.603 Tw (compile-time by the class definition. The classes that a given Perl package inherits are)Tj ET BT 86.522 454.81 TD 0 Tw (determined at run-time by the contents of that package's )Tj /F4 10.08 Tf 253.93 0 TD (@ISA)Tj /F3 10.08 Tf 24.197 0 TD ( array.)Tj ET BT 105.722 441.61 TD 0.548 Tw (A subclass in C++ does not have access to the private data and function members of its)Tj ET BT 86.522 428.17 TD 0 Tw (superclasses)Tj /F3 6.24 Tf 55.201 3.84 TD (31)Tj /F3 10.08 Tf 6.24 -3.84 TD 6.738 Tw (. Because the attributes and methods of a Perl class are entirely)Tj ET BT 86.522 414.729 TD 1.65 Tw (unencapsulated, there is no equivalent restriction in Perl. Likewise Perl does not support)Tj ET BT 86.522 401.289 TD 0 Tw (access variations along the lines of C++'s protected or private inheritance.)Tj ET BT 105.722 387.849 TD 0.19 Tw (Perl does not have a mechanism corresponding to virtual inheritance in C++, nor does it)Tj ET BT 86.522 374.649 TD 1.707 Tw (need one, since object attributes are determined dynamically by constructors, rather than)Tj ET BT 86.522 361.208 TD 0.973 Tw (statically by class definitions. In practice, the commonest forms of class implementation all)Tj ET BT 86.522 347.768 TD 0 Tw (provide implicit virtual inheritance of attributes)Tj /F3 6.24 Tf 213.605 3.84 TD (32)Tj /F3 10.08 Tf 6.24 -3.84 TD (.)Tj ET BT 105.722 334.328 TD 3.518 Tw (Unlike C++, Perl classes all implicitly inherit from a single common class called)Tj ET BT 86.522 320.887 TD 0 Tw (UNIVERSAL.)Tj ET BT /F2 15.36 Tf 86.522 292.087 TD (Polymorphism)Tj ET BT /F3 10.08 Tf 86.522 272.166 TD 2.393 Tw (In C++, methods are implicitly non-polymorphic unless they are specifically marked as)Tj ET BT 86.522 258.726 TD 1.078 Tw (being )Tj /F4 10.08 Tf 28.561 0 TD 0 Tw (virtual)Tj /F3 10.08 Tf 42.344 0 TD 1.078 Tw (. All Perl methods are implicitly polymorphic and there is no way to mark)Tj ET BT 86.522 245.286 TD 0.275 Tw (them as non-polymorphic. Unlike C++, in Perl any method may be redefined in any derived)Tj ET BT 86.522 231.845 TD 0 Tw (class.)Tj ET BT 86.522 211.685 TD ( )Tj 72.002 0 TD ( )Tj ET 86.402 213.845 138.243 0.48 re f BT /F3 5.76 Tf 86.522 197.045 TD (31)Tj /F3 9.6 Tf 5.76 -3.84 TD ( \311except in the highly unusual case where the derived class is also a friend of the base class.)Tj ET BT /F3 5.76 Tf 86.522 178.804 TD (32)Tj /F3 9.6 Tf 5.76 -3.84 TD ( \311mainly as a consequence of the uniqueness of keys in the hashes on which most classes are)Tj ET BT 93.242 164.404 TD (based.)Tj ET endstream endobj 206 0 obj 4937 endobj 207 0 obj << /Type /Page /Parent 208 0 R /Resources << /Font << /F1 7 0 R /F2 9 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R >> /ProcSet 2 0 R >> /Contents 209 0 R >> endobj 208 0 obj << /Kids [ 207 0 R 211 0 R ] /Count 2 /Type /Pages /Parent 215 0 R >> endobj 209 0 obj << /Length 210 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 T 2000 c 0 Tw (Page 55)Tj ET BT /F3 10.08 Tf 105.722 762.257 TD 2.755 Tw (C++ polymorphism is controlled by class hierarchies, because virtual functions are)Tj ET BT 86.522 748.817 TD 0.289 Tw (called through typed pointers or references. In Perl, all variables are dynamically typed, and)Tj ET BT 86.522 735.617 TD 1.578 Tw (so may store a reference to any class of object at any time. Thus, Perl provides the more)Tj ET BT 86.522 722.177 TD 1.377 Tw (general form of polymorphism\321interface polymorphism\321in which any object \(regardless)Tj ET BT 86.522 708.736 TD 2.409 Tw (of its class hierarchy membership\) may respond to any method call for which it has a)Tj ET BT 86.522 695.296 TD 0 Tw (suitably named method.)Tj ET BT 105.722 681.856 TD 2.137 Tw (C++ allows base class member functions to be accessed from derived class member)Tj ET BT 86.522 668.655 TD 0.177 Tw (functions, even if the derived class redefines the function in question. This access is achieved)Tj ET BT 86.522 655.215 TD 0.443 Tw (by fully qualifying the nested function call with the name of the desired ancestral class. Perl)Tj ET BT 86.522 641.775 TD 0 Tw (has the same mechanism. However, Perl also provides a special "pseudo-class" called SUPER)Tj ET BT 86.522 628.334 TD 2.739 Tw (that may be used to delegate a method dispatch to an unspecified ancestral class \(i.e.)Tj ET BT 86.522 614.894 TD 0 Tw (whichever one actually provides the inherited method\).)Tj ET BT 105.722 601.694 TD 1.003 Tw (Perl has no method abstraction construct corresponding to C++'s pure virtual member)Tj ET BT 86.522 588.253 TD 0.489 Tw (function declaration. Instead, in keeping with Perl's dynamically-typed nature and run-time)Tj ET BT 86.522 574.813 TD 1.418 Tw (checking philosophy, if an abstract method is required, a normal method is specified and)Tj ET BT 86.522 561.373 TD 0 Tw (made to immediately throw an exception.)Tj ET BT /F2 15.36 Tf 86.522 532.572 TD (Comparative syntax)Tj ET BT /F3 10.08 Tf 86.522 512.412 TD (Table 2 shows a translation into Perl of the fundamental object-oriented features of C++.)Tj ET BT /F1 10.08 Tf 109.083 485.051 TD (Construct)Tj ET BT 252.366 485.051 TD (C++)Tj ET BT 413.169 485.051 TD (Perl)Tj ET 80.882 495.851 0.48 0.48 re f 80.882 495.851 0.48 0.48 re f 81.362 495.851 100.082 0.48 re f 181.444 495.851 0.48 0.48 re f 181.924 495.851 160.084 0.48 re f 342.008 495.851 0.48 0.48 re f 342.488 495.851 159.844 0.48 re f 502.332 495.851 0.48 0.48 re f 502.332 495.851 0.48 0.48 re f 80.882 482.411 0.48 13.44 re f 181.444 482.411 0.48 13.44 re f 342.008 482.411 0.48 13.44 re f 502.332 482.411 0.48 13.44 re f BT /F3 9.12 Tf 86.522 475.451 TD (Comment)Tj ET BT /F4 7.68 Tf 187.084 474.251 TD (// Comment to EOL)Tj ET BT 187.084 464.651 TD (/* Delimited comment */)Tj ET BT 347.408 474.251 TD (# comment from '#' to eol)Tj ET 80.882 481.931 0.48 0.48 re f 81.362 481.931 100.082 0.48 re f 181.444 481.931 0.48 0.48 re f 181.924 481.931 160.084 0.48 re f 342.008 481.931 0.48 0.48 re f 342.488 481.931 159.844 0.48 re f 502.332 481.931 0.48 0.48 re f 80.882 456.97 0.48 24.961 re f 181.444 456.97 0.48 24.961 re f 342.008 456.97 0.48 24.961 re f 502.332 456.97 0.48 24.961 re f BT /F3 9.12 Tf 86.522 450.01 TD (Assignment)Tj ET BT /F5 7.68 Tf 187.084 448.81 TD (variable)Tj /F4 7.68 Tf 36.871 0 TD ( = )Tj /F5 7.68 Tf 14.01 0 TD (value;)Tj ET BT /F4 7.68 Tf 347.408 448.81 TD ($)Tj /F5 7.68 Tf 4.609 0 TD (variable)Tj /F4 7.68 Tf 36.871 0 TD ( = )Tj /F5 7.68 Tf 13.962 0 TD (value)Tj /F4 7.68 Tf 23.044 0 TD (;)Tj ET 80.882 456.49 0.48 0.48 re f 81.362 456.49 100.082 0.48 re f 181.444 456.49 0.48 0.48 re f 181.924 456.49 160.084 0.48 re f 342.008 456.49 0.48 0.48 re f 342.488 456.49 159.844 0.48 re f 502.332 456.49 0.48 0.48 re f 80.882 441.13 0.48 15.36 re f 181.444 441.13 0.48 15.36 re f 342.008 441.13 0.48 15.36 re f 502.332 441.13 0.48 15.36 re f BT /F3 9.12 Tf 86.522 434.17 TD (Temporary variable)Tj ET BT /F5 7.68 Tf 187.084 432.97 TD (className)Tj /F4 7.68 Tf 41.48 0 TD ( )Tj /F5 7.68 Tf 4.609 0 TD (variable)Tj /F4 7.68 Tf 36.871 0 TD ( = )Tj /F5 7.68 Tf 14.003 0 TD (init)Tj /F4 7.68 Tf 18.435 0 TD (;)Tj ET BT 347.408 432.97 TD (my $)Tj /F5 7.68 Tf 18.435 0 TD (variable)Tj /F4 7.68 Tf 37.006 0 TD ( = )Tj /F5 7.68 Tf 13.827 0 TD (init)Tj /F4 7.68 Tf 18.574 0 TD (;)Tj ET 80.882 440.65 0.48 0.48 re f 81.362 440.65 100.082 0.48 re f 181.444 440.65 0.48 0.48 re f 181.924 440.65 160.084 0.48 re f 342.008 440.65 0.48 0.48 re f 342.488 440.65 159.844 0.48 re f 502.332 440.65 0.48 0.48 re f 80.882 425.29 0.48 15.36 re f 181.444 425.29 0.48 15.36 re f 342.008 425.29 0.48 15.36 re f 502.332 425.29 0.48 15.36 re f BT /F3 9.12 Tf 86.522 418.33 TD (Class definition)Tj ET BT /F4 7.68 Tf 187.084 417.13 TD (class )Tj /F5 7.68 Tf 27.653 0 TD (className)Tj ET BT /F4 7.68 Tf 187.084 407.529 TD ({)Tj /F5 7.68 Tf 4.609 0 TD ( specification )Tj /F4 7.68 Tf 69.133 0 TD (};)Tj ET BT 347.408 417.13 TD (package )Tj /F5 7.68 Tf 36.871 0 TD (className)Tj /F4 7.68 Tf 41.611 0 TD (;)Tj ET BT /F5 7.68 Tf 347.408 407.529 TD (specification)Tj ET 80.882 424.81 0.48 0.48 re f 81.362 424.81 100.082 0.48 re f 181.444 424.81 0.48 0.48 re f 181.924 424.81 160.084 0.48 re f 342.008 424.81 0.48 0.48 re f 342.488 424.81 159.844 0.48 re f 502.332 424.81 0.48 0.48 re f 80.882 399.849 0.48 24.961 re f 181.444 399.849 0.48 24.961 re f 342.008 399.849 0.48 24.961 re f 502.332 399.849 0.48 24.961 re f BT /F3 9.12 Tf 86.522 392.889 TD (Class derivation)Tj ET BT /F4 7.68 Tf 187.084 391.689 TD (class )Tj /F5 7.68 Tf 27.653 0 TD (subclassName)Tj ET BT /F4 7.68 Tf 198.605 382.089 TD (:)Tj /F5 7.68 Tf 4.609 0 TD ( superclassName\(s\))Tj ET BT /F4 7.68 Tf 187.084 372.489 TD ({)Tj /F5 7.68 Tf 4.609 0 TD ( specification )Tj /F4 7.68 Tf 69.133 0 TD (};)Tj ET BT 347.408 391.689 TD (package )Tj /F5 7.68 Tf 36.871 0 TD (subclassName)Tj /F4 7.68 Tf 55.306 0 TD (;)Tj ET BT 347.408 382.089 TD (@ISA = qw\( )Tj /F5 7.68 Tf 50.697 0 TD (superclassName\(s\))Tj /F4 7.68 Tf 78.186 0 TD ( \);)Tj ET BT /F5 7.68 Tf 347.408 372.489 TD (specification)Tj ET 80.882 399.369 0.48 0.48 re f 81.362 399.369 100.082 0.48 re f 181.444 399.369 0.48 0.48 re f 181.924 399.369 160.084 0.48 re f 342.008 399.369 0.48 0.48 re f 342.488 399.369 159.844 0.48 re f 502.332 399.369 0.48 0.48 re f 80.882 364.808 0.48 34.561 re f 181.444 364.808 0.48 34.561 re f 342.008 364.808 0.48 34.561 re f 502.332 364.808 0.48 34.561 re f BT /F3 9.12 Tf 86.522 357.848 TD (Attribute)Tj ET BT 86.522 348.728 TD (specification)Tj ET BT /F4 7.68 Tf 187.084 356.648 TD (class )Tj /F5 7.68 Tf 27.653 0 TD (className)Tj ET BT /F4 7.68 Tf 187.084 347.048 TD ({)Tj ET BT /F5 7.68 Tf 198.605 337.448 TD (type)Tj /F4 7.68 Tf 18.435 0 TD ( )Tj /F5 7.68 Tf 4.609 0 TD (memberName)Tj /F4 7.68 Tf 46.089 0 TD (;)Tj ET BT 187.084 327.848 TD (};)Tj ET BT 347.408 356.648 TD (bless)Tj ET BT 358.928 347.048 TD ({ )Tj /F5 7.68 Tf 9.218 0 TD (memberName)Tj /F4 7.68 Tf 46.089 0 TD (=>)Tj /F5 7.68 Tf 9.015 0 TD (type)Tj /F4 7.68 Tf 18.435 0 TD (->new\(\) }, )Tj ET BT /F5 7.68 Tf 358.928 337.448 TD (className)Tj /F4 7.68 Tf 41.48 0 TD (;)Tj ET 80.882 364.328 0.48 0.48 re f 81.362 364.328 100.082 0.48 re f 181.444 364.328 0.48 0.48 re f 181.924 364.328 160.084 0.48 re f 342.008 364.328 0.48 0.48 re f 342.488 364.328 159.844 0.48 re f 502.332 364.328 0.48 0.48 re f 80.882 320.167 0.48 44.161 re f 181.444 320.167 0.48 44.161 re f 342.008 320.167 0.48 44.161 re f 502.332 320.167 0.48 44.161 re f BT /F3 9.12 Tf 86.522 313.207 TD (Class attribute)Tj ET BT 86.522 304.087 TD (specification)Tj ET BT /F4 7.68 Tf 187.084 312.007 TD (class )Tj /F5 7.68 Tf 27.653 0 TD (className)Tj ET BT /F4 7.68 Tf 187.084 302.407 TD ({)Tj ET BT 198.605 292.807 TD (static )Tj /F5 7.68 Tf 32.262 0 TD (type)Tj /F4 7.68 Tf 18.435 0 TD ( )Tj /F5 7.68 Tf 4.609 0 TD (memberName)Tj /F4 7.68 Tf 46.089 0 TD (;)Tj ET BT 187.084 283.206 TD (};)Tj ET BT /F5 7.68 Tf 187.084 273.606 TD (type)Tj /F4 7.68 Tf 18.435 0 TD ( )Tj /F5 7.68 Tf 4.609 0 TD (className)Tj /F4 7.68 Tf 41.48 0 TD (::)Tj /F5 7.68 Tf 9.218 0 TD (memberName)Tj ET BT /F4 7.68 Tf 198.605 264.006 TD (=)Tj /F5 7.68 Tf 4.609 0 TD (ini 2000 t)Tj /F4 7.68 Tf 18.435 0 TD (;)Tj ET BT 347.408 312.007 TD (package )Tj /F5 7.68 Tf 36.871 0 TD (className)Tj /F4 7.68 Tf 41.611 0 TD (;)Tj ET BT 347.408 302.407 TD ({)Tj ET BT 358.928 292.807 TD (my $)Tj /F5 7.68 Tf 18.435 0 TD (var)Tj /F4 7.68 Tf 13.965 0 TD ( = )Tj /F5 7.68 Tf 13.827 0 TD (type)Tj /F4 7.68 Tf 18.574 0 TD (->new\()Tj /F5 7.68 Tf 27.653 0 TD (init)Tj /F4 7.68 Tf 18.435 0 TD (\);)Tj ET BT 358.928 283.206 TD (sub )Tj /F5 7.68 Tf 18.435 0 TD (fieldName)Tj ET BT /F4 7.68 Tf 358.928 273.606 TD ({ $)Tj /F5 7.68 Tf 13.827 0 TD (var)Tj /F4 7.68 Tf 14.014 0 TD ( = $_[1] if @_>1; $)Tj /F5 7.68 Tf 87.568 0 TD (var)Tj /F4 7.68 Tf 13.954 0 TD (})Tj ET BT 347.408 264.006 TD (})Tj ET 80.882 319.687 0.48 0.48 re f 81.362 319.687 100.082 0.48 re f 181.444 319.687 0.48 0.48 re f 181.924 319.687 160.084 0.48 re f 342.008 319.687 0.48 0.48 re f 342.488 319.687 159.844 0.48 re f 502.332 319.687 0.48 0.48 re f 80.882 256.326 0.48 63.361 re f 181.444 256.326 0.48 63.361 re f 342.008 256.326 0.48 63.361 re f 502.332 256.326 0.48 63.361 re f BT /F3 9.12 Tf 86.522 249.366 TD (Object instantiation)Tj ET BT /F5 7.68 Tf 187.084 248.166 TD (ptr)Tj /F4 7.68 Tf 13.827 0 TD ( = new )Tj /F5 7.68 Tf 32.262 0 TD (className)Tj /F4 7.68 Tf 41.48 0 TD ( \()Tj /F5 7.68 Tf 9.218 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\);)Tj ET BT 347.408 248.166 TD ($)Tj /F5 7.68 Tf 4.609 0 TD (ref)Tj /F4 7.68 Tf 13.827 0 TD ( = )Tj /F5 7.68 Tf 13.965 0 TD (className)Tj /F4 7.68 Tf 41.48 0 TD (->new\()Tj /F5 7.68 Tf 27.653 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\);)Tj ET 80.882 255.846 0.48 0.48 re f 81.362 255.846 100.082 0.48 re f 181.444 255.846 0.48 0.48 re f 181.924 255.846 160.084 0.48 re f 342.008 255.846 0.48 0.48 re f 342.488 255.846 159.844 0.48 re f 502.332 255.846 0.48 0.48 re f 80.882 240.486 0.48 15.36 re f 80.882 240.005 0.48 0.48 re f 80.882 240.005 0.48 0.48 re f 81.362 240.005 100.082 0.48 re f 181.444 240.486 0.48 15.36 re f 181.444 240.005 0.48 0.48 re f 181.924 240.005 160.084 0.48 re f 342.008 240.486 0.48 15.36 re f 342.008 240.005 0.48 0.48 re f 342.488 240.005 159.844 0.48 re f 502.332 240.486 0.48 15.36 re f 502.332 240.005 0.48 0.48 re f 502.332 240.005 0.48 0.48 re f BT /F1 7.68 Tf 171.724 228.485 TD (Table 2: Selected comparative syntax for C++ and object-oriented Perl)Tj ET endstream endobj 210 0 obj 10574 endobj 211 0 obj << /Type /Page /Parent 208 0 R /Resources << /Font << /F1 7 0 R /F3 11 0 R /F4 20 0 R /F5 25 0 R >> /ProcSet 2 0 R >> /Contents 212 0 R >> endobj 212 0 obj << /Length 213 0 R >> stream 0.24 w BT /F1 7.68 Tf 272.046 117.843 TD 0 Tc 0 Tw (Page 56)Tj ET BT /F1 10.08 Tf 109.083 761.537 TD (Construct)Tj ET BT 252.366 761.537 TD (C++)Tj ET BT 413.169 761.537 TD (Perl)Tj ET 80.882 772.338 0.48 0.48 re f 80.882 772.338 0.48 0.48 re f 81.362 772.338 100.082 0.48 re f 181.444 772.338 0.48 0.48 re f 181.924 772.338 160.084 0.48 re f 342.008 772.338 0.48 0.48 re f 342.488 772.338 159.844 0.48 re f 502.332 772.338 0.48 0.48 re f 502.332 772.338 0.48 0.48 re f 80.882 758.897 0.48 13.44 re f 181.444 758.897 0.48 13.44 re f 342.008 758.897 0.48 13.44 re f 502.332 758.897 0.48 13.44 re f BT /F3 9.12 Tf 86.522 751.937 TD (Method definition)Tj ET BT /F4 7.68 Tf 187.084 750.737 TD (class )Tj /F5 7.68 Tf 27.653 0 TD (className)Tj ET BT /F4 7.68 Tf 187.084 741.137 TD ({)Tj ET BT /F5 7.68 Tf 198.605 731.537 TD (returnType)Tj /F4 7.68 Tf 46.089 0 TD ( )Tj /F5 7.68 Tf 4.609 0 TD (methodName)Tj /F4 7.68 Tf 46.089 0 TD (\()Tj /F5 7.68 Tf 4.609 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\))Tj ET BT 198.605 721.937 TD ({)Tj ET BT /F5 7.68 Tf 210.125 712.336 TD (statements)Tj ET BT /F4 7.68 Tf 210.125 702.736 TD (return )Tj /F5 7.68 Tf 32.262 0 TD (returnValue)Tj /F4 7.68 Tf 50.54 0 TD (;)Tj ET BT 198.605 693.136 TD (})Tj ET BT 187.084 683.536 TD (})Tj ET BT 347.408 750.737 TD (package )Tj /F5 7.68 Tf 36.871 0 TD (className)Tj /F4 7.68 Tf 41.611 0 TD (;)Tj ET BT 347.408 731.537 TD (sub )Tj /F5 7.68 Tf 18.435 0 TD (methodName)Tj ET BT /F4 7.68 Tf 347.408 721.937 TD ({)Tj ET BT 358.928 712.336 TD (my @)Tj /F5 7.68 Tf 18.435 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD ( = @_;)Tj ET BT /F5 7.68 Tf 358.928 702.736 TD (statements;)Tj ET BT /F4 7.68 Tf 358.928 693.136 TD (return )Tj /F5 7.68 Tf 32.262 0 TD (returnValue)Tj /F4 7.68 Tf 50.54 0 TD (;)Tj ET BT 347.408 683.536 TD (})Tj ET 80.882 758.417 0.48 0.48 re f 81.362 758.417 100.082 0.48 re f 181.444 758.417 0.48 0.48 re f 181.924 758.417 160.084 0.48 re f 342.008 758.417 0.48 0.48 re f 342.488 758.417 159.844 0.48 re f 502.332 758.417 0.48 0.48 re f 80.882 675.855 0.48 82.562 re f 181.444 675.855 0.48 82.562 re f 342.008 675.855 0.48 82.562 re f 502.332 675.855 0.48 82.562 re f BT /F3 9.12 Tf 86.522 668.895 TD (Polymorphic method)Tj ET BT 86.522 659.775 TD (definition)Tj ET BT /F5 7.68 Tf 187.084 667.695 TD (virtual returnType)Tj ET BT 187.084 658.095 TD (methodName)Tj /F4 7.68 Tf 46.089 0 TD (\()Tj /F5 7.68 Tf 4.609 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\))Tj ET BT 187.084 648.495 TD ({)Tj ET BT /F5 7.68 Tf 198.605 638.895 TD (statements)Tj ET BT /F4 7.68 Tf 198.605 629.294 TD (return )Tj /F5 7.68 Tf 32.262 0 TD (returnValue)Tj /F4 7.68 Tf 50.54 0 TD (;)Tj ET BT 187.084 619.694 TD (})Tj ET BT 347.408 667.695 TD (sub )Tj /F5 7.68 Tf 18.435 0 TD (methodName)Tj ET BT /F4 7.68 Tf 347.408 658.095 TD ({)Tj ET BT 358.928 648.495 TD (my @)Tj /F5 7.68 Tf 18.435 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD ( = @_;)Tj ET BT /F5 7.68 Tf 358.928 638.895 TD (statements;)Tj ET BT /F4 7.68 Tf 358.928 629.294 TD (return )Tj /F5 7.68 Tf 32.262 0 TD (returnValue)Tj /F4 7.68 Tf 50.54 0 TD (;)Tj ET BT 347.408 619.694 TD (})Tj ET 80.882 675.375 0.48 0.48 re f 81.362 675.375 100.082 0.48 re f 181.444 675.375 0.48 0.48 re f 181.924 675.375 160.084 0.48 re f 342.008 675.375 0.48 0.48 re f 342.488 675.375 159.844 0.48 re f 502.332 675.375 0.48 0.48 re f 80.882 612.014 0.48 63.361 re f 181.444 612.014 0.48 63.361 re f 342.008 612.014 0.48 63.361 re f 502.332 612.014 0.48 63.361 re f BT /F3 9.12 Tf 86.522 605.054 TD (Abstract method)Tj ET BT 86.522 595.934 TD (definition)Tj ET BT /F5 7.68 Tf 187.084 603.854 TD (virtual returnType)Tj /F4 7.68 Tf 82.959 0 TD ( )Tj /F5 7.68 Tf 4.609 0 TD (methodName)Tj /F4 7.68 Tf 46.089 0 TD (\(\))Tj ET BT 210.125 594.254 TD (= 0;)Tj ET BT 347.408 603.854 TD (sub )Tj /F5 7.68 Tf 18.435 0 TD (methodName)Tj ET BT /F4 7.68 Tf 358.928 594.254 TD ({ die "Abstract method" })Tj ET 80.882 611.534 0.48 0.48 re f 81.362 611.534 100.082 0.48 re f 181.444 611.534 0.48 0.48 re f 181.924 611.534 160.084 0.48 re f 342.008 611.534 0.48 0.48 re f 342.488 611.534 159.844 0.48 re f 502.332 611.534 0.48 0.48 re f 80.882 586.573 0.48 24.961 re f 181.444 586.573 0.48 24.961 re f 342.008 586.573 0.48 24.961 re f 502.332 586.573 0.48 24.961 re f q 81.362 576.973 100.082 9.6 re W n BT /F3 9.12 Tf 86.522 579.613 TD (Constructor definition)Tj ET Q BT /F5 7.68 Tf 187.084 578.413 TD (className)Tj /F4 7.68 Tf 41.48 0 TD (\()Tj /F5 7.68 Tf 4.609 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\))Tj ET BT 187.084 568.813 TD ({)Tj ET BT /F5 7.68 Tf 198.605 559.213 TD (statements)Tj ET BT /F4 7.68 Tf 187.084 549.613 TD (})Tj ET BT 347.408 578.413 TD (sub new)Tj ET BT 347.408 568.813 TD ({)Tj ET BT 358.928 559.213 TD (my \($classname,@args\) = @_;)Tj ET BT 358.928 549.613 TD (my $self =)Tj ET BT 370.448 540.012 TD (bless {}, $classname;)Tj ET BT /F5 7.68 Tf 358.928 530.412 TD (statements)Tj /F4 7.68 Tf 46.089 0 TD (;)Tj ET BT 358.928 520.812 TD (return $self;)Tj ET BT 347.408 511.212 TD (})Tj ET 80.882 586.093 0.48 0.48 re f 81.362 586.093 100.082 0.48 re f 181.444 586.093 0.48 0.48 re f 181.924 586.093 160.084 0.48 re f 342.008 586.093 0.48 0.48 re f 342.488 586.093 159.844 0.48 re f 502.332 586.093 0.48 0.48 re f 80.882 503.532 0.48 82.562 re f 181.444 503.532 0.48 82.562 re f 342.008 503.532 0.48 82.562 re f 502.332 503.532 0.48 82.562 re f BT /F3 9.12 Tf 86.522 496.571 TD (Destructor definition)Tj ET BT /F4 7.68 Tf 187.084 495.371 TD (~)Tj /F5 7.68 Tf 4.609 0 TD (className)Tj /F4 7.68 Tf 41.48 0 TD (\(\))Tj ET BT 187.084 485.771 TD ({)Tj ET BT /F5 7.68 Tf 198. 2000 605 476.171 TD (statements)Tj ET BT /F4 7.68 Tf 187.084 466.571 TD (})Tj ET BT 347.408 495.371 TD (sub DESTROY)Tj ET BT 347.408 485.771 TD ({)Tj ET BT /F5 7.68 Tf 358.928 476.171 TD (statements)Tj ET BT /F4 7.68 Tf 347.408 466.571 TD (})Tj ET 80.882 503.052 0.48 0.48 re f 81.362 503.052 100.082 0.48 re f 181.444 503.052 0.48 0.48 re f 181.924 503.052 160.084 0.48 re f 342.008 503.052 0.48 0.48 re f 342.488 503.052 159.844 0.48 re f 502.332 503.052 0.48 0.48 re f 80.882 458.891 0.48 44.161 re f 181.444 458.891 0.48 44.161 re f 342.008 458.891 0.48 44.161 re f 502.332 458.891 0.48 44.161 re f BT /F3 9.12 Tf 86.522 451.93 TD (Method invocation)Tj ET BT /F5 7.68 Tf 187.084 450.73 TD (objref.methodName)Tj /F4 7.68 Tf 78.351 0 TD (\()Tj /F5 7.68 Tf 4.451 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\);)Tj ET BT /F5 7.68 Tf 187.084 441.13 TD (objptr)Tj /F4 7.68 Tf 27.653 0 TD (->)Tj /F5 7.68 Tf 9.068 0 TD (methodName)Tj /F4 7.68 Tf 46.089 0 TD (\()Tj /F5 7.68 Tf 4.609 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\);)Tj ET BT 347.408 450.73 TD ($)Tj /F5 7.68 Tf 4.609 0 TD (objref)Tj /F4 7.68 Tf 27.653 0 TD (->)Tj /F5 7.68 Tf 9.068 0 TD (methodName)Tj /F4 7.68 Tf 46.089 0 TD (\()Tj /F5 7.68 Tf 4.609 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\);)Tj ET 80.882 458.41 0.48 0.48 re f 81.362 458.41 100.082 0.48 re f 181.444 458.41 0.48 0.48 re f 181.924 458.41 160.084 0.48 re f 342.008 458.41 0.48 0.48 re f 342.488 458.41 159.844 0.48 re f 502.332 458.41 0.48 0.48 re f 80.882 433.45 0.48 24.961 re f 181.444 433.45 0.48 24.961 re f 342.008 433.45 0.48 24.961 re f 502.332 433.45 0.48 24.961 re f BT /F3 9.12 Tf 86.522 426.49 TD (Indirect method)Tj ET BT 86.522 417.37 TD (invocation)Tj ET BT /F5 7.68 Tf 187.084 425.29 TD (retType )Tj /F4 7.68 Tf 36.871 0 TD (\()Tj /F5 7.68 Tf 4.609 0 TD (class)Tj /F4 7.68 Tf 23.044 0 TD (::*)Tj /F5 7.68 Tf 13.958 0 TD (methptr)Tj /F4 7.68 Tf 32.262 0 TD (\)\()Tj /F5 7.68 Tf 9.019 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\))Tj ET BT 198.605 415.69 TD (= )Tj /F5 7.68 Tf 9.218 0 TD (class)Tj /F4 7.68 Tf 23.044 0 TD (::)Tj /F5 7.68 Tf 9.019 0 TD (methodName)Tj /F4 7.68 Tf 46.089 0 TD (;)Tj ET BT /F5 7.68 Tf 187.084 400.329 TD (objref)Tj /F4 7.68 Tf 27.653 0 TD (.*methptr\()Tj /F5 7.68 Tf 46.089 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\);)Tj ET BT /F5 7.68 Tf 187.084 390.729 TD (objptr)Tj /F4 7.68 Tf 27.653 0 TD (->*)Tj /F5 7.68 Tf 13.628 0 TD (methptr)Tj /F4 7.68 Tf 32.262 0 TD (\()Tj /F5 7.68 Tf 4.459 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\);)Tj ET BT 347.408 425.29 TD ($)Tj /F5 7.68 Tf 4.609 0 TD (methref)Tj /F4 7.68 Tf 32.112 0 TD ( = \\&)Tj /F5 7.68 Tf 23.044 0 TD (class)Tj /F4 7.68 Tf 23.044 0 TD (::)Tj /F5 7.68 Tf 9.218 0 TD (methodName)Tj /F4 7.68 Tf 46.089 0 TD (;)Tj ET BT 347.408 415.69 TD ($)Tj /F5 7.68 Tf 4.609 0 TD (methsymref)Tj /F4 7.68 Tf 46.089 0 TD ( = ")Tj /F5 7.68 Tf 18.435 0 TD (methodName")Tj /F4 7.68 Tf 50.697 0 TD (;)Tj ET BT 347.408 400.329 TD ($)Tj /F5 7.68 Tf 4.609 0 TD (ref)Tj /F4 7.68 Tf 13.827 0 TD (->$)Tj /F5 7.68 Tf 13.827 0 TD (methref)Tj /F4 7.68 Tf 32.059 0 TD (\()Tj /F5 7.68 Tf 4.609 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\);)Tj ET BT 347.408 390.729 TD ($)Tj /F5 7.68 Tf 4.609 0 TD (ref)Tj /F4 7.68 Tf 13.827 0 TD (->$)Tj /F5 7.68 Tf 13.827 0 TD (methsymref)Tj /F4 7.68 Tf 46.089 0 TD (\()Tj /F5 7.68 Tf 4.451 0 TD (args)Tj /F4 7.68 Tf 18.435 0 TD (\);)Tj ET 80.882 432.97 0.48 0.48 re f 81.362 432.97 100.082 0.48 re f 181.444 432.97 0.48 0.48 re f 181.924 432.97 160.084 0.48 re f 342.008 432.97 0.48 0.48 re f 342.488 432.97 159.844 0.48 re f 502.332 432.97 0.48 0.48 re f 80.882 383.049 0.48 49.921 re f 181.444 383.049 0.48 49.921 re f 342.008 383.049 0.48 49.921 re f 502.332 383.049 0.48 49.921 re f BT /F3 9.12 Tf 86.522 376.089 TD (Class method)Tj ET BT 86.522 366.968 TD (invocation)Tj ET BT /F5 7.68 Tf 187.084 374.889 TD (className)Tj /F4 7.68 Tf 41.48 0 TD (::)Tj /F5 7.68 Tf 9.218 0 TD (methodName)Tj /F4 7.68 Tf 46.089 0 TD (\(\);)Tj ET BT /F5 7.68 Tf 347.408 374.889 TD (className)Tj /F4 7.68 Tf 41.48 0 TD (->)Tj /F5 7.68 Tf 9.218 0 TD (methodName)Tj /F4 7.68 Tf 46.089 0 TD (\(\);)Tj ET 80.882 382.569 0.48 0.48 re f 81.362 382.569 100.082 0.48 re f 181.444 382.569 0.48 0.48 re f 181.924 382.569 160.084 0.48 re f 342.008 382.569 0.48 0.48 re f 342.488 382.569 159.844 0.48 re f 502.332 382.569 0.48 0.48 re f 80.882 364.328 0.48 18.24 re f 181.444 364.328 0.48 18.24 re f 342.008 364.328 0.48 18.24 re f 502.332 364.328 0.48 18.24 re f BT /F3 9.12 Tf 86.522 357.368 TD (Access to message)Tj ET BT 86.522 348.248 TD (target)Tj ET BT /F4 7.68 Tf 187.084 356.168 TD (this)Tj ET BT 347.408 356.168 TD (my \($self\) = @_)Tj ET 80.882 363.848 0.48 0.48 re f 81.362 363.848 100.082 0.48 re f 181.444 363.848 0.48 0.48 re f 181.924 363.848 160.084 0.48 re f 342.008 363.848 0.48 0.48 re f 342.488 363.848 159.844 0.48 re f 502.332 363.848 0.48 0.48 re f 80.882 345.608 0.48 18.24 re f 181.444 345.608 0.48 18.24 re f 342.008 345.608 0.48 18.24 re f 502.332 345.608 0.48 18.24 re f BT /F3 9.12 Tf 86.522 338.648 TD (Access to superclass)Tj ET BT 86.522 329.528 TD (method)Tj ET BT /F5 7.68 Tf 187.084 337.448 TD (this)Tj /F4 7.68 Tf 18.435 0 TD (->)Tj /F5 7.68 Tf 9.218 0 TD (superclass)Tj /F4 7.68 Tf 46.089 0 TD (::)Tj /F5 7.68 Tf 9.06 0 TD (methodName)Tj /F4 7.68 Tf 46.089 0 TD (\(\);)Tj ET BT 347.408 337.448 TD ($self->)Tj /F5 7.68 Tf 32.262 0 TD (SUPER)Tj /F4 7.68 Tf 23.044 0 TD (::)Tj /F5 7.68 Tf 9.015 0 TD (methodName)Tj /F4 7.68 Tf 46.089 0 TD (\(\);)Tj ET 80.882 345.128 0.48 0.48 re f 81.362 345.128 100.082 0.48 re f 181.444 345.128 0.48 0.48 re f 181.924 345.128 160.084 0.48 re f 342.008 345.128 0.48 0.48 re f 342.488 345.128 159.844 0.48 re f 502.332 345.128 0.48 0.48 re f 80.882 326.887 0.48 18.24 re f 181.444 326.887 0.48 18.24 re f 342.008 326.887 0.48 18.24 re f 502.332 326.887 0.48 18.24 re f BT /F3 9.12 Tf 86.522 319.927 TD (Class type)Tj ET BT 86.522 310.807 TD (identification)Tj ET BT /F4 7.68 Tf 187.084 318.727 TD (classDescriptor =)Tj ET BT 198.605 309.127 TD (typeid\()Tj /F5 7.68 Tf 32.262 0 TD (object)Tj /F4 7.68 Tf 27.499 0 TD (\);)Tj ET BT 347.408 318.727 TD ($className)Tj ET BT 358.928 309.127 TD (= ref\($)Tj /F5 7.68 Tf 32.262 0 TD (object)Tj /F4 7.68 Tf 27.499 0 TD (\);)Tj ET 80.882 326.407 0.48 0.48 re f 81.362 326.407 100.082 0.48 re f 181.444 326.407 0.48 0.48 re f 181.924 326.407 160.084 0.48 re f 342.008 326.407 0.48 0.48 re f 342.488 326.407 159.844 0.48 re f 502.332 326.407 0.48 0.48 re f 80.882 301.447 0.48 24.961 re f 181.444 301.447 0.48 24.961 re f 342.008 301.447 0.48 24.961 re f 502.332 301.447 0.48 24.961 re f BT /F3 9.12 Tf 86.522 294.487 TD (Exception handlers)Tj ET BT /F4 7.68 Tf 187.084 293.287 TD (try { )Tj /F5 7.68 Tf 27.653 0 TD (statements)Tj /F4 7.68 Tf 46.089 0 TD ( })Tj ET BT 187.084 283.686 TD (catch { )Tj /F5 7.68 Tf 36.871 0 TD (handler)Tj /F4 7.68 Tf 32.262 0 TD ( })Tj ET BT 347.408 293.287 TD (unless \(eval { )Tj /F5 7.68 Tf 69.133 0 TD (statements)Tj /F4 7.68 Tf 46.089 0 TD (; 1 }\))Tj ET BT 358.928 283.686 TD ({ )Tj /F5 7.68 Tf 9.218 0 TD (handler)Tj /F4 7.68 Tf 32.063 0 TD ( })Tj ET 80.882 300.967 0.48 0.48 re f 81.362 300.967 100.082 0.48 re f 181.444 300.967 0.48 0.48 re f 181.924 300.967 160.084 0.48 re f 342.008 300.967 0.48 0.48 re f 342.488 300.967 159.844 0.48 re f 502.332 300.967 0.48 0.48 re f 80.882 276.006 0.48 24.961 re f 181.444 276.006 0.48 24.961 re f 342.008 276.006 0.48 24.961 re f 502.332 276.006 0.48 24.961 re f BT /F3 9.12 Tf 86.522 269.046 TD (Raising an exception)Tj ET BT /F4 7.68 Tf 187.084 267.846 TD (throw )Tj /F5 7.68 Tf 27.653 0 TD (exceptionType\(args\))Tj /F4 7.68 Tf 87.568 0 TD (;)Tj ET BT 347.408 267.846 TD (die ")Tj /F5 7.68 Tf 23.044 0 TD (exceptionText)Tj /F4 7.68 Tf 59.915 0 TD (";)Tj ET 80.882 275.526 0.48 0.48 re f 81.362 275.526 100.082 0.48 re f 181.444 275.526 0.48 0.48 re f 181.924 275.526 160.084 0.48 re f 342.008 275.526 0.48 0.48 re f 342.488 275.526 159.844 0.48 re f 502.332 275.526 0.48 0.48 re f 80.882 260.166 0.48 15.36 re f 80.882 259.686 0.48 0.48 re f 80.882 259.686 0.48 0.48 re f 81.362 259.686 100.082 0.48 re f 181.444 260.166 0 1707 .48 15.36 re f 181.444 259.686 0.48 0.48 re f 181.924 259.686 160.084 0.48 re f 342.008 260.166 0.48 15.36 re f 342.008 259.686 0.48 0.48 re f 342.488 259.686 159.844 0.48 re f 502.332 260.166 0.48 15.36 re f 502.332 259.686 0.48 0.48 re f 502.332 259.686 0.48 0.48 re f BT /F1 7.68 Tf 150.603 248.166 TD (Table 2: Selected comparative syntax for C++ and object-oriented Perl \(continued\))Tj ET endstream endobj 213 0 obj 14208 endobj 214 0 obj << /Kids [ 5 0 R 33 0 R 53 0 R 85 0 R 107 0 R 127 0 R ] /Count 36 /Type /Pages /Parent 216 0 R >> endobj 215 0 obj << /Kids [ 147 0 R 167 0 R 188 0 R 208 0 R ] /Count 20 /Type /Pages /Parent 216 0 R >> endobj 216 0 obj << /Kids [ 214 0 R 215 0 R ] /Count 56 /Type /Pages /MediaBox [ 0 0 595 842 ] >> endobj 217 0 obj [ /CalGray << /WhitePoint [ 0.9496 1 1.40581 ] /Gamma 1.79691 >> ] endobj 218 0 obj [ /CalRGB << /WhitePoint [ 0.9496 1 1.40581 ] /Gamma [ 1.79691 1.79691 1.79691 ] /Matrix [ 0.381 0.2072 0.02119 0.32021 0.6805 0.1429 0.24831 0.112 1.2417 ] >> ] endobj 219 0 obj << /Type /Annot /Subtype /Link /Rect [ 84.27753 731.30713 232.07767 745.77267 ] /A 221 0 R /Border [ 0 0 0 ] /H /I >> endobj 220 0 obj [ 219 0 R ] endobj 221 0 obj << /S /URI /URI (http://www.manning.com/Conway/) >> endobj xref 0 222 0000000000 65535 f 0000000016 00000 n 0000000246 00000 n 0000000286 00000 n 0000000384 00000 n 0000000546 00000 n 0000000662 00000 n 0000000941 00000 n 0000002166 00000 n 0000002447 00000 n 0000003672 00000 n 0000003952 00000 n 0000005177 00000 n 0000009670 00000 n 0000009692 00000 n 0000009838 00000 n 0000015894 00000 n 0000015916 00000 n 0000016073 00000 n 0000022363 00000 n 0000022385 00000 n 0000022502 00000 n 0000022671 00000 n 0000028497 00000 n 0000028519 00000 n 0000028800 00000 n 0000030021 00000 n 0000030178 00000 n 0000037706 00000 n 0000037728 00000 n 0000037885 00000 n 0000127363 00000 n 0000127386 00000 n 0000127544 00000 n 0000127662 00000 n 0000280775 00000 n 0000280799 00000 n 0000280957 00000 n 0000287622 00000 n 0000287644 00000 n 0000287802 00000 n 0000293857 00000 n 0000293879 00000 n 0000294037 00000 n 0000299131 00000 n 0000299153 00000 n 0000299323 00000 n 0000299445 00000 n 0000304363 00000 n 0000304385 00000 n 0000304544 00000 n 0000308903 00000 n 0000308925 00000 n 0000309042 00000 n 0000309160 00000 n 0000314494 00000 n 0000314516 00000 n 0000314845 00000 n 0000316070 00000 n 0000316164 00000 n 0000316281 00000 n 0000329218 00000 n 0000329241 00000 n 0000329520 00000 n 0000330749 00000 n 0000330843 00000 n 0000330960 00000 n 0000335306 00000 n 0000335328 00000 n 0000335614 00000 n 0000336839 00000 n 0000337161 00000 n 0000338383 00000 n 0000338490 00000 n 0000338607 00000 n 0000344135 00000 n 0000344157 00000 n 0000344263 00000 n 0000344380 00000 n 0000349507 00000 n 0000349529 00000 n 0000349623 00000 n 0000349793 00000 n 0000358697 00000 n 0000358719 00000 n 0000358836 00000 n 0000358955 00000 n 0000364044 00000 n 0000364066 00000 n 0000364160 00000 n 0000364277 00000 n 0000370118 00000 n 0000370140 00000 n 0000370234 00000 n 0000370392 00000 n 0000375381 00000 n 0000375403 00000 n 0000375561 00000 n 0000382668 00000 n 0000382690 00000 n 0000382809 00000 n 0000387187 00000 n 0000387210 00000 n 0000387317 00000 n 0000387477 00000 n 0000393768 00000 n 0000393791 00000 n 0000393912 00000 n 0000394037 00000 n 0000398494 00000 n 0000398517 00000 n 0000398624 00000 n 0000398785 00000 n 0000404645 00000 n 0000404668 00000 n 0000404841 00000 n 0000409843 00000 n 0000409866 00000 n 0000410039 00000 n 0000496260 00000 n 0000496284 00000 n 0000496445 00000 n 0000502186 00000 n 0000502209 00000 n 0000502382 00000 n 0000507786 00000 n 0000507809 00000 n 0000507970 00000 n 0000508095 00000 n 0000512898 00000 n 0000512921 00000 n 0000513094 00000 n 0000518497 00000 n 0000518520 00000 n 0000518693 00000 n 0000524215 00000 n 0000524238 00000 n 0000524412 00000 n 0000533123 00000 n 0000533146 00000 n 0000533308 00000 n 0000537689 00000 n 0000537712 00000 n 0000537833 00000 n 0000541209 00000 n 0000541232 00000 n 0000541327 00000 n 0000541488 00000 n 0000541613 00000 n 0000546986 00000 n 0000547009 00000 n 0000547170 00000 n 0000551730 00000 n 0000551753 00000 n 0000551903 00000 n 0000556945 00000 n 0000556968 00000 n 0000557130 00000 n 0000564083 00000 n 0000564106 00000 n 0000564227 00000 n 0000569914 00000 n 0000569937 00000 n 0000570032 00000 n 0000570194 00000 n 0000593986 00000 n 0000594010 00000 n 0000594171 00000 n 0000594296 00000 n 0000599368 00000 n 0000599391 00000 n 0000599552 00000 n 0000604743 00000 n 0000604766 00000 n 0000604939 00000 n 0000609222 00000 n 0000609245 00000 n 0000609418 00000 n 0000615505 00000 n 0000615528 00000 n 0000615649 00000 n 0000620003 00000 n 0000620026 00000 n 0000620123 00000 n 0000620244 00000 n 0000625556 00000 n 0000625579 00000 n 0000625687 00000 n 0000625838 00000 n 0000625963 00000 n 0000633265 00000 n 0000633288 00000 n 0000633439 00000 n 0000639834 00000 n 0000639857 00000 n 0000639978 00000 n 0000644906 00000 n 0000644929 00000 n 0000645025 00000 n 0000645186 00000 n 0000650843 00000 n 0000650866 00000 n 0000651039 00000 n 0000657998 00000 n 0000658021 00000 n 0000658182 00000 n 0000663177 00000 n 0000663200 00000 n 0000663373 00000 n 0000663466 00000 n 0000674098 00000 n 0000674122 00000 n 0000674284 00000 n 0000688550 00000 n 0000688574 00000 n 0000688695 00000 n 0000688805 00000 n 0000688909 00000 n 0000688995 00000 n 0000689178 00000 n 0000689321 00000 n 0000689352 00000 n trailer << /Size 222 /Info 1 0 R /Root 3 0 R /ID[<241be493487825ca6abdb2a7e9c14e6c>] >> startxref 689424 %%EOF 0