go.talks: add "Towards Go 1.3" talk
LGTM=dvyukov, r
R=dvyukov, r, josharian, nightlyone, nj
CC=golang-codereviews, golang-dev
https://golang.org/cl/58590043
diff --git a/2014/go1.3.slide b/2014/go1.3.slide
new file mode 100644
index 0000000..21c5720
--- /dev/null
+++ b/2014/go1.3.slide
@@ -0,0 +1,323 @@
+Toward Go 1.3
+(and beyond)
+
+Andrew Gerrand
+Gopher
+@enneff
+http://golang.org
+
+
+* Go 1.3
+
+Code freeze is March 1, 2014.
+
+Release is June 1, 2014.
+
+(Six months after Go 1.2, released December 1, 2013.)
+
+
+* A to-do list
+
+After Go 1.2 the Go contributors compiled a to-do list:
+
+.link http://golang.org/s/go13todo
+
+The list is aspirational; not all of it will get done.
+
+This talk is based on that list.
+
+
+* 100% precise GC
+
+Finally!
+
+
+* Copying stacks (1/2)
+
+.link http://golang.org/s/contigstacks
+
+Go 1.2's stack split mechanism has a "hot split" problem.
+
+Copying (or "contiguous") stacks are grown by reallocation and copying.
+Resolves the "hot split" problem.
+Makes smaller initial stacks practical - more goroutines in the same space.
+
+* Copying stacks (2/2)
+
+.image go1.3/json.png
+
+
+* Dmitry's bag of performance tricks
+
+Runtime changes:
+
+- increase page size to 8K (~10% GC less pause time)
+- do not collect GC roots explicitly (~6% GC less pause time)
+- prefetch next block in mallocgc (~2% less CPU)
+- smarter slice grow (2-20% less CPU)
+- combine small NoScan allocations (10% faster json benchmark)
+- do not zero terminate strings (1% fewer allocs json benchmark)
+- remove locks from netpoll hotpaths (~5% faster TCP)
+- allocate goroutine ids in batches (8-66% faster goroutine creation)
+- use lock-free ring for work queues (5-40% faster goroutine scheduling)
+- per-P defer pool (memory savings for programs with many goroutines)
+
+And many more to come...
+
+
+* Channel rewrite
+
+.link http://golang.org/s/go13chan
+
+Goals:
+
+- make single-threaded (non-contended) channel operations faster
+- make contended buffered (producer/consumer) channel operations faster
+- make non-blocking failing operations (e.g. checking of "stop" channel) faster
+- make chan semaphores (chan struct{}) faster
+- make select statements faster
+
+Non-goals:
+
+- make channels completely lock-free (this would significantly complicate implementation and make it slower for common cases)
+- make contended synchronous channel operations faster
+
+
+* sync.Pool (1/2)
+
+Many Go libraries include custom thread-safe free lists, like this:
+
+ var objPool = make(chan *Object, 10)
+
+ func obj() *Object {
+ select {
+ case p := <-objPool:
+ return p
+ default:
+ }
+ return NewObject()
+ }
+
+ func objPut(p *Object) {
+ select {
+ case objPool <- p:
+ default:
+ }
+ }
+
+ p := obj()
+ // use p
+ objPut(p)
+
+* sync.Pool (2/2)
+
+The `sync.Pool` type provides a general thread-safe global free list.
+
+It allows the runtime to reclaim entries when appropriate
+(for example, during garbage collection).
+
+ var objPool = sync.Pool{
+ New: func() interface{} {
+ return NewObject()
+ },
+ }
+
+ p := objPool.Get().(*Object)
+ // use p
+ objPool.Put(p)
+
+This is an experimental type and might not be released.
+
+
+* Native Client port
+
+.link http://golang.org/s/go13nacl
+
+Native Client (NaCl) is a restricted execution environment for x86 binaries.
+
+Notably used to run compiled binaries inside Google Chrome.
+NaCl also provides a tool for executing command-line binaries
+
+Go 1.3 targets that command-line tool for 32-bit and 64-bit x86 architectures.
+(NaCl supports 32-bit ARM, but we have no plans to support it.)
+
+The [[http://play.golang.org][Go Playground]] uses the NaCl tool chain to safely execute untrusted programs.
+
+The NaCl tool chain includes the fake time, network, and file system capabilities of the playground.
+
+
+* OS ports
+
+Solaris: work in progress, on track for Go 1.3.
+
+DragonflyBSD: work is done, looking for a maintainer.
+
+Plan 9: still not finished.
+
+darwin/arm, android/arm: a contributor is working on these, some way to go.
+
+
+* The go command and fsnotify
+
+.link http://golang.org/s/go13fsnotify
+
+In Go 1.2, `go` `build` stats every dependent source file to see whether they have changed.
+
+This is a big chunk of total build time.
+
+The proposed "go background" command starts a daemon that watches source files for changes.
+
+When building, the `go` commands can ask the daemon which files have changed.
+
+A new `os/fsnotify` package will be added to the standard library to support the `go` command.
+
+A proposed interface is discussed here:
+
+.link http://golang.org/cl/48310043
+
+
+* Support for linking against Objective C code
+
+The Go 1.2 tool chain can link against C++ code using `cgo` (but you need to write a small C bridge into the C++ code).
+
+The same can be done for Objective C code, with some modifications to the go tool.
+
+This will make it easier to write native OS X applications.
+
+
+* Address binary bloat
+
+.link http://golang.org/issue/6853
+
+Go binaries are getting pretty big. Rob ran an experiment:
+
+ As an experiment, I built "hello, world" at the release points for go 1.0. 1.1, and 1.2.
+ Here are the binary's sizes:
+
+ % ls -l x.1.?
+ -rwxr-xr-x 1 r staff 1191952 Nov 30 10:25 x.1.0
+ -rwxr-xr-x 1 r staff 1525936 Nov 30 10:20 x.1.1
+ -rwxr-xr-x 1 r staff 2188576 Nov 30 10:18 x.1.2
+
+Go binaries contain several sets of debugging symbols (for gdb, profilers, reflection, etc).
+
+We intend to rationalize these as part of some work on the linker.
+Speaking of which...
+
+
+* Linker overhaul (1/3)
+
+.link http://golang.org/s/go13linker
+
+The `gc` tool chain is a bit unconventional.
+
+The compilers don't emit machine code but an intermediate assembly language.
+
+The linker translates it into machine code.
+
+The packages can be compiled in parallel by independent runs of the compiler,
+but the linking must be done by a single linker process after compilation is complete.
+
+The `gc` linker has become a bottleneck in building programs
+because it does more work than a typical linker.
+
+* Linker overhaul (2/3)
+
+The Go 1.2 linker's job can be split into two parts:
+
+- translate an input stream of pseudo-instructions into executable code, data blocks, and a list of relocations,
+- delete dead code, merge what's left, resolve relocations, and generate a few whole-program data structures.
+
+.image go1.3/liblink1.png
+
+* Linker overhaul (3/3)
+
+In Go 1.3, much of the old linker is moved to a `liblink` library that is then used by assemblers and compilers (`6a`, `6c`, `6g`, etc). This allows more work to be done in parallel.
+
+.image go1.3/liblink2.png
+
+And because the linker is much simpler now, we can rewrite it in Go.
+
+
+* Compiler overhaul
+
+.link http://golang.org/s/go13compiler
+
+The "gc" tool chain is based on the Plan 9 C compilers.
+
+The assemblers, C compilers, and linkers were lifted wholesale.
+
+The Go compilers are new C programs that fit into that tool chain.
+
+Wouldn't it be nice to have a Go compiler written in Go?
+
+* Compiler overhaul: why C then?
+
+Many benefits to writing the compiler in C:
+
+- Go did not exist
+- Once Go did exist, it changed often
+
+Today, Go does exist and is stable as of Go 1.
+These benefits not as relevant now.
+
+* Compiler overhaul: why Go now?
+
+The benefits of a Go-based compiler:
+
+- Go code is easier to write and debug
+- Go has better support for modularity, automated rewriting, unit testing, and profiling
+- Go programmers are more likely to work on a compiler written in Go
+- Go code is easier to parallelize
+- Go is more fun!
+
+* Compiler overhaul: the plan
+
+Not a rewrite.
+
+Translate the C compilers to Go.
+
+Write and use an automatic translator to do this.
+
+Start the process with Go 1.3 and continue in future releases.
+
+* Compiler overhaul: five phases
+
+- Develop and debug the translator.
+- Translate the C to Go and delete the C code.
+- Clean up and document the code, add unit tests. (Target Go 1.4)
+- Profile and optimize the compiler and split it into packages.
+- Replace the front end with `go/parser` and `go/types`. (Maybe with new versions of those packages.)
+
+* Compiler overhaul: bootstrapping
+
+Must have a way to build the compiler from scratch.
+
+Our plan is that the Go 1.3 compiler must compile using Go 1.2, and Go 1.4 must compile with Go 1.3, and so on.
+
+Write a shell script to do this automatically. Bootstrap once per machine.
+
+This scales poorly over time, so we might write a back end for the compiler that generates C code, and keep the C version of the compiler sources checked in.
+
+* Compiler overhaul: alternatives
+
+Write new compilers from scratch?
+
+- The existing compilers are well-tested and handle many subtle cases well; would be foolish to throw away 10 man-years of effort.
+
+Translate the compiler manually?
+
+- Translation is tedious and error-prone, mistakes are subtle and hard to find. Can continue to work on existing compilers while writing the translator.
+
+Translate just the back ends and connect to `go/parser` and `go/types` immediately?
+
+- The existing APIs are very different; too much work to undertake at once.
+
+Discard the current compilers and use gccgo (or `go/parser` and `go/types` and LLVM)?
+
+- The current compilers are a large part of our flexibility. Tying Go to large C/C++ projects like GCC or LLVM hurts that flexibility.
+
+
+* Lots of small things
+
+As with previous releases, we'll see a long tail of small fixes and changes.
diff --git a/2014/go1.3/json.png b/2014/go1.3/json.png
new file mode 100644
index 0000000..ab542e1
--- /dev/null
+++ b/2014/go1.3/json.png
Binary files differ
diff --git a/2014/go1.3/liblink.graffle b/2014/go1.3/liblink.graffle
new file mode 100644
index 0000000..d193382
--- /dev/null
+++ b/2014/go1.3/liblink.graffle
@@ -0,0 +1,1268 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>ActiveLayerIndex</key>
+ <integer>0</integer>
+ <key>ApplicationVersion</key>
+ <array>
+ <string>com.omnigroup.OmniGraffle6</string>
+ <string>156.2.0.196174</string>
+ </array>
+ <key>AutoAdjust</key>
+ <true/>
+ <key>BackgroundGraphic</key>
+ <dict>
+ <key>Bounds</key>
+ <string>{{0, 0}, {576, 733}}</string>
+ <key>Class</key>
+ <string>SolidGraphic</string>
+ <key>ID</key>
+ <integer>2</integer>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>BaseZoom</key>
+ <integer>0</integer>
+ <key>CanvasOrigin</key>
+ <string>{0, 0}</string>
+ <key>ColumnAlign</key>
+ <integer>1</integer>
+ <key>ColumnSpacing</key>
+ <real>36</real>
+ <key>CreationDate</key>
+ <string>2014-01-30 08:33:48 +0000</string>
+ <key>Creator</key>
+ <string>Andrew Gerrand</string>
+ <key>DisplayScale</key>
+ <string>1 in = 1 in</string>
+ <key>GraphDocumentVersion</key>
+ <integer>11</integer>
+ <key>GraphicsList</key>
+ <array>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>62</integer>
+ </dict>
+ <key>ID</key>
+ <integer>67</integer>
+ <key>Points</key>
+ <array>
+ <string>{373.75, 417.03887110316862}</string>
+ <string>{416, 417.03887110316862}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>64</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>64</integer>
+ </dict>
+ <key>ID</key>
+ <integer>66</integer>
+ <key>Points</key>
+ <array>
+ <string>{255.6875, 417.03886858470719}</string>
+ <string>{289.75, 417.03886858470719}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>46</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{296.75, 401.95199012756348}, {70, 64.751556396484375}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>65</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Delete dead code, link binary}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{290.25, 361.53887748718262}, {83, 111}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>64</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict/>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Linker\
+(6l, 8l, etc)}</string>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{416, 403.03887939453125}, {60, 28}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>62</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Pad</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Executable\
+binary}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>60</integer>
+ </dict>
+ <key>ID</key>
+ <integer>61</integer>
+ <key>Points</key>
+ <array>
+ <string>{451.49999999999966, 108.99990395818676}</string>
+ <string>{484, 108.99986518354167}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>28</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{484, 95}, {60, 28}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>60</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Pad</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Executable\
+binary}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>58</integer>
+ </dict>
+ <key>ID</key>
+ <integer>59</integer>
+ <key>Points</key>
+ <array>
+ <string>{331.75000961041695, 157.75155258178711}</string>
+ <string>{331.75000961041695, 193}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.088643</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.838867</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>Legacy</key>
+ <true/>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>38</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{233.75, 193}, {196, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0.00579522</string>
+ <key>r</key>
+ <string>0.491593</string>
+ </dict>
+ </dict>
+ <key>ID</key>
+ <integer>58</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Pad</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red125\green1\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf2 To be extracted as the "liblink" library}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{80.875, 511.23331069946312}, {51.5, 28}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.0128754</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.546174</string>
+ </dict>
+ </dict>
+ <key>ID</key>
+ <integer>55</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.088643</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.838867</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red139\green0\blue3;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf2 liblink}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{80.875, 420.32775878906273}, {51.5, 28}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.0128754</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.546174</string>
+ </dict>
+ </dict>
+ <key>ID</key>
+ <integer>54</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.088643</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.838867</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red139\green0\blue3;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf2 liblink}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{80.875, 330.42222595214866}, {51.5, 28}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.0128754</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.546174</string>
+ </dict>
+ </dict>
+ <key>ID</key>
+ <integer>53</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.088643</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0.838867</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red139\green0\blue3;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf2 liblink}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>46</integer>
+ </dict>
+ <key>ID</key>
+ <integer>49</integer>
+ <key>Points</key>
+ <array>
+ <string>{145.39051649876458, 477.29317686027639}</string>
+ <string>{194.484839127947, 438.03887939453148}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>45</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>46</integer>
+ </dict>
+ <key>ID</key>
+ <integer>48</integer>
+ <key>Points</key>
+ <array>
+ <string>{145.49999978479559, 417.07494773054538}</string>
+ <string>{185.6875, 417.11223380821349}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>44</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>46</integer>
+ </dict>
+ <key>ID</key>
+ <integer>47</integer>
+ <key>Points</key>
+ <array>
+ <string>{145.39034728595772, 356.81889972495077}</string>
+ <string>{194.38730511726388, 396.03887939453148}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>43</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{185.6875, 396.03887939453148}, {70, 42}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>46</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Pad</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Intermediate\
+binary\
+object format}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{68.25, 470.4999924553764}, {76.75, 75.57777777777784}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>45</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict/>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Assembler\
+(6a, 8a, etc)}</string>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{68.25, 379.24999050564259}, {76.75, 75.57777777777784}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>44</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict/>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 C compiler\
+(6c, 8c, etc)}</string>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{68.25, 288}, {76.75, 75.57777777777784}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>43</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict/>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Go compiler\
+(6g, 8g, etc)}</string>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{296.75, 92.499996185302734}, {70, 64.751556396484375}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0.00579522</string>
+ <key>r</key>
+ <string>0.491593</string>
+ </dict>
+ </dict>
+ <key>ID</key>
+ <integer>38</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0.0937715</string>
+ <key>r</key>
+ <string>0.799423</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red125\green1\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf2 Generate machine code}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{375.25, 92.499996185302734}, {70, 64.751556396484375}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>37</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Delete dead code, link binary}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>28</integer>
+ </dict>
+ <key>ID</key>
+ <integer>36</integer>
+ <key>Points</key>
+ <array>
+ <string>{253, 108.97154672022278}</string>
+ <string>{290.50000013401478, 108.94106106320966}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>32</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>32</integer>
+ </dict>
+ <key>ID</key>
+ <integer>35</integer>
+ <key>Points</key>
+ <array>
+ <string>{136.83462814836014, 160.73111971569412}</string>
+ <string>{185.01468248965995, 130}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>31</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>32</integer>
+ </dict>
+ <key>ID</key>
+ <integer>34</integer>
+ <key>Points</key>
+ <array>
+ <string>{145.49999986651093, 108.97159313228745}</string>
+ <string>{183, 108.94419100890042}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>30</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>32</integer>
+ </dict>
+ <key>ID</key>
+ <integer>33</integer>
+ <key>Points</key>
+ <array>
+ <string>{136.86818770762332, 57.268665975045344}</string>
+ <string>{185.10263759772207, 88}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>Legacy</key>
+ <true/>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>29</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{183, 88}, {70, 42}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>32</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Pad</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Intermediate\
+assembly\
+object format}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{68.25, 161}, {76.75, 38}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>31</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Assembler\
+(6a, 8a, etc)}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{68.25, 90}, {76.75, 38}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>30</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 C compiler\
+(6c, 8c, etc)}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{68.25, 19}, {76.75, 38}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>29</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Go compiler\
+(6g, 8g, etc)}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{291, 53.5}, {160, 111}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>28</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict/>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf0 Linker\
+(6l, 8l, etc)}</string>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ </array>
+ <key>GridInfo</key>
+ <dict/>
+ <key>GuidesLocked</key>
+ <string>NO</string>
+ <key>GuidesVisible</key>
+ <string>YES</string>
+ <key>HPages</key>
+ <integer>1</integer>
+ <key>ImageCounter</key>
+ <integer>1</integer>
+ <key>KeepToScale</key>
+ <false/>
+ <key>Layers</key>
+ <array>
+ <dict>
+ <key>Lock</key>
+ <string>NO</string>
+ <key>Name</key>
+ <string>Layer 1</string>
+ <key>Print</key>
+ <string>YES</string>
+ <key>View</key>
+ <string>YES</string>
+ </dict>
+ </array>
+ <key>LayoutInfo</key>
+ <dict>
+ <key>Animate</key>
+ <string>NO</string>
+ <key>circoMinDist</key>
+ <real>18</real>
+ <key>circoSeparation</key>
+ <real>0.0</real>
+ <key>layoutEngine</key>
+ <string>dot</string>
+ <key>neatoLineLength</key>
+ <real>0.20000000298023224</real>
+ <key>neatoSeparation</key>
+ <real>0.0</real>
+ <key>twopiSeparation</key>
+ <real>0.0</real>
+ </dict>
+ <key>LinksVisible</key>
+ <string>NO</string>
+ <key>MagnetsVisible</key>
+ <string>NO</string>
+ <key>MasterSheets</key>
+ <array/>
+ <key>ModificationDate</key>
+ <string>2014-01-30 09:04:24 +0000</string>
+ <key>Modifier</key>
+ <string>Andrew Gerrand</string>
+ <key>NotesVisible</key>
+ <string>NO</string>
+ <key>Orientation</key>
+ <integer>2</integer>
+ <key>OriginVisible</key>
+ <string>NO</string>
+ <key>PageBreaks</key>
+ <string>YES</string>
+ <key>PrintInfo</key>
+ <dict>
+ <key>NSBottomMargin</key>
+ <array>
+ <string>float</string>
+ <string>41</string>
+ </array>
+ <key>NSHorizonalPagination</key>
+ <array>
+ <string>coded</string>
+ <string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG</string>
+ </array>
+ <key>NSLeftMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ <key>NSPaperSize</key>
+ <array>
+ <string>size</string>
+ <string>{612, 792}</string>
+ </array>
+ <key>NSPrintReverseOrientation</key>
+ <array>
+ <string>coded</string>
+ <string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG</string>
+ </array>
+ <key>NSRightMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ <key>NSTopMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ </dict>
+ <key>PrintOnePage</key>
+ <false/>
+ <key>ReadOnly</key>
+ <string>NO</string>
+ <key>RowAlign</key>
+ <integer>1</integer>
+ <key>RowSpacing</key>
+ <real>36</real>
+ <key>SheetTitle</key>
+ <string>Canvas 1</string>
+ <key>SmartAlignmentGuidesActive</key>
+ <string>YES</string>
+ <key>SmartDistanceGuidesActive</key>
+ <string>YES</string>
+ <key>UniqueID</key>
+ <integer>1</integer>
+ <key>UseEntirePage</key>
+ <false/>
+ <key>VPages</key>
+ <integer>1</integer>
+ <key>WindowInfo</key>
+ <dict>
+ <key>BottomSlabHeight</key>
+ <real>398</real>
+ <key>CurrentSheet</key>
+ <integer>0</integer>
+ <key>Expanded_Canvases</key>
+ <array/>
+ <key>Frame</key>
+ <string>{{122, 4}, {1121, 742}}</string>
+ <key>ShowInfo</key>
+ <true/>
+ <key>ShowRuler</key>
+ <true/>
+ <key>Sidebar</key>
+ <true/>
+ <key>SidebarWidth</key>
+ <integer>230</integer>
+ <key>VisibleRegion</key>
+ <string>{{0, 0}, {574, 600}}</string>
+ <key>Zoom</key>
+ <real>1</real>
+ <key>ZoomValues</key>
+ <array>
+ <array>
+ <string>Canvas 1</string>
+ <real>1</real>
+ <real>1</real>
+ </array>
+ </array>
+ </dict>
+</dict>
+</plist>
diff --git a/2014/go1.3/liblink1.png b/2014/go1.3/liblink1.png
new file mode 100644
index 0000000..fd62cdb
--- /dev/null
+++ b/2014/go1.3/liblink1.png
Binary files differ
diff --git a/2014/go1.3/liblink2.png b/2014/go1.3/liblink2.png
new file mode 100644
index 0000000..614861c
--- /dev/null
+++ b/2014/go1.3/liblink2.png
Binary files differ