]> git.lizzy.rs Git - micro.git/commitdiff
Open at line syntax with filename:line:col
authorZachary Yedidia <zyedidia@gmail.com>
Fri, 2 Feb 2018 18:57:02 +0000 (13:57 -0500)
committerZachary Yedidia <zyedidia@gmail.com>
Fri, 2 Feb 2018 18:57:30 +0000 (13:57 -0500)
Ref #1010
Ref #887
Ref #836

cmd/micro/buffer.go
cmd/micro/command.go
cmd/micro/micro.go
cmd/micro/runtime.go
cmd/micro/util.go
cmd/micro/view.go
runtime/help/plugins.md

index f3f92d7629d5c36cb336eca8d99e83d8d2efe3cd..5a0eb99563c9aed5f191a29f8e8599a46039a58b 100644 (file)
@@ -74,6 +74,33 @@ type SerializedBuffer struct {
        ModTime      time.Time
 }
 
+// NewBufferFromFile opens a new buffer using the given filepath
+// It will also automatically handle `~`, and line/column with filename:l:c
+// It will return an empty buffer if the filepath does not exist
+// and an error if the file is a directory
+func NewBufferFromFile(path string) (*Buffer, error) {
+       filename := GetPath(path)
+       filename = ReplaceHome(filename)
+       file, err := os.Open(filename)
+       fileInfo, _ := os.Stat(filename)
+
+       if err == nil && fileInfo.IsDir() {
+               return nil, errors.New(filename + " is a directory")
+       }
+
+       defer file.Close()
+
+       var buf *Buffer
+       if err != nil {
+               // File does not exist -- create an empty buffer with that name
+               buf = NewBufferFromString("", path)
+       } else {
+               buf = NewBuffer(file, FSize(file), path)
+       }
+
+       return buf, nil
+}
+
 // NewBufferFromString creates a new buffer containing the given
 // string
 func NewBufferFromString(text, path string) *Buffer {
@@ -82,6 +109,26 @@ func NewBufferFromString(text, path string) *Buffer {
 
 // NewBuffer creates a new buffer from a given reader with a given path
 func NewBuffer(reader io.Reader, size int64, path string) *Buffer {
+       startpos := Loc{0, 0}
+       startposErr := true
+       if strings.Contains(path, ":") {
+               var err error
+               split := strings.Split(path, ":")
+               path = split[0]
+               startpos.Y, err = strconv.Atoi(split[1])
+               if err != nil {
+                       messenger.Error("Error opening file: ", err)
+               } else {
+                       startposErr = false
+                       if len(split) > 2 {
+                               startpos.X, err = strconv.Atoi(split[2])
+                               if err != nil {
+                                       messenger.Error("Error opening file: ", err)
+                               }
+                       }
+               }
+       }
+
        if path != "" {
                for _, tab := range tabs {
                        for _, view := range tab.views {
@@ -129,11 +176,18 @@ func NewBuffer(reader io.Reader, size int64, path string) *Buffer {
        cursorStartX := 0
        cursorStartY := 0
        // If -startpos LINE,COL was passed, use start position LINE,COL
-       if len(*flagStartPos) > 0 {
+       if len(*flagStartPos) > 0 || !startposErr {
                positions := strings.Split(*flagStartPos, ",")
-               if len(positions) == 2 {
-                       lineNum, errPos1 := strconv.Atoi(positions[0])
-                       colNum, errPos2 := strconv.Atoi(positions[1])
+               if len(positions) == 2 || !startposErr {
+                       var lineNum, colNum int
+                       var errPos1, errPos2 error
+                       if !startposErr {
+                               lineNum = startpos.Y
+                               colNum = startpos.X
+                       } else {
+                               lineNum, errPos1 = strconv.Atoi(positions[0])
+                               colNum, errPos2 = strconv.Atoi(positions[1])
+                       }
                        if errPos1 == nil && errPos2 == nil {
                                cursorStartX = colNum
                                cursorStartY = lineNum - 1
@@ -162,7 +216,7 @@ func NewBuffer(reader io.Reader, size int64, path string) *Buffer {
 
        InitLocalSettings(b)
 
-       if len(*flagStartPos) == 0 && (b.Settings["savecursor"].(bool) || b.Settings["saveundo"].(bool)) {
+       if startposErr && len(*flagStartPos) == 0 && (b.Settings["savecursor"].(bool) || b.Settings["saveundo"].(bool)) {
                // If either savecursor or saveundo is turned on, we need to load the serialized information
                // from ~/.config/micro/buffers
                file, err := os.Open(configDir + "/buffers/" + EscapePath(b.AbsPath))
index ebb7936551d82353829d5c5fdbed19fe892d9510..3af89416a2ebabad93468a914a01dc2bba186125 100644 (file)
@@ -390,24 +390,10 @@ func VSplit(args []string) {
        if len(args) == 0 {
                CurView().VSplit(NewBufferFromString("", ""))
        } else {
-               filename := args[0]
-               filename = ReplaceHome(filename)
-               file, err := os.Open(filename)
-               fileInfo, _ := os.Stat(filename)
-
-               if err == nil && fileInfo.IsDir() {
-                       messenger.Error(filename, " is a directory")
-                       return
-               }
-
-               defer file.Close()
-
-               var buf *Buffer
+               buf, err := NewBufferFromFile(args[0])
                if err != nil {
-                       // File does not exist -- create an empty buffer with that name
-                       buf = NewBufferFromString("", filename)
-               } else {
-                       buf = NewBuffer(file, FSize(file), filename)
+                       messenger.Error(err)
+                       return
                }
                CurView().VSplit(buf)
        }
@@ -419,24 +405,10 @@ func HSplit(args []string) {
        if len(args) == 0 {
                CurView().HSplit(NewBufferFromString("", ""))
        } else {
-               filename := args[0]
-               filename = ReplaceHome(filename)
-               file, err := os.Open(filename)
-               fileInfo, _ := os.Stat(filename)
-
-               if err == nil && fileInfo.IsDir() {
-                       messenger.Error(filename, " is a directory")
-                       return
-               }
-
-               defer file.Close()
-
-               var buf *Buffer
+               buf, err := NewBufferFromFile(args[0])
                if err != nil {
-                       // File does not exist -- create an empty buffer with that name
-                       buf = NewBufferFromString("", filename)
-               } else {
-                       buf = NewBuffer(file, FSize(file), filename)
+                       messenger.Error(err)
+                       return
                }
                CurView().HSplit(buf)
        }
@@ -459,23 +431,10 @@ func NewTab(args []string) {
        if len(args) == 0 {
                CurView().AddTab(true)
        } else {
-               filename := args[0]
-               filename = ReplaceHome(filename)
-               file, err := os.Open(filename)
-               fileInfo, _ := os.Stat(filename)
-
-               if err == nil && fileInfo.IsDir() {
-                       messenger.Error(filename, " is a directory")
-                       return
-               }
-
-               defer file.Close()
-
-               var buf *Buffer
+               buf, err := NewBufferFromFile(args[0])
                if err != nil {
-                       buf = NewBufferFromString("", filename)
-               } else {
-                       buf = NewBuffer(file, FSize(file), filename)
+                       messenger.Error(err)
+                       return
                }
 
                tab := NewTabFromView(NewView(buf))
index e835bab8f1fd19eb237a3a542928e756850267dd..cf7dfea551472f9cca4cefe0d33bfa0ddb613efc 100644 (file)
@@ -95,30 +95,13 @@ func LoadInput() []*Buffer {
                // Option 1
                // We go through each file and load it
                for i := 0; i < len(args); i++ {
-                       filename = args[i]
-
-                       // Check that the file exists
-                       var input *os.File
-                       if _, e := os.Stat(filename); e == nil {
-                               // If it exists we load it into a buffer
-                               input, err = os.Open(filename)
-                               stat, _ := input.Stat()
-                               defer input.Close()
-                               if err != nil {
-                                       TermMessage(err)
-                                       continue
-                               }
-                               if stat.IsDir() {
-                                       TermMessage("Cannot read", filename, "because it is a directory")
-                                       continue
-                               }
+                       buf, err := NewBufferFromFile(args[i])
+                       if err != nil {
+                               TermMessage(err)
+                               continue
                        }
                        // If the file didn't exist, input will be empty, and we'll open an empty buffer
-                       if input != nil {
-                               buffers = append(buffers, NewBuffer(input, FSize(input), filename))
-                       } else {
-                               buffers = append(buffers, NewBufferFromString("", filename))
-                       }
+                       buffers = append(buffers, buf)
                }
        } else if !isatty.IsTerminal(os.Stdin.Fd()) {
                // Option 2
@@ -423,6 +406,7 @@ func main() {
        L.SetGlobal("GetLeadingWhitespace", luar.New(L, GetLeadingWhitespace))
        L.SetGlobal("MakeCompletion", luar.New(L, MakeCompletion))
        L.SetGlobal("NewBuffer", luar.New(L, NewBufferFromString))
+       L.SetGlobal("NewBufferFromFile", luar.New(L, NewBufferFromFile))
        L.SetGlobal("RuneStr", luar.New(L, func(r rune) string {
                return string(r)
        }))
index 982723788bbae349a95d0684b65e717ff3d9edf9..36f02d79baa46b568a91d877073043b8fdfe9ae2 100644 (file)
@@ -1008,7 +1008,7 @@ func runtimeHelpOptionsMd() (*asset, error) {
        return a, nil
 }
 
-var _runtimeHelpPluginsMd = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x7a\x6d\x8f\xdc\x36\x92\xf0\x77\xfd\x8a\x7a\x3a\x78\xe0\xee\xa0\xad\xc9\xe2\xbe\x0d\xe0\x05\xfc\x16\xc7\x7b\x8e\x6d\x78\x9c\x04\x8b\x20\x80\xd8\x52\xa9\x9b\x19\x8a\x54\x48\x6a\x7a\xfa\x8c\xec\x6f\x3f\x54\x15\x49\xa9\x7b\x26\xd9\xdc\x01\x17\x20\x1e\xb5\x44\xd6\x1b\xeb\xbd\xf8\x15\x7c\x34\xd3\x5e\xdb\x50\x55\xdf\xeb\xd6\x3b\x08\xd3\x38\x3a\x1f\x03\xb4\x1e\x55\xd4\x76\x0f\xa3\x2c\x80\xa3\x8e\x07\x50\x10\xf4\x30\x1a\x84\x77\x93\x82\x70\x0a\x11\x87\x1a\x5e\xdf\xa1\x3f\xa5\x75\x70\x50\x01\x54\x35\x28\x6d\x21\xb4\x5e\x8f\x11\x8e\x07\xdd\x1e\x40\x07\xf0\x93\x05\x15\x21\x44\xe5\xe3\x34\xa6\xf7\xe1\xe0\x26\xd3\xc1\x0e\x61\x34\xaa\xc5\x0e\xb4\x85\xaa\xf9\xd7\x55\xdd\x3a\xdb\xeb\xfd\xd5\x40\x64\x5d\x25\x22\xd2\xdf\xf7\x6a\xc0\xc5\x63\x6d\x26\xd5\xd4\x55\xf5\xf9\x80\x1e\x41\xd1\xff\x60\xa7\x61\x87\x1e\x5c\x0f\xad\x32\x66\xa7\xda\x5b\xe8\x27\xdb\x46\xed\x88\x15\xc6\x7c\x72\x13\xb4\xca\x0a\xa7\x48\x78\x4f\x6e\xf2\x99\x8f\xe8\x2a\xa2\xb7\x75\x1d\x12\xd1\x51\x0f\x18\xc0\xc5\x03\x7a\x88\x07\x65\x33\x17\x35\x7c\x3e\x20\x58\x35\x90\xa8\x42\x7b\xc0\x01\x89\xd5\xc6\xd9\xe7\x8c\x6c\x7d\xa7\xf1\xb8\x69\x6a\xf8\xd6\xf9\x0a\xef\x15\x0b\x4f\x15\x5a\xce\x85\x83\x2c\x48\x42\x05\xf1\x80\x30\x05\xf4\x10\xd4\x1d\x06\xfe\xb9\x9b\xfa\x1e\x3d\x1c\x93\xbc\xae\xab\xaa\x69\x1a\x33\xa9\xaa\x00\x73\xf6\x46\xdd\xa1\xa0\xac\x00\x00\xea\xba\xe6\xbf\x1e\xe3\xe4\x2d\xf4\xca\x04\xac\xd0\x76\xb4\x93\xe5\x05\x0d\x2d\x6e\xe0\x4e\x79\xad\x76\x86\x69\x57\xe0\xb1\x47\x8f\xb6\x45\x88\x8e\x51\xd3\x22\x7e\x50\x82\x48\x07\xd8\x21\x71\x8c\xf7\xd8\x4e\x11\x3b\x70\xb6\xae\x3e\x1f\x74\x60\x00\x66\x70\x21\x82\x32\x47\x75\x12\xd2\xdb\xc9\x7b\xb4\x91\xe1\x6c\x2f\xc4\xbf\xc7\x28\xba\xd5\xbc\x9c\xfc\x8f\x1a\x8f\xeb\x4d\x03\x2a\x54\x47\x34\xa6\xae\xaa\xe7\xc6\x80\xba\x53\xda\x30\x79\x2a\x9d\x20\x1d\xb2\xd1\x21\x8a\xbe\x10\x8a\x5b\x3c\xed\xb4\xed\xb4\xdd\x07\x08\x98\xe4\xd1\xf3\xa7\x03\x9a\xb1\xae\xaa\x6f\x9d\x2f\xca\x10\x88\xb3\xc1\x4d\xa1\x80\xdc\x32\x41\xac\x3c\x26\x38\xd8\xeb\x3b\x14\xc0\x78\x47\x94\x6b\xdb\xbb\x47\x25\xfe\x3d\x01\xf9\xe8\x31\x84\xb5\x70\xc7\xeb\x45\xfc\xc6\xb5\xca\xc0\xfd\x16\x4e\xf0\x4c\xde\x5f\x7f\x74\x41\xb3\x5e\x6c\xaa\x3f\x3f\x99\x80\x0b\x85\x4d\x46\xc2\x94\xa5\x1d\x0a\x76\xce\x19\x24\x4d\x1c\xb1\xd5\xfd\x89\x8e\xe3\x78\xc0\xa4\xa1\xe9\xcc\x64\x63\xb5\x43\xf0\x48\xd4\x90\xc0\xd2\x99\xb6\x93\x0f\xce\x83\xf3\x60\x5d\x04\xd5\xc7\xb4\x6f\x3e\xe2\xd6\x91\xb6\x46\xac\xab\xea\xbd\x8b\xa4\x93\x64\x08\x4c\xda\x2c\x47\xd7\xb6\x93\x7f\xb8\x9d\xdc\xc0\x0e\xd1\x16\x20\x5d\x0d\x6f\x7b\x96\xf1\x51\xd9\x58\xa9\xd9\x2e\x77\xd8\x3b\x8f\x17\xb8\xb3\x62\x6d\xc9\x0a\xa0\x19\x3d\x26\x7b\x22\x5b\x7a\x4b\x27\x43\x04\xaa\xc0\xfb\xaa\x2c\x0a\x91\x0d\x76\x49\x26\x1a\x43\x11\x49\xe2\x73\x81\x65\xf6\x3c\x45\x8b\x99\x8d\x8a\xd6\x98\x49\x89\xed\x67\xfa\x03\xe9\xa2\x15\x07\x30\x05\xec\x27\x33\x73\x10\x1d\xdc\x5a\x77\x04\xb5\x73\xd3\xc2\xdf\xb1\x5c\xed\xcc\x54\xd5\x38\x4b\x0a\xfe\x61\xc4\xec\x17\xe6\xc5\x04\x0c\x3b\x22\xd7\x92\x1b\x20\x17\x86\x47\x39\x44\x1d\xc0\x8d\x48\x6c\x29\xdb\x31\x07\x16\x8f\x55\xfe\x34\xaa\x10\xd8\x0c\xc8\x15\x89\x01\x26\xfa\x7a\xe7\x21\x60\x64\x2f\x2e\xaa\xe8\x46\xd1\xa7\x9d\x0a\x6c\xb3\x2c\xbc\x5e\x1b\x8c\xa7\x11\xb7\xbc\x21\xfb\x28\x12\x24\x6d\x74\x7d\x0f\x4d\x54\xbb\x10\x5d\x18\x55\x8b\xa1\x01\x67\xcd\x89\xd7\xbe\x71\x40\x9b\x59\xc8\x0c\xeb\x44\x06\x54\x09\xb1\x75\x55\x3d\x7d\xfa\xf4\x8f\xbc\xf2\xac\xdb\xc4\x53\x76\x3f\x41\x74\x8c\x17\x17\x9b\x8f\x8e\xd5\x46\x5b\x70\xbe\xa3\xe3\x71\xa0\xda\x16\x83\xb8\x16\x6d\x2d\x3b\x45\x7f\xcb\xa6\xef\x7a\xe0\x88\x51\xc3\x77\x84\x96\xdd\x19\x39\x0a\x58\xd3\x62\x62\x13\x82\xde\x5b\x15\x27\x8f\x81\x98\xa8\x16\x94\x78\x4c\x76\x3f\x05\x62\xfd\x8d\x7b\x12\xd2\x16\x8e\x74\x9b\xeb\xaa\xfa\x1a\x9a\x0f\x37\xcd\xf5\xec\x30\xe5\x00\x69\x9b\xd0\xf3\xe1\x46\x08\xe0\x33\x15\xb7\x67\x4e\xe4\xdd\x45\x9a\x96\x08\x91\x53\x22\xd9\x03\x04\x35\x20\xa8\x20\xc8\xde\x7c\xf8\x70\x53\x40\x6f\x21\x38\x68\x3a\xe5\x8f\xda\x36\x5b\x68\x8e\xda\x76\xee\x18\xe8\xd1\x68\x3b\xdd\xd3\x43\xef\x11\x77\xa1\x6b\xea\xba\xde\x30\x71\x12\x35\x5f\x69\xdf\x5c\x43\xeb\x6c\x54\x14\xba\x89\xae\x51\xc5\x43\x36\x7d\x21\x50\x96\x4e\x5e\xb1\x7a\xf2\x41\x32\x08\x3a\xec\xe6\x3a\xcb\xcd\xf5\xa0\x8c\xe1\x6d\xf4\x61\xc1\x93\x26\x39\xa1\x60\x9d\xfc\x67\xb5\x6b\xae\xd3\x89\x74\x78\x9f\x7d\x6f\xf6\xfc\xbc\x37\xb9\x6a\x7e\x26\xe0\xbc\x77\xc0\x10\xd0\xee\x91\x28\x36\x18\x03\x1f\x76\x40\xdb\x01\x7d\x51\x7b\x0c\x99\x6c\x8e\x87\xe4\xc4\x25\x60\x8f\xde\x0d\x63\x14\x9a\xdf\xe3\xf1\x05\x87\xc7\x75\xc4\xfb\xb8\x15\x6e\x43\xf4\xda\xee\x37\xf0\xb5\x7c\x22\x89\xf0\xce\x90\x8c\x2b\x05\xd4\xde\xbb\x01\x94\x9c\x7c\xc5\x2e\x59\x75\xa4\x52\x92\xef\x88\x42\x10\x3c\x46\xf4\x06\xe3\x3b\x54\x14\x66\x7e\x3a\xe8\x88\x6c\x12\xeb\x0d\xfb\xe2\xe6\x3a\xf9\x1f\x11\xb8\x91\x65\xa4\x20\x69\x5d\x96\x49\xc1\x24\x04\x32\xdc\xb7\xe1\x27\xe7\xbb\x97\x07\xe5\xd7\x21\xfa\x42\xfa\x05\xdc\x47\x9c\x99\xac\x14\x45\x7f\x72\x74\xbe\x23\xc0\xed\x41\x79\xd5\x46\xf4\x4f\x18\xf8\xa7\xc9\xe2\x4d\xf4\x6b\x4f\x7a\x88\x9b\xb4\x67\x01\x57\x65\x30\x49\x65\xe8\xb1\x50\xca\x9b\x18\xce\x3b\xd7\xae\x39\x9a\x69\x1b\x37\xf0\xce\xb5\x67\x20\x48\xa4\xb4\xa4\x21\x60\x53\x2b\xa7\xfb\x93\x18\xe6\x2b\xed\xb1\x8d\xce\x9f\xd6\x8f\x62\xf7\xce\x91\xfb\xe5\x53\xb3\x64\x10\x73\x8c\x62\xed\x49\xe6\x4d\xac\x75\x19\x12\x83\xff\x87\xd3\xf6\xa3\x8a\x87\xb0\xee\xb4\xaf\xeb\xba\x08\xae\x20\x69\xdd\xb0\xd3\x16\x03\x0c\x93\x89\x9a\x3c\x5b\x86\xa0\x45\xb3\x28\x19\x33\x86\x40\x97\x43\x2e\xd4\x52\x76\xb9\x5e\xea\xd2\x92\x6a\x63\x60\x37\xc9\x21\x18\x15\x22\xa0\xc1\x81\x88\x75\x3d\x43\xda\x12\xc8\x78\x1a\x35\x79\xf6\x53\xb1\xc1\x27\xe1\x82\x85\x37\x18\x3f\xb0\x5b\x5e\x33\xe7\x0f\x11\x71\x30\x57\x66\x2a\xfa\xe3\xf1\xb7\x09\x39\xf7\x11\x7f\xce\x60\x9e\x77\xdd\x43\x30\xdb\xb4\x51\xdb\x88\xbe\x57\x2d\x7e\xf9\x9d\x20\x07\x32\xb3\xf9\x7c\x05\x8a\x28\xbc\x38\xa5\xf4\x41\x36\xaf\x9b\xc5\xf6\x06\x06\x54\xec\xb5\x4f\xe2\x1a\xb5\x85\x37\x4e\x7c\xcf\x4d\xe1\x44\x20\x66\xec\x33\x4b\x8f\x23\xce\x49\x26\x2d\x96\x20\x46\x24\x1c\xb5\x31\xb4\x81\xbf\xa5\x95\x7b\xe3\x76\x24\xcd\x2d\x4c\xd6\x50\x04\xd0\x31\xb9\x78\x09\x6f\x14\x98\x64\x69\x9d\x29\x7a\x47\x5f\xfe\x84\xac\xad\xc4\xd8\xaf\x7f\xe4\x78\xfc\xc7\x24\xf2\x69\x96\x93\x60\x7c\xe2\x03\xe7\xb5\xe2\x4f\x18\xf1\x0b\x6d\xbb\xff\xc4\xd3\xfa\x16\x4f\xdb\x92\x6f\x14\x31\x50\xa2\x1a\xa0\xb9\xc5\x53\x43\xcc\x37\xb2\xa0\xe1\x9d\xdf\xab\x5b\x7c\xe9\x86\x41\xd9\x8e\x4f\x72\x3b\xd7\x0a\x99\xe0\x94\x92\x70\xcc\xaa\xeb\xfa\x65\xf9\x49\xb0\xd9\xfc\x8b\x9b\x6b\x05\x52\x4a\xb0\x09\x5e\x4e\x39\x58\xbc\xc4\x04\x34\x19\x41\x23\x71\x3c\x67\x43\x35\xfc\x10\x10\xbe\x21\x80\x14\xec\x97\x58\xa3\xe3\xb4\xfd\xbd\x9b\x71\xd7\x4b\xea\xd3\xbb\xf5\x05\xe9\x9b\xe6\xfa\x9c\xbc\x66\x5e\xcb\x92\xa0\x5c\x4f\x48\x5d\x88\x41\xe4\x32\x17\x07\xe7\x96\xb1\x2c\x2d\x78\xe1\x77\xca\x76\xa6\x88\xb0\x1d\xba\xa5\x49\x4d\x76\x79\xb8\x49\x3a\xbc\xed\xf5\x3d\xb6\x4b\xb9\x17\x69\x2b\xbf\x0f\xf0\xf3\x2f\xd9\xb1\xac\xf3\x7b\xf4\xde\x79\x02\x4a\xf2\x02\x05\xeb\x70\x40\x63\x36\xe7\x22\x3f\x33\x27\xe5\xf7\x13\x79\x88\x50\xc3\xa7\x25\x07\xb2\xe1\x49\x00\x37\xc5\x71\x8a\x9c\x11\x29\x18\x5d\x08\x9a\x32\x0c\x46\x54\x67\x47\x7e\x43\x58\x1e\xe1\xee\x11\xc2\x3e\x51\xbd\x0d\x4c\x56\x46\x92\x72\xc4\x29\x60\x38\x63\xb9\x21\x2a\x27\xdb\xa5\x24\xfe\xe0\x5c\xc7\xce\x8d\x2b\x8e\xce\x61\x80\xe0\x06\x72\x60\x9e\x33\x23\xd2\x07\xce\xa4\x33\x47\xb0\xd6\x35\xd6\xf0\xdb\xc4\x7e\xbc\xbc\xde\x70\x79\xcc\x1a\x94\x35\xc1\xff\xaf\x39\x7f\xa1\xda\xdb\xbd\x77\x93\xed\x58\x06\x17\x47\xfb\x08\xb3\xd9\x3a\x77\x65\x63\x81\xf5\x96\x3c\x1a\x99\xdd\x1d\x5e\x02\xdb\xc2\x51\xe9\xc8\x91\x77\x4b\x5a\xfe\x41\x48\xa3\xdf\x7f\x51\xc8\xc4\xef\xee\x04\xad\x71\x2c\x2c\xc9\xb6\x88\x9e\x9c\x05\x2e\x78\x17\xd7\x2c\x94\x98\x13\xd7\x48\x0d\xe1\x6f\x38\x43\xf4\x13\x6e\x49\x20\x9c\xe9\x88\xc9\xee\x58\x9c\x53\xc8\xd5\x8a\x04\x16\xef\x38\x21\xc6\x7b\x1d\xd9\x3a\x47\x2f\x65\x2b\xa7\x5b\xe8\x07\x6d\x95\x91\x44\x47\x0f\x03\x76\x5a\x45\xa4\xac\x14\x73\x96\x4f\xd5\x30\x91\xb9\xa5\xb0\xe6\x8e\x29\xd6\x96\xa4\x2b\xba\xb9\x05\x90\x8e\x2a\xc5\xa2\x84\x59\x08\x2f\xd2\x5a\x50\x7f\x7e\xce\x21\x2a\xdb\x29\xdf\x25\x28\xc5\xcf\x73\x81\x2a\xb5\x5b\x0d\x73\xb1\xa9\xff\x00\x28\x2b\xe3\x42\x72\x19\x43\x80\x41\x9d\x38\x35\xda\xe1\x41\xdd\xb1\xa8\xac\xf3\x03\xfb\xea\x1d\xb6\x8a\x8b\x49\x1d\x54\x8c\xa7\x46\x30\x2f\x0b\xf0\xa2\x1e\x9f\xd1\x0f\xaf\x87\xc9\xa8\xe8\xfc\x5f\x53\x8d\xed\x5c\x0d\x66\x83\x64\x15\x69\xae\xe1\x46\x32\x7c\xa2\xe5\x31\xd5\x6b\x00\xef\x5b\x1c\xe3\xb9\x56\x48\x43\x88\x7c\x48\x52\xe2\xec\xe7\xc2\x68\x28\xe8\x91\xd2\x95\x83\xc5\x44\x2a\x37\x7b\xb8\xab\x93\x89\x69\x40\x5b\x22\x51\x2f\x73\xbc\x45\xd9\xaa\xb8\xd0\xbd\xe8\x46\xe5\x13\x59\x94\xa4\xcb\xb3\x26\x24\xac\x68\xd2\xfb\x7a\x54\x1f\x0a\x8c\xd1\xbb\x3b\xdd\x91\xb2\x8a\xc9\xf7\xda\x07\xb1\x73\x0e\xd6\xd9\x53\x94\x84\x2f\xd1\x46\x38\xd6\xba\xa8\x3c\xe0\x30\xc6\xd3\x23\xea\xc0\xc7\xb6\x61\xbe\x97\x2d\x0a\xfa\x92\x78\x52\x46\xd3\xce\x20\xf8\x52\x7b\x53\x8a\x5f\xd6\x22\x37\xa2\x97\x46\xa7\x14\x79\x01\xd6\x5c\x5d\x6d\x41\x2a\xaf\x2d\x74\x5e\xed\x9d\xed\xcd\x89\x33\x3a\x2a\x6e\x77\xa1\xdb\x42\x2a\xbd\x36\x12\x26\x89\xf8\x26\xa9\xcd\x4d\x46\xd2\xc0\x3a\x20\xc2\x0e\x8d\x3b\x6e\x4a\xbf\x26\x3a\xe8\x50\xce\x0e\x89\xa5\xc5\xe9\x72\x51\xc0\x64\x10\xc5\x85\x58\xd1\xcb\x07\xd0\xaf\xe1\xc5\xc3\x16\x50\x02\xf8\x40\x37\xce\x00\xa6\xd2\x1f\xee\xd0\x07\x69\x94\x11\x66\x71\x54\x62\x78\x21\x3b\xab\x84\xdb\x51\x69\xf2\xd1\x85\xb5\x71\x2d\x65\xfe\x5b\xca\x76\x72\x65\xb5\x21\x5b\xbc\x8c\xcb\xb9\x04\x21\x77\xae\x73\x3b\x4e\xcd\xd1\x90\x0b\x09\xee\x49\xe5\x14\xf6\x13\x1a\xa7\x88\xad\xf5\x27\xdc\xd0\xa3\x34\x44\xc9\x04\xa4\x48\x7a\x71\x8a\xf8\xa1\xef\x03\xc6\x3f\x25\x03\xef\x55\x4b\x05\xaa\xd1\xb7\xb8\x20\xbd\x18\x1a\xd9\x0f\x8b\xba\x75\x13\xc5\xae\xdd\x89\xb2\x11\x6d\x43\x44\xd5\x11\x95\x54\xf0\x84\x54\x5f\xec\x6e\x46\x75\xb4\xe4\x04\xde\x2f\xb3\x82\x76\xe8\x9e\x2f\x13\x83\x2d\x38\x7b\x13\x3b\x37\xc5\xf4\x84\xde\xd3\xd3\xeb\x7b\x1d\xcb\x26\xf2\xa5\x9c\x4e\xd4\x75\x7d\x96\x11\xdd\x44\xe5\x63\x38\x8b\x0f\xa9\xee\x4c\xe6\xf4\x30\x92\x41\x93\x11\x36\xe9\x11\xbd\x6f\x20\x85\x9f\x46\x30\x37\xdc\xd3\x38\x6b\x7a\x2e\xed\x3d\xfc\x1b\x83\x2f\x85\x6a\x6e\xbb\x1e\xd4\x38\x62\x49\xd8\x67\x6a\xe6\x30\xd0\x64\x1e\x05\xf5\x79\x92\xc0\xd8\x8a\xcf\xa7\x0c\x32\x35\xaf\x2e\xac\x7f\x26\xb0\x1c\x02\x09\xe8\xcc\x13\xff\x9f\x88\xfb\xdf\xa5\x0f\x67\x4e\x06\x45\x85\x64\x6d\x4a\x9a\xd9\x27\xb1\x8b\xa3\x54\x09\x3b\xca\x03\x72\x76\xc0\x62\x95\xce\x92\x74\x2f\x73\x4a\xf6\x96\xec\x4d\xbc\x6a\xea\x43\x4a\x0e\x1c\x0e\xf0\xb4\x6d\xea\x22\x03\x4c\x19\xdf\xd7\xb4\xae\x7e\x39\x74\xe4\xa3\xa2\x3a\xab\xaf\x38\x81\xca\x3d\x01\x9b\xe4\x1a\x62\xa7\x4b\x37\xfc\x57\xb7\xe3\x62\x37\x39\xf3\x22\x60\x37\x9e\x03\x27\x78\xb7\x74\x4e\x8a\xb7\x48\x77\x9f\xc2\x6b\x40\x1c\xc4\xb6\x14\x04\x0a\xad\x73\xa3\xa8\xf4\xec\x66\x0d\xa3\x2c\x52\x1c\xad\xa0\x77\xbb\x5f\xb1\x8d\xa1\x2a\xad\xda\x9d\xd4\xc6\xf3\x0e\x0a\xdc\x30\x50\x81\x39\x60\x3c\xb8\x8e\xb4\x6a\x31\x1a\x98\xbb\x06\x9c\x92\x08\xbc\x4a\x14\x99\x87\x4f\xa9\x5b\xa5\x1e\x1f\xf6\x28\x63\x78\x18\x93\x1b\x9d\xd5\x0c\xfb\x9a\xa7\x27\x12\x52\x9a\x1a\xfe\x99\xb6\x90\x0b\x17\x0a\x17\xac\x96\x1c\x35\xa3\x11\x65\xa9\x96\x63\x88\x03\x9a\x11\xa2\x1b\x75\x2b\x91\x32\x07\x00\x67\x1f\x10\x49\x5b\x5a\x2e\x8a\xce\x5b\x3c\x73\x2f\xba\xd8\xf0\xdc\xb6\xf6\x93\xad\xe1\x6d\x1a\x08\x79\x24\x7d\xa2\xf3\xdf\xa3\x45\xcf\x19\x4f\x88\xba\xbd\x4d\xe9\x9d\x4c\x18\x58\x07\x07\xc5\x2f\xd5\x3c\xea\x02\x75\xe7\x34\xc3\x98\x7c\xa0\x7c\x6a\xf4\x6e\x67\x70\x08\xe7\x3d\x61\xdd\x27\x39\x1a\xf3\x40\x6c\x94\x98\x6d\x28\xdd\x60\x6f\x44\x6f\x48\x86\xff\x98\x42\x94\x0e\xfe\xe3\x52\x86\x20\x01\xa7\xa2\x58\xef\xec\x93\x98\x4a\xd2\x02\x02\xd4\x5e\x69\x2a\x2e\x7f\x08\xd9\x54\x17\xc7\xbe\x2d\xe7\xca\x85\xca\xa2\x2d\x9c\x7a\x7b\x2a\x04\xd7\x6a\x55\x6c\x8a\x4d\x97\x4b\xc5\xdd\x29\xd9\xe2\x4c\x59\xfd\x62\xea\x9b\x3c\x9e\x2a\xad\xc8\x05\xd0\xe6\x5b\x6d\xf0\xf3\x69\xc4\x66\x0b\xcd\x47\x15\x0f\xcd\xb6\x6a\x28\x2c\x34\x75\x2d\xf3\xc7\x59\x2f\x92\xee\x3e\xa2\x7e\xc5\x07\xe0\xb2\xf9\x39\x77\x94\x95\xc7\xeb\xf3\xce\x68\xfd\xbd\x74\x42\xd7\x43\xd8\x93\x33\x3b\x6b\xe7\x9c\xaf\x7c\x4d\x49\xe7\x5f\x58\xf7\x4f\x0c\xef\xdd\x47\xae\x2b\xd6\xa9\xbc\x28\x85\x24\xe7\xb3\x5c\xef\x5c\x6c\x3a\x5b\xbf\x85\x83\x0e\xd1\xf9\xd3\x67\xee\x90\x3f\xe8\x4d\xf0\xeb\x45\x6f\x62\xae\x9d\x1e\x03\xfd\xbc\xeb\xde\xb9\xfd\xe3\x84\x57\x5f\x7d\xf5\xd5\x57\xe2\x7a\xab\xea\x8d\x5b\x34\x44\xe6\x4e\x3e\xeb\x58\xcd\xf1\x8f\xed\x45\x2a\xdc\x6b\x52\x30\x9e\xda\xed\x5d\xf5\x50\x9c\x1b\x99\xb6\xa5\xa4\xc5\x95\xf1\x5e\x59\x79\x7d\xb1\x72\x31\xc1\x62\x37\x9b\x8a\x99\x2c\x90\x5f\x93\xb6\x3f\x02\xe8\x42\x74\xab\xd5\x16\xbe\x49\x40\x5f\xe1\x6e\xda\x93\xbd\x1b\xb7\xdf\x93\x66\x2c\xc7\xd0\xa4\x34\x3b\x84\xce\xd9\xd4\x19\xe1\x64\x92\x59\xcc\x56\xd9\xba\x8e\x2a\x97\x07\x28\x93\x48\x57\x89\x07\xd8\x53\x19\xcf\xc3\x98\xd5\x56\xa0\xff\x98\x54\xee\xb3\xfb\xe8\xb5\x8d\xdf\xa1\xc7\xcc\xa8\x05\xb9\x0f\x10\x1d\xfb\xbf\x25\x49\x99\xcc\x94\xf8\x8f\x9e\xcc\xa3\x79\x19\xbd\x79\xdd\x90\x56\x5b\x69\x0c\x36\xc6\xed\x1b\xaa\x5e\xab\xbc\x41\x06\x18\x12\xfc\x29\x8d\x96\x72\xdf\x9e\x0a\xc4\x40\x95\x00\x57\xa9\x4b\x7c\x39\x3b\xe9\x74\x18\x8d\x3a\x61\x57\x11\x13\x75\x45\x7a\x01\xcf\xd9\x3a\xb3\x3d\xbd\x71\xf3\xa1\x18\xbd\xf3\xca\x9f\xaa\x8a\xc3\xeb\x6c\x98\xe4\xd0\x18\x7c\x19\xf1\xcd\x03\x25\x8e\x3a\x29\x50\xcd\x01\x29\xe5\x01\x6f\x5c\x75\x09\xbc\xae\xaa\x1b\x3d\x8c\xe6\x04\x7a\xa0\xcc\x3a\x75\x79\xdb\x5b\x92\xf7\xc9\x4d\x4f\xba\x14\x28\x65\x6e\x67\x8b\x1f\x20\x75\xd5\xf1\x2c\x10\xcd\xd3\x65\x69\x66\x6a\x37\x45\x6d\xe0\x59\x02\xbd\x5e\x69\x77\x25\xef\x56\x9b\xb4\xa4\x1f\xe2\xe2\x7b\x3f\xc4\xd5\xa6\x4a\x9f\x28\x31\xe0\x2e\x05\x2d\xe0\x5d\xf5\x27\x54\x1d\x39\xb0\xf5\xea\xc6\x0d\x48\x4f\x75\xbc\xe7\x2d\xba\xe7\x95\xff\x7a\x06\x56\x73\x5c\xe2\xa4\x0f\x66\x55\x12\xaf\xb2\xe2\x3f\x3c\x1f\xe1\x26\x90\x36\x78\x0d\x17\xb0\x90\xa2\x0c\x6d\x7e\xfa\x14\x5e\x51\x72\x42\x95\x44\x0e\xf5\x14\x9d\x2d\x28\xef\x15\x4b\x99\xf3\xee\xbc\x58\xfc\xfb\xcd\x48\x8a\xd8\xa7\xee\xa4\xb3\x77\xe8\x39\x5f\xe7\x52\x35\x8d\x4b\xe6\xc9\x7a\x88\xc4\x5e\x3f\xc4\x3a\xed\x5b\xaf\xfe\x7f\x58\x49\x56\x94\xe6\xeb\x44\x86\xe3\x04\x84\xcb\x88\xd2\x95\x63\xea\xf9\x38\xd8\x68\x89\xa7\xff\x97\x37\x90\x33\x2f\xa3\xf8\xef\xf2\xf4\x72\x71\xb4\x41\x94\xf4\x0f\x34\x4e\x82\x4c\x09\x4c\xac\x59\x75\xf5\x1e\x95\xa7\x82\xd7\x98\x85\x66\x65\x30\x61\x01\x9a\x70\xcd\x95\x1f\x6b\x88\xb2\x52\xd3\x54\x39\xfb\x90\xa0\x72\x3e\xb9\x9c\x8b\xbb\x8c\xda\x38\x77\x0b\xf1\xe0\xdd\xb4\x3f\x00\x69\x56\xbd\x77\x4d\xb5\xbe\xbc\x77\x83\x2a\x9c\xb8\xf9\x6a\x3b\xf4\xcc\xcc\x46\xdc\x49\xd5\x0f\xb1\xd2\xae\x2a\x8a\x57\x59\x8c\xd5\xa0\xe2\x81\xff\xb9\xf2\x54\x6c\xb8\x50\xf9\xc9\x46\x3d\x60\xc5\xf3\x13\x92\x2b\x3f\xc8\x69\x51\xa2\xb7\xc7\xfb\xb1\xe2\x6e\x48\xa8\x78\x21\x0b\x96\x18\xeb\x5c\xcb\xa5\x41\x1a\x41\x92\x31\xa8\xf6\x90\x2c\x70\x79\x03\x62\x0e\xf4\x41\xec\x8d\x78\xab\x32\x6f\x7f\x74\x10\x67\xe0\x6b\xf1\x17\x1d\xeb\x2e\xa7\x66\x3c\xf2\xdc\x42\x38\xd9\xa8\xee\xf3\x2f\xee\x74\x1b\xe7\xe5\x2e\x4f\xb8\xb8\x16\x54\x55\xff\x5c\x58\x30\x87\xf0\xe7\x5d\xf7\x49\x04\xc0\xc6\x25\x3d\x7b\x99\xa7\x9f\x4d\x8e\xe6\xb0\x45\xca\xdc\x75\x15\x05\x7c\x37\x05\xb8\xe5\x69\x80\xeb\xd3\x2c\x5d\xc6\xdd\x19\xe1\x99\x8b\xd8\xa6\x0c\x2c\xbb\x15\x01\x04\x8a\xd9\xa9\x38\xd3\xbc\xd8\x9e\x4b\xba\x26\x62\x88\x8d\x48\x51\xf2\xc5\x34\x44\x55\xf2\xa9\x1e\xba\x86\xf1\x6f\xd9\x57\x71\x86\xb7\x74\x82\xb3\x73\xba\x60\x77\x45\xbb\x57\x5b\x58\x11\x09\xf4\x37\x41\x5b\xa5\x40\xf2\x43\x78\x20\xa2\xf0\xad\x77\xc3\x3c\x10\x5c\x0a\xac\xd3\x9e\xa5\x16\xd1\xdb\x4d\x33\xf3\x57\xee\x0d\x54\x45\x46\x3c\x08\x13\xa0\x35\x7c\x76\x6c\xc1\xa9\x85\x66\x63\x1a\xc3\xa9\xbc\x42\xac\x9d\x22\x73\x43\x5e\x70\xc9\x40\x9f\x52\xba\x2d\x9c\x8d\xdf\x48\x0f\x9a\x77\x3a\xc4\x25\xe1\x65\x71\x59\x56\x91\xce\x92\x4d\x2f\x11\x85\x1c\x9b\xa6\xe8\xf2\xf5\x91\x52\x28\x96\x6a\xb8\xaa\x6e\xb8\xb0\xe0\xcb\x2e\xe9\xce\x85\x03\x83\xca\x5b\x38\xb8\x63\x1e\x87\x5c\x8c\x54\x24\xc3\xb9\x18\x8f\x9c\xc5\x8d\xa2\x66\x52\xe5\xfe\xa4\xe3\x61\x7d\x23\x99\x17\xbf\x91\xab\x49\xf2\x06\x9e\xa5\x87\xeb\x69\x1c\xd1\xaf\xf3\x37\xe5\x23\x7f\x52\x3e\xe6\x2f\xb0\xbc\xae\x24\xec\xd7\x61\xda\x65\xd0\x7f\xdb\xa6\x77\x06\xed\x5a\xf0\x6c\x9e\x3d\xe3\x07\xf6\xa5\xf3\x95\xa9\x2c\x91\x35\x77\x26\x97\x17\xa5\x14\x0f\x36\xca\x90\xe9\x19\x7c\x59\x7d\x87\xc6\x38\x52\xab\x9f\x9c\x37\x1d\x3d\x7c\xeb\xf8\xf7\x0b\xe5\x57\xbf\x2f\xf6\x7a\x0c\x93\x21\xa2\xbf\xfc\x2e\x8e\x9f\x0e\x46\x6f\xef\xc8\x7e\x47\xa5\x7d\x58\x9f\x43\xdf\x40\xc7\x23\x3d\xfe\x4f\xf7\x4b\x61\xdd\x6d\xa5\x69\xba\x99\x23\x61\xfe\x2f\x52\xb6\x54\x6b\x1b\xd0\xc7\xb5\xa0\xdc\xc2\xdd\xa6\xac\x41\xe9\xbe\x94\xbf\x49\x5c\xb2\xf2\x42\x0e\xbd\x73\x6b\xe5\xf7\x9b\x8b\x50\x9b\x33\x4e\xfe\xc4\x3b\x96\x13\xc1\x55\x2f\xec\x27\x8d\xa9\xe5\xe7\xc5\xd4\xad\x7c\xcd\xa2\x5e\x6d\x92\x35\x92\x56\xbe\xc2\x5e\x91\xa8\xc6\x7c\xf1\x73\xe1\x60\xd8\x0d\xa5\x0f\xdb\x52\xf8\x76\x69\x47\xa3\x48\xa1\x8d\x0b\x98\xb4\xd0\x70\x9e\xde\x14\x50\x6b\xaa\x07\xe6\x2b\x79\xd2\x79\x2f\xb7\x4d\x3c\x82\xc7\x31\xc5\x19\x68\x92\xc5\xe4\xab\x9d\xcd\x86\xd2\x83\x23\x1a\x23\x69\xc2\xa9\xca\x17\x4f\xcb\x95\xa0\x73\xe8\xae\xef\x75\xab\x95\x81\xf6\xa0\xac\x45\x53\xfd\x4c\x69\xe1\x2f\xeb\x43\x8c\x63\xb8\xbe\xba\xda\xeb\x78\x98\x76\x24\x03\xb9\x43\xfa\x14\x3b\x1d\x9d\x4f\xf8\x9e\xa6\x5d\x9b\x64\xab\x72\x0d\x16\xbe\x57\x56\xed\xd1\xe7\xdb\xb0\x5c\x55\x72\x53\x01\x76\x93\x36\xdc\x77\x4f\x8e\x75\x90\x95\x17\xf5\x9d\xb6\x77\xee\x16\xe7\xd9\x5f\xf3\xf7\xbc\xbe\xae\xeb\xa6\xb4\x7c\x44\xe8\x69\x9c\xac\xbb\x79\x7c\xb1\xc8\x0f\x67\xf9\x37\xe9\x73\xb3\xec\x28\x48\xb9\x99\xa9\xe8\x31\xb6\x07\x0c\xe5\xb2\x6e\xc9\x4f\x12\x9b\x01\xd6\xe5\xa6\x59\x8a\xa0\xf3\xfd\x9e\x14\xda\x06\x8c\x8a\x33\xa7\x7c\x29\x2d\xf2\xad\xb6\x20\xd7\xda\x6a\x78\x71\xca\x9a\xb0\x4d\x67\xca\x2d\xf5\xc5\x9a\xb3\x73\xa9\x12\xea\xf9\x8a\x5b\xbe\x80\xa8\x22\xfc\xb5\xc3\xe1\xe6\x51\x12\x49\x45\x91\x80\x23\x9b\x3b\xf2\xf5\x3f\xdf\x3d\x1d\x95\x8f\xa7\x99\xc5\x45\x5d\x2d\x70\xf2\x97\x26\x8f\xf1\x49\x6b\x33\x3c\xb9\x85\xc1\x6d\x62\x7b\x7b\x06\xb0\x28\x9e\x93\x69\x18\xb7\x86\x95\x31\x92\xa5\x2c\x93\x8e\x2c\xb9\xac\x0b\x39\xb9\x4c\xf8\x49\xdd\x0b\xf2\x3a\x97\x8f\x8b\xe8\x3d\x4e\x3b\xa3\xc3\x61\x6e\xc5\xd0\x67\xee\x7e\x75\x98\xb2\xe5\xa2\xe6\xb2\x42\x42\x78\xba\xd6\x39\x8d\xdc\x25\x5f\xc6\x7b\x67\x8d\xb6\x08\xeb\xe8\xe0\x0d\xcb\x98\xea\xb3\x1e\xbd\xda\x99\xd3\x46\x0a\x2e\x8e\xa8\x0d\xd1\x56\xff\x1a\x28\xa2\x50\xcc\x4a\xb7\x77\x39\x4e\xe6\xe4\x3b\xaa\x64\x6a\x59\x33\xe6\xda\x29\x27\x27\xe5\x92\x9d\x3d\x2f\x63\x08\x70\xf5\xf3\x97\x0a\x60\xf5\x5e\x0d\xb8\xba\x86\x95\x6c\xa1\x20\xbb\xda\xd2\xfb\x57\x28\xf7\xc3\xb5\xb3\xf4\x79\xbe\xae\x67\x75\xcb\x51\xbc\xd5\x81\x7c\x4f\x59\xc5\x77\xfb\xf2\xe9\x08\x8c\xcf\x6a\x1f\x56\xd7\xf0\xf3\x6a\x3c\xc5\x83\xb3\xe4\x19\xc9\x27\x69\xbb\x5f\xfd\xc2\x0b\x7e\x94\x01\x07\x2f\x62\x47\xfb\x25\xf9\xea\xfc\x85\x50\xff\xad\xfe\xa6\xfe\x86\x01\xf2\x97\x1f\xbc\xa1\xb7\x8f\xf8\x91\x29\x60\x56\xd1\x2b\xe5\xdb\x83\xbe\xc3\xab\x3b\xde\x5d\xff\x97\x1e\x67\x08\x9f\xf0\xb7\x49\x7b\xe2\xfa\x4b\x09\x0d\x2b\xd6\x73\x02\xfc\xf7\x67\xb4\xe5\x3f\x56\xe9\x93\x44\x31\xfa\xf7\x97\xea\xf7\x5f\xca\xfd\x5f\x9b\x4a\x64\x18\x27\x9e\x52\xf2\x95\x9f\xff\x81\xe9\x28\x49\x74\x15\xab\x77\x95\x13\x26\x75\x3c\x3b\xf9\x3c\xeb\xb9\xb8\xfb\xce\x7a\x4b\x40\x4f\x9c\x5a\x0d\xea\x16\x61\x1a\x3b\x19\x93\x91\x5b\xcb\x95\xb9\xf3\xb7\xdb\xc5\x58\x8f\x55\xcf\xf5\x4b\x58\x61\x2e\xb3\x53\xc5\xb1\x54\xac\x34\x7f\xaa\xf2\xf0\x30\x69\xd5\xfa\x1d\xdb\xc7\x41\x87\x6b\x68\x7e\x7c\xfd\xe9\xe6\xed\x87\xf7\xf0\x2c\x1f\x54\xb3\x81\x8f\x06\x55\x40\x21\x2c\x4c\x1e\x53\xb2\x54\xfd\x1c\x70\xb8\x43\x2f\x41\xe0\xfa\xea\x4a\x7e\xd6\xce\xef\xaf\x36\xac\xbc\x09\x21\xcf\xb5\xfe\x3b\x00\x00\xff\xff\x9a\x70\xb3\xf9\xfc\x30\x00\x00")
+var _runtimeHelpPluginsMd = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x3a\x6b\x8f\xdc\x36\x92\xdf\xf5\x2b\xea\x3a\x38\xb8\x3b\x68\x6b\xb2\xb8\x6f\x03\x78\x01\x3b\x7e\xc4\x7b\x8e\x6d\x78\x9c\x04\x8b\x20\x80\xd8\x52\xa9\x9b\x19\x8a\xd4\x92\xd4\xf4\xf4\x19\xd9\xdf\x7e\xa8\x2a\x92\x52\xf7\x4c\xb2\xb9\x3b\x5c\x80\x78\xd4\x12\x59\x2f\xd6\xbb\xf8\x15\x7c\x34\xd3\x5e\xdb\x50\x55\xdf\xeb\xd6\x3b\x08\xd3\x38\x3a\x1f\x03\xb4\x1e\x55\xd4\x76\x0f\xa3\x2c\x80\xa3\x8e\x07\x50\x10\xf4\x30\x1a\x84\x77\x93\x82\x70\x0a\x11\x87\x1a\x5e\xdd\xa1\x3f\xa5\x75\x70\x50\x01\x54\x35\x28\x6d\x21\xb4\x5e\x8f\x11\x8e\x07\xdd\x1e\x40\x07\xf0\x93\x05\x15\x21\x44\xe5\xe3\x34\xa6\xf7\xe1\xe0\x26\xd3\xc1\x0e\x61\x34\xaa\xc5\x0e\xb4\x85\xaa\xf9\xe7\x55\xdd\x3a\xdb\xeb\xfd\xd5\x40\x64\x5d\x25\x22\xd2\xdf\xf7\x6a\xc0\xc5\x63\x6d\x26\xd5\xd4\x55\xf5\xf9\x80\x1e\x41\xd1\xff\x60\xa7\x61\x87\x1e\x5c\x0f\xad\x32\x66\xa7\xda\x5b\xe8\x27\xdb\x46\xed\x88\x15\xc6\x7c\x72\x13\xb4\xca\x0a\xa7\x48\x78\x4f\x6e\xf2\x99\x8f\xe8\x2a\xa2\xb7\x75\x1d\x12\xd1\x51\x0f\x18\xc0\xc5\x03\x7a\x88\x07\x65\x33\x17\x35\x7c\x3e\x20\x58\x35\x90\xa8\x42\x7b\xc0\x01\x89\xd5\xc6\xd9\xe7\x8c\x6c\x7d\xa7\xf1\xb8\x69\x6a\x78\xed\x7c\x85\xf7\x8a\x85\xa7\x0a\x2d\xe7\xc2\x41\x16\x24\xa1\x82\x78\x40\x98\x02\x7a\x08\xea\x0e\x03\xff\xdc\x4d\x7d\x8f\x1e\x8e\x49\x5e\xd7\x55\xd5\x34\x8d\x99\x54\x55\x80\x39\x7b\xa3\xee\x50\x50\x56\x00\x00\x75\x5d\xf3\x5f\x8f\x71\xf2\x16\x7a\x65\x02\x56\x68\x3b\xda\xc9\xf2\x82\x86\x16\x37\x70\xa7\xbc\x56\x3b\xc3\xb4\x2b\xf0\xd8\xa3\x47\xdb\x22\x44\xc7\xa8\x69\x11\x3f\x28\x41\xa4\x03\xec\x90\x38\xc6\x7b\x6c\xa7\x88\x1d\x38\x5b\x57\x9f\x0f\x3a\x30\x00\x33\xb8\x10\x41\x99\xa3\x3a\x09\xe9\xed\xe4\x3d\xda\xc8\x70\xb6\x17\xe2\xdf\x63\x14\xdd\x6a\xbe\x9d\xfc\x8f\x1a\x8f\xeb\x4d\x03\x2a\x54\x47\x34\xa6\xae\xaa\xe7\xc6\x80\xba\x53\xda\x30\x79\x2a\x9d\x20\x1d\xb2\xd1\x21\x8a\xbe\x10\x8a\x5b\x3c\xed\xb4\xed\xb4\xdd\x07\x08\x98\xe4\xd1\xf3\xa7\x03\x9a\xb1\xae\xaa\xd7\xce\x17\x65\x08\xc4\xd9\xe0\xa6\x50\x40\x6e\x99\x20\x56\x1e\x13\x1c\xec\xf5\x1d\x0a\x60\xbc\x23\xca\xb5\xed\xdd\xa3\x12\xff\x9e\x80\x7c\xf4\x18\xc2\x5a\xb8\xe3\xf5\x22\x7e\xe3\x5a\x65\xe0\x7e\x0b\x27\x78\x26\xef\xaf\x3f\xba\xa0\x59\x2f\x36\xd5\x1f\x9f\x4c\xc0\x85\xc2\x26\x23\x61\xca\xd2\x0e\x05\x3b\xe7\x0c\x92\x26\x8e\xd8\xea\xfe\x44\xc7\x71\x3c\x60\xd2\xd0\x74\x66\xb2\xb1\xda\x21\x78\x24\x6a\x48\x60\xe9\x4c\xdb\xc9\x07\xe7\xc1\x79\xb0\x2e\x82\xea\x63\xda\x37\x1f\x71\xeb\x48\x5b\x23\xd6\x55\xf5\xde\x45\xd2\x49\x32\x04\x26\x6d\x96\xa3\x6b\xdb\xc9\x3f\xdc\x4e\x6e\x60\x87\x68\x0b\x90\xae\x86\xb7\x3d\xcb\xf8\xa8\x6c\xac\xd4\x6c\x97\x3b\xec\x9d\xc7\x0b\xdc\x59\xb1\xb6\x64\x05\xd0\x8c\x1e\x93\x3d\x91\x2d\xbd\xa5\x93\x21\x02\x55\xe0\x7d\x55\x16\x85\xc8\x06\xbb\x24\x13\x8d\xa1\x88\x24\xf1\xb9\xc0\x32\x7b\x9e\xa2\xc5\xcc\x46\x45\x6b\xcc\xa4\xc4\xf6\x33\xfd\x81\x74\xd1\x8a\x03\x98\x02\xf6\x93\x99\x39\x88\x0e\x6e\xad\x3b\x82\xda\xb9\x69\xe1\xef\x58\xae\x76\x66\xaa\x6a\x9c\x25\x05\xff\x30\x62\xf6\x0b\xf3\x62\x02\x86\x1d\x91\x6b\xc9\x0d\x90\x0b\xc3\xa3\x1c\xa2\x0e\xe0\x46\x24\xb6\x94\xed\x98\x03\x8b\xc7\x2a\x7f\x1a\x55\x08\x6c\x06\xe4\x8a\xc4\x00\x13\x7d\xbd\xf3\x10\x30\xb2\x17\x17\x55\x74\xa3\xe8\xd3\x4e\x05\xb6\x59\x16\x5e\xaf\x0d\xc6\xd3\x88\x5b\xde\x90\x7d\x14\x09\x92\x36\xba\xbe\x87\x26\xaa\x5d\x88\x2e\x8c\xaa\xc5\xd0\x80\xb3\xe6\xc4\x6b\xdf\x38\xa0\xcd\x2c\x64\x86\x75\x22\x03\xaa\x84\xd8\xba\xaa\x9e\x3e\x7d\xfa\x7b\x5e\x79\xd6\x6d\xe2\x29\xbb\x9f\x20\x3a\xc6\x8b\x8b\xcd\x47\xc7\x6a\xa3\x2d\x38\xdf\xd1\xf1\x38\x50\x6d\x8b\x41\x5c\x8b\xb6\x96\x9d\xa2\xbf\x65\xd3\x77\x3d\x70\xc4\xa8\xe1\x3b\x42\xcb\xee\x8c\x1c\x05\xac\x69\x31\xb1\x09\x41\xef\xad\x8a\x93\xc7\x40\x4c\x54\x0b\x4a\x3c\x26\xbb\x9f\x02\xb1\xfe\xc6\x3d\x09\x69\x0b\x47\xba\xcd\x75\x55\x7d\x0d\xcd\x87\x9b\xe6\x7a\x76\x98\x72\x80\xb4\x4d\xe8\xf9\x70\x23\x04\xf0\x99\x8a\xdb\x33\x27\xf2\xee\x22\x4d\x4b\x84\xc8\x29\x91\xec\x01\x82\x1a\x10\x54\x10\x64\x6f\x3e\x7c\xb8\x29\xa0\xb7\x10\x1c\x34\x9d\xf2\x47\x6d\x9b\x2d\x34\x47\x6d\x3b\x77\x0c\xf4\x68\xb4\x9d\xee\xe9\xa1\xf7\x88\xbb\xd0\x35\x75\x5d\x6f\x98\x38\x89\x9a\x2f\xb5\x6f\xae\xa1\x75\x36\x2a\x0a\xdd\x44\xd7\xa8\xe2\x21\x9b\xbe\x10\x28\x4b\x27\xaf\x58\x3d\xf9\x20\x19\x04\x1d\x76\x73\x9d\xe5\xe6\x7a\x50\xc6\xf0\x36\xfa\xb0\xe0\x49\x93\x9c\x50\xb0\x4e\xfe\xb3\xda\x35\xd7\xe9\x44\x3a\xbc\xcf\xbe\x37\x7b\x7e\xde\x9b\x5c\x35\x3f\x13\x70\xde\x3b\x60\x08\x68\xf7\x48\x14\x1b\x8c\x81\x0f\x3b\xa0\xed\x80\xbe\xa8\x3d\x86\x4c\x36\xc7\x43\x72\xe2\x12\xb0\x47\xef\x86\x31\x0a\xcd\xef\xf1\xf8\x82\xc3\xe3\x3a\xe2\x7d\xdc\x0a\xb7\x21\x7a\x6d\xf7\x1b\xf8\x5a\x3e\x91\x44\x78\x67\x48\xc6\x95\x02\x6a\xef\xdd\x00\x4a\x4e\xbe\x62\x97\xac\x3a\x52\x29\xc9\x77\x44\x21\x08\xde\x39\xa2\xd7\xde\x0d\xaf\xb5\xc1\xf5\xff\x05\x55\x01\xfb\x06\xe3\x3b\x54\x14\xbd\x7e\x3a\xe8\x88\x6c\x69\xeb\x0d\xbb\xf8\xe6\x3a\xb9\x35\x39\x47\x23\xcb\x48\xef\xd2\xba\x2c\xea\x02\x55\x88\x61\xb8\x6f\xc3\x4f\xce\x77\xdf\x1e\x94\x5f\x87\xe8\x0b\x99\x17\x70\x1f\xf1\x91\xb2\x52\xec\xe7\xc9\xd1\xf9\x8e\x00\xb7\x07\xe5\x55\x1b\xd1\x3f\x61\xe0\x9f\x26\x8b\x37\xd1\xaf\x3d\xa9\x37\x6e\xd2\x9e\x05\x5c\x95\xc1\x24\x4d\xa4\xc7\x42\x29\x6f\x62\x38\xef\x5c\xbb\xe6\x20\xa9\x6d\xdc\xc0\x3b\xd7\x9e\x81\x20\xf1\xd1\x92\x86\x80\x4d\xad\x28\xcd\x4f\x62\xef\x2f\xb5\xc7\x36\x3a\x7f\x5a\x3f\x8a\xdd\x3b\x47\x5e\x9d\x4f\xc8\x92\x9d\xcd\xa1\x8f\x95\x32\x79\x0d\x62\xad\xcb\x90\x18\xfc\xdf\x9c\xb6\x1f\x55\x3c\x84\x75\xa7\x7d\x5d\xd7\x45\x70\x05\x49\xeb\x86\x9d\xb6\x18\x60\x98\x4c\xd4\xe4\x30\x33\x04\x2d\x0a\x4b\x39\x9e\x31\x67\x87\x5c\xa8\xa5\xa4\xf5\x4c\x6f\x96\x54\x1b\x03\xbb\x49\x0e\xc1\xa8\x10\x01\x0d\x0e\x44\xac\xeb\x19\xd2\x96\x40\xc6\xd3\xa8\x29\x60\x9c\x8a\x69\x3f\x09\x17\x2c\xbc\xc1\xf8\x81\xbd\xfd\x9a\x39\x7f\x88\x88\x73\x04\x65\xa6\xa2\x3f\x1e\xff\x31\x21\xa7\x54\x12\x26\x18\xcc\xf3\xae\x7b\x08\x66\x9b\x36\x6a\x1b\xd1\xf7\xaa\xc5\x2f\xbf\x11\xe4\x40\xd6\x3b\x9f\xaf\x40\x11\x3b\x12\x5f\x97\x3e\xc8\xe6\x75\xb3\xd8\xde\xc0\x80\x8a\x83\xc1\x49\x3c\xae\xb6\xf0\xc6\x89\x4b\xbb\x29\x9c\x08\xc4\x8c\x7d\x66\xe9\x71\xc4\x39\x77\xa5\xc5\x12\x1b\x89\x84\xa3\x36\x86\x36\xf0\xb7\xb4\x72\x6f\xdc\x8e\xa4\xb9\x85\xc9\x1a\x0a\x2c\x3a\xa6\xc8\x21\x51\x93\xe2\x9d\x2c\xad\x33\x45\xef\xe8\xcb\x1f\x90\xb5\x95\xd0\xfd\xf5\x8f\x1c\xe6\x7f\x9f\x44\x3e\xcd\x72\x12\x8c\x4f\x5c\xeb\xbc\x56\x7c\x07\x23\x7e\xa1\x6d\xf7\x9f\x78\x5a\xdf\xe2\x69\x5b\xd2\x98\x22\x06\xca\x7f\x03\x34\xb7\x78\x6a\x88\xf9\x46\x16\x34\xbc\xf3\x7b\x75\x8b\xdf\xba\x61\x50\xb6\xe3\x93\xdc\xce\x25\x48\x26\x38\x65\x3a\x1c\x0a\xeb\xba\xfe\xb6\xfc\x24\xd8\x6c\xfe\xc5\xa5\xb5\x02\x29\xe5\xed\x04\x2f\x67\x32\x2c\x5e\x62\x02\x9a\x8c\xa0\x91\xf4\x20\x27\x59\x35\xfc\x10\x10\xbe\x21\x80\x94\x43\x2c\xb1\x46\xc7\xd5\xc0\x7b\x37\xe3\xae\x97\xd4\xa7\x77\xeb\x0b\xd2\x37\xcd\xf5\x39\x79\xcd\xbc\x96\x25\x41\x29\xa4\x90\xba\x10\x83\xc8\x65\xae\x39\xce\x2d\x63\x59\xb1\xf0\xc2\xef\x94\xed\x4c\x11\x61\x3b\x74\x4b\x93\x9a\xec\xf2\x70\x93\x74\x78\xdb\xab\x7b\x6c\x97\x72\x2f\xd2\x56\x7e\x1f\xe0\xe7\x5f\xb2\x63\x59\xe7\xf7\xe8\xbd\xf3\x04\x94\xe4\x05\x0a\xd6\xe1\x80\xc6\x6c\xce\x45\x7e\x66\x4e\xca\xef\x27\xf2\x10\xa1\x86\x4f\x4b\x0e\x64\xc3\x93\x00\x6e\x8a\xe3\x14\x39\xd1\x52\x30\xba\x10\x34\x25\x2e\x8c\xa8\xce\x8e\xfc\x86\xb0\x3c\xc2\xdd\x23\x84\x7d\xa2\x32\x1e\x98\xac\x8c\x24\xa5\x9e\x53\xc0\x70\xc6\x72\x43\x54\x4e\xb6\x4b\xb5\xc1\xc1\xb9\x8e\x9d\x1b\x17\x32\x9d\xc3\x00\xc1\x0d\xe4\xc0\x3c\x27\x5c\xa4\x0f\x9c\xa0\x67\x8e\x60\xad\x6b\xac\xe1\x1f\x13\xfb\xf1\xf2\x7a\xc3\x55\x37\x6b\x50\xd6\x04\xff\xbf\xe6\xfc\x85\x6a\x6f\xf7\xde\x4d\xb6\x63\x19\x5c\x1c\xed\x23\xcc\x66\xeb\xdc\x95\x8d\x05\xd6\x5b\xf2\x68\x64\x76\x77\x78\x09\x6c\x0b\x47\xa5\x23\x47\xde\x2d\x69\xf9\x07\x21\x8d\x7e\xff\x49\x21\x13\xbf\xbb\x13\xb4\xc6\xb1\xb0\x24\x89\x23\x7a\x72\x72\xb9\xe0\x5d\x5c\xb3\x50\x62\x4e\x5c\x7a\x35\x84\xbf\xe1\xc4\xd3\x4f\xb8\x25\x81\x70\x02\x25\x26\xbb\x63\x71\x4e\x21\x17\x41\x12\x58\xbc\xe3\x3c\x1b\xef\x75\x64\xeb\x1c\xbd\x54\xc3\x9c\xc5\xa1\x1f\xb4\x55\x46\x92\x1a\x3d\x0c\xd8\x69\x15\x91\x92\x5d\xcc\xc5\x03\x15\xd9\x44\xe6\x96\xc2\x9a\x3b\xa6\x58\x5b\x72\xb9\xe8\xe6\xce\x42\x3a\xaa\x14\x8b\x12\x66\x21\xbc\x48\x6b\x41\xfd\xf9\x39\x87\xa8\x6c\xa7\x7c\x97\xa0\x14\x3f\xcf\x75\xaf\x94\x84\x35\xcc\x35\xac\xfe\x1d\xa0\xac\x8c\x0b\xc9\x65\x0c\x01\x06\x75\xe2\xd4\x68\x87\x07\x75\xc7\xa2\xb2\xce\x0f\xec\xab\x77\xd8\x2a\xae\x51\x75\x50\x31\x9e\x1a\xc1\xbc\xac\xeb\x8b\x7a\x7c\x46\x3f\xbc\x1a\x26\xa3\xa2\xf3\x7f\x4e\x35\xb6\x73\x91\x99\x0d\x92\x55\xa4\xb9\x86\x1b\x29\x1c\x88\x96\xc7\x54\xaf\x01\xbc\x6f\x71\x8c\xe7\x5a\x21\x7d\x26\xf2\x21\x49\x89\xb3\x9f\x0b\xa3\xa1\xa0\x47\x4a\x57\x0e\x16\x13\xa9\xdc\x43\xe2\x66\x51\x26\xa6\x01\x6d\x89\x44\xbd\xcc\xf1\x16\xd5\xb0\xe2\xfa\xf9\xa2\xc9\x95\x4f\x64\x51\xe9\x2e\xcf\x9a\x90\xb0\xa2\x49\x4b\xed\x51\x7d\x28\x30\x46\xef\xee\x74\x47\xca\x2a\x26\xdf\x6b\x1f\xc4\xce\x39\x58\x67\x4f\x51\x12\xbe\x44\x1b\xe1\x58\xeb\xa2\xf2\x80\xc3\x18\x4f\x8f\xa8\x03\x1f\xdb\x86\xf9\x5e\x76\x3e\xe8\x4b\xe2\x49\x19\x4d\x3b\x83\xe0\x4b\x5d\x53\xa9\xa9\x59\x8b\xdc\x88\x5e\xfa\xa7\x52\x3b\x06\x58\x73\xd1\xb6\x05\x29\xe8\xb6\xd0\x79\xb5\x77\xb6\x37\x27\xce\xe8\xa8\x66\xde\x85\x6e\x0b\xa9\xa2\xdb\x48\x98\x24\xe2\x9b\xa4\x36\x37\x19\x49\x03\xeb\x80\x08\x3b\x34\xee\xb8\x29\x6d\xa0\xe8\xa0\x43\x39\x3b\x24\x96\x16\xa7\xcb\x45\x01\x93\x41\x14\x17\x62\x45\x2f\x1f\x40\xbf\x86\x17\x0f\x3b\x4b\x09\xe0\x03\xdd\x38\x03\x98\x3a\x0a\x70\x87\x3e\x48\xff\x8d\x30\x8b\xa3\x12\xc3\x0b\xd9\x59\x25\xdc\x8e\x4a\x93\x8f\x2e\xac\x8d\x6b\x29\xf3\xdf\x52\xb6\x93\xab\xa8\x0d\xd9\xe2\x65\x5c\xce\x25\x08\xb9\x73\x9d\xbb\x7c\x6a\x8e\x86\x5c\x48\x70\xab\x2b\xa7\xb0\x9f\xd0\x38\x45\x6c\xad\x3f\xe1\x86\x1e\xa5\xcf\x4a\x26\x20\x45\xd2\x8b\x53\xc4\x0f\x7d\x1f\x30\xfe\x21\x19\x78\xaf\x5a\xaa\x7b\x8d\xbe\xc5\x05\xe9\xc5\xd0\xc8\x7e\x58\xd4\xad\x9b\x28\x76\xed\x4e\x94\x8d\x68\x1b\x22\xaa\x8e\xa8\xa4\x82\x27\xa4\xfa\x62\x77\x33\xaa\xa3\x25\x27\xf0\x7e\x99\x15\xb4\x43\xf7\x7c\x99\x18\x6c\xc1\xd9\x9b\xd8\xb9\x29\xa6\x27\xf4\x9e\x9e\x5e\xdd\xeb\x58\x36\x91\x2f\xe5\x74\xa2\xae\xeb\xb3\x8c\xe8\x26\x2a\x1f\xc3\x59\x7c\x48\xe5\x6c\x32\xa7\x87\x91\x0c\x9a\x8c\xb0\x49\x8f\xe8\x7d\x03\x29\xfc\x34\x82\xb9\xe1\x56\xc9\x59\x2f\x75\x69\xef\xe1\x5f\x18\x7c\x29\x54\x73\x37\xf7\xa0\xc6\x11\x4b\xc2\x3e\x53\x33\x87\x81\x26\xf3\x28\xa8\xcf\x93\x04\xc6\x56\x7c\x3e\x65\x90\xa9\x27\x76\x61\xfd\x33\x81\xe5\x10\x48\x40\x67\x9e\xf8\xff\x45\xdc\xff\x2a\x7d\x38\x73\x32\x28\x2a\x24\x6b\x53\xd2\xcc\x3e\x89\x5d\x1c\xa5\x4a\xd8\x51\x1e\x90\xb3\x03\x16\xab\x34\xac\xa4\x29\x9a\x53\xb2\xb7\x64\x6f\xe2\x55\x53\x7b\x53\x72\xe0\x70\x80\xa7\x6d\x53\x17\x19\x60\xca\xf8\xbe\xa6\x75\xf5\xb7\x43\x47\x3e\x2a\xaa\xb3\xfa\x8a\x13\xa8\xdc\x13\xb0\x49\xae\x21\x76\xba\x34\xd9\x7f\x75\x3b\x2e\x76\x93\x33\x2f\x02\x76\xe3\x39\x70\x82\x77\x4b\xe7\xa4\x78\x8b\x0c\x0d\x28\xbc\x06\xc4\x41\x6c\x4b\x41\xa0\xd0\x3a\xf7\x9f\x4a\x2b\x70\xd6\x30\xca\x22\xc5\xd1\x0a\x7a\xb7\xfb\x15\xdb\x18\xaa\xd2\x01\xde\x49\x6d\x3c\xef\xa0\xc0\x0d\x03\x15\x98\x03\xc6\x83\xeb\x48\xab\x16\x13\x87\xb9\x6b\xc0\x29\x89\xc0\xab\x44\x91\x79\xa6\x95\x9a\x60\xea\xf1\x19\x92\x32\x86\x67\x3c\xb9\x7f\x5a\xcd\xb0\xaf\x79\x28\x23\x21\xa5\xa9\xe1\xef\x69\x0b\xb9\x70\xa1\x70\xc1\x6a\xc9\x51\x33\x1a\x51\x96\x6a\x39\xdd\x38\xa0\x19\x21\xba\x51\xb7\x12\x29\x73\x00\x70\xf6\x01\x91\xb4\xa5\xe5\xa2\xe8\xbc\xc5\x33\xb7\xb8\x8b\x0d\xcf\xdd\x70\x3f\xd9\x1a\xde\xa6\x39\x93\x47\xd2\x27\x3a\xff\x3d\x5a\xf4\x9c\xf1\x84\xa8\xdb\xdb\x94\xde\xc9\xe0\x82\x75\x70\x50\xfc\x52\xcd\x13\x34\x50\x77\x4e\x33\x8c\xc9\x07\xca\xa7\x46\xef\x76\x06\x87\x70\xde\x6a\xd6\x7d\x92\xa3\x31\x0f\xc4\x46\x89\xd9\x86\xd2\x0d\xf6\x46\xf4\x86\x64\xf8\xb7\x29\x44\x19\x0c\x3c\x2e\x65\x08\x12\x70\x2a\x8a\xf5\xce\x3e\x89\xa9\x24\x2d\x20\x40\xed\x95\xa6\xe2\xf2\x87\x90\x4d\x75\x71\xec\xdb\x72\xae\x5c\xa8\x2c\xba\xcd\xa9\x8f\xa7\x42\x70\xad\x56\xc5\xa6\xd8\x74\xb9\x54\xdc\x9d\x92\x2d\xce\x94\xd5\x2f\xa6\xbe\xc9\x53\xaf\xd2\xe1\x5c\x00\x6d\x5e\x6b\x83\x9f\x4f\x23\x36\x5b\x68\x3e\xaa\x78\x68\xb6\x55\x43\x61\xa1\xa9\x6b\x19\x6b\xce\x7a\x91\x74\xf7\x11\xf5\x2b\x3e\x00\x97\x3d\xd5\xb9\x51\xad\x3c\x5e\x9f\x37\x5c\xeb\xef\xa5\xc1\xba\x1e\xc2\x9e\x9c\xd9\x59\x3b\xe7\x7c\xe5\x2b\x4a\x3a\xff\xc4\xba\xbf\x63\x78\xef\x3e\x72\x5d\xb1\x4e\xe5\x45\x29\x24\x39\x9f\xe5\x7a\xe7\x62\xd3\xd9\xfa\x2d\x1c\x74\x88\xce\x9f\x3e\x73\xe3\xfd\x41\x6f\x82\x5f\x2f\x7a\x13\x73\xed\xf4\x18\xe8\xe7\x5d\xf7\xce\xed\x1f\x27\xbc\xfa\xea\xab\xaf\xbe\x12\xd7\x5b\x55\x6f\xdc\xa2\x21\x32\x0f\x08\x58\xc7\x6a\x8e\x7f\x6c\x2f\x52\xe1\x5e\x93\x82\xf1\x30\x70\xef\xaa\x87\xe2\xdc\xc8\x10\x2f\x25\x2d\xae\x4c\x0d\xcb\xca\xeb\x8b\x95\x8b\xc1\x18\xbb\xd9\x54\xcc\x64\x81\xfc\x9a\xb4\xfd\x11\x40\x17\xa2\x5b\xad\xb6\xf0\x4d\x02\xfa\x12\x77\xd3\x9e\xec\xdd\xb8\xfd\x9e\x34\x63\x39\xdd\x26\xa5\xd9\x21\x74\xce\xa6\xce\x08\x27\x93\xcc\x62\xb6\xca\xd6\x75\x54\xb9\x3c\x40\x99\x44\xba\x4a\x3c\xc0\x9e\xca\x78\x9e\xf1\xac\xb6\x02\xfd\xc7\xa4\x72\x9f\xdd\x47\xaf\x6d\xfc\x0e\x3d\x66\x46\x2d\xc8\x35\x83\xe8\xd8\xff\x2d\x49\xca\x64\xa6\xc4\x7f\xf4\x64\x1e\xcd\xb7\xd1\x9b\x57\x0d\x69\xb5\x95\xc6\x60\x63\xdc\xbe\xa1\xea\xb5\xca\x1b\x64\x2e\x22\xc1\x9f\xd2\x68\x29\xf7\xed\xa9\x40\x0c\x54\x09\x70\x95\xba\xc4\x97\xb3\x93\x4e\x87\xd1\xa8\x13\x76\x15\x31\x51\x57\xa4\x17\xf0\x9c\xad\x33\xdb\xd3\x1b\x37\x1f\x8a\xd1\x3b\xaf\xfc\xa9\xaa\x38\xbc\xce\x86\x49\x0e\x8d\xc1\x97\xc9\xe1\x3c\xa7\xe2\xa8\x93\x02\xd5\x1c\x90\x52\x1e\xf0\xc6\x55\x97\xc0\xeb\xaa\xba\xd1\xc3\x68\x4e\xa0\x07\xca\xac\x53\x97\xb7\xbd\x25\x79\x9f\xdc\xf4\xa4\x4b\x81\x52\xc6\x81\xb6\xf8\x01\x52\x57\x1d\xcf\x02\xd1\x3c\xb4\x96\x66\xa6\x76\x53\xd4\x06\x9e\x25\xd0\xeb\x95\x76\x57\xf2\x6e\xb5\x49\x4b\xfa\x21\x2e\xbe\xf7\x43\x5c\x6d\xaa\xf4\x89\x12\x03\xee\x52\xd0\x02\xde\x55\x7f\x42\xd5\xf1\x20\x64\x75\xe3\x06\xa4\xa7\x3a\xde\xf3\x16\xdd\xf3\xca\x7f\x3e\x03\xab\x39\x2e\x71\xd2\x07\xb3\x2a\x89\x57\x59\xf1\x1f\x1e\xbb\x70\x13\x48\x1b\xbc\x86\x0b\x58\x48\x51\x86\x36\x3f\x7d\x0a\x2f\x29\x39\xa1\x4a\x22\x87\x7a\x8a\xce\x16\x94\xf7\x8a\xa5\xcc\x79\x77\x5e\x2c\xfe\xfd\x66\x24\x45\xec\x53\x77\xd2\xd9\x3b\xf4\x9c\xaf\x73\xa9\x9a\xc6\x25\xf3\xc0\x3e\x44\x62\xaf\x1f\x62\x9d\xf6\xad\x57\xff\x1e\x56\x92\x15\xa5\xb1\x3d\x91\xe1\x38\x01\xe1\x32\xa2\x74\xe5\x98\x7a\x3e\x0e\x36\x5a\xe2\xe9\xdf\xf2\x06\x72\xe6\x65\xc2\xff\x5d\x1e\x8a\x2e\x8e\x36\x88\x92\xfe\x8e\xc6\x49\x90\x29\x81\x89\x35\xab\xae\xde\xa3\xf2\x54\xf0\x1a\xb3\xd0\xac\x0c\x26\x2c\x40\x13\xae\xb9\xf2\x63\x0d\x51\x56\x6a\x9a\x2a\x67\x1f\x12\x54\xce\x07\xa2\x73\x71\x97\x51\x1b\xe7\x6e\x21\x1e\xbc\x9b\xf6\x07\x20\xcd\xaa\xf7\xae\xa9\xd6\x97\xd7\x79\x50\x85\x13\x37\x5f\x6d\x87\x9e\x99\xd9\x88\x3b\xa9\xfa\x21\x56\xda\x55\x45\xf1\x2a\x8b\xb1\x1a\x54\x3c\xf0\x3f\x57\x9e\x8a\x0d\x17\x2a\x3f\xd9\xa8\x07\xac\x78\x7e\x42\x72\xe5\x07\x39\x2d\x4a\xf4\xf6\x78\x3f\x56\xdc\x0d\x09\x15\x2f\x64\xc1\x12\x63\x9d\x6b\xb9\x34\x48\x93\x4d\x32\x06\xd5\x1e\x92\x05\x2e\x2f\x56\xcc\x81\x3e\x88\xbd\x11\x6f\x55\xe6\xed\xf7\x0e\xe2\x0c\x7c\x2d\xfe\xa2\x63\xdd\xe5\xd4\x8c\x27\xa9\x5b\x08\x27\x1b\xd5\x7d\xfe\xc5\x9d\x6e\xe3\xbc\x5c\x11\x0a\x17\xb7\x8d\xaa\xea\xef\x0b\x0b\xe6\x10\xfe\xbc\xeb\x3e\x89\x00\xd8\xb8\xa4\x67\x2f\x63\xfa\xb3\xc9\xd1\x1c\xb6\x48\x99\xbb\xae\xa2\x80\xef\xa6\x00\xb7\x3c\x0d\x70\x7d\x1a\xd1\xcb\x14\x3d\x23\x3c\x73\x11\xdb\x94\x81\x65\xb7\x22\x80\x40\x31\x3b\x15\x67\x9a\x17\xdb\x73\x49\xd7\x44\x0c\xb1\x11\x29\x4a\xbe\x98\x66\xb3\x4a\x3e\xd5\x43\xd7\x30\xfe\x2d\xfb\x2a\xce\xf0\x96\x4e\x70\x76\x4e\x17\xec\xae\x68\xf7\x6a\x0b\x2b\x22\x81\xfe\x26\x68\xab\x14\x48\x7e\x08\x0f\x44\x14\x5e\x7b\x37\xcc\x03\xc1\xa5\xc0\x3a\xed\x59\x6a\x11\xbd\xdd\x34\x33\x7f\xe5\x3a\x42\x55\x64\xc4\x83\x30\x01\x5a\xc3\x67\xc7\x16\x9c\x5a\x68\x36\xa6\x31\x9c\xca\x2b\xc4\xda\x29\x32\x37\xe4\x05\x97\x0c\xf4\x29\xa5\xdb\xc2\xd9\xf8\x8d\xf4\xa0\x79\xa7\x43\x5c\x12\x5e\x16\x97\x65\x15\xe9\x2c\xd9\xf4\x12\x51\xc8\xb1\x69\x8a\x2e\xdf\x4a\x29\x85\x62\xa9\x86\xab\xea\x86\x0b\x0b\xbe\x43\x93\xae\x72\x38\x30\xa8\xbc\x85\x83\x3b\xe6\x71\xc8\xc5\x48\x45\x32\x9c\x8b\xf1\xc8\x59\xdc\x28\x6a\x26\x55\xee\x4f\x3a\x1e\xd6\x37\x92\x79\xf1\x1b\xb9\xf1\x24\x6f\xe0\x59\x7a\xb8\x9e\xc6\x11\xfd\x3a\x7f\x53\x3e\xf2\x27\xe5\x63\xfe\x02\xcb\x5b\x50\xc2\x7e\x1d\xa6\x5d\x06\xfd\x97\x6d\x7a\x67\xd0\xae\x05\xcf\xe6\xd9\x33\x7e\x60\x5f\x3a\xdf\xc4\xca\x12\x59\x73\x67\x72\x79\xff\x4a\xf1\x60\xa3\x0c\x99\x9e\xc1\x97\xd5\x77\x68\x8c\x23\xb5\xfa\xc9\x79\xd3\xd1\xc3\x6b\xc7\xbf\x5f\x28\xbf\xfa\x6d\xb1\xd7\x63\x98\x0c\x11\xfd\xe5\x37\x71\xfc\x74\x30\x7a\x7b\x47\xf6\x3b\x2a\xed\xc3\xfa\x1c\xfa\x06\x3a\x1e\xe9\xf1\x7f\xba\x5f\x0a\xeb\x6e\x2b\x4d\xd3\xcd\x1c\x09\xf3\x7f\x91\xb2\xa5\x5a\xdb\x80\x3e\xae\x05\xe5\x16\xee\x36\x65\x0d\x4a\xf7\xa5\xfc\x4d\xe2\x92\x95\x17\x72\xe8\x9d\x5b\x2b\xbf\xdf\x5c\x84\xda\x9c\x71\xf2\x27\xde\xb1\x9c\x08\xae\x7a\x61\x3f\x69\x4c\x2d\x3f\x2f\xa6\x6e\xe5\x6b\x16\xf5\x6a\x93\xac\x91\xb4\xf2\x25\xf6\x8a\x44\x35\xe6\xfb\xa4\x0b\x07\xc3\x6e\x28\x7d\xd8\x96\xc2\xb7\x4b\x3b\x1a\x45\x0a\x6d\x5c\xc0\xa4\x85\x86\xf3\xf4\xa6\x80\x5a\x53\x3d\x30\xdf\xf4\x93\xce\x7b\xb9\xc4\xe2\x11\x3c\x8e\x29\xce\x40\x93\x2c\x26\xdf\x18\x6d\x36\x94\x1e\x1c\xd1\x18\x49\x13\x4e\x55\xbe\xcf\x5a\x6e\x1a\x9d\x43\x77\x7d\xaf\x5b\xad\x0c\xb4\x07\x65\x2d\x9a\xea\x67\x4a\x0b\x7f\x59\x1f\x62\x1c\xc3\xf5\xd5\xd5\x5e\xc7\xc3\xb4\x23\x19\xc8\xd5\xd4\xa7\xd8\xe9\xe8\x7c\xc2\xf7\x34\xed\xda\x24\x5b\x95\xdb\xb5\xf0\xbd\xb2\x6a\x8f\x3e\x5f\xb2\xe5\xaa\x92\x9b\x0a\xb0\x9b\xb4\xe1\xbe\x7b\x72\xac\x83\xac\xbc\xa8\xef\xb4\xbd\x73\xb7\x38\xcf\xfe\x9a\xbf\xe6\xf5\x75\x5d\x37\xa5\xe5\x23\x42\x4f\xe3\x64\xdd\xcd\xe3\x8b\x45\x7e\x38\xcb\xbf\x49\x9f\x9b\x65\x47\x41\xca\xcd\x4c\x45\x8f\xb1\x3d\x60\x28\x77\x80\x4b\x7e\x92\xd8\x0c\xb0\x2e\x17\xd8\x52\x04\x9d\xaf\x0d\xa5\xd0\x36\x60\x54\x9c\x39\xe5\xbb\x6e\x91\x2f\xcb\x05\xb9\x2d\x57\xc3\x8b\x53\xd6\x84\x6d\x3a\x53\x6e\xa9\x2f\xd6\x9c\x9d\x4b\x95\x50\xcf\x37\xe7\xf2\xbd\x46\x15\xe1\xcf\x1d\x0e\x37\x8f\x92\x48\x2a\x8a\x04\x1c\xd9\xdc\x91\x6f\x15\xfa\xee\xe9\xa8\x7c\x3c\xcd\x2c\x2e\xea\x6a\x81\x93\xbf\x34\x79\x8c\x4f\x5a\x9b\xe1\xc9\x2d\x0c\x6e\x13\xdb\xdb\x33\x80\x45\xf1\x9c\x4c\xc3\xb8\x35\xac\x8c\x91\x2c\x65\x99\x74\x64\xc9\x65\x5d\xc8\xc9\x65\xc2\x4f\xea\x5e\x90\xd7\xb9\x7c\x5c\x44\xef\x71\xda\x19\x1d\x0e\x73\x2b\x86\x3e\x73\xf7\xab\xc3\x94\x2d\x17\x35\x97\x15\x12\xc2\xd3\x6d\xd1\x69\xe4\x2e\xf9\x32\xde\x3b\x6b\xb4\x45\x58\x47\x07\x6f\x58\xc6\x54\x9f\xf5\xe8\xd5\xce\x9c\x36\x52\x70\x71\x44\x6d\x88\xb6\xfa\xd7\x40\x11\x85\x62\x56\xba\x14\xcc\x71\x32\x27\xdf\x51\x25\x53\xcb\x9a\x31\xd7\x4e\x39\x39\x29\x77\xf7\xec\x79\x19\x43\x80\xab\x9f\xbf\x54\x00\xab\xf7\x6a\xc0\xd5\x35\xac\x64\x0b\x05\xd9\xd5\x96\xde\xbf\x44\xb9\x76\xae\x9d\xa5\xcf\xf3\x2d\x40\xab\x5b\x8e\xe2\xad\x0e\xe4\x7b\xca\x2a\xbe\x32\x98\x4f\x47\x60\x7c\x56\xfb\xb0\xba\x86\x9f\x57\xe3\x29\x1e\x9c\x25\xcf\x48\x3e\x49\xdb\xfd\xea\x17\x5e\xf0\xa3\x0c\x38\x78\x11\x3b\xda\x2f\xc9\x57\xe7\x2f\x84\xfa\x2f\xf5\x37\xf5\x37\x0c\x90\xbf\xfc\xe0\x0d\xbd\x7d\xc4\x8f\x4c\x01\xb3\x8a\x5e\x29\xdf\x1e\xf4\x1d\x5e\xdd\xf1\xee\xfa\xbf\xf4\x38\x43\xf8\x84\xff\x98\xb4\x27\xae\xbf\x94\xd0\xb0\x62\x3d\x27\xc0\x7f\x7d\x46\x5b\xfe\x63\x95\x3e\x49\x14\xa3\x7f\x7f\xa9\x7e\xfb\xa5\x5c\x2b\xb6\xa9\x44\x86\x71\xe2\x29\x25\x5f\xf9\xf9\x1f\x98\x8e\x92\x44\x57\xb1\x7a\x57\x39\x61\x52\xc7\xb3\x93\xcf\xb3\x9e\x8b\x2b\xf5\xac\xb7\x04\xf4\xc4\xa9\xd5\xa0\x6e\x11\xa6\xb1\x93\x31\x19\xb9\xb5\x5c\x99\x3b\x7f\xbb\x5d\x8c\xf5\x58\xf5\x5c\xbf\x84\x15\xe6\x32\x3b\x55\x1c\x4b\xc5\x4a\xf3\xa7\x2a\x0f\x0f\x93\x56\xad\xdf\xb1\x7d\x1c\x74\xb8\x86\xe6\xc7\x57\x9f\x6e\xde\x7e\x78\x0f\xcf\xf2\x41\x35\x1b\xf8\x68\x50\x05\x14\xc2\xc2\xe4\x31\x25\x4b\xd5\xcf\x01\x87\x3b\xf4\x12\x04\xae\xaf\xae\xe4\x67\xed\xfc\xfe\x6a\xc3\xca\x9b\x10\xf2\x5c\xeb\xbf\x03\x00\x00\xff\xff\x7c\x8c\xe6\x56\x53\x31\x00\x00")
 
 func runtimeHelpPluginsMdBytes() ([]byte, error) {
        return bindataRead(
index b8a8e92a30e54b2daf13d2dcb7c51c37b6f6251f..833562941436689ca668456c41ef51c55c89fe06 100644 (file)
@@ -337,3 +337,12 @@ func ReplaceHome(path string) string {
        }
        return strings.Replace(path, "~", home, 1)
 }
+
+// GetPath returns a filename without everything following a `:`
+// This is used for opening files like util.go:10:5 to specify a line and column
+func GetPath(path string) string {
+       if strings.Contains(path, ":") {
+               path = strings.Split(path, ":")[0]
+       }
+       return path
+}
index 36dca76ae1065455d52a2ef681e1ee833e3a0d56..724d2bac2d549f35b9ecbfbe492e07ca623e3046 100644 (file)
@@ -2,7 +2,6 @@ package main
 
 import (
        "fmt"
-       "os"
        "reflect"
        "strconv"
        "strings"
@@ -283,25 +282,11 @@ func (v *View) OpenBuffer(buf *Buffer) {
 }
 
 // Open opens the given file in the view
-func (v *View) Open(filename string) {
-       filename = ReplaceHome(filename)
-       file, err := os.Open(filename)
-       fileInfo, _ := os.Stat(filename)
-
-       if err == nil && fileInfo.IsDir() {
-               messenger.Error(filename, " is a directory")
-               return
-       }
-
-       defer file.Close()
-
-       var buf *Buffer
+func (v *View) Open(path string) {
+       buf, err := NewBufferFromFile(path)
        if err != nil {
-               messenger.Message(err.Error())
-               // File does not exist -- create an empty buffer with that name
-               buf = NewBufferFromString("", filename)
-       } else {
-               buf = NewBuffer(file, FSize(file), filename)
+               messenger.Error(err)
+               return
        }
        v.OpenBuffer(buf)
 }
index bf4be6a7edf3ee9855d16dc419aaf634991f39d1..b799863a991cb845fb80c9fc90b8f4af980efd94 100644 (file)
@@ -65,6 +65,9 @@ functions are given using Go's type system):
 * `NewBuffer(text, path string) *Buffer`: creates a new buffer from a given
    reader with a given path
 
+* `NewBufferFromFile(path string) *Buffer`: creates a new buffer from a given
+   path
+
 * `GetLeadingWhitespace() bool`: returns the leading whitespace of the given
    string