From efd4cfb0d1486ec814c232abd80f247e80852735 Mon Sep 17 00:00:00 2001 From: Daniel Heath Date: Fri, 16 Feb 2018 10:50:32 +1100 Subject: [PATCH] Implement file upload / download, fix #77 --- bindata.go | 56 +- handlers.go | 76 +- main.go | 12 + static/css/dropzone.css | 388 +++++ static/js/cowyo.js | 33 + static/js/dropzone.js | 3504 +++++++++++++++++++++++++++++++++++++++ templates/index.tmpl | 32 +- utils.go | 7 +- 8 files changed, 4094 insertions(+), 14 deletions(-) create mode 100644 static/css/dropzone.css create mode 100644 static/js/dropzone.js diff --git a/bindata.go b/bindata.go index 934712d..ed4fa39 100644 --- a/bindata.go +++ b/bindata.go @@ -3,6 +3,7 @@ // static/.DS_Store // static/css/base-min.css // static/css/default.css +// static/css/dropzone.css // static/css/github-markdown.css // static/css/highlight.css // static/css/menus-min.css @@ -35,6 +36,7 @@ // static/img/cowyo/ms-icon-70x70.png // static/img/logo.png // static/js/cowyo.js +// static/js/dropzone.js // static/js/highlight.min.js // static/js/highlight.pack.js // static/js/jquery-1.8.3.js @@ -170,7 +172,27 @@ func staticCssDefaultCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "static/css/default.css", size: 2476, mode: os.FileMode(420), modTime: time.Unix(1517964700, 0)} + info := bindataFileInfo{name: "static/css/default.css", size: 2476, mode: os.FileMode(420), modTime: time.Unix(1518739189, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _staticCssDropzoneCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x59\x4d\x6f\xdb\x38\x13\xbe\xe7\x57\x0c\x10\x04\xb5\x03\xcb\x95\xe5\xd8\x49\x94\x17\x2f\x0a\xec\x69\x81\xed\xad\x97\x3d\xd2\xd2\x58\x26\x22\x91\x02\x49\x3b\x4e\x16\xfd\xef\x0b\x7d\x58\xa2\x24\x4a\xa2\x93\x1e\xda\xae\x81\xc2\xb5\xc9\x99\xe1\x70\x9e\xe1\xc3\xe1\xe4\xf3\xed\x15\xdc\xc2\xb7\x1d\xc2\xd7\x3f\xbf\xc1\x5f\x34\x40\x26\x31\x1b\xfa\x83\xa7\xaf\x82\x46\x3b\x05\x93\x60\x0a\x9e\xbb\xf0\xe0\x2b\x51\x94\x48\xf8\x8a\x8c\xc3\xff\x92\x2f\xd9\x8f\x79\x82\xff\xbf\x82\xdb\xcf\x57\x5f\x9c\x17\xdc\x3c\x53\xe5\x3c\xe3\xeb\x56\x90\x04\x25\xa4\x44\x4a\xca\x22\x47\xed\x04\xdf\x47\x3b\xf8\xe7\x0a\xc0\xbd\xc9\xff\x03\xe0\x29\x09\xa8\x7a\xf5\xc1\x7d\xca\x7f\x9f\xd4\x95\x20\x4c\x6e\xb9\x48\x7c\xc8\xbf\xc6\x44\xe1\xdf\x93\x3b\x37\x3d\x4e\x4b\xc1\x84\xbf\xd9\x48\x49\x0b\x21\x3e\x2e\x33\x24\x00\xdf\xaf\x00\x96\xee\xcd\x0c\xee\xbb\xfb\x5a\xd8\xec\xcb\x6a\x5b\x36\xbb\xb2\xd8\xd4\xd8\x9e\xea\x2d\x2d\xdc\x77\xc2\xe4\xd8\xe1\xe4\x58\x01\xe5\xd8\x20\xe5\x8c\x42\xe5\x9c\xb0\x82\xef\x57\x5f\x72\xa7\x2e\x19\x7a\xc9\xd0\x9f\x36\x43\x2f\xc9\x79\x49\xce\x9f\x36\x39\xbb\x77\xbc\x8c\x69\x88\x0e\x65\xbf\x6f\x76\xfe\x2e\x89\x69\xb8\xfe\x2e\xe0\xfd\x4a\xe0\x5d\x70\xfb\x35\x71\x33\x3c\x8c\xf6\xb1\xc4\x26\x78\x86\x9d\xc9\x80\xc4\x38\x59\xf4\x6c\xa9\x3d\x2b\x07\x26\x79\xff\x9c\x69\xa2\xbc\xc4\xc6\x5d\x9b\x8f\x38\x37\x1f\x76\x6f\x3e\xe8\xe0\xbc\xdf\xc5\xf9\xc9\x49\xef\x27\x8d\x9f\xe9\xa9\x71\xc1\xfc\xf7\xc7\xfc\x02\xf7\x7f\x09\xee\x79\x28\x78\xfa\xc6\x19\xce\xa0\xfa\x0a\xb7\xb9\xb7\x1b\x7e\x74\x24\x7d\xa3\x2c\xf2\x61\xc3\x45\x88\xc2\xd9\xf0\x63\xb6\xa3\x5a\x2b\x17\x4c\x28\x73\x76\x48\xa3\x9d\xf2\x61\xb1\x72\xd3\xe3\x53\xae\x9d\x69\xf8\xe0\xa5\x47\x90\x3c\xa6\x21\x88\x68\x43\x26\xee\x0c\xca\x7f\xf3\x65\xee\xdb\x86\x04\xcf\x91\xe0\x7b\x16\xfa\xf0\xb2\xa3\x0a\xb3\xc1\x94\x84\x61\xbe\xae\xe7\xa6\xc7\xfc\xa3\x08\x64\xb5\xee\x3c\x7c\x73\x82\x98\x06\xcf\x64\x13\x63\x19\xdb\x60\x2f\x24\x17\x3e\xa4\x9c\x32\x85\xa2\xd0\xe8\xd5\xb9\x2d\xb5\x6a\xbd\x10\xb7\x64\x1f\xab\x11\xbd\xec\x57\x82\x52\x92\x48\x0f\x59\xaf\x8c\x61\x9d\x86\x7f\x0d\x0b\x52\x11\xa1\x30\x6c\xe8\x17\xda\x21\x95\x69\x4c\x5e\x7d\x60\x9c\xa1\x41\x33\x14\x24\x72\x76\xfc\x80\xa2\x54\x28\x01\x93\xea\x35\x46\xbf\x00\xc0\xb8\x31\x4d\xb1\xbb\xaa\x5e\x8f\xcd\x57\xad\x65\x0d\xf2\x0a\x8f\xca\x21\x31\x8d\x98\x0f\x01\xe6\x9b\xcc\xc7\x13\x22\x22\xca\x7c\xf0\x30\x01\xd7\x64\x26\x15\x78\xa0\xf8\x52\x9a\x49\xb9\xa4\x8a\x72\xe6\x83\xc0\x98\x28\x7a\xc0\xa7\x66\x10\x28\x8b\x29\x43\x67\x13\xf3\xe0\xb9\x98\x3a\xa0\x50\x34\x20\xf1\x69\x75\xc5\xd3\xe6\xd2\x8b\x75\x91\x96\xad\x6c\x75\xab\xd4\xea\x71\xc9\xd7\x83\x0a\xf0\xe6\x50\x16\xe2\x31\xd7\x74\x4f\x8a\xc3\xaa\x79\x94\x51\x11\x1a\xcb\xca\x4c\xa3\x2a\x1c\x5a\x3e\xfb\xba\xa5\x31\x56\x11\xca\x06\x68\xa2\x43\x54\x22\x2d\x48\x48\xf7\xb2\x38\x31\x4f\xa7\x29\xed\x6c\x5d\x3f\x3e\x3e\x9a\xc6\xb3\x48\x12\xe1\x44\x99\x3e\x32\x35\x51\x1c\x36\x5c\x29\x9e\xcc\xe0\x1a\x11\x67\x70\x1d\x86\xe1\xf4\x7c\x27\xdb\x5b\x3e\x63\xc3\xf9\xfe\x5a\x39\x61\x22\x8a\xe1\xf0\x77\x2d\x99\x91\x68\x50\x72\x99\x77\xa5\xb3\xe0\xce\x3d\x59\x46\xe8\xa9\x56\xa8\x28\xda\x4e\x5a\x9e\x21\xcc\xed\x65\xc7\x04\x87\xa2\x9c\x7f\x17\x98\xf0\x43\x9d\x47\x5b\xce\x54\xc6\xf7\xe8\xc3\xe2\xae\xce\xa1\xbe\x33\xad\x1d\x47\xed\x1c\x76\x59\xae\x91\xa5\x3a\x7f\xd9\x38\xd7\x3a\x7d\xa5\x37\x21\x06\x5c\x90\x62\xe7\x7b\x16\xa2\xc8\x76\x6c\x73\x8a\x3f\x90\x97\x46\xdd\x8a\x0d\x3c\xf7\xb4\xcf\x9a\xbb\xc8\x46\xf2\x78\xaf\xb0\x0a\x24\x4f\xab\x67\x2d\x40\x8c\x5b\xa5\xfd\x6c\xbf\x7b\x9b\x70\x2c\x6b\x38\x32\xf6\x7a\xa1\xa1\xda\xe5\x14\x74\x53\x0d\x93\xa3\x69\xb8\xbe\x47\x31\x81\x05\x26\xe3\xa0\x06\x3c\xce\xd0\x6b\xdf\xd5\x8f\xd3\xca\xf1\x8c\x79\xb5\xdb\xfe\xc6\x06\xcd\x53\xe0\xf2\x4b\x8e\xbe\xa1\x86\x68\x41\xd0\x4e\xc1\x39\xbe\xee\x64\x33\x06\xeb\x9a\xa8\x6d\x57\xca\x38\x89\x91\x44\x5f\x2d\x27\x0e\x47\xa6\x24\xc0\x2c\x17\x5f\x04\x49\x6b\xab\xe7\xda\x2d\xb3\x4a\xa6\x84\x69\x4b\xd4\xb9\xbe\x68\x96\x3e\x9e\xeb\xce\xa0\xfe\x70\xe7\x0f\xd3\x27\x5d\xab\xe2\x37\x47\x07\xc1\x5b\xad\x66\x50\x7f\xe4\x5a\xef\xf7\x98\x71\x35\x29\xdc\x9e\x36\x5c\xce\x46\xb6\x31\x7f\xf1\x61\x47\xc3\x10\x99\xee\x58\x9e\x2c\xb5\x00\xc6\x31\x4d\x25\x95\xba\x17\x1f\xf2\xa3\x13\x3f\x53\x04\x73\xb6\x4b\x89\x40\xa6\xde\x9d\x06\xd9\x42\xb3\x73\xb2\xb4\xe5\x99\x2d\x42\x77\x1a\xae\xd5\x09\x74\xb3\x09\x3d\xb9\x5b\xf7\xf6\xd2\xae\x10\xa9\xef\x7f\x9a\x44\x95\x6f\x03\x6f\x1f\x77\x35\x83\xec\xb3\xf2\xa9\xef\x11\x64\x10\x34\xbe\x86\xba\x72\xc6\x67\x51\x47\xcc\xca\x54\xb9\x8f\x2d\x8d\x55\x86\xff\x26\xde\x8b\xc9\x43\xd5\xa6\x02\xe8\x4e\x8c\x92\xb6\x75\xb5\xd4\x77\x06\x4e\xbc\xaa\xcb\x56\x04\xa8\x0f\xf6\xd5\xad\x7d\x57\xa5\x56\x4c\xda\xe4\x74\x17\xf6\x8e\xe1\xb1\xca\x4a\xee\x83\x00\x65\x99\xe1\xc5\x77\x27\x21\xe2\xb9\x93\x48\x84\xd1\xa4\xbc\x61\xdb\x7f\xc2\x5b\x4a\x08\xf6\x1b\x1a\x38\x1b\x7c\xa3\x28\x26\xee\xfc\xfe\xbe\xbc\x25\x16\xf7\x19\xa0\xcd\x4c\xfb\x41\x96\xe4\x0f\x32\xc4\x7f\x8c\x9d\x8f\x19\x19\x83\x09\x85\xe0\xc5\x51\xcf\xbf\x35\x21\x6a\xf7\x93\x8d\xa0\x55\xdd\xf5\xf7\xa3\xf5\x2e\x13\xf2\xa3\x16\xf8\x07\x0d\xbc\x53\x7b\x94\x45\xf4\xd3\x32\x74\x87\x18\x00\x2b\x2b\x61\x07\x0f\xc8\x94\x2c\x4b\xe0\xde\xba\xaf\x22\x85\x95\x6b\x51\x54\x9a\x89\x25\x2f\x35\x57\x75\x19\x58\x14\x9b\x2b\xbd\x5c\xcc\x8b\xae\x62\xdc\xf1\xee\xb5\xfa\xb2\x98\xc9\x2d\x14\x13\x16\xcc\xd4\xa0\x12\x79\x88\x2c\x03\x24\x0f\x03\x54\x56\x97\x6c\x05\xfd\xae\xb4\x37\x49\xcd\xbf\xf9\xe8\xd8\x71\x4a\x05\xcf\xdc\xa3\x2c\x2a\x67\x78\x24\x32\x16\x1c\x3f\x51\xfa\x1b\x8b\xc4\xb1\xe9\x21\xd6\x79\x0d\xf6\xca\x49\x2b\x31\x6e\x23\x35\x24\x32\x16\x8d\x80\x27\x69\x8c\x0a\x47\x62\xe1\x0e\xc5\xa2\x7e\x6f\xde\x49\x40\x22\xb3\x63\xd6\x1b\x90\x61\xe1\xbe\xd7\xb1\x41\xb6\xef\x71\xdc\x15\x1d\x95\x1b\xac\xb4\xb2\xe2\xb4\x99\x37\x53\x73\xb0\x4c\xb7\x65\xde\x33\x5f\x17\x2b\x01\x65\x5b\xca\x68\x7d\x5c\x3b\x37\xe2\x88\xb4\x3c\x43\x98\xdb\xcb\x8e\x0b\x8e\xf2\xa1\xc5\x21\x6a\xf6\xca\x2c\xc8\xb0\x9f\xe6\xaa\x72\x6b\x5d\x93\x40\x87\xd4\xda\xac\xd7\xa0\xb2\x87\x5a\xb1\x24\x94\x07\xb7\xc3\x7a\x25\x1f\xde\xf5\xb4\xd0\xcc\xd5\xfe\x63\xa7\x7a\xed\xed\xc2\x77\xca\xcf\x87\x81\xea\xd3\x82\x77\x2b\x10\xb2\x1f\xfb\x34\xe6\x24\x34\x3e\x57\x7c\xb8\x5e\x2e\x97\x4f\xc6\x99\xa1\xfe\xdf\x7a\xbd\x9e\xc1\xf5\xdd\x5d\xe3\x41\xd3\x0b\x52\xbb\xc5\xd1\x69\x72\x00\x9c\x5e\xf9\x6e\x87\xde\xb5\x11\x13\xe1\xe4\x52\xb0\x74\xdd\xa4\x3a\xc3\x0e\xdf\xab\x81\xa6\x9c\x85\x86\x3c\x53\x81\x9f\x27\x6f\x23\x7c\x76\x25\xd8\xea\xcf\x9f\x59\xff\xe7\x46\xb4\x97\xa4\xd9\x68\xf7\x28\xb7\x4f\x2d\xd9\x2b\x3e\xce\x11\x66\xeb\x43\x0c\xd0\x43\x19\xe7\x55\x3f\xcd\xbf\x95\xbc\xf3\x5e\x5b\x16\x38\x59\x5c\x6a\x1d\xc9\xbe\x1b\xad\x2d\xd8\x77\x9d\xb5\xe4\xac\x84\xfa\x79\xa5\xa7\x8f\x98\x1f\xd5\xc5\xd2\x6d\xf3\xa9\xb3\x70\x3b\x4c\xb9\xe8\x23\xc4\xeb\x0d\x7a\x6b\x6f\x7d\xee\x9f\x15\x0a\xad\x19\x5c\x93\x47\xcf\xf3\xbc\x69\xa7\x5b\xe9\xce\x57\x98\xc0\x62\xee\xd5\xfd\x92\xb2\xe1\x62\xd3\xf8\xef\xe6\x9e\x4f\xb6\xaa\xd1\x46\x0e\x38\x53\xc8\x94\x0f\x9f\x3e\x9d\xc1\x6c\xce\x5a\x2f\x41\x8b\x78\xad\x1b\x65\x69\x97\xcc\x4e\x37\x97\xdb\x69\xfc\x94\xfa\xc6\x0e\x57\xa7\x49\x54\x18\xb1\x13\x3e\x91\x6c\x2d\x7d\xc2\x09\xbe\x5f\xfd\x1b\x00\x00\xff\xff\x37\x75\x43\x7f\x2b\x31\x00\x00") + +func staticCssDropzoneCssBytes() ([]byte, error) { + return bindataRead( + _staticCssDropzoneCss, + "static/css/dropzone.css", + ) +} + +func staticCssDropzoneCss() (*asset, error) { + bytes, err := staticCssDropzoneCssBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "static/css/dropzone.css", size: 12587, mode: os.FileMode(420), modTime: time.Unix(1519120693, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -795,7 +817,7 @@ func staticImgLogoPng() (*asset, error) { return a, nil } -var _staticJsCowyoJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\xdd\x6f\xe3\xb8\x11\x7f\xcf\x5f\x31\xab\x06\x67\x19\x31\xe4\xeb\x43\x1f\xea\xc0\x58\x6c\x77\x73\xc0\x15\xdb\xec\xa2\xc9\x15\x28\x50\x60\x8f\x16\x47\x32\x2f\x34\x29\x90\x94\x1d\xe3\x90\xff\xbd\x18\x4a\xb2\xf5\x99\x78\xbd\xce\x6d\x8a\x46\x40\x10\x99\x1c\xcd\xf7\xfc\xf8\x19\xe4\x16\xc1\x3a\x23\x62\x17\x5c\x9e\xad\x99\x01\x9d\x4b\x91\x69\x98\x43\xc2\xa4\xc5\xcb\xb3\xb3\xf3\x70\x23\x14\xd7\x9b\x71\x24\x35\xe3\x61\x92\xab\xd8\x09\xad\xc2\x31\xfc\x7e\x06\x00\x30\x9d\xc2\x3f\xd1\xe5\x46\x59\x60\x50\xf5\x4e\xc0\x2d\x99\x9b\x00\xb3\x20\xb5\x4a\xe9\xbf\x70\x10\x6b\xe5\x84\xca\xd1\x82\xd3\xb0\x40\x10\x6a\xad\xef\x90\x4f\x60\x23\xa4\x04\xa5\x5d\xc5\x70\x81\xe0\x8c\x48\x53\x34\xc8\x23\xb8\x5d\xe2\x8e\x71\x41\xba\x40\x88\x99\x94\xc8\x81\x25\x0e\x0d\xf1\xb6\x4e\x67\x16\x16\x28\x54\x5a\xf5\x25\xda\x54\x0c\xaf\x61\x25\xa4\x14\x16\x63\xad\xb8\x8d\xe0\xe7\x04\x7e\x15\xab\x15\x72\xc1\x1c\xfe\x0a\xc2\x42\xc6\xac\x25\x55\x4a\xb9\xe0\xea\x42\xb5\xa2\xdf\x15\x33\x89\x8c\x93\x18\xe4\x29\x4e\x40\x28\xeb\x90\x71\xd0\x89\xff\xc6\x19\x26\xa4\x50\x69\xe4\xa9\x77\x1c\x38\x2e\x74\xae\x62\xf4\xfe\x9b\xc0\x86\x09\x37\x81\x9d\x06\x95\x2f\xe9\xa1\x20\x38\xb1\x42\x9d\xbb\xcb\x5d\xa3\xf1\x1e\x86\x8e\xf3\xab\xe7\x3c\x1c\xfd\xc9\xb2\x35\x5e\x71\xe1\xfe\x96\x3b\xa7\xd5\x68\x1c\x19\x5c\xe9\x35\xbe\x97\xcc\xda\x70\xfc\x34\xb9\xc3\x7b\x17\x06\xd4\x24\x54\x1a\x8c\x2f\x1b\x5f\x90\x56\x14\x3e\xbc\x77\x30\x07\xb7\x14\x76\xd2\xe8\xa7\x87\x99\xd4\xc2\x9c\xfe\xe5\x2b\x54\xce\x76\x39\x48\x46\xd1\x9a\x0f\xdb\x41\x4f\x69\x3c\xcc\x41\xe5\x52\x5e\x76\xfa\x45\x02\xe1\x9b\x9a\xeb\x88\x59\xc4\xb2\x4c\x6e\xc3\x52\xc3\x89\x57\xa5\x65\xc1\x43\x8f\x41\x4c\xca\x6b\xbd\x81\xf9\x3e\x12\xf0\xc3\x0f\xf0\xa6\xe3\x7e\x7a\x62\x89\xcc\xdc\x16\x3d\x61\x49\xd1\x12\xb1\xd7\xdc\xa2\xab\x48\xbd\xcd\x45\xc4\x5b\xe4\x64\x48\xa9\xc2\x41\x56\x94\x16\x3c\x5c\x9e\x55\x99\x78\xbb\x14\xb6\xa8\x08\xff\xa5\x4f\xc0\x2a\xd3\x00\x93\x04\x63\x57\xe6\x2e\xdc\xe1\x36\xcf\x00\xd7\xa8\x76\x55\xf6\x4e\x71\xaa\x1c\xad\xe4\x16\x12\x61\xd0\xc2\x5f\x7e\xfc\x71\x65\x41\x1b\x58\x32\x99\x00\x83\xa2\x5e\xca\x22\x23\x2e\xb9\x45\xe3\x4b\x2d\x43\x0e\x6e\x9b\x09\x95\x9e\x55\xde\xcc\x0c\xae\x6f\x8b\xfc\xa0\xfc\x22\xd2\x9f\x55\x96\xbb\xd1\x38\x5a\x33\x19\x96\x86\xb4\xbb\xb4\x0a\x47\x5e\xb7\xd1\xa4\x59\x24\x9d\xfc\x20\x77\xed\x65\x0c\x08\x69\x27\x54\x59\x38\xd3\x29\x28\x0d\xf1\x92\xa9\x14\xed\xde\xa1\xbb\xb7\xa7\x75\x6f\xa8\x51\x80\x64\x5f\x11\xb6\xbf\xec\xe5\x16\x19\xcc\x24\x8b\x31\x9c\xe2\x34\x9d\x04\xc1\xb8\x1e\xe4\xb3\x3a\xbb\x03\x6b\xfa\x91\x7a\xbe\x61\x6b\x5f\xce\x3b\xda\x3c\xf3\x38\x5e\x8a\x7c\x20\xf0\x25\x78\x8f\x2a\xe7\xff\xe3\x66\x5c\x99\x5b\x95\xac\x75\xbf\xf8\x8f\xca\x92\x9c\x80\x42\xe4\xef\x94\x76\xcb\xa2\x9a\x8b\x91\x02\xea\x78\x57\x49\xa9\xb9\x68\x3a\x85\xcf\xc6\x27\x20\x21\x49\x9c\x1b\x43\xaf\x05\xa1\x6d\xb8\xb7\x21\xf3\x4d\x21\xb4\xed\xec\xa6\x0a\xce\xe4\x78\xd9\x13\xf8\x1e\xb7\xb6\x0c\x3a\x8f\xd8\x6f\xec\x3e\x6c\x32\x77\xdb\x0c\x67\x30\xfa\xfc\xe9\xe6\x76\xd4\xc4\xb9\xdc\xc8\x19\x8c\xa6\x79\xc6\x99\xc3\x56\x1f\x67\x8e\xcd\xe0\xef\x37\x9f\xae\x23\x1a\x52\x55\x2a\x92\x6d\xd8\xc5\x37\x85\x9b\x2f\x14\x9b\x59\x7f\xaa\x75\x71\x35\x63\x29\xce\xaa\x30\xc5\x7a\xb3\xd5\x11\x35\x5d\xb3\x15\x76\x89\x13\x74\xf1\x12\xf9\x17\xe6\x76\x9f\x48\x66\xdd\x4f\xd4\xdc\xa4\x7e\x68\x89\xb2\x79\x1c\xa3\xb5\xb3\x3d\x3a\x93\x41\x7d\x08\xdd\x93\x13\xb5\x02\xa9\x9e\xaf\x1c\x93\xa0\x0c\x3e\x09\x8d\x4a\x5d\xa8\xcc\x29\xb4\x7d\x4a\x0c\x8a\x60\x9c\x17\xfc\x83\x92\x4b\x7b\x2c\xab\x9e\xb6\x7b\x60\xee\x43\x18\xe5\x4a\xdc\x7f\x21\x2c\xef\x31\xaa\xd2\xb2\x96\x7e\x43\xca\x41\xa7\xd8\xda\xcf\x43\xb7\xf9\x01\x50\x5a\x3c\xce\xdc\x84\x09\x99\x1b\xec\x33\xf7\xe1\xb0\xe8\x78\xc8\xf0\x3e\x58\xa1\xb5\x2c\xc5\x1e\x56\x83\xb5\xbf\x93\xd5\x4c\x2b\x34\x46\x9b\x5a\x52\xdd\x2f\xcd\xa4\x68\x3c\x38\xb5\xbe\x5a\x85\x41\x03\x1f\x4f\xbf\xe3\xfd\x3b\xec\xcd\xc2\xd2\x47\x3d\xe4\xc7\x7b\xe5\x6e\x3d\xe8\x04\x34\x92\x8b\x98\x91\xaf\xa6\xbf\x59\xad\x82\x2e\xc8\x14\x94\x23\xea\x1d\xed\x11\xae\x42\xf4\xb3\x26\x12\x67\x46\xac\xf0\x27\x6d\x6e\x50\x26\x1f\xd0\x3a\x93\xc7\xae\x81\xcb\xc7\x21\xa0\x67\x7b\x1c\x00\x1e\x8c\x67\xc7\x23\xd4\x8b\xc6\x9e\x97\x5d\xe3\xdf\x54\xbe\xaf\x45\x57\x14\x9d\xd4\xf1\xdd\x67\x96\x62\x48\xcb\xca\x6c\x69\x98\xc5\x6f\x2f\x39\x62\xfa\xcc\x15\x57\x10\x57\x2a\xcf\x6a\xef\xaf\x85\xf9\xbd\x0b\xf3\x31\x5f\xd0\xb2\x95\x98\x56\x79\x57\xb1\x1b\x13\x41\xf0\x51\xc7\x77\xc1\x90\xbb\xaa\x59\x90\x2e\xd2\x1f\xe6\x10\x4c\x03\xb8\xe8\xcf\x16\xb8\x80\x60\xba\x16\xb8\x09\x0e\x31\xf3\x38\x6d\x7f\x51\xf2\xb4\xfa\x22\x17\xee\x49\x7d\x5f\x61\xef\x14\x73\x8d\x7c\x21\x85\x5d\x7a\xe4\x3b\xc1\x14\xa3\xe0\xf6\x47\x40\x5e\x21\xa9\x58\x91\xd5\x8c\x68\x26\xe6\xe7\xa2\x23\x78\x85\xc2\x17\x05\x85\x25\x49\x89\x1d\x65\xf4\x90\x0f\x02\xc8\x40\x8c\x77\xe1\x3d\xc6\x1b\x7d\xfc\x76\xba\x3c\xed\x88\x57\xf0\x39\x01\xf8\xa0\x8a\xcd\x36\x73\x27\x9f\x76\x95\x7c\x5f\x67\x5e\xff\x57\x70\xf3\xd5\x93\x99\x5a\xfa\x35\x87\x8d\xab\xa2\xe3\x25\x4e\xc0\x06\x75\xfe\x80\xa7\xd6\xf9\x75\x12\xb6\x7f\x9e\x17\x07\xfd\x41\xd5\x27\xc9\x0f\x9e\x81\x7d\xb8\xfa\x78\x75\x7b\xd5\x0f\x7e\x5a\x72\x29\xec\xe9\xc1\xef\x15\xd4\x5e\xd4\x1c\xea\x40\x5f\x7c\x7d\xd9\x53\xf2\x7c\xef\xb2\x3f\xb0\x7a\xff\x47\xeb\xfe\x3c\x0c\xea\x38\x1e\x8c\xa3\x58\x8a\xf8\x6e\x7f\x86\xda\x88\x26\x46\x59\x71\x06\xf7\x01\x13\x96\x4b\x57\xf7\x8e\x3f\xc4\xdd\x4d\x3b\x60\x0e\x99\xd1\xab\x8c\x66\xc6\x12\xa9\x01\x95\x43\x03\xac\x46\x13\xc1\xb5\x76\x38\x83\x72\x88\x13\x2a\x2d\x4e\xa3\x0b\xf7\x03\x93\xd2\x9f\xac\x0a\x9d\x5b\x58\x0a\xeb\xb4\xd9\x46\xc1\x04\x82\xba\x67\xfd\xb1\xee\x5e\xea\xc0\x71\xdf\xc0\xe4\xae\x7d\x6e\xfa\x50\x8d\xdc\xde\x2b\x44\x72\x02\x9f\x18\x98\x53\xe8\x12\x61\x56\x61\xf0\xce\x20\x6c\x75\x0e\x36\x2f\x5f\x36\x4c\x39\x70\x1a\xbc\xb4\xb7\x6d\xcb\xcc\x50\x49\x1d\x31\x82\x92\x80\x5a\x2d\xf5\xc2\xcb\x3d\x31\xfa\xb7\xce\xc9\xef\xd6\x22\x87\xf7\x4c\xc5\x28\xdf\x04\x8f\x7a\xca\xd6\xce\x06\x4e\xed\xb0\xfd\x1d\x05\x6f\x80\xbf\x46\x40\x76\xf9\x17\x85\xf7\xce\x5f\x9b\x00\xe1\x40\x58\xd0\x19\x2a\xe4\x13\x60\x43\x5e\xe6\xda\xdf\x2c\x3a\xdc\xcf\xfd\xc7\x1f\xcf\xe2\xc5\x6a\x3b\xeb\x0f\x2d\x41\x72\x8a\xdf\x2f\x3b\xaa\xac\x88\xea\x88\x7d\xc3\xe3\x30\x37\x68\x7d\x13\x54\x2b\x65\x92\xd3\x73\xe7\x68\x70\xfc\x3c\xb1\xf8\x62\xc3\xb1\x4f\x81\xc6\xaf\xbe\x3d\xfd\x26\xfd\x74\x0a\xb4\x8c\xac\xc0\xca\xa7\x79\x9b\xc0\xa0\x3f\xda\x6c\x74\xf5\xe4\x52\x6d\x43\xe1\x1b\xd3\x69\xb7\x3d\x02\x41\xfd\xbe\x10\xe7\x54\x57\xa6\x2c\x45\xed\xab\xd1\x0a\x87\x2b\x96\x45\xf7\x2b\x09\x56\x53\x49\x56\xb7\xed\x84\xe2\x78\x8f\x1c\x16\x5b\xb0\xc8\x4c\xbc\x04\x54\xa9\x50\x68\xa3\xa0\x99\x72\x8f\x6e\xa0\xd5\x76\x44\x5a\x51\xad\x29\xd9\xa9\x31\xd8\x5f\x3f\x23\x44\x41\x3e\x04\xc7\x6f\x09\x3f\xbb\x93\x1d\x7f\xcd\x6a\xff\x6d\x3f\x4c\x7c\x83\xee\xcf\x92\x91\xa5\xb0\xef\x58\x15\x9f\x87\x35\x68\x02\x6c\x7d\xcf\xf7\x51\x7c\xac\x16\x26\xcf\x39\xba\xd0\x94\xc3\xcb\x41\x0e\x34\xf7\x04\x4a\x69\x7b\xc0\x80\x02\xe1\xbf\xd0\x58\xa1\x55\xc9\xce\x3a\xb6\x05\xa1\xaa\x69\xcb\x38\x3a\x78\xc4\xd9\xaf\xbf\x9e\x61\x90\xa1\xd8\x30\x83\x2c\x18\x47\x77\xb8\xe5\x7a\xa3\x06\xbc\x28\x92\x10\x89\xe4\xbd\xe6\x08\xf3\xf9\x1c\xfe\x3a\x86\xdf\x09\x80\x1c\x5b\xc0\x86\xd9\x4a\x6a\x1b\x9f\x52\x74\x10\x33\x83\x0e\x32\x6d\x85\x9f\x9c\x5a\x94\xe8\x25\x34\x68\x29\x14\xd6\x31\x53\xdd\x07\x8d\x76\x64\x37\xd4\xda\xbd\x6d\x89\x8a\x77\x48\xaf\x14\x6f\x6d\xb5\x10\xe5\x39\x11\xf9\xab\x78\xf4\xd2\x73\x13\x75\xcd\x64\x4e\x60\xe1\x09\x3b\x37\xf4\x4a\x4b\x2c\x3a\xa8\xdc\x55\x7e\xe1\xf4\xcc\x37\xc1\x02\x13\x6d\xb0\x34\xf4\xc2\xfb\xe4\xa2\xe8\x29\xee\x3a\xfa\x8e\x06\xc3\xbd\x28\xcf\x2a\xb2\xf9\xa2\x58\xfa\x86\x3f\x4e\x0a\x3f\x74\x97\x9a\xd5\x73\x01\xc1\x7f\x5c\xf0\x48\x77\x9b\x25\x2a\x3e\xee\xb1\x28\xcb\xab\xd8\x30\x07\x46\xa4\xcb\x7d\x90\x80\xa5\x4c\x28\x08\x09\xd7\xb5\x42\x48\x74\x71\x61\xd3\xb1\x45\x53\xaf\x9e\x50\xf5\x45\x05\xe6\x65\x70\x2f\xe0\xcf\x3d\x8a\x94\xf7\xf8\xfc\x25\x69\x1d\xe7\x16\xa4\x6e\x6d\x54\x3e\x56\xc5\x9d\xb4\x1e\x45\x1c\x25\x3a\xb6\x90\x84\xba\x6d\x70\x20\x2e\xfb\xd4\xf6\x3f\x07\x99\xfb\x2b\x8b\x42\xe1\x75\xbe\xda\x27\x50\xc4\x9c\x33\xe1\x48\xf0\xd1\xde\xa9\x9d\x0d\x11\xbf\xe1\x51\x2c\x58\x09\x33\x68\x2c\x19\xbd\x1d\xc1\x05\x9c\x47\x19\x33\x6c\xd5\xd8\xdf\x08\x4a\x19\xc1\xac\x92\x56\x5f\xbc\x05\x34\xa8\x06\x4f\xed\x7c\xd4\x77\x3d\x86\x76\x62\xba\x3b\x21\x4d\xb4\x69\xad\x22\xa2\x62\x76\x11\x7a\x58\xea\x8e\xa3\x0f\xbb\xb6\xc2\x89\x8e\x99\x14\x5d\x14\xd3\xe8\xf0\x51\x58\x47\x4b\xe0\x70\xe4\x43\x21\x54\x3a\xaa\xd6\x99\xe3\xcb\x33\xfa\xfb\x6f\x00\x00\x00\xff\xff\x17\x6f\x32\x29\x2c\x30\x00\x00") +var _staticJsCowyoJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\x31\xab\x06\x27\x19\x76\xe5\xeb\x43\x1f\xea\xc0\x5d\xec\xdd\x66\xd1\x2b\xb6\xd9\xe0\x92\x6b\x51\xb4\xc5\x1e\x2d\x8e\x65\x5e\x68\x52\x20\x29\x7f\xe0\x90\xff\xbd\x20\x29\x59\xdf\x89\x37\x9b\xdc\x6e\xd1\xe8\x25\x8e\x34\x9c\xef\xf9\x71\x48\x51\x41\xae\x11\xb4\x51\x2c\x31\xc1\xf9\x68\x4b\x14\xc8\x9c\xb3\x4c\xc2\x02\x56\x84\x6b\x3c\x1f\x8d\xce\xa2\x1d\x13\x54\xee\xc6\x31\x97\x84\x46\xab\x5c\x24\x86\x49\x11\x8d\xe1\xd7\x11\x00\xc0\x6c\x06\x3f\xa2\xc9\x95\xd0\x40\xa0\x7c\x3a\x05\xb3\x26\x66\x0a\x44\x03\x97\x22\xb5\x7f\x99\x81\x44\x0a\xc3\x44\x8e\x1a\x8c\x84\x25\x02\x13\x5b\x79\x8b\x74\x0a\x3b\xc6\x39\x08\x69\x4a\x86\x4b\x04\xa3\x58\x9a\xa2\x42\x1a\xc3\xcd\x1a\x8f\x8c\x3d\xe9\x12\x21\x21\x9c\x23\x05\xb2\x32\xa8\x2c\x6f\x6d\x64\xa6\x61\x89\x4c\xa4\xe5\xb3\x95\x54\x25\xc3\x4b\xd8\x30\xce\x99\xc6\x44\x0a\xaa\x63\xf8\x61\x05\x3f\xb3\xcd\x06\x29\x23\x06\x7f\x06\xa6\x21\x23\x5a\x5b\x55\x0a\xb9\x60\xea\x42\xa5\xb0\xff\x97\xcc\x38\x12\x6a\xc5\x20\x4d\x71\x0a\x4c\x68\x83\x84\x82\x5c\xb9\x31\x46\x11\xc6\x99\x48\x63\x47\x7d\xe4\x40\x71\x29\x73\x91\xa0\xf3\xdf\x14\x76\x84\x99\x29\x1c\x35\x28\x7d\x69\x2f\x1b\x04\xc3\x36\x28\x73\x73\x7e\xbc\xa9\x9c\x87\xa1\xe3\xfc\xf2\x3a\x8b\xc2\xdf\x69\xb2\xc5\x0b\xca\xcc\x77\xb9\x31\x52\x84\xe3\x58\xe1\x46\x6e\xf1\x7b\x4e\xb4\x8e\xc6\x0f\x93\x1b\xdc\x9b\x28\xb0\xb7\x98\x48\x83\xf1\x79\x63\x84\xd5\xca\x86\x0f\xf7\x06\x16\x60\xd6\x4c\x4f\x1b\xcf\xed\x45\x54\xaa\x61\x61\xff\xe4\x1b\x14\x46\x77\x39\x70\x62\xa3\xb5\x18\xb6\xc3\x5e\x85\xf1\xb0\x00\x91\x73\x7e\xde\x79\xce\x56\x10\xbd\xaa\xb9\xce\x32\x8b\x49\x96\xf1\x43\x54\x68\x38\x75\xaa\xb4\x2c\xb8\xeb\x31\x88\x70\x7e\x29\x77\xb0\xa8\x22\x01\xdf\x7c\x03\xaf\x3a\xee\xb7\x57\xc2\x91\xa8\x1b\xff\x24\x2a\x28\x5a\x22\x2a\xcd\x35\x9a\x92\xd4\xd9\xec\x23\xde\x22\xb7\x86\x14\x2a\x9c\x64\x45\x61\xc1\xdd\xf9\xa8\xcc\xc4\x9b\x35\xd3\xbe\x22\xdc\x48\x97\x80\x65\xa6\x01\xae\x56\x98\x98\x22\x77\xe1\x16\x0f\x79\x06\xb8\x45\x71\xac\xb2\x37\x82\xda\xca\x91\x82\x1f\x60\xc5\x14\x6a\xf8\xe3\xb7\xdf\x6e\x34\x48\x05\x6b\xc2\x57\x40\xc0\xd7\x4b\x51\x64\x96\x4b\xae\x51\xb9\x52\xcb\x90\x82\x39\x64\x4c\xa4\xa3\xd2\x9b\x99\xc2\xed\x8d\xcf\x0f\x9b\x5f\x96\xf4\x07\x91\xe5\x26\x1c\xc7\x5b\xc2\xa3\xc2\x90\x44\x0a\x2d\x39\xc6\x5c\xa6\x51\x50\xea\x3a\x87\x00\x26\xe0\x71\x26\x4e\xe4\xee\x20\xe3\xf2\xd1\xdf\xae\x7d\xea\xb6\x59\x4a\x11\x85\xce\xa6\x70\xda\x2c\xae\x4e\x5e\x59\x37\x57\xba\x0d\x28\xd7\x4e\xc4\xa2\xe0\x66\x33\x10\x12\x92\x35\x11\x29\xea\x2a\x10\xc7\x5f\x0f\xdb\xdc\x50\xc3\x83\x6b\x5f\xf1\xb6\x47\xf6\x72\x8b\x15\x66\x9c\x24\x18\xcd\x70\x96\x4e\x83\x60\x5c\x4f\x8e\x51\x9d\xdd\x89\x58\x70\x0f\x0e\x5c\x93\xad\x83\x81\x23\x6d\x9e\x39\xfc\x2f\x44\xde\x4d\x07\xc3\x55\x1a\x5d\x16\xbc\x36\x3f\xb9\xa1\x45\x41\x4f\x41\x20\xd2\x37\x42\x9a\xb5\xc7\x02\x3f\xcf\x40\x1d\x2d\x4b\x59\x35\x47\xcd\x66\x70\xa5\x5c\xfa\xda\x14\x4a\x72\xa5\xec\x4f\x4f\xa8\x1b\x4e\x6e\xc8\x7c\xe5\x85\xb6\x5d\xde\x54\xc1\xa8\x1c\xcf\x7b\xc2\xdf\xe3\xdc\x96\x41\x67\x31\xf9\x85\xec\xa3\x26\x73\x73\xc8\x70\x0e\xe1\xd5\x87\xeb\x9b\xb0\x89\x92\xb9\xe2\x73\x08\x67\x79\x46\x89\xc1\xd6\x33\x4a\x0c\x99\xc3\x5f\xaf\x3f\x5c\xc6\x76\x42\x16\x29\x5b\x1d\xa2\x2e\x3a\x0a\xdc\x7d\xb4\x11\x9a\xf7\x27\x5c\x17\x95\x33\x92\xe2\xbc\x19\x2c\x7b\xeb\x92\x6c\xb0\x4b\xbc\x42\x93\xac\x91\x7e\x24\xe6\x38\x84\x13\x6d\xde\xd9\xdb\x4d\xea\xbb\x96\x28\x9d\x27\x09\x6a\x3d\xaf\xb0\xdd\x1a\xd4\x87\xef\x3d\x39\x51\x2b\x93\xf2\xfa\xc4\x19\x0d\x8a\xe0\x5b\xa1\x71\xa1\x8b\x2d\x76\x1b\xda\x3e\x25\x06\x45\x10\x4a\x3d\xff\xa0\xe0\xd2\x9e\x09\xcb\xab\xed\x1e\x58\xb8\x10\xc6\xb9\x60\xfb\x8f\x76\x26\xe8\x31\xaa\xd4\xb2\x96\x7e\x43\xca\x41\xa7\xe4\xda\xd7\x5d\xf7\xf6\x1d\x20\xd7\xf8\x38\x73\x57\x84\xf1\x5c\x61\x9f\xb9\x77\xa7\x45\xc7\x01\x87\xf3\xc1\x06\xb5\x26\x29\xf6\xb0\x1a\xac\xfd\xa3\xac\x66\x5a\xa1\x52\x52\xd5\x92\x6a\xbf\x56\x53\x7f\xf3\xe4\xd4\xfa\x64\x15\x06\x0d\xbc\x3f\xfd\x1e\xef\xdf\x61\x6f\x7a\x4b\xef\xf5\x90\xeb\x16\x84\xb9\x71\xa0\x13\xd8\x3e\x80\x25\xc4\xfa\x6a\xf6\x8b\x96\x22\xe8\x82\x8c\xa7\x0c\xed\xd3\xb0\x42\xb8\x12\xd7\x47\x4d\x24\xce\x14\xdb\xe0\x3b\xa9\xae\x91\xaf\xde\xa2\x36\x2a\x4f\x4c\x03\x97\x1f\x87\x80\x8e\xed\xe3\x00\xf0\x64\x3c\x7b\x3c\x42\x7d\xd5\xd8\xf3\x75\xd7\xf8\x67\x95\xef\x4b\xd1\xf9\xa2\xe3\x32\xb9\xbd\x22\x29\x46\x76\x51\x9a\xad\x15\xd1\xf8\xf9\x25\x67\x99\x3e\x73\xc5\x79\xe2\x52\xe5\x79\xed\xf7\x4b\x61\x7e\xe9\xc2\xbc\xcf\x17\x76\xd1\x6b\x99\x96\x79\x57\xb2\x1b\x5b\x82\xe0\xbd\x4c\x6e\x83\x21\x77\x95\x5d\x90\xf4\xe9\x0f\x0b\x08\x66\x9d\xb5\x5c\x99\x2d\x30\x81\x60\xb6\x65\xb8\x0b\x4e\x31\xf3\x71\xda\xfe\x24\xf8\xd3\xea\x8b\x94\x99\x07\xf5\x7d\x81\xbd\xa7\xe8\x35\xf2\x25\x67\x7a\xed\x90\xef\x09\x5a\x0c\xcf\xed\xb7\x80\x3c\x2f\xc9\xaf\xc8\x6a\x46\x34\x13\xf3\xca\x3f\x08\x5e\xa0\xf0\xab\x82\xc2\x82\xa4\xc0\x8e\x22\x7a\x48\x07\x01\x64\x20\xc6\xc7\xf0\x3e\xc6\x1b\x7d\xfc\x8e\xba\x3c\xec\x88\x17\xf0\x79\x02\xf0\x41\x91\xa8\x43\x66\x9e\xbc\xed\x2a\xf8\xbe\x74\x5e\xff\x57\x70\xf3\xc9\xcd\x4c\x2d\xfd\x9a\xd3\xc6\x85\x7f\xf0\x35\x36\x60\x83\x3a\xbf\xc5\xa7\xd6\xf9\xa5\x09\xab\xae\xe7\xc5\x41\xf7\x9a\xeb\x03\xa7\x27\x77\x60\x6f\x2f\xde\x5f\xdc\x5c\xf4\x83\x9f\xe4\x94\x33\xfd\xf4\xe0\xf7\x02\x6a\x5f\x55\x0f\x75\xa2\x2f\x3e\xbd\xec\x6d\xf2\x7c\xe9\xb2\x3f\xb1\x7a\xff\x47\xeb\xfe\x2c\x0a\xea\x38\x1e\x8c\xe3\x84\xb3\xe4\xb6\x7a\x93\xda\x88\x26\xc6\x99\x7f\x07\xf7\x16\x57\x24\xe7\xa6\xee\x1d\xf7\x0a\xf8\xd8\x76\xc0\x02\x32\x25\x37\x99\xed\x8c\x39\xda\x1b\x28\x0c\x2a\x20\x35\x9a\x18\x2e\xa5\xc1\x39\x14\x53\x1c\x13\xa9\x7f\x97\xed\xdd\x0f\x84\x73\xf7\x7e\x95\xc9\x5c\xc3\x9a\x69\x23\xd5\x21\x0e\xa6\x10\xd4\x3d\xeb\x5e\xee\x56\x52\x07\x5e\xf7\x0d\x34\x77\xed\xb7\xa7\x77\xe5\xcc\xed\xbc\x62\x49\x9e\xc0\x27\x0a\x16\x36\x74\x2b\xa6\x36\x51\xf0\x46\x21\x1c\x64\x0e\x3a\x2f\x7e\xec\x88\x30\x60\x24\x38\x69\xaf\xdb\x96\xa9\xa1\x92\x7a\xc4\x0c\x6a\x05\xd4\x6a\xa9\x17\x5e\xf6\x96\xd1\x3f\x65\x6e\xfd\xae\x35\x52\xf8\x9e\x88\x04\xf9\xab\xe0\x5e\x4f\xe9\xda\xbb\x81\xa7\x76\x58\x75\xc2\xc1\x19\xe0\x0e\x21\x58\xbb\xdc\x0f\x81\x7b\xe3\x0e\x5d\x00\x33\xc0\x34\xc8\x0c\x05\xd2\x29\x90\x21\x2f\x53\xe9\xce\x25\x9d\xee\xe7\xfe\xd7\x1f\xcf\xe2\xc5\x72\x3b\xeb\x37\x2d\x41\xeb\x14\xb7\x5f\xf6\xa8\xb2\xb2\x54\x8f\xd8\x37\x7c\x1c\xe6\x06\xad\x31\x41\xb9\x52\xb6\x72\x7a\x4e\x2c\x0d\xce\x9f\x4f\x2c\xde\x6f\x38\xf6\x29\xd0\xf8\xaf\x6f\x4f\xbf\x49\x3f\x9b\x81\x5d\x46\x96\x60\xe5\xd2\xbc\x4d\xa0\xd0\xbd\xda\x6c\x3c\xea\xc9\xa5\xda\x86\xc2\x67\xa6\xd3\x71\x7b\x04\x82\xfa\x69\x23\x4a\x6d\x5d\xa9\xa2\x14\xa5\xab\x46\xcd\x0c\x6e\x48\x16\xef\x37\x1c\xb4\xb4\x25\x59\x9e\xd5\x63\x82\xe2\x1e\x29\x2c\x0f\xa0\x91\xa8\x64\x0d\x28\x52\x26\x50\xc7\x41\x33\xe5\xee\xdd\x40\xab\xed\x88\xb4\xa2\x5a\x53\xb2\x53\x63\x50\x1d\x5e\xb3\x88\x82\x74\x08\x8e\x5f\x5b\xfc\xec\x36\x3b\xee\x90\x56\x35\xb6\x1f\x26\x3e\x43\xf7\x67\xc9\xc8\x42\xd8\x17\xac\x8a\xab\x61\x0d\x9a\x00\x5b\xdf\xf3\xbd\x17\x1f\xcb\x85\xc9\x73\xce\x2e\xb6\xe5\x70\x72\x90\x82\xed\x3d\xc1\xa6\xb4\x3e\x61\x42\x81\xe8\xef\xa8\x34\x93\xa2\x60\xa7\x0d\x39\x00\x13\x65\xdb\x32\x8e\x4f\x9e\x71\xaa\xf5\xd7\x33\x4c\x32\x36\x36\x44\x21\x09\xc6\xf1\x2d\x1e\xa8\xdc\x89\x01\x2f\xb2\x55\x84\x96\xe4\x7b\x49\x11\x16\x8b\x05\xfc\x69\x0c\xbf\x5a\x00\x32\x64\x09\x3b\xa2\x4b\xa9\x6d\x7c\x4a\xd1\x40\x42\x14\x1a\xc8\xa4\x66\xae\x39\xd5\xc8\xd1\x49\x68\xd0\xda\x50\x68\x43\x54\x79\x9a\x34\x3e\x92\x5d\xdb\xbb\xdd\xb3\x9a\x28\x68\x87\xf4\x42\xd0\xd6\x56\x8b\xa5\x3c\xb3\x44\xee\x40\x9e\xfd\xd1\x73\x8e\x75\x4b\x78\x6e\xc1\xc2\x11\x76\xce\xe9\x15\x96\x68\x34\x50\xba\xab\x18\x61\xe4\xdc\xdd\x82\x25\xae\xa4\xc2\xc2\xd0\x89\xf3\xc9\xc4\x3f\xf1\x27\x25\xdd\x83\x06\xc3\x4a\x94\x63\x15\xeb\x7c\xe9\x97\xbe\xd1\xb7\x53\xef\x87\xee\x52\xb3\xbc\x26\x10\xfc\xdb\x04\xf7\x3c\x6e\xb3\x44\x41\xc7\x3d\x16\x65\x79\x19\x1b\x62\x40\xb1\x74\x5d\x05\x09\x48\x4a\x98\x80\xc8\xe2\xba\x14\x08\x2b\xe9\x8f\x7b\x1a\xb2\x6c\xea\xd5\x13\xaa\xbe\xa8\xc0\xa2\x08\xee\x04\xfe\xd0\xa3\x48\x71\x8e\xcf\x1d\xb1\x96\x49\xae\x81\xcb\xd6\x46\xe5\x7d\x55\xdc\x49\xeb\x30\xa6\xc8\xd1\x90\x25\xb7\xa8\xdb\x06\x07\xcb\xa5\x4a\x6d\xf7\xef\x20\x73\x77\x64\x91\x09\xbc\xcc\x37\x55\x02\xc5\xc4\x18\x15\x85\x8c\x86\x95\x53\x3b\x1b\x22\x6e\xc3\xc3\x2f\x58\x2d\x66\xd8\xb9\x24\x7c\x1d\xc2\x04\xce\xe2\x8c\x28\xb2\x69\xec\x6f\x04\x85\x8c\x60\x5e\x4a\xab\x2f\xde\x02\x3b\xa9\x06\x0f\xed\x7c\xd4\x77\x3d\x86\x76\x62\xba\x3b\x21\x4d\xb4\x69\xad\x22\x62\xdf\x5d\x44\x0e\x96\xba\xf3\xe8\xdd\xf1\x9e\x77\xa2\x21\x2a\x45\x13\x27\x76\x76\x78\xcf\xb4\xb1\x4b\xe0\x28\x74\xa1\x60\x22\x0d\xcb\x75\xe6\xf8\x7c\xe4\x62\x35\x9b\xc1\xcd\x87\xb7\x1f\xe6\xf0\x66\x2b\x19\x2d\xce\xb6\xd9\x35\x9f\xeb\x1d\xec\x32\xc5\xac\xdd\xbf\x3b\x96\x20\x44\xc9\x1a\x93\x5b\x0b\x95\xcc\x84\x1a\x08\x57\x48\xe8\xc1\xc1\x8e\x4d\x9d\xdd\x9a\x71\x07\xd7\x72\x67\xc7\xd8\x25\x37\x96\x3c\xcb\xaf\x0b\xe4\x16\xd5\x4e\x31\x63\x50\xbc\x1e\x8f\x6a\x67\xf9\xfd\xf9\xb0\x77\x4c\xb8\x37\x3d\xd1\x8a\xf1\x23\xf6\xb9\x4c\xf6\xb3\xde\x3b\xc6\xd1\x3f\xf3\x86\xb8\x26\x22\x57\x5a\xaa\x2b\xa9\x7b\xce\xfb\x66\x4a\x66\x51\xd8\xac\x8d\xb0\x33\xd6\x17\xc7\x03\x63\x2f\x04\xad\x8f\xdc\xde\x7f\xa2\xda\x7d\x30\x80\x7b\xf3\x9d\x47\xa5\x05\x6c\x9b\xf0\x52\x69\xdd\x1a\xf0\xc6\x81\x55\x6b\xc0\x91\x78\x0a\xdb\x98\xa3\x48\xcd\xba\x36\xac\xea\xb4\x42\xef\x6c\xa4\x60\x7d\x14\x7a\x12\xd7\x2c\x1d\xed\xfc\x73\x4d\x72\x2d\xef\x2a\x1e\x03\x72\x8f\x1c\x6a\x49\x58\xe9\xdb\x37\xec\x42\xd0\x8e\xba\x77\x47\xa5\x33\x85\x2b\x66\xe7\xcb\xb0\xa6\xa6\xd5\x3a\xb6\x85\x13\x3b\xa4\xd2\xff\x60\x66\x1d\x05\x6c\xe3\x5a\xe6\xba\xba\xd5\xe8\x57\x61\x9b\x33\xee\x8d\x22\xc5\xf9\x6f\x4f\x37\x09\xff\x15\x4e\x0a\x0b\x27\xe1\x7f\xa2\x10\x26\x47\x4e\x4e\xe4\x7e\xad\xe2\x14\xcd\x8f\xa8\x33\x29\x34\xfe\x05\x09\x45\xe5\x16\x31\xae\x06\x83\x71\x6d\x40\x38\x0e\x2b\x90\xeb\x84\xbf\xe1\x9b\x22\xf8\xd5\xd8\x4a\xb5\x49\xd7\x89\xee\xce\xb8\xfa\x8e\xe0\xda\x65\x5e\xb1\xa6\xde\xf1\xc3\xef\x99\xd0\xa8\x8c\xeb\x82\xc4\x6d\xaf\x06\xbd\xe9\x3e\xed\xe4\xda\x09\x99\x5e\x1b\x04\x93\x4a\xef\x66\x34\xdb\x7c\x8a\xcf\x74\xca\x6f\x00\xc6\xe7\xae\x39\x29\xbe\xdd\x21\x60\xbb\xd2\xd1\xdd\xe8\xbf\x01\x00\x00\xff\xff\x74\xe9\x85\xd7\xdf\x34\x00\x00") func staticJsCowyoJsBytes() ([]byte, error) { return bindataRead( @@ -810,7 +832,27 @@ func staticJsCowyoJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "static/js/cowyo.js", size: 12332, mode: os.FileMode(420), modTime: time.Unix(1518738836, 0)} + info := bindataFileInfo{name: "static/js/cowyo.js", size: 13535, mode: os.FileMode(420), modTime: time.Unix(1519120693, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _staticJsDropzoneJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\xff\x76\xdb\x38\xd2\x28\xf8\x7f\x9e\x02\xad\xb9\xb7\x2d\x39\x32\x65\x52\xfe\xed\x76\x7a\x1c\xc7\xe9\xf8\xde\x24\xce\x67\x3b\xd3\xd3\xd7\xc9\xb5\x20\x11\x92\x30\xa1\x48\x0d\x09\xd9\x56\x77\xb2\x67\xdf\x61\x5f\x64\x9f\x61\x1f\x65\x9f\x64\x0f\x0a\x3f\x08\x80\x20\x25\x67\x7a\xbe\xbd\xe7\xec\xf6\xf7\x9d\x89\x45\x82\x85\x42\xa1\x50\x28\x14\xea\x47\x6b\x51\x10\x54\xb0\x9c\x8e\x58\xeb\xf8\xd9\xb3\x7b\x9c\xa3\xbb\x51\x4e\x30\x23\x67\x09\x2e\x0a\x74\x82\xc6\x8b\x74\xc4\x68\x96\xa2\x76\x07\xfd\x51\xfe\x8a\xc9\x98\xa6\xe4\x43\x9e\xcd\x49\xce\x28\x29\xda\x0c\xe7\x13\xc2\xba\x68\x9e\x67\xf3\x02\x9a\x66\x39\x6a\x73\x80\x14\x9d\xa0\xed\x63\x44\xd1\x4f\xe2\x65\x90\x90\x74\xc2\xa6\xc7\x88\x3e\x7f\xce\x1b\xf2\x36\x31\x29\x46\x39\x9d\xb3\x2c\x47\x27\xa2\xd5\x2d\xfd\x7c\x6c\x3c\x0e\x48\xba\x98\x91\x1c\x0f\x13\x82\x4e\x6a\x9e\x7f\xfd\x8a\xc6\x38\x29\x88\xf5\xdd\x28\x4b\xc7\x74\xb2\x50\x5f\xb2\x7c\x41\x8e\x11\x1d\xa3\x76\xeb\x1e\x27\x0b\xd2\x42\x34\x35\x9a\x77\xcc\x4f\x1f\x72\xca\xac\xcf\x2e\x87\xff\x20\x23\x16\x58\x63\x5f\xea\x91\x1b\x5f\x7e\x21\x4b\xf3\x77\xe7\x18\x7d\x43\xdf\x50\x4e\xd8\x22\x4f\x0d\x8a\x9e\x65\x69\xc1\xf2\xc5\x88\x65\x39\x10\x8e\x65\x1c\x68\xd1\x45\x05\xc3\x8c\x8e\x3e\x28\x52\x72\x74\xcb\xd7\x9d\x2a\xf1\x0d\x40\x01\x34\x64\xcb\x39\x31\x41\x76\xc4\x98\x2d\xb8\x4d\x50\x6c\x14\x8e\x15\xea\x46\x8b\x63\xf4\xed\x18\x7d\x6b\x77\x8e\x9f\x3d\xd3\x03\xba\x9b\x67\x45\x41\x87\x09\x31\xda\x5d\xc1\x97\xed\x82\x24\xe3\x2e\x1a\xe1\x24\x51\x03\xfa\x81\x3f\xe2\x3f\xd8\x34\xcf\x1e\x50\x4a\x1e\xd0\x15\x19\x93\x9c\xa4\x23\x72\x9e\xe7\x59\xde\x6e\xb1\x29\x2d\xd0\x14\x17\xe9\x06\x43\x43\x42\x52\x44\x53\xca\x28\x4e\x68\x41\x62\xb4\x85\x8a\xc5\x9c\xe4\xed\x8e\xd5\x82\xf7\x40\xe2\x16\x50\x5c\x22\xcd\x1f\xa1\x1f\x7f\x44\x6d\x4e\x94\x6c\x2c\x7e\x9f\x9c\x9c\xa0\x56\x06\xf3\xd9\xe2\x8c\x53\x79\xa7\x06\xd5\xea\xa0\x9f\xc5\xe3\x23\xc4\x31\x3e\x46\xdf\xcc\x11\xd3\x74\x4a\x72\xca\x8a\x76\xb1\x18\xc2\x92\xe9\x0a\xb4\xe0\x6f\x35\x54\x09\xbc\x7c\x81\x7e\xb0\xba\xe0\xd8\x39\x2f\xd3\x85\xa0\x54\x49\x9c\x9b\xe5\x5c\xd1\xe5\x9a\xb7\x45\xe4\x71\x9e\x93\xa2\xe0\x68\xcc\x16\x05\x43\x84\xb2\x29\xc9\xd1\x90\xc0\xc7\x28\xcb\x11\xd6\xbc\xd6\x45\x69\xc6\x50\x0b\x3d\x47\x15\x5c\x80\x54\x0a\xfb\x92\x7b\xd0\x89\x62\x77\x21\x0f\xda\x06\x82\x16\xba\x26\xc3\xfd\x81\x46\xe5\xcc\x1f\xc1\xda\x4e\x16\xe4\x08\x95\xc4\x29\x97\xeb\x91\x58\xac\x5d\xa4\x96\xd9\x11\xac\xb2\x2e\x32\x57\xac\x78\xc6\x57\x8f\xe2\x60\x83\xb8\x12\xbf\x82\xb0\x0f\x0a\x85\xcb\x31\xfa\xd9\xff\xbc\x66\x82\x4a\xdc\x82\xbb\x3b\x18\xc9\xdd\x1d\x3a\x31\x9a\x38\xf3\x3d\xe2\xcf\xce\x70\x92\x9c\x4d\xc9\xe8\x4b\x9b\xa6\x05\xc3\xe9\x88\x74\xcd\xa5\xa1\x39\x5c\xbf\x46\xea\x8f\x6c\x6c\x35\xac\x9d\xe1\x33\x9c\xf2\x09\x03\xbe\xc3\x08\x3a\x45\xb8\x30\x26\x54\x70\xf8\xb7\x67\xcf\x7a\x9b\xcf\x10\xff\x7f\xf4\x2e\xcb\x79\x3f\xe3\x0c\x61\x86\x6e\x1f\x1e\x1e\x82\x38\xcf\xe6\xbf\x67\x29\xf9\x47\x11\x8c\xb2\xd9\xe7\xf6\x94\xb1\xf9\x51\xaf\x57\x7d\xd5\x91\x20\xce\xb2\xf9\x32\xa7\x93\x29\x43\xed\x51\x07\x45\xdb\x61\xd4\x45\xef\x30\xa3\xb8\x40\xef\x48\x9a\xc9\x56\x1f\x48\x3e\xa3\x82\xef\xf8\xf2\x24\x39\x19\x2e\xd1\x24\xc7\x29\x23\x71\x17\x8d\x73\x42\x10\x5f\x49\x53\x2e\x16\xbb\x88\x65\x08\xa7\x4b\x34\x27\x79\x91\xa5\x28\x1b\x32\x4c\x53\x9a\x4e\xf8\xa8\xb2\xf9\x92\xc3\xcb\xc6\x08\x16\x7a\x91\x8d\xd9\x03\xce\x09\xc2\x69\x8c\x70\x51\x64\x23\x8a\x19\x89\x51\x9c\x8d\x16\x33\x92\x72\x79\x94\xa5\x68\x4c\x13\x52\xa0\x36\x9b\x12\xd4\xba\x96\x5f\xb4\x3a\xd0\x4f\x4c\x70\xc2\x01\xd2\x14\xf1\xd7\xea\x2d\x7a\xa0\x6c\x9a\x2d\x18\xca\x89\xd8\xe9\x60\x3d\xd0\x74\x94\x2c\x62\x8e\x89\x7a\x9d\xd0\x19\x95\x9d\xf0\xcf\x81\x10\x05\x87\xc7\x32\xb4\x28\x80\x31\xe7\xcb\x2e\x9a\x65\x31\x1d\xf3\x7f\x09\x8c\x6f\xbe\x18\x26\xb4\x98\x76\x51\x4c\x39\xf4\xe1\x82\x11\xce\x61\xc3\x84\x8e\x48\xca\xbf\xc2\x69\xdc\xcb\x72\x2e\x3b\x00\xb9\x51\x36\xa7\xa4\x10\x83\x2e\x71\x84\x66\xbc\xa3\x39\x27\x2e\x93\xe4\x2a\xf8\x93\x87\x69\x36\xb3\xc7\x43\x01\xab\xf1\x22\x4f\x69\x31\x25\xf0\x59\x9c\xa1\x22\x83\x7e\x39\xeb\xf3\x27\xfc\x8b\x71\x96\x24\xd9\x03\x1f\xe3\x28\x4b\x63\xca\x87\x56\x1c\xc9\x59\xbc\x99\x12\x84\x87\xd9\x3d\x81\x61\x89\x59\x4f\x33\x46\x47\x82\xfe\x30\x23\xf3\x72\xa6\xe5\xab\x62\xca\x39\x72\x48\x24\xf9\x48\x8c\x68\xca\xa1\xf1\xa7\x6a\x64\x39\x47\x83\xb3\x3b\x17\xd5\x68\x9e\xe5\xd0\xaf\x3b\xe2\x40\xe1\xf1\xe6\x1c\x5d\x5f\xbe\xbe\xf9\xf5\xf4\xea\x1c\x5d\x5c\xa3\x0f\x57\x97\x7f\xbb\x78\x75\xfe\x0a\xb5\x4e\xaf\xd1\xc5\x75\xab\x8b\x7e\xbd\xb8\x79\x73\xf9\xf1\x06\xfd\x7a\x7a\x75\x75\xfa\xfe\xe6\x37\x74\xf9\x1a\x9d\xbe\xff\x0d\xfd\xf7\x8b\xf7\xaf\xba\xe8\xfc\xef\x1f\xae\xce\xaf\xaf\xd1\xe5\x15\x87\x76\xf1\xee\xc3\xdb\x8b\xf3\x57\x5d\x74\xf1\xfe\xec\xed\xc7\x57\x17\xef\x7f\x41\x2f\x3f\xde\xa0\xf7\x97\x37\xe8\xed\xc5\xbb\x8b\x9b\xf3\x57\xe8\xe6\x12\xfa\x94\xd0\x2e\xce\xaf\x39\xbc\x77\xe7\x57\x67\x6f\x4e\xdf\xdf\x9c\xbe\xbc\x78\x7b\x71\xf3\x5b\x97\xc3\x7a\x7d\x71\xf3\x9e\x43\x7e\x7d\x79\x85\x4e\xd1\x87\xd3\xab\x9b\x8b\xb3\x8f\x6f\x4f\xaf\xd0\x87\x8f\x57\x1f\x2e\xaf\xcf\xd1\xe9\xfb\x57\xe8\xfd\xe5\xfb\x8b\xf7\xaf\xaf\x2e\xde\xff\x72\xfe\xee\xfc\xfd\x4d\x80\x2e\xde\xa3\xf7\x97\xe8\xfc\x6f\xe7\xef\x6f\xd0\xf5\x9b\xd3\xb7\x6f\x79\x6f\x1c\xdc\xe9\xc7\x9b\x37\x97\x57\x1c\x51\x74\x76\xf9\xe1\xb7\xab\x8b\x5f\xde\xdc\xa0\x37\x97\x6f\x5f\x9d\x5f\x5d\xa3\x97\xe7\xe8\xed\xc5\xe9\xcb\xb7\xe7\xa2\xb7\xf7\xbf\xa1\xb3\xb7\xa7\x17\xef\xba\xe8\xd5\xe9\xbb\xd3\x5f\xce\xe1\xab\xcb\x9b\x37\xe7\x30\x48\xde\x52\xa0\x89\x7e\x7d\x73\xce\x9f\xf2\x5e\x4f\xdf\xa3\xd3\xb3\x9b\x8b\xcb\xf7\x7c\x3c\x67\x97\xef\x6f\xae\x4e\xcf\x6e\xba\xe8\xe6\xf2\xea\x46\x7f\xfd\xeb\xc5\xf5\x79\x17\x9d\x5e\x5d\x5c\x73\xca\xbc\xbe\xba\x7c\x07\x23\xe5\xd4\xbd\x7c\xcd\x5b\x5d\xbc\xe7\x9f\xbe\x3f\x17\x80\x38\xe5\xed\x09\xba\xbc\x82\xdf\x1f\xaf\xcf\x35\x4c\xf4\xea\xfc\xf4\xed\xc5\xfb\x5f\xae\xd1\xc5\x7b\x77\x42\xe5\x24\xf7\x9e\x3d\xeb\xf5\x80\xe3\xce\x67\x94\x31\x92\x4b\x89\x36\xcf\xb3\x7b\x1a\x93\x02\x18\x03\x0f\x69\x42\xd9\x92\xf3\x2e\x88\xbd\x41\x90\xa5\xed\xce\x00\x65\x29\x7a\x25\xa5\x15\x7f\x97\xd0\x82\x91\x94\xc3\x63\x19\x22\xf7\x24\x65\x45\xc0\x7f\x5d\x30\x2e\x8d\x0a\x96\x67\xe9\x24\x59\xa2\x21\xe6\x3a\x42\x96\xa2\x51\x36\x9b\x67\x29\x49\xd9\x46\x81\x88\xd9\xbb\x58\x72\x17\x28\x27\xb3\xec\x9e\xaf\xa2\x29\xe1\x70\x94\x80\xc5\x80\xcc\x90\x8c\x30\x57\x91\x25\xf3\xc6\x64\x4e\xd2\x98\xa4\xa3\x25\x9a\x92\x24\x01\xd1\x81\x62\x3a\x06\xb5\x85\xa1\x71\x8e\x67\xe4\x21\xcb\xbf\x14\x01\xa8\xd2\x6a\xb4\x8e\x16\xfd\x0c\x95\xbf\x65\x13\xf9\x18\x55\x36\x18\xbe\x0e\xbb\xaa\x55\xe7\xf8\x19\xe2\x32\x1f\x59\x4a\x7a\x5b\xbe\xed\xa2\x5b\x01\xe3\x0b\x59\x1e\xa1\x56\x96\xb6\xba\xcf\xe0\x77\xaf\x87\x4e\xe3\x18\xe1\x54\xd0\x4b\x92\x90\xe4\xa0\xa2\x4f\xe8\x3d\x91\x2f\xa0\xb1\xdc\xb1\x35\x82\x59\xda\x86\x97\x5d\x34\x4e\x15\x92\x08\xc4\x43\x70\xc7\xe7\x69\x88\x47\x5f\xf8\x39\xc1\x7d\xf2\xf5\x2b\xfa\xe3\xdb\xb1\x6c\xde\xeb\xa1\x33\x40\x18\xa5\x78\x46\x8a\x39\x1e\x11\xe8\x1c\xa4\x4c\xd9\x37\x12\xdb\xa6\x03\xea\x16\x1a\x7c\x2e\x3b\xaf\x74\x2f\x5b\xa0\x13\x74\xfb\x59\x75\xf9\xcd\x8f\xa9\x6c\x1a\xcc\x17\xc5\xb4\x3d\x4e\x3b\xaa\xb9\xd4\x15\x79\x6b\xf1\x88\x7f\xff\xad\x8b\x4c\x8a\x72\xf6\x69\x75\xbd\x54\xe2\xaf\x04\x9d\xbe\x9b\x46\x9c\x61\x1a\x1a\x4b\xc4\x8f\x9f\x19\x94\xd2\x2f\x4d\xda\xe8\x73\xd7\x5d\x42\x52\x74\x82\x70\x3e\x81\xed\x53\x9d\xbb\xba\xfc\x09\xef\xe0\x34\xcf\xf1\xb2\x0d\xad\x5e\xa0\x10\xfd\x2c\x3e\xd8\x42\x21\x3a\x42\xdb\x9d\x2e\xba\xfb\x42\x96\xe8\x04\x85\xc7\xe2\xaf\x9f\xe0\xbd\xf8\x01\x07\x37\xdd\x23\x02\x88\xb7\xd0\x6a\x0b\x85\x9f\xcd\x4e\xe1\xa9\x9e\x14\xc9\xbd\x2e\xa2\x94\x91\x1c\x8b\xb3\x9f\x1e\x52\x17\xdd\xd1\x02\x50\x94\xc7\x2f\xfe\x80\x9f\x24\xbb\x56\x7b\xdd\xe8\x67\xe3\xf1\x51\xf9\xf7\xed\xf5\x72\x36\xcc\x92\x40\xfd\xfe\xdc\xee\x1c\x1f\xdb\xc8\x03\x0a\x39\x19\x1f\x3f\x33\x1e\x72\xf2\x2a\xd8\x76\x73\xf5\x0e\xbd\x38\x29\xbb\x91\xb4\xed\xa0\x61\x4e\xf0\x97\x63\xab\x39\x87\x8d\x8c\xb6\xb7\x77\xf4\xf9\xf3\xcf\x66\x9b\x6f\x88\x24\x05\x71\x7a\x81\xd1\x96\x1d\xa4\xe4\x91\xb5\x3b\xc7\x1e\x44\x82\x38\x4b\x49\x73\xcf\x01\xf0\xab\xd5\xe5\x33\x87\x02\x8a\xf0\xbc\xbd\x4b\x0c\xf5\x2e\xc0\xf3\x79\xb2\x94\x32\x89\xcf\x79\xc7\x9c\x58\x07\xb0\x67\x45\x29\x69\x74\x05\x22\x77\x85\x34\x0a\xd0\xc5\x18\x8d\x41\xc7\xe4\xaa\xb0\xdc\x2b\xe2\x2e\xe8\x1a\xa5\xcc\xe8\xf5\x34\x84\x42\xca\x14\xcc\x24\xe8\x07\x2a\x94\x15\x29\xe2\x01\x62\x2a\x8f\x49\xb4\xb0\x41\x2a\x60\x36\x52\x45\x05\xc6\xb3\xaa\x5c\xc8\xc6\xe3\x1a\xb1\x90\x8d\xc7\x3e\xe9\xe9\x93\x72\x5c\x18\xb8\x4b\x15\x4e\xa2\xdb\x0d\x82\x0f\x9d\x18\x02\xc4\x43\x72\x63\x3a\x7a\x3d\x54\xcc\xc9\x88\x8e\xe9\xc8\x92\xb8\xeb\x8a\x1d\x03\x73\xaf\xd8\x59\xd1\xb7\x20\x1f\xcc\xdd\x14\xa7\x71\x42\xf2\xc2\x00\xe9\x1d\x78\x68\x82\x8f\x49\x42\x18\x59\x81\xdd\xba\x58\x68\x42\x48\x54\x64\x03\x9f\xc5\x4a\x77\xe5\x58\xad\x9e\xd5\xac\x9d\x12\x35\x6a\xa0\x65\x0a\x6b\x18\x9b\xc9\x0d\xe6\x0a\x2b\x82\x62\xce\x4f\x0e\x6d\xda\x45\xa1\xb5\xda\x9d\xe5\xbd\xce\x72\x43\xe8\xdb\xe7\x0e\x2c\x64\xf9\x52\x2a\x0a\xc7\xcf\x84\xdd\x86\xa3\xae\x55\x2b\x53\x47\xb9\x53\xfa\x06\xe0\x58\xda\x38\x54\xe3\x2e\xba\x2b\x35\x12\x57\x1b\x29\x1b\xa5\x8b\x24\x71\x94\x12\x9a\x52\x06\xcd\x6a\x16\x8c\x7e\x0f\x0a\x51\x39\x71\xe7\x8f\xf3\xac\xe0\x07\x19\xae\x85\x39\x6a\xdc\x0c\xd3\x34\x59\x8a\xb5\x4f\x0a\x56\x98\xdb\xaf\xb6\x4d\x04\xa5\x2e\xa6\xa9\xa0\xc0\x6f\x2a\xaa\xde\x70\x75\x84\xf2\x63\x36\x5f\xff\x5c\xe9\x83\xf3\xf7\x3d\xa6\x09\xd8\x01\x85\xba\x89\x96\xd9\x02\x8d\x70\x8a\x72\x32\xe1\x62\x22\xe7\x6a\x26\x46\xea\x48\x8d\x84\x55\x29\xd0\x53\xf5\x9b\xdb\x5c\x2b\x62\x92\xfd\x50\x42\xbf\x08\xd6\x3e\x2a\xf9\x5d\x42\xe3\x4a\x70\x2b\xce\xf1\xe4\x3c\x65\x24\x6f\x75\x35\xa9\xc0\x1c\xfb\xcd\x60\x91\xcd\x9e\x7f\xe0\x12\xe9\x13\x74\xdb\xe2\x40\x5b\x5d\x04\xf0\x0a\x86\x73\xa6\x7e\x90\x34\x2e\xff\x14\xfd\xc0\x8f\xec\xbe\xfc\x3b\x21\xf8\x9e\xf0\x1f\x38\x8e\x49\xcc\x8f\xe1\xd6\x8f\x82\xff\x92\x42\x52\xbd\x64\xd3\xc5\x6c\x98\x62\x9a\xf0\x1f\x24\xcf\xb3\x5c\xff\x31\x5b\x24\x8c\xce\x45\xb3\x79\x9e\x8d\x48\xc1\xa7\xd7\xfe\x65\xb6\x59\xcc\x93\x0c\xc7\xf3\x3c\x9b\xe4\xa4\x80\xbe\x58\xc6\x70\x52\x7d\x5c\x90\x34\x96\x90\xe4\x9f\x26\x98\x62\x31\x1a\xa9\x86\xe2\x4f\xf3\xed\x08\xa7\x23\x92\x90\xd8\xfc\xdb\x7a\x9f\xcd\xe6\x5c\x0c\x99\x7f\x9b\xef\x73\x52\x10\xa0\xe9\x0c\x3f\x02\x4d\xc8\xe3\x88\x90\x58\x00\x54\xcf\x72\x82\x47\x53\xf1\xe8\x9f\x0b\xb2\x20\x1a\x68\xa9\xdb\x39\x33\x18\x93\x31\x5e\x24\xec\x72\x2e\x0e\xd2\x27\x86\xe4\xe8\x6d\x6e\x96\x32\x62\x13\xbd\xc1\x60\x32\x18\x6a\x11\x27\xce\x40\x24\x21\x20\x5d\x51\x06\x5b\x1f\x9b\xe2\x94\x2f\x97\x19\x6a\x67\x39\x7a\x98\x92\x54\x5a\x0b\xf2\x99\x09\x2c\xce\x08\xd8\x55\xa7\x98\x0b\xee\x14\x0d\x30\x30\xde\x00\x61\x26\x0d\x1d\x9d\x40\x33\x37\x4e\x8a\xcc\xfc\x58\xee\xad\x86\xc5\x4a\x6c\xcc\x6a\x3b\x15\x76\x5a\x71\x80\x1a\x00\x5d\x06\xfc\x3c\x66\x82\x00\xa3\xa6\x16\x6b\x04\x2d\xf2\x04\xb5\x0b\x9a\x8e\x08\x1a\xdc\xf7\x83\x30\x0a\xb6\x07\x1d\xe3\x83\x9e\xfe\x7b\x91\x27\x47\x42\xfa\x3c\xab\xa3\xd4\x19\x4e\x01\x8d\x29\x4e\x27\xc2\x84\x32\x68\xcd\x17\xac\x35\xe0\xb2\x3a\x25\x9c\x33\x70\xbe\xb4\xc7\xe7\x19\x94\x09\x72\x9d\xf1\x55\x06\x35\x23\x6c\x9a\xc5\xd5\x71\x05\xde\x81\x89\xd6\x47\xa8\x35\xcf\x0a\xd6\xaa\x1f\xdd\xaf\x12\x8b\x82\x30\x24\xcd\x59\x7f\x7f\x73\x45\xfe\xb9\x20\x05\xf3\x43\xe6\x88\x9e\xe5\x24\x26\x60\xb5\x29\x94\x71\xb6\xb6\x07\x7e\x98\x67\x74\x46\xb2\x05\x93\x5a\x17\x74\x81\x72\xd1\x49\x81\x68\x8a\x66\x34\x49\x68\x41\x46\x59\x1a\x17\xe5\x08\x77\x82\x9d\xfa\x01\x4a\x90\x47\xa8\xbf\xbd\xbd\xbd\x5d\xdf\xfd\x9b\xec\x01\xcd\x70\xba\x04\x73\x20\x12\x52\x00\x58\x5f\x4a\x0f\xde\xfd\x1c\xe7\x7c\x12\x12\xd4\xbe\x26\x04\x8e\xf7\x06\x80\xf3\x94\x2f\x3e\xbe\xa3\x98\x10\x36\x1d\x63\x63\x41\x04\xeb\xf2\x11\xce\x94\x7d\xd5\xcf\x73\xaa\xb7\x8f\x02\xd2\x11\x8a\x1a\xa6\x67\x4a\xc4\x42\xcc\x10\x97\x51\x48\xc9\x10\x69\xdc\xa4\xfc\xd4\x4d\x14\x29\xb9\xd6\x6a\xb3\x19\xdf\xa4\x18\xcc\x2d\xcb\xe4\xd1\x88\xe9\x45\xac\xb4\x0c\x18\x16\x4d\xe7\x0b\xa6\x96\x3f\xf0\xa6\x09\x09\x16\x36\xff\x68\xa0\x10\x30\xd6\x36\xc2\x05\x7a\x20\x49\x12\x88\x5d\x31\x03\xe1\x53\x01\x01\xcb\x82\xe5\x74\x32\xe1\xfb\x5a\x2c\x6c\x8c\x38\x51\x3b\x65\x1b\x76\xb6\x41\x55\xa4\x0f\x3a\x01\x92\xb3\x22\xdb\xda\x92\x67\xe5\x24\xe4\x33\x78\xe9\xe7\x22\x31\x9b\xef\x64\x5f\x2b\x79\x59\x4d\x07\xdf\xd7\x1f\x70\xca\xe4\x34\x08\x41\x2a\x60\x81\xa1\x13\x8d\xa6\x8b\xf4\x0b\xbc\x58\x66\x8b\x1c\x15\x24\xbf\x27\xb9\x24\xd0\x08\x8b\x3b\x28\x13\xf0\xa2\x90\xdf\x65\xb3\x21\x4d\xb1\xa4\x20\x97\x08\x36\x86\x03\x73\x18\x26\x00\x4e\xa2\x5b\xd1\xeb\x47\x89\xc7\xe7\xf6\x5f\xc4\x05\xc9\x96\xfd\xbc\xa3\x97\xa1\x56\x34\x59\x86\xc6\x34\x85\xeb\x32\x2e\xbf\x45\x9f\x7e\x8a\x01\x2c\x9a\x4e\x56\xd2\xea\x62\x8c\x06\xaa\xf1\x80\xeb\x4a\x24\xe5\xaa\x51\xdc\x15\x7c\x29\xee\x14\x0b\xbe\xa9\x00\x49\x37\x37\xc9\x3d\xc9\x97\x9b\x9b\x82\x1f\x8b\x69\xb6\x48\x62\x21\x78\x17\xe9\x17\x12\x77\x4d\xd8\x9c\x11\xb8\xf8\x05\x3e\x86\xe6\xf4\x77\xc2\xfb\x18\x92\x24\x7b\x10\x9f\x5c\xd3\xdf\x89\xa4\xf8\x8c\xe0\xb4\xe8\x0a\xb1\x0b\x06\xc4\x92\xfd\xa0\xa9\x09\x1a\x76\xbb\x18\x33\xac\x05\x74\xb1\x18\x82\x1e\x18\x4b\x73\x37\x91\xe3\xd2\x04\x1d\x94\x84\x54\xdf\xd0\xf4\x3e\xfb\x42\x6a\x48\x38\xce\xf2\x11\x39\xfb\x6e\x3a\x0e\xf8\x42\x1e\xe8\x95\x6c\xd0\x12\xe6\x94\x37\x95\xf4\x48\xd1\x70\xc9\x48\xd1\x30\x91\x9c\x48\x47\x28\xda\xde\x6e\x16\xa2\x1c\x87\xb2\x57\x44\xd3\x98\xde\xd3\x78\xa1\xe8\x07\x26\x7b\x2c\x66\x02\xe7\x04\x0d\x09\x17\x97\x7a\x3d\x14\x94\x2f\x66\x9c\x92\x6c\x51\x24\x4b\x3f\x36\x4a\x28\x02\x59\xb4\x64\x5c\x73\x39\x62\x35\x6a\xcd\x34\x39\x61\x39\x57\x69\xe8\x98\x0b\xc0\x31\xa6\x49\x0d\x15\x78\xc3\x25\x74\xba\xba\x3b\x4e\x05\xa3\x3d\x4c\x86\x10\xaa\x53\xb5\xc9\xf0\x5d\xa9\x50\x78\x50\x66\xa0\xb2\xb2\xfb\xb7\x74\x46\xf9\x76\xd6\xd8\x7f\x9a\x31\x34\xe0\xfa\xca\x40\x4f\xfa\xd4\xdc\xe0\x0a\xc1\x10\xfa\xac\x26\xce\x0d\x05\xd8\x33\x28\x43\x42\xcb\x2c\xba\xf6\x2e\xa1\xec\x2b\x03\x57\x19\x1d\x38\x4a\x4a\x00\x9b\xb9\x3e\xbe\xa8\xdd\x62\x42\x58\xe1\xee\x9a\xc2\x6c\x3f\x88\x7f\xdf\x9a\xe1\xc7\x2d\x80\xba\x25\xf5\xd9\x01\xc2\xa3\x51\x96\x73\x85\x3b\x59\xa2\x22\xd3\xa7\x24\xa5\x34\xdd\xd3\x82\xb3\xd6\x98\x90\x18\x6c\x49\x7e\x05\x07\x3f\xbe\xe6\x50\x05\x03\xef\xee\x35\x2b\x20\x29\x9e\x69\xd3\x3c\xb0\x29\xe7\xb7\x99\x90\x08\x02\xfd\x1c\xa7\xc5\x98\xe4\xb9\x3d\x53\x68\x73\xf3\xfd\xe5\xcd\xf9\xe6\xe6\x11\xa7\x20\x47\x54\x6f\x85\x72\x9f\xab\x48\x68\xb5\xdd\x9a\xcb\xd4\x84\xa8\xe7\x06\x68\x8b\xe7\x73\xbe\xaf\x0f\x6e\x3f\x0f\xd4\x5d\x1c\xc7\xb5\x7e\x91\xcc\xde\xe3\x19\x39\x42\x2d\x71\x72\x5a\xad\x38\xa8\x83\x95\x30\x79\xd1\x19\x9e\x94\x0c\x3a\x24\x68\x42\x52\x92\x63\x46\x62\xbf\x8c\x80\xd3\xfa\x05\xff\xe8\x46\x03\x92\xb7\xef\xf5\x6c\x9a\xa2\x77\x2f\x03\x8e\x41\xaa\xe9\x0d\xf4\x97\xdc\x27\x58\x14\xee\x50\x85\x38\xd1\x38\x0a\x92\x70\x1e\x37\x31\xab\x9d\x7f\x8d\x52\xc9\x08\xe1\x0a\x21\x06\x4b\x47\xf4\x9a\xf3\x5d\x56\xf1\x04\xd0\x45\x73\x3b\xec\xc6\xe2\x76\x69\xb4\x48\x30\x23\x88\xd6\x28\xc3\x1a\xf5\x5f\x69\xcc\xa6\x47\x28\x8c\x1a\x10\xe0\x8c\x58\x70\x42\x60\x2e\xc4\xad\x2f\x07\xb0\x42\x87\x19\x9b\x82\x00\x15\xf6\x10\x39\x59\x26\x51\x72\x18\x67\x0d\x49\x34\xc8\x37\x84\x4e\xa6\x6c\x05\x36\x5c\x31\xd6\x43\x37\x59\xa2\x18\xe1\x04\x2e\xd3\x1f\x52\x50\x49\x70\x41\x00\xb3\x6e\x05\x69\xd8\x10\x07\x4e\xb7\x03\x18\x81\xb2\x98\x06\x9e\xa3\x94\xb4\xab\x0e\x46\x59\xca\x30\x4d\x07\x28\xe3\x3f\xf2\x6c\x3e\x58\x31\xae\x77\xf2\x50\xb3\xc1\x1b\x6f\x34\xce\x74\x41\x98\x4d\xc0\x92\x78\x72\x9d\x15\x04\xc5\x74\x46\xd2\x02\x8e\xca\x43\x32\xce\xf4\xce\xb5\xb9\xa9\xf6\xae\xcd\xcd\xc0\x01\x9c\xa5\xc9\x12\x81\xd1\x6a\x20\xe0\x49\x52\x6c\x6e\x66\xf9\xe6\xa6\x7a\xa8\x48\x61\xd9\x8e\x41\x6a\xe4\x74\xc2\x35\x2d\x84\xf9\xb9\x9b\x99\xc0\x2d\x86\x04\x21\xa5\x10\x9f\xe7\x04\x34\xc8\xb8\x4e\xfb\xe3\x9c\x35\x10\x02\xa9\x08\x84\x28\xcb\xf2\x19\x5f\x16\x83\xf2\x54\xbd\x28\x84\x8a\x50\x28\xd9\x55\x74\xb9\xf4\x95\x6a\xd4\xa0\xe6\x33\xb3\x1b\xae\xdd\xdf\x93\x3c\xa7\x71\x4c\xd2\xae\x0d\x0b\xc5\x19\x57\x6b\x63\x70\xe2\x60\x53\x9a\x4e\xea\x76\x3c\x4d\xb4\x55\x27\x6f\xae\xd3\x5a\x44\x6e\x82\xa8\x78\xbe\x19\x24\x27\xd4\x8c\xce\x08\x38\x37\x29\x5a\x2b\xbe\x10\x42\xa0\x2d\x59\x81\xca\x9d\x41\xab\x31\x52\x3c\x0b\x5d\xbe\xe3\xf2\x85\xdc\x95\xad\x39\x2e\x7b\x32\x25\x4b\x80\x6e\x32\xa1\x03\xa2\x7f\xcc\xc9\xa4\x0b\x82\x99\x3c\xe2\xd9\x3c\x21\x5d\xde\x02\x0d\x00\x93\x1e\x7f\x6b\x8d\xb9\x4a\x91\x27\x1c\x75\xc4\x67\xef\xe8\x8c\xdc\x2c\xe7\x64\x1d\x42\xfd\x73\x21\xae\xb6\x7d\x64\x2a\x82\xa7\x4d\xcf\x7f\x08\x58\x47\x68\x3b\x38\xf8\x73\x65\x92\x45\x0e\x10\x48\xf6\x12\xfc\xb3\xa5\x91\xa4\xa3\x16\x45\xe2\xb3\x06\x69\xc4\x49\x39\xe4\x08\x83\xb6\x41\x0b\xcf\xf6\xa2\x56\x7c\x01\x67\x16\x65\x49\x12\x26\x27\xb1\x5d\x32\xcb\x66\x16\x6e\x47\x3b\x7c\xe1\xc2\x39\x14\x68\x94\x63\x18\x45\x4c\x8b\x79\x82\x97\xe8\x0b\x1d\x52\xd0\xfd\xbb\x68\x46\xf4\x9f\x84\x8d\x82\x20\xa8\x02\x2a\x10\x23\xa3\x69\x4a\xb9\x96\xb7\x44\x34\x1d\x65\x79\x4e\x46\xac\xab\x9d\x1a\x06\xd0\x0e\xa0\x08\x82\x0e\x42\xdd\xc5\x40\x28\xa5\xfc\x41\x92\xc1\x03\xab\x07\xff\x60\x04\xc4\x81\x1a\x83\x90\x1d\x23\x70\xe9\x1a\x66\x0b\x86\xee\x71\x42\x63\xca\x6a\x0e\x0b\x8a\x54\x2f\x71\x01\x7b\x7e\xd3\xd1\x45\xce\xb2\xa2\x39\xa8\x1d\xc2\x9e\x86\x1f\xe9\x6c\x31\x43\xe9\x62\x36\x24\x39\x67\x72\xa5\x40\x1b\xc6\x39\xa1\x3f\xc7\x68\xb8\xb4\x15\xeb\x46\x95\x74\xd5\xda\x3a\x4d\xa5\xd0\xc4\x89\xbc\x02\xd0\xf6\x1d\xe3\x64\x3a\x25\x38\x26\x79\x61\x8b\x9d\x00\x9d\x4f\x8e\x4c\x58\x83\x3f\x50\xeb\xdd\x72\xeb\xf4\x81\x14\xd9\x8c\x6c\xbd\x81\x8f\x5a\x47\xa8\x25\x3e\x47\xd2\x75\xf9\xdb\xc0\x8b\xb1\xec\x63\x15\xc2\xce\xf1\xaf\x72\x00\xa0\xac\x20\xc9\xb8\x3c\x2c\x24\x74\xf4\x85\x9f\xf5\xbb\x7c\x7e\x07\x70\xaa\x32\xfb\xe7\x0c\x33\x15\xfe\x74\xce\x07\x75\xfb\x9b\x6d\x5b\x05\x17\xc7\x14\xbd\xb9\x79\xf7\x56\xa1\xd0\x45\x18\x9d\x5d\x5f\xa3\x82\x24\x64\xc4\xb2\x1c\xb5\x41\x30\x2a\x6b\x99\x32\x6b\x9b\x06\x39\x70\x7b\x4d\x11\x06\x9f\x00\x10\x71\x59\x41\x02\xae\xbd\x02\x07\x70\x11\x23\x6e\x90\xd5\xbb\xd2\x38\x0e\x78\x6b\x5b\x96\xb5\x45\x8a\xdd\x42\x98\xca\x61\x58\x75\xca\x9a\x1e\xf3\x2a\x75\x5a\x69\xf2\x53\xd8\x75\x4b\xc3\x5f\x4c\x73\x18\x2a\xb5\x04\x25\x9d\xa4\x59\x5e\xd7\xa7\x78\xf9\x06\x00\x49\x4e\x6d\xee\x1b\x8e\x7b\xe2\x4e\x01\x51\xbe\x3f\x95\xb6\xb6\x6c\x8c\x06\x78\x34\x22\x73\x36\x40\xa3\x29\x19\x7d\x29\xb4\x14\xdb\x28\xcc\x3d\x36\xb7\x0c\x37\x8f\x4c\x68\x5c\x08\x4f\x30\x4d\x0b\xa6\x0e\x03\x05\x0b\x8c\x4b\xb5\x51\x36\x9b\x61\x54\x10\x7e\xe0\x61\x24\xd6\x97\x6c\x1c\xac\x75\x76\x5d\xce\x85\x1f\x21\xa8\x4b\x1a\x78\x51\xc7\x47\xe7\x93\xe0\x48\xed\xae\x9b\x5d\x3c\x9f\x27\x74\x04\xc3\xe9\xcd\xe3\x71\x37\x98\x17\xf1\xa0\xe6\xcb\x0b\xb1\x07\xea\xc3\x1b\x2d\xd0\x40\x4f\xe1\x40\x8c\xc2\xb0\x7c\x0a\x4e\x55\x72\x07\x5b\x36\xcb\x5b\x45\x37\xe1\x67\x5b\x1c\xf5\x7a\x31\xb9\x27\x49\x36\x27\x79\x30\xcb\x7e\xa7\x49\x82\x83\x2c\x9f\xf4\x48\xba\xf5\xf1\xba\x17\x67\xa3\xa2\xc7\x79\xbd\x77\x2e\xe8\xdf\x03\x5b\xed\x5f\x30\x63\xf9\x96\x80\x64\xb1\x35\x1c\x12\x89\xbc\x6c\xe4\x38\x1b\x8c\x23\xcd\xbc\xca\x60\xeb\x65\x12\x01\x92\xc4\x6b\x89\xb2\xcd\xcd\x57\x64\x9e\x93\x11\x9f\xa5\x1f\xec\x57\x1f\x0b\x62\xc3\x02\xd7\x66\x52\x67\x57\x54\x4d\x95\x82\xb2\x8e\x50\x92\x6e\xe1\x62\x49\x28\x61\x02\xf7\x8c\x4a\x6a\xc2\xbd\x19\x1a\x2e\x98\xf1\xcb\x38\x4f\x59\x74\x13\xa6\x67\x3e\x5d\x0b\x96\x71\x4d\x0a\xb6\xc3\xc0\x5e\x0f\xc2\x7e\x2b\x67\x76\xbc\x48\xd4\x0e\x96\x12\x12\x23\x2e\x82\x4d\x11\xbe\x28\x48\x2e\x49\x2e\x95\x4a\x79\xd1\x68\xc2\x94\x6e\xca\xfc\x70\x3e\x2e\x0d\xcb\xf0\x3f\x5c\xfa\x88\xd7\x05\x17\xb3\x98\xa1\x2c\x1d\x91\x8a\xea\xb9\xcc\x16\x1b\x39\xd7\xcf\x70\xbc\xd4\x3b\x89\x61\x1a\x9d\xcd\x93\xa5\xf4\x94\x9c\x2d\x15\x07\x07\x72\xbc\xff\xc1\x69\xd2\xee\x34\x1a\x96\x39\xac\x5b\xe2\xbd\x07\xf9\xdc\xfe\x8b\x7e\x01\x66\x9e\x2d\xf9\xa2\x63\xdb\xe6\x4d\x90\x4f\x37\xd3\xf3\x19\xf9\x60\xe0\xbb\xd2\x04\xe1\xf0\x86\xc5\x13\xb1\x65\x80\x91\x07\x6b\x60\x0d\xd8\xe7\xa5\xbc\x73\x95\x98\x0d\xf0\x47\xb9\x27\xa5\xd7\xa9\x18\x37\xe1\xbc\xdd\xe6\xdd\x74\x06\x68\x86\xd3\x85\xcb\x34\xf6\x28\xd6\x45\xbf\xdc\x6f\xa9\x64\x6d\x1c\xc7\xe0\x6e\x90\x7e\x91\xfe\xac\xb9\xbc\xd3\x9a\xe7\xe4\x9e\x92\x07\xfe\x54\x7a\xad\x64\x39\x12\x97\xd2\xa8\x4d\xad\x1b\x21\x9c\x08\x26\x11\x73\x44\xd3\x49\x47\xf3\x89\xb0\xed\x0d\x62\x3a\x62\x67\xf0\xad\x30\xc2\x0e\xba\xd5\x67\x67\x59\x3a\xa6\x72\xbe\xac\x7d\x1d\xb4\x6f\xde\x5a\xb8\x6d\x89\x83\xa4\x3a\x1f\x72\xe5\x0e\xa4\xa1\xba\x7d\x78\x10\x36\xc0\x1a\x5a\xc5\xb1\x00\xf2\x96\xae\x63\x9a\x7d\x55\xde\x26\xe4\x30\x45\x4a\x11\x2e\x0d\x7e\x82\x4a\x05\xfa\xbf\xff\xf7\xff\x03\xd4\x12\x7d\x5e\xf3\x1a\xe7\x1c\xd5\x46\x6a\xed\x81\x52\x27\x31\x9a\x27\x98\xa6\x68\xc0\x05\xb3\x94\xcb\x03\x11\x48\x73\x76\x7d\x6d\x33\xbb\xd0\x48\x04\x7d\x15\x58\xb9\x61\x97\xf7\x6a\x8a\x29\xb7\x14\x9e\x03\x69\x42\xb5\x2f\xcb\x79\x5b\x3d\x12\x4e\x51\x39\x4e\x12\x43\x2c\x1c\xc9\x6b\xed\xeb\xf2\xa3\x33\x71\x5c\x21\xf9\xea\x03\xa0\xd8\x8c\x99\x81\xb5\xb1\x9b\x08\xa9\x36\xa6\x24\x89\x51\xfb\x61\x4a\x47\x53\x7d\xb2\x29\x75\x1f\x2e\x2c\xc4\x26\x64\x42\x8e\x0d\x1f\x6d\xa5\x44\x09\x49\x05\xa4\xa2\x59\xda\x29\x85\x39\x98\x47\x61\xed\xaa\xbb\x1c\x7e\xaa\x33\xc1\x71\xa5\x67\x36\xcf\x72\xc6\x25\xa6\x3a\x1b\x72\x39\xca\x0f\x2e\xa5\x9f\x35\x08\xc6\x07\xca\x46\x53\x71\x4d\x92\xa5\x8c\x0f\x29\x1b\x8b\x1b\xba\x39\x9e\xd4\x18\x5d\xc5\x80\x2f\xf8\x78\x0d\xe2\xb5\x86\x59\xbc\x6c\xb0\xbf\x5e\x8c\xa5\x11\x2f\xe5\xe2\x62\xce\x16\xb9\x63\x09\xd0\x6e\x17\xce\x57\x23\x3c\x23\x39\xee\xa2\x59\x36\xe4\x34\x89\xc9\x3d\x1d\xa9\xdd\xad\xf8\x42\xe7\x86\x60\x57\xe4\x82\x75\x37\x9a\x66\x5c\x47\x15\x9f\x3b\x30\x67\x94\x9f\x67\xa7\x60\xb5\xfa\x4e\xb8\x70\x62\xd2\x60\xaa\x38\x8f\xb2\x3c\x26\xf9\xbf\x04\x5e\xa0\xce\xa7\x90\x9f\xd5\x33\x34\xcb\x62\xab\xa3\xcb\x94\xb3\x83\x01\x5c\xab\xf7\xe0\x2a\x21\x9d\x18\x58\x26\x64\x45\x80\xd0\xa9\xa5\x7d\xcc\xf0\x52\xec\xd2\xf6\x51\xba\xfc\x0c\x03\xfc\x3c\x9b\xe7\x94\x9f\xc9\x4b\x15\xb6\x4d\x82\x49\x80\x5a\x52\x6d\x04\x5f\xa6\x45\x4c\x33\xf8\x33\xcb\x51\x0b\xd0\xed\x6d\xb6\x6a\x3c\x15\xe4\xf4\x3f\x45\x95\xda\xdc\x0c\x40\x7f\x1a\xe4\x60\x39\x17\x82\xb4\x51\x7d\x2a\x1b\xa6\x70\x3f\xb0\xe2\x04\xea\xf8\xda\xf0\xa5\x2e\x6e\x2c\x95\xa2\xa2\xa7\x8b\xd6\x59\xc0\x60\xfa\x44\xb7\xa5\xea\x5f\xd5\x96\x74\x47\xea\x96\x08\x0d\xc4\x70\x70\xa1\xbd\x58\x05\x27\x60\x30\x51\x8a\x26\x00\x8b\x83\x1e\x08\xb9\x89\x47\x6c\x81\x13\xf3\x1a\xc7\x55\xa1\x8c\xbb\x1c\x90\x42\xf1\x22\x57\x5e\x80\xf2\x4c\x26\xf5\x36\x3c\x92\x6a\x1e\x9b\xe6\xd9\x62\x22\x9d\x6e\x02\x79\xe7\xad\x2e\x2b\x6a\x8d\x3f\x8a\xcc\x6b\x9f\x99\x6d\x67\x0b\xb5\xfc\xc1\xfe\x17\x97\x67\x1e\xd8\xce\xa5\x4a\xc9\xc9\x4c\x0a\x66\xba\x0e\x58\x56\x58\xeb\x20\x56\xa0\x31\xcd\x0b\x41\xc2\x19\xfe\x42\x50\x01\xa2\x46\xba\x36\xe7\x4b\x79\xd2\x06\x11\x68\x9f\x43\xc8\xe3\x9c\x8c\x98\x74\x3d\xca\x16\xac\x14\xcc\x52\x11\xe5\x0d\x72\x4a\xd2\x11\x18\xd0\x86\x09\x99\x15\x3a\xfa\x8c\x23\x68\x02\x9b\x66\x0f\x02\xdf\xb1\xf6\x10\x86\xa1\x26\x59\x56\x73\x81\x07\x14\x78\x2d\x5b\xaf\xe7\x45\x44\x1e\x99\x98\x5c\xc9\xa4\xe5\xad\x27\x6c\x85\x79\x36\x9f\xd7\x1d\x7d\xb9\x56\xf2\x4a\x68\x76\xef\x48\x51\xe0\x09\x39\x42\x2d\xbe\xdb\x4b\x00\x4a\x6f\x10\x6c\xd0\x20\xd8\x35\x22\x40\xe2\x9c\xcc\x13\x3c\x92\x0b\x40\x9d\x94\x67\xa2\x03\xd1\x4c\x5a\x9b\x86\x79\xf6\x50\x08\x67\x72\xae\x71\x16\x8b\x39\xdf\xb2\x9a\xb0\x55\xa4\x29\xd1\xfd\x8d\xd3\x57\x01\x8a\x33\x62\x81\x42\x71\x8e\x27\x1b\xe9\x46\xac\xc6\xa4\x34\xf4\x60\xed\xc1\xd8\x27\x28\x53\x10\x68\x57\xa1\x2c\x9f\x79\x4e\x1f\x86\xbb\x5b\xd9\x56\x29\x0d\x9c\x2b\x44\x4c\xb7\x38\xe2\x98\x47\x65\x7e\x8a\x56\x7a\x98\xd4\x73\xdd\xad\xbd\xc9\x9e\x61\x92\xe9\x86\x3c\xb2\x23\xd4\xfa\x90\x10\xbe\xff\x2b\x41\x62\x61\x2e\xbd\x43\xf4\x2c\x4b\x86\x85\xf9\x07\xf7\x23\x19\x0e\x9a\x25\x5c\xc3\x89\xf1\xb2\x91\x76\x17\x63\xcb\x6c\x0b\xba\x52\x96\xa1\x21\xb5\x34\x5a\x34\xf8\xe3\x0f\xd5\xe4\xdb\x37\x69\xa0\xfe\xe3\x0f\xe3\xf6\x9a\x3f\x2d\x6f\xa8\x80\x9d\xa4\x37\xa0\x34\xba\xf3\x55\x4a\x21\xfa\x52\x46\x3b\x03\xe9\xc0\xb0\x57\xe3\xd4\x00\x74\xa1\x09\xb9\xc9\xb2\x97\x74\x72\x84\x5a\xaf\xa5\x24\x97\x08\xa2\xb6\x89\xd4\x3b\xfa\xb2\x13\xa0\x77\xf8\x51\x8f\xe5\x08\x39\x18\xbe\xa3\x2f\xd7\x24\x85\xf6\x05\x9d\x61\xa5\x6a\x09\xe9\xbc\x9c\xd7\xe8\x57\x1c\xd9\x8b\x14\x0c\xbe\x80\x33\x5c\x4e\xb4\xa4\xc5\x6f\x83\xa9\xb9\x12\xd3\xa4\x22\x80\x01\xdc\x6a\x8c\xe4\x4e\xc5\x89\x98\xa5\x05\x41\x0f\x18\x36\x3a\xde\x97\x3b\x49\x05\xc3\x6c\x51\x9c\x65\xf1\x8a\x09\x11\x20\x0b\x24\xda\xa3\x51\x16\x37\x8c\xeb\x4a\x76\x0c\xb1\xda\x47\xa8\x75\x6d\xe2\x13\x2b\xb0\x76\xe7\x02\x64\xf3\xd8\x06\xf6\xf1\xc8\xf0\x44\x61\x7a\x45\x97\xe6\xa7\xd2\xdd\x0b\xce\x84\x92\xa0\xfc\x24\x59\x8f\xb9\x79\xde\x3b\x42\xad\x33\xf3\xd3\x3f\x1b\xb7\x91\x71\x9e\x94\xa7\x07\xe8\x2e\x29\xbd\x88\xd6\x43\xd4\x3c\x98\x1e\xa1\xd6\x69\x2e\x0e\x02\xb0\x23\x6a\xcb\x0a\x9c\xdf\x61\x34\xc0\x49\x02\xfe\xcf\x7f\xe6\x98\xca\x83\x38\xae\x28\x45\x2e\x7f\xa8\x73\xf2\x11\x6a\xc9\x58\xa7\x15\x8e\x1d\x17\x72\x05\xc8\x8d\x44\x1c\x32\xb4\x53\x27\x58\x9c\xca\x6b\xe3\x6c\xc6\xf5\x5f\x25\xca\x01\x29\x11\x51\xbf\x2e\x5a\x36\x45\x9b\x35\x9e\x57\xfa\x28\xca\x8f\xd7\x4a\x7e\x0c\x44\xb0\x2d\x08\x3e\xe5\x57\x14\xb8\x7b\x50\xc1\x40\x59\x33\x04\xa3\x77\x11\x0e\x97\xea\xec\xe6\x0a\xc2\xfa\xb1\xbc\x93\x00\xcf\x65\xdf\xa5\x6c\x01\xfa\xc9\xc5\xc0\x35\x09\x30\x45\x81\x98\x69\x5a\x7d\xa7\x49\x92\x3d\x88\xc8\x0e\x38\xbf\xe2\xb4\xd0\x57\x78\x65\x7c\xef\x22\xa5\xac\x08\xd0\x35\xc3\x39\x53\x99\x03\xd0\x80\x0d\x07\x32\xf8\x24\xc7\x70\x99\x06\x54\x99\x64\xbc\x05\x5c\x6d\xda\x47\x93\x81\x6c\xde\xe0\xc4\xa7\x24\xfd\x35\xfd\x9d\x7c\xe4\x7d\x1e\xa1\x3f\x10\x1b\x1e\xa1\xd6\xcd\xcb\x56\x17\x4d\xf8\x5f\xbf\xf0\xbf\x66\xfc\xaf\x77\xfc\xaf\x2f\xfc\xaf\xff\xce\xff\xe2\x7f\x0c\x5b\xe8\x5b\xd3\xe5\x99\xf0\x4d\xe7\xec\x55\x6a\x87\x32\xb5\xca\xef\xf6\xd9\x55\xdf\xd1\xc4\x71\x25\x34\x8e\x6b\x57\x5e\xfc\x39\x2c\x27\xa8\xa7\xdd\x41\x7f\x70\x94\xea\x71\x12\x6a\x7c\x8a\x36\x37\xc5\xed\xd9\x26\x64\x86\x30\xec\xae\xda\x04\x5e\xe8\x39\x1a\x0b\x27\xea\x52\x82\x77\x95\xc7\x06\x46\x83\xd7\xb2\xff\x81\x6d\x6a\x51\xe7\x09\x75\x34\xd2\x7b\x80\x74\xd3\xef\xa2\xc1\xe3\x34\x87\x3d\xbd\x2b\x3c\x0d\x37\x0a\xe5\x8b\x48\x62\xc9\x5a\x5d\xe9\xbd\x39\x30\x62\xf6\xd0\x85\x30\x53\x98\xdd\x09\x0f\x4a\x9d\x84\x05\xd6\x78\x2a\xdc\xa5\x32\x15\x06\x80\xd1\x0c\xcf\x9b\x7c\x40\x6a\xee\x6a\x94\xae\x08\x47\x01\xce\x51\x69\x96\xcf\xb0\x12\xe7\x45\x17\x0c\xe4\x38\x8e\x0b\x94\x93\x84\xdc\x0b\x43\x8a\x36\xc9\xf2\x2f\xcc\x8e\xec\xf1\xd5\xde\xb5\x98\x06\x24\xe5\xf5\xc4\xe7\x28\x9d\x78\x6c\x48\x85\xd2\xbd\x40\x4f\x93\xaa\x63\x83\x13\x5c\x61\x30\x8d\x78\x00\x26\xd8\xa2\x8b\x1e\xa7\x79\x57\xa0\x68\xc7\xcd\x41\x60\x5d\xf5\xb1\x8e\x78\xb3\x1f\x22\x14\xff\xbe\x58\xd0\xf8\x48\x80\x0a\xcc\x23\x22\x7f\xde\xad\xb4\x96\x2e\xba\x31\x79\x54\xdf\xc0\x8f\x6a\x43\x88\x46\x2a\x35\x2d\x03\x3e\x7f\x50\x03\x58\xb4\x85\x68\x1f\xe5\xe6\xa3\xfd\x77\x6b\xba\x80\xf7\xa3\x6c\x91\x32\xdf\x20\xa0\x09\x38\x9e\x9e\xf1\x26\x35\xdd\x72\xc9\x93\x8d\xc7\x05\x61\xd6\xa0\x64\x6c\x41\x15\x15\x0b\xca\x37\x3b\x8a\x58\xff\xd5\xb0\xb6\x5d\xbb\x04\x2c\x3f\x8c\x6e\x39\xe6\x4f\xb8\x2d\x7b\x75\xf9\xae\xc7\xa5\x62\xc7\x35\x4e\x63\x34\x88\xb3\xd4\x74\x8a\xc2\x85\x21\x2d\xea\x58\x59\x6a\x93\xfc\x53\x43\x56\xd9\x82\x81\x1f\xa0\xf5\x0a\xef\x5a\xf6\x93\x96\xba\xdb\x6a\x01\x12\x9e\x53\x8e\xbe\x7b\x0a\xf4\x89\x4a\x5e\x72\x43\x08\x9c\x3a\x51\xda\x60\x73\xf2\x0f\x38\xbf\x77\xb5\x5f\x3a\x34\x36\x41\xab\x93\xa8\xda\x49\xb5\xb5\xb8\xc1\x4e\x63\xde\x8a\xc8\xd8\x24\xd3\xd3\xde\x38\x45\x64\xb9\x47\xdb\xd7\x66\xb3\x9a\x1d\x4b\xd0\xc2\x58\xbe\xe2\x01\x2c\xdf\x2e\x12\x01\xea\xe6\x5a\x94\xcb\x93\xbf\x30\x83\xda\x9b\xb8\xe8\xc6\x0a\x6d\x30\x4f\xb6\x7a\xc2\xf8\x86\x06\x99\x68\x84\xfb\x3a\xd8\xe1\x21\x2b\x98\xb6\x75\x8d\x45\x56\x2c\xd7\xa6\x75\x51\xba\x3b\x0b\x7a\x8c\x21\x30\x8e\x2a\xb3\x72\x2d\x3c\xac\xbe\xc9\x0b\x56\xb2\x5c\xd7\xe5\x50\x71\x19\x50\xe1\x51\x11\x1b\x15\x88\x57\xed\xce\xa0\xdc\x1a\xdc\x51\x95\x46\x1f\x13\x74\x0a\xba\x8f\x8c\xf3\xa0\xc5\xd4\xb4\x8b\xe9\x40\x28\xf0\xe1\xab\x51\xa5\xec\x88\x07\x63\xfa\xec\x17\xb5\xd3\xe8\x9b\xbf\x9a\xe9\xfb\x85\xd3\x77\x64\x68\x1e\xeb\xda\x4f\x9a\xb6\xc0\x62\xca\xb5\x36\xcb\x24\x60\x5e\x61\x60\xe1\x7b\x63\xd9\xc7\x30\x28\xf6\x35\xc6\xab\xd2\x6e\xa5\x08\xa1\x1e\xb5\xed\x81\x43\x3a\x1b\x2a\x0e\x8a\xea\xda\x07\x16\x37\x4d\xd1\xc5\xf9\x7e\x10\x04\xe8\xa8\x6d\xb4\xbf\xc7\x7a\xb9\xcb\x7b\x25\x74\x82\xee\x33\x1a\xa3\x6d\x53\x9e\x82\xfc\x55\xfb\x24\xdc\x14\xbd\xe7\x7b\xec\x49\xdd\x8b\xe7\xa8\x85\xe2\xdf\xb7\x24\x19\xb7\xd2\x8c\x6d\x69\x1a\xb6\xac\x14\x0e\xd5\x64\x1b\x91\x0b\x76\x42\x98\xc4\xad\x78\xb9\xbc\xc1\x13\xde\x43\xbb\x15\xd3\xfb\x56\xa7\x4c\xc6\x11\x19\xd9\x38\x22\x27\x1d\x47\x64\xe4\xe3\x88\xcc\x84\x1c\x91\x99\x91\x23\x5a\x23\x25\x47\x99\x94\x23\xb2\x46\x61\xe7\xe5\x88\xdc\x8f\xd4\xeb\xc8\xca\xcd\x11\x35\x25\xe7\x10\x49\x32\x22\x33\xd5\x46\x74\x7b\x47\x23\x27\x43\x47\x4d\x8e\x0e\x24\xa9\x60\xf4\xe5\xcb\xd3\xa1\xf1\xaa\x4f\xd5\x61\xe2\x11\x55\xd3\x75\x38\x09\x3b\x64\xda\x81\x29\x4d\x62\x99\xaf\xc3\x47\xa7\x5e\xfb\x7f\x7e\x45\x9d\xf8\xf7\x2d\xc9\x79\xed\xff\xf2\x15\x75\x7a\x01\x23\x05\x6b\xc3\xb7\x25\x27\x75\xaa\xa4\xac\xb0\x2b\x7c\xe2\x62\xed\xc0\x41\x27\xa8\x55\x76\xd8\x3a\x2e\xb3\x7d\x88\x65\xba\x11\xff\xbe\x25\xd7\xf2\x86\xb8\x0a\x75\xe0\x79\x48\xf3\xcd\xab\x70\xc8\x5c\x14\x36\x96\xee\x28\x2a\x63\xd0\x7e\x12\x22\x06\x42\xbe\x68\xb7\x7e\x8a\xe9\xbd\xc0\xe7\xe4\x93\x31\x80\x4f\xad\x17\x3f\x15\x73\x9c\xbe\xf8\xa9\x27\xff\x89\xe9\xfd\x8b\x96\x33\xbd\xd6\x2a\x12\x77\x9b\x67\x9c\x2c\x6d\x07\xb9\xc6\xfc\x2b\x1c\x3e\x3a\x71\x30\xae\x59\x93\xbc\x6d\xab\x73\xbb\x6d\xb1\x28\x64\x47\x9c\xe3\xd4\x97\xad\x86\x3f\x0f\xb8\xdc\x3b\x93\x17\xa4\x3f\xe8\x0c\x93\x0e\xfd\x2b\x2d\x4f\x6c\xa5\xd0\x63\xc3\xf6\xae\x13\xdd\x2b\x4d\x53\x92\xdf\x90\xc7\x55\x7d\x96\xed\x9e\xdc\x63\x1d\x59\x8d\x94\x18\xde\xe9\x81\x17\x13\xa2\xa1\xbf\xce\xf2\x59\xbb\xb3\xa6\x3a\x62\xee\x67\x15\xaf\xdf\x32\xf6\xa5\x0c\x46\xa8\x55\x43\xa5\xee\x01\xc7\x4f\x7e\xfa\x7c\x30\x9c\x9e\xa7\xd2\xdd\xb9\x0d\x41\x24\x33\xbc\xe4\x9a\x81\x30\xae\x77\x6c\x2d\xb7\x12\x5d\x8e\x53\xe5\x86\x2a\x9d\x99\x69\x6a\x39\x99\x9a\x38\xa0\x2d\x34\x28\xf2\x91\x74\xb7\xfe\x11\x7e\x28\x4f\xeb\x76\x4e\xfe\xb9\xa0\x39\x89\x3b\xee\x17\x2c\x9f\x94\x5f\xb0\x7c\xb2\xfa\x8b\x22\x1f\xfd\x5d\xc1\xff\x6d\x80\xda\xca\x61\xb6\xab\x37\xf8\x81\x1d\xd3\xaf\xfa\xf9\xbb\xea\x63\xad\xaf\x6c\xed\x21\x2b\x88\xb4\xab\xc3\x85\x92\x30\xcc\x18\x86\xbd\xe1\x12\x0d\x46\xec\x31\x88\x73\xfc\x00\x41\x51\x8e\xdf\x94\xeb\x24\x6e\x68\x07\xe2\x81\x54\x8f\x60\xde\xba\x48\x4c\x59\xd7\xf2\x28\xaf\x26\x9c\x82\x44\x9d\x27\xce\x52\xe0\xe4\x39\x42\xdb\x5d\xf7\xe1\x6f\xbe\x87\x32\xd8\x02\x74\x59\xd1\xb5\xdb\x42\x05\x4f\x40\x13\x81\x96\xb9\x54\x8e\x2b\x22\x28\x1f\x5d\x41\xb4\xca\x89\x01\x15\xf5\xcc\xef\xad\x6f\x7a\x3d\x74\x6a\x3a\xd5\x19\x8b\xc0\x88\xc1\xa1\x22\xbe\xd1\xe3\x19\x01\x42\x42\x74\x22\x33\xde\xa2\x1f\x7f\x94\xf4\x43\x27\x7e\x69\x21\x9b\x03\xfd\x02\x45\x05\x5b\x1e\x28\x00\xba\xcd\x1b\x89\xba\x31\xf6\x52\x48\x59\xfd\xd7\xf5\x26\x41\x6e\x6a\x12\xd5\x00\x6b\xc6\x5d\x23\xa6\x08\xeb\x85\xe6\x50\xf8\x9d\xbe\xfd\x95\xe1\x13\x38\x27\xe2\x02\x45\x44\x4f\x3c\xab\x62\xfb\x0e\xb3\x69\x30\xa3\x69\x5b\x72\xa4\x45\x2b\x6b\x17\xd2\x18\xe9\x4f\x14\xf7\xda\xb4\xeb\x54\x78\x85\xe5\x13\xc5\x2b\x6a\x34\x1e\x0e\xe1\x34\xb1\x7a\x47\x2f\x64\xf3\xaf\x5f\x9d\x2e\xd0\x0b\x09\xc0\xa5\x5a\xaf\x87\x60\x55\x42\x20\xb8\x72\xce\x8e\xe5\x51\x29\x27\x9c\x0a\xd6\xb1\x48\x76\x6b\x2e\x3f\x48\xb9\x24\xc2\xcb\xfc\x2a\xa3\xe6\xfc\x17\x7a\x60\xd5\x86\xc8\xc5\xf8\xc4\x5e\x19\x75\xad\x7f\x75\x58\xf6\x8d\x62\x26\xd5\x95\xfb\x69\x8d\xaa\x59\x85\x58\xae\xd2\xfa\xde\xdf\xb8\xab\xe1\x57\x39\x5d\xb5\xbd\xd7\x6d\xe7\x1e\x8a\xca\x28\x99\x2a\xad\x38\xe3\x8a\x86\xba\xd1\xf7\x93\x7d\xad\x75\xd3\x48\xb8\xb5\xd6\x71\xed\xe0\x5d\x78\x65\xc6\x66\x99\xad\xf9\x63\xfa\x25\xcd\x1e\x52\x4b\xe4\xa3\x8d\x16\x7a\x6e\x3f\x79\x8e\x5a\x1b\xae\xee\x58\xab\xbc\xa8\xe9\xfa\x3b\x3a\x41\x6d\x43\x1c\x6f\x39\xcb\x19\xf5\x50\x74\xec\xf9\xee\x37\xfd\x9d\x1c\xf4\x96\xbb\xa6\xc5\x97\xee\xa7\x6a\x53\x57\xe4\xae\xc0\xd6\x1b\xbd\xa6\xe7\xb1\x47\xe9\xe2\x4d\xd7\x53\xa4\x9c\x50\x1e\x1d\xb0\x58\x1a\x63\xda\x56\x28\x9d\x20\x29\x57\x6f\x44\x64\x9f\x99\xaf\xa7\xf3\x1d\x66\x74\x08\xa0\x5c\x19\x6f\xd6\xa6\x63\x1d\x6f\xd6\x91\x4e\x52\xfc\xbd\x65\x5b\x50\x12\x5a\x05\xc2\x8b\xbb\x89\xcc\x8a\x49\xad\xc3\xf0\x17\xed\x48\x35\x56\x8e\x54\x3e\xcb\x92\x69\xf0\x6c\x77\x6c\x73\x92\xb8\x06\x19\x65\x69\x2c\xb3\x62\x80\x8c\x34\x3b\x71\x2c\x4b\xea\xe6\x43\x84\xa5\x2a\xa3\x8c\x9e\x01\xac\x2c\xa2\xf5\x06\x24\x2b\xbc\xd4\x50\x8c\xac\xe7\xb5\xe6\x23\x2e\x03\xda\x96\xb2\x6f\x4c\x03\x64\xe5\xaf\xbe\x53\xcc\xfb\xe3\x8f\x42\xfc\x81\xcf\x00\x18\x2a\xdb\x3d\xa0\x7f\xb0\xd9\xab\x9c\x66\xcd\x93\x80\x00\x23\x14\x3d\x81\x58\x1d\x06\xde\x37\x6f\xe4\x06\xe9\x79\x25\x96\xb9\x1c\xe8\xca\xfc\x9e\xa6\x09\x14\x1c\xcd\xbf\xc7\xb0\x2e\xaf\x58\x45\x6c\x93\x10\xb4\x85\xbc\xbd\x9e\xcd\x41\x13\xd3\xf7\xf1\x04\x8f\xa6\xca\x9b\xca\x04\x22\xdc\xc4\xcf\x44\x20\x1f\x15\xae\x96\x8b\x64\x4c\x93\x44\x78\xd2\x88\x8d\x76\xb8\x60\xa6\x23\x5a\xa6\x1d\x93\x4d\x50\xda\x61\x28\x49\x74\x58\x55\x83\xf5\xdd\xbc\xbc\x5f\x88\x1c\x35\xd2\x23\xd0\x0c\x02\x53\x1e\x92\x28\x53\x2b\x50\x5c\x76\x5f\xc3\xd0\x2d\xd3\x9e\x08\x32\x4a\xc7\x74\x22\x5d\x91\xba\x22\x0b\x05\x98\xe7\xc4\x89\x1f\x61\xc4\x8f\xfa\x9a\xf5\x69\x8c\x06\x6c\x9e\x0c\x2c\x93\xed\x5c\x46\x96\x68\x22\xd2\xb4\xe0\xe3\xa2\xe2\xc2\x5b\x0d\xd3\x74\xa2\xf6\xa4\xf0\x73\x8e\x58\x60\x2e\x15\xb1\x13\xee\x73\x84\x82\x7f\x2e\x48\xbe\xbc\x96\x5e\xe5\xed\x8d\xbf\xb0\x79\xb2\xd1\xf1\xb4\x83\x63\x32\x27\x8f\xbf\x9b\x8a\x6b\xf8\x8d\x1c\xc2\x11\xaa\xd8\x38\x54\x84\x41\xfc\xbb\x08\xf1\x90\xbf\x3f\xb5\x5e\x7c\x4a\x11\x72\x5b\xc3\xda\xfa\xd4\x7a\xf1\x13\x9d\x4d\x20\x93\xce\x56\xfc\xfb\x56\x79\xce\xed\x49\xdb\x88\xef\xd3\x98\x30\x4c\x93\x42\x02\xae\xbe\xe7\x6b\x47\x59\x5a\x34\x68\xfe\xd0\x36\xbb\xf8\x3f\x56\xae\x9d\x15\x00\xfc\x61\x15\x40\x3d\x96\x2a\x89\xa0\x06\x64\xbc\x13\x36\xf5\x4f\x2d\x0d\xdc\xce\x3b\xe8\xe9\xc6\x01\x0e\x77\x38\xae\x55\x49\x43\x13\x19\x11\xc5\xcb\xd5\xb0\x64\xe2\xc2\xad\x19\xce\xbf\x94\x34\x2d\xee\x27\x62\xc3\x3e\xf9\xd4\xda\xdd\x99\x3f\x7e\x6a\xc9\xdd\xb9\xfc\xcd\x67\xf7\x65\xf6\x78\xf2\xa9\xb5\x8d\xb6\xd1\xee\x0e\xda\xdd\xe1\x4f\x49\xce\x37\xa6\x93\x4f\xad\x30\x08\x3f\xb5\xd0\xe3\x2c\x49\x79\x4f\x46\xb5\x88\x87\x3e\xdc\xc5\x45\xdb\xdb\xdb\xbd\xe2\x7e\xa2\x1a\x1d\x3d\x26\x34\xfd\xe2\x6d\x1a\x1e\x1e\x1e\xf6\xe0\xb5\x6e\x5c\x7c\x21\x6c\x34\xb5\x5b\x0f\xb3\x29\x99\x51\x9c\x8e\x32\x88\x19\x19\x65\xb3\x9e\x68\xd6\x4b\x4b\x76\x41\xe8\x27\x46\x59\x42\x5e\x40\x46\xf4\x9f\x7a\xe2\x87\x7e\x17\x93\x31\x9f\x00\xf8\x47\x3f\x9c\x20\x1a\x9f\x7c\x6a\x7d\xc0\x13\xb2\xc5\x07\x55\xb0\x3c\xfb\x42\x4e\x3e\xb5\xd2\x2c\x25\xfa\xf7\x96\x22\x18\x6f\xc2\x25\x5e\xd9\x80\xff\xda\xca\x17\x09\xff\x86\xdc\x93\x34\x8b\xf9\xf4\x0b\xe4\x8e\xf8\x9e\x73\xf2\xa9\xf5\xee\xfa\x83\x98\x4d\xd5\x2d\x42\x3f\xcd\x31\x9b\x22\xde\xf5\xbb\xa8\x1f\xec\x76\xfb\x61\x70\xb0\xd3\x0f\x77\x76\x0f\xd0\xdb\x70\x3f\xd8\x3d\xd8\x8d\x76\xc2\xc3\x6e\xb4\x1b\x1c\x46\x07\xfd\x83\xfd\x7d\x74\x16\xee\x05\xdb\xd1\xce\x41\xb4\xdb\xef\x46\x3b\x41\x7f\x6f\xff\x70\x3f\x0c\x51\xd8\x0f\x76\x0e\xc3\xed\xe8\x70\x47\x3c\xdd\x3b\xe8\xef\xa2\x30\xe4\x9f\x1d\xf6\xa3\x48\x42\xe0\x7f\xa2\xb3\x70\x3b\xe8\xef\x6f\x6f\x87\xfd\xbd\x6e\xb4\x1f\xec\x1c\xec\x1f\xec\x6e\x1f\x20\xfe\x74\x6f\x6f\xf7\x30\x8c\xba\xfd\xed\x60\x3b\xea\xef\xec\xec\x2a\x10\xbc\x67\x8e\x9b\xc4\x07\xbd\x8d\xb6\x83\x9d\x70\x67\x7f\xf7\x20\xec\xee\x6c\x07\xdb\xfb\xe1\x5e\x18\xf5\xd1\x59\xb4\x1d\xec\x86\xfd\xfe\xe1\xe1\x21\x7f\x1c\xee\x6f\x47\xbb\x3b\x21\x8a\xb6\x83\xbd\x70\xf7\xb0\x1f\xee\xf2\xa7\xd1\x5e\xb4\xb7\xb7\x73\xc8\x9f\xee\x47\xe1\xc1\x9e\x78\xda\xdf\x39\x38\xd8\xe9\xef\xa2\xb3\x28\x0a\xa2\x83\xfe\xee\xde\xde\x61\x77\x27\x0c\x0e\xf6\xa3\xdd\xbd\xdd\x10\x45\x3b\xc1\xfe\xe1\x4e\xd4\xdf\x81\x87\x7b\xd1\x5e\xb4\x1d\xa1\x68\x2f\xe8\xef\xec\x85\xbb\x7b\x3b\x00\x21\xdc\xde\x3b\xdc\x3f\x40\x6f\x77\xfa\xea\xef\x6e\xd4\x57\x2d\xd0\xd9\xce\x4e\x70\xb0\xbf\x1f\x6e\x47\x61\x37\x0a\x83\xfd\xfd\xc3\xfd\xdd\x28\x44\xf0\x74\xf7\x60\x7b\x77\xbf\x1b\x1e\x06\xd1\xce\x41\xff\xe0\x60\x1f\x01\x88\xfe\xfe\xf6\xc1\x6e\x37\xdc\x0f\xf6\x0e\xf6\xa2\xc3\x70\x17\x9d\xed\x84\xc1\xfe\xee\xce\xfe\xc1\xe1\x61\x37\xdc\x0b\xc2\x68\xbf\xbf\x1f\x1d\xa2\xfe\x61\x10\x85\xfb\x7b\xdb\xfd\x5d\xf1\x74\x77\x77\x27\x8a\x50\x7f\x3f\xd8\xdb\xed\x1f\xec\xf4\xf7\x04\x88\xc3\xfe\x76\x14\xa1\xb7\xee\x2c\xff\x0f\xf4\x2e\xda\xef\xee\xf6\x01\x78\x7f\xf7\x70\x87\x83\xd9\xed\xa3\xdd\x7e\xb7\x7c\xc0\x7f\x45\xfb\xe8\x6c\xb7\xdf\x0d\xa3\x60\x6f\x67\x7b\xf7\x70\x6f\x17\x19\x1f\x84\x28\xda\xef\x86\xe8\xac\x7c\xdb\x0d\x51\x68\x36\x0e\x01\x40\x68\x02\x35\x1a\xef\xf6\x91\xc0\xe2\x7f\x7c\x6a\x89\x95\x70\x79\x8f\x93\xad\xa8\xe4\xfc\x6c\x8e\x47\x94\x2d\xb9\x2c\x08\xc2\xc3\x83\xfd\xc3\x9d\x70\xf7\xc0\x5c\x28\x7f\xd9\xdf\xe1\xff\xa7\x96\x82\xd9\xfe\x20\xdc\xdb\x0d\x0f\x77\xf6\x77\xcb\x55\xf3\x97\xd7\xf0\x9f\x67\x89\x5c\x4f\xf1\x9c\xfc\x92\x67\x8b\x39\x17\x7b\x3d\xbe\x3e\xca\x65\xda\x9b\x28\xf1\xc5\xe5\xca\x0a\x01\x2d\x65\xe8\xff\xd7\xa4\x1e\x9c\x31\xff\x17\x97\x7a\xb2\x63\x10\xd0\x5b\xcf\xb7\x4a\x66\x73\xbe\x7c\x8b\x97\x24\x97\xcc\xe0\x63\xb5\x15\xcc\x59\x61\xb6\x26\xd6\x34\xf0\xb3\xe4\x72\x3f\x0a\xf6\x76\xf7\x0e\x76\x77\xa2\x6e\x74\x88\xde\xf6\x0f\xbc\xd2\xa5\x7f\xe8\x93\x2e\xf0\xb4\x22\x5d\x00\x44\x55\xba\xf4\xf7\xbc\xd2\x65\xc7\x2b\x5d\x22\xbf\x74\xd9\x17\x48\xc9\x1d\x24\x0a\xb5\x80\x34\x5a\x9d\x85\x87\xc1\xfe\x41\xd4\x07\x29\x51\x82\x0c\xf7\x83\x68\x67\x37\x0a\xb7\x43\xb3\xfb\x70\x57\x21\x68\xe1\x1a\xee\x04\x21\xdf\x09\x76\xfa\xe6\xc0\xe0\x69\x74\x70\xb8\x7f\x68\x12\x01\x40\x40\xd7\x26\xc5\x04\x72\x80\x28\xd0\xd5\x68\xd5\xdf\x51\x83\x93\x1d\x09\x90\xfd\xbd\x20\x8a\xb6\xa3\x9d\xfd\x43\x64\x74\xdf\x3f\x08\xf6\x77\xc3\xbd\x30\xec\x9b\xb8\xc2\x7e\x00\x24\x46\x67\xc6\xc0\xc4\x8e\xb2\x17\xed\x87\xc8\x20\x02\x3c\xdd\xd9\xd9\xdd\x3f\x40\x06\xc5\xcc\x2d\x25\xda\x17\x48\x01\x1b\xa0\xb7\x06\xf5\x8d\x56\x67\xc6\x54\x19\x20\x8d\x69\x35\xba\x37\x78\xc0\xc4\xd5\x60\x18\x63\x60\x06\x73\x19\x44\x30\x38\xd1\xa0\xd8\x5b\x9b\x5f\xff\xd7\xdf\x5f\x9e\x20\xff\xcd\x1d\xa0\x79\x37\x90\x17\xaf\xa6\x7b\x49\x0f\x9d\xbf\x7f\x85\x2e\x3f\xdc\x5c\x5c\xbe\xbf\x36\x1f\xb7\xaf\xe4\xf5\x93\xf2\x2c\xd6\x3e\xae\x76\x5e\xd9\x39\xce\x0b\x92\x77\xac\xe3\x75\x79\x94\x12\xf7\x46\xca\xa0\x51\x94\xd9\xdb\xd9\x94\xcc\x0a\x92\xdc\x13\x9d\xc4\x45\x26\xbb\x95\x9e\xae\x70\x44\x14\x19\x66\x74\x5d\x09\xf8\x4f\x7b\x72\xd3\x94\x91\x7c\x8c\x47\x46\x21\x82\x82\x2d\xc6\xe3\x00\x5d\xde\x93\xfc\x21\xa7\x4c\xc6\xb8\xcd\xd0\x03\xa4\xd0\x81\x4b\x71\xc3\xb9\xa7\x84\xc9\x8f\xe5\x10\x01\xa7\x5b\x3c\xe0\xa5\x70\x59\xf5\x79\x85\x29\x6f\xde\x4c\xf6\x43\x44\x2f\x56\xbe\x1e\x79\x92\x2d\xed\x65\x43\x32\xc5\xf7\x34\xcb\xb5\x17\xdb\x3f\x16\x66\x94\x98\x3a\xc1\x63\x51\x62\xc8\x4d\x02\xac\x92\xdc\x77\x4b\x0a\x52\x9d\x94\xda\xc9\x99\x5f\x02\xe5\x34\x14\xe8\x98\xa8\x66\x65\x62\x32\xdb\x1c\x65\x4e\xbf\x98\x38\x0c\x69\x19\x92\x31\x22\x8f\xf3\x04\xa7\x98\x65\xf9\x12\xa0\xaa\xc4\x09\x59\x3a\x22\x32\x07\xf7\xab\x1c\x4f\xd2\x57\x79\x66\x38\xe1\x72\xc4\x0c\x73\x16\xff\xd9\xf6\xbb\xb0\x55\x3d\x73\xde\xd2\x82\x05\x22\x54\xa0\x0d\xc7\xdf\x1c\x4f\xb6\xa6\x90\x4a\xdf\xbe\x5b\x2e\x3b\x93\xe9\xf8\xad\x1e\xe5\x33\xe8\xd6\x69\x4c\xd2\xd8\x69\x4a\xd2\xf8\xdf\x8b\x1f\x94\x05\xa8\x74\xca\x48\xfe\xb4\x6e\x71\x1c\xaf\xdf\x27\x7f\xed\x74\xc9\x1f\xfd\x1b\x7b\x84\x1a\x07\x4e\x97\xf0\xec\xdf\x47\xdc\x39\x2e\x18\xb1\xfc\x9e\x0b\x46\xd4\xa4\x5b\x8c\x6d\xb8\xed\x93\x7b\x21\x88\x72\xc1\xe8\x69\xa6\xe2\xdd\xc8\x98\x29\x9f\x6b\xbd\xb6\x70\xba\x9c\x65\xba\xc4\xa0\x11\x63\xdb\xeb\x95\x8d\xca\x5c\x43\x65\xee\x01\x0c\x97\xb7\x12\x9c\x8c\x0f\x80\x08\x29\xc3\x18\x0c\x25\x0f\xec\x1b\x71\xc2\xda\xdf\x49\x2c\x60\x78\xa8\xde\x5a\x63\xfe\xb4\x88\xa0\x72\x13\xd3\xc2\x93\x1d\xc6\xfc\xe6\x8a\x8c\x08\xe5\xf2\x5a\x98\xd6\xf5\x2b\x5d\xbb\xc2\xf4\x5b\x55\xcf\x84\x4d\xb6\x5a\x28\x8a\x8f\x42\xb9\xce\x55\xee\x3a\xcd\x21\xc2\x15\x99\xac\xe4\xe0\x64\x69\x70\xcd\xd3\x2b\x58\xd7\x43\x16\xf7\xb2\x48\xf5\xbd\xb2\x2b\xb0\xf6\xca\x56\x2b\xdd\xa2\x2c\x1b\xb7\x63\x50\x0c\x58\x4e\x6d\x6f\x19\x17\xbc\x6a\xa9\x2e\x2a\xed\x5e\xc1\x35\xec\x25\x1e\x7d\x79\xc0\x79\x5c\x40\x99\x3e\xcc\xa8\xa8\x01\xf8\xac\x4a\x9d\xca\xc0\x2c\x4f\x1e\x0f\x7c\x17\xb1\x8a\xff\x63\xdf\x8f\x97\x6d\x89\x3d\x4d\x92\x76\xeb\xd6\x34\x29\x7e\x36\xbd\x21\xfb\x86\x37\x64\xdf\xf1\x86\xec\x1b\xde\x90\x7d\xd3\x1b\xb2\x6f\x7a\x43\xf6\xd7\xf2\x86\x2c\xfd\x21\xfb\x8e\x9f\x9f\xed\x11\xd9\xf7\xde\x5a\x43\x83\xbe\xe5\x13\xd9\x6f\xf6\x89\x14\xde\x88\x7d\xd3\xb3\xb1\x7f\x7b\x47\xfb\x15\xaf\xc8\x86\x3b\x57\x41\x11\xa3\x47\xbf\x67\xa4\xc6\xaf\xc9\x37\xd2\xc4\xa7\xef\xf3\x8e\xac\xf8\x47\x0a\x8a\xa5\x59\x4c\xa4\x83\x64\x95\x70\xfc\xa5\xe3\xea\xa6\x13\x14\xd4\x5f\xd2\xfa\x58\x69\xe7\xe9\xac\x54\xd0\xdf\x6d\x56\xda\x31\x58\x69\xc7\x61\xa5\x1d\x83\x95\x76\x4c\x56\xda\x31\x59\x69\x67\x4d\x56\x32\x19\x66\xa7\x9e\x61\x76\x2c\x86\xd9\x59\xc5\x30\x8a\xd4\x25\x36\x77\x74\xe7\x69\xfc\xb2\x63\x7d\xbf\x82\x5f\x76\x9a\xf9\x45\xa3\xb3\xb3\x26\xbb\x00\x37\xe8\xdb\x15\xe5\x84\xa8\x22\x7a\xda\x3a\x94\xa7\x72\x7f\x5f\xf1\x3c\xb1\xa4\xa6\x1d\x62\x5a\xa5\x36\xc0\xbd\xcb\x75\x93\x26\x1f\x55\x6c\x5a\xc3\xc4\x27\x9f\x5a\x68\x9a\x93\xf1\xc9\xa7\xd6\x3f\xf0\x3d\x16\xf5\xe6\x8f\x16\xa9\xc8\x22\x1f\x1f\x1b\x37\x16\xa2\xfd\x0b\x28\x01\xee\xba\x57\x96\x91\xa1\xe8\x39\x6a\xfd\xd4\xc3\x15\x17\x57\xef\xc6\x51\x15\xc1\xc6\x40\x9a\xe9\xc4\x97\x4f\xae\x7b\x3d\xbf\x97\xcb\xaf\xd4\x22\xac\x57\xae\xf6\xc5\xff\x13\xc8\x90\x54\xe5\x7f\xa8\x72\x0a\x09\x0a\x96\xcd\x3f\xe4\xd9\x1c\x4f\xb0\x28\x99\xe5\x73\xcb\x16\x33\x2b\xe2\xbe\xf9\x96\xad\xc9\xff\xf1\xc3\xdb\xcb\xd3\x57\x17\xef\x7f\xf1\xad\x11\xa9\xd3\x94\x73\x25\x42\x6a\xdb\x42\x3f\xb0\xa8\x5b\x17\xcb\xdc\xad\x54\x85\xad\xe9\x44\xc2\x2c\x89\x52\xbd\x2f\x96\x44\xae\x3c\xab\x77\x25\xe2\x8b\xa8\x8a\xab\x3f\x46\xb8\x11\xbb\x75\x48\xe0\x07\xbb\x9a\x00\x4f\x27\x81\x8f\x08\x0d\x64\xf8\x0e\x1a\x57\x04\x89\xf5\xcb\xd9\x65\xaa\x7b\xc5\xee\xd3\xf7\x0a\x81\x94\xb5\x5b\xec\x1a\xbb\xc5\xae\xb3\x5b\xec\x1a\xbb\xc5\xae\xb9\x5b\xec\x9a\xbb\xc5\xee\x13\x15\x8f\x9d\x46\xc5\x63\xb7\x7e\x1f\xd9\xb5\xf6\x91\xdd\x75\x14\x0f\x6b\x23\xd8\xbd\xbd\xa3\xbb\x4f\xdb\x48\x76\xad\xef\x57\x6c\x24\xbb\xab\x15\x0f\x81\xcf\xee\x13\x14\x0f\x4b\xa0\xfb\xc9\x57\x36\xe1\x9b\x04\xc8\xb9\xb7\x32\xb4\xba\xdd\x82\x44\x6b\xad\xae\x2b\x08\x1b\x9d\xc7\xf4\x5f\x2b\xce\x8d\xd8\x88\x35\x94\x35\x4d\x6d\x9c\xdc\x33\x91\xf1\xd4\x73\x2a\xd2\x32\xd4\x39\x55\xfc\x50\xba\xf4\xfa\xf8\x7d\x8e\x73\x92\xb2\xf7\x7c\x9b\xae\x09\x0c\x68\xfe\x4a\x2e\xd5\xf5\xf4\xff\x6f\x35\xa7\xd1\xbb\xc5\x3c\xc6\x8c\xa8\x6c\x02\x57\xa2\x94\x89\x2c\x40\xb9\xee\x21\xb4\x74\x82\x98\xe2\x42\xc4\x07\x56\xeb\x6f\x54\x8f\xa1\x32\xaf\x22\x66\xf8\x63\x9e\x94\x87\x52\x0d\xcd\xf4\xa6\x52\xcf\x94\x27\x95\xf8\x68\xad\x79\x58\x87\xaa\xde\xc3\xb8\xe9\x13\xe2\xaa\x03\x55\xb1\xb6\xf7\x74\xb1\xa6\x47\x65\x49\xb6\x3d\x43\xb2\xed\x39\x92\x6d\xcf\x90\x6c\x7b\xa6\x64\xdb\x33\x25\xdb\xde\x13\x25\xdb\x6e\xa3\x64\xdb\xab\x97\x6c\x7b\x96\x64\xdb\x5b\x47\xb2\x59\x92\x69\xef\xf6\x8e\xee\x3d\x4d\xb2\xed\x59\xdf\xaf\x90\x6c\x7b\xab\x25\x9b\xc0\x67\xef\x09\x92\x4d\xcf\x5a\x69\x3d\xf0\x13\xd1\x6d\x18\xe0\xa4\xe1\x88\xe5\x69\x5f\xe4\x23\x74\xa2\x78\xbd\x51\x9b\x94\x4b\xba\x20\xec\x46\xd4\x0f\x6c\x37\x29\x16\xb2\x75\xf3\x42\x50\xb6\x17\x70\x7b\xaa\x5b\x06\xdf\xdc\x22\xbd\x4f\x10\xc2\x2a\x08\x3c\x1b\x8d\x16\x79\xb1\x52\x4e\x48\xef\xa0\x52\x4e\x10\x91\x7c\xa8\xac\x40\x0f\xae\xc8\x42\x3e\xc8\xc6\xff\x06\xf9\xa0\xc8\x22\x8a\xb9\x7a\xca\x91\xb3\xe5\x9c\x64\x63\x1d\xa2\xfe\xc3\xc9\x09\x6a\x09\x4f\xbd\x16\xdf\x09\xe4\xf3\x00\xbe\xaf\x8d\x39\x2c\xe3\xe0\x44\xc3\xa7\x9d\xc6\xf7\x9f\x2e\x8a\x4c\x07\x2c\x4b\x1a\xed\x1b\xd2\x68\xdf\x91\x46\xfb\x86\x34\xda\x37\xa5\xd1\xbe\x29\x8d\xf6\x9f\x28\x8d\xf6\x1a\xa5\xd1\x7e\xbd\x34\xda\xb7\xa4\xd1\xfe\x3a\xd2\xc8\x92\x26\xfb\xb7\x77\x74\xff\x69\xd2\x68\xdf\xfa\x7e\x85\x34\xda\x5f\x2d\x8d\x04\x3e\xfb\xdf\x67\xe0\xa9\x12\xce\x63\xe0\x99\xad\x0e\x20\xd4\x7f\x75\xed\xb5\x36\x2b\xcb\x49\x5a\x6b\x4e\x3d\xaf\x66\xb8\xf1\x5a\xab\x21\xd6\xcf\xc8\x0c\x71\x0d\x65\x51\x85\x2d\x5f\x64\xc9\xe7\xdc\x96\x66\x22\x4f\x38\x98\xa3\x4d\x88\x65\x62\xc4\x32\xb3\x39\x9d\xcd\x48\x4c\x31\x23\x66\x9a\xe0\x06\xbb\x77\x59\x8e\xd3\xbc\x77\xd0\x0f\xd7\xd7\xf1\xbe\x4f\x76\x18\xe5\x9e\x3d\x02\xa4\x62\x47\x68\x94\xdf\x46\xc3\x55\x51\xab\xe6\x31\xfc\x89\xf3\x5f\xad\x5f\xea\x25\xdc\x9a\x9c\xa0\x2e\x6f\x8c\x4c\x0d\xe0\x45\xaa\x0a\x13\xc5\x76\x79\xb4\xea\x44\x76\xa1\xa2\x2a\x7c\x33\x40\xed\x39\xc9\x47\x24\x65\x5c\x6c\x6e\x6f\x85\xdb\xdb\x22\x3a\x61\x00\xe9\xa5\xae\x49\xca\x06\x16\xa8\x9b\x8c\x77\x23\xbc\x9b\x33\x86\x13\xa3\x50\x8a\xc8\x5d\x65\x54\xaa\x92\x65\x8b\xb4\xe9\xab\xe4\x20\xdb\xfd\xd5\x20\x86\xfd\x42\x6e\x47\xea\x67\x17\x69\xa4\xbe\x8f\xbd\x2a\xa2\xfe\xe0\xe9\xa2\xde\xc6\xd0\x12\xf6\x07\x86\xb0\x3f\x70\x84\xfd\x81\x21\xec\x0f\x4c\x61\x7f\x60\x0a\xfb\x83\x27\x0a\xfb\xfd\x46\x61\x7f\x50\x2f\xec\x0f\x2c\x61\x7f\xb0\x8e\xb0\xb7\x84\xf5\xc1\xed\x1d\x3d\x78\x9a\xb0\x3f\xb0\xbe\x5f\x21\xec\x0f\x56\x0b\x7b\x81\xcf\xc1\xf7\x09\xfb\x2a\xe1\x40\xd8\xf3\xff\x11\x69\x08\x4e\x4e\xd0\xc6\x87\xab\xcb\x5f\xae\xce\xaf\xaf\x37\xd0\xcf\xe2\x35\x74\x85\x4e\xca\x15\x77\x24\x9e\x17\x6c\xa9\xe3\xab\x8c\xb7\xcf\x51\xeb\xbf\xb6\xfe\x8c\x13\x77\xb9\xda\xd6\x5e\xf2\x67\x46\xfd\x70\xf8\x54\x08\xae\x0f\xea\xc3\xb6\x58\xeb\x5d\xf1\xf2\xa5\x4e\x3b\x57\xfe\xbc\x36\x03\x0d\x3c\xc5\xf2\xcd\xf3\x65\xf5\x6d\x83\x0c\xfb\x87\xc8\xcb\x5d\x49\x28\x5d\xf0\x95\x67\xc4\x31\x41\x16\x35\x19\x82\xae\x93\xdd\x98\xf0\x8c\xa8\x26\xa3\x5e\xe8\x2c\x8b\xe9\x78\x89\x28\xb3\xe2\xbe\xb4\x87\x09\x3a\xbb\xbe\x7a\x8d\x58\xf6\x85\xa4\x42\xd2\x61\x13\xe4\x60\x9c\xe5\xb3\x57\x98\xe1\x81\x51\x83\x09\xbe\x2b\xdd\x52\xbc\x75\x29\x64\x09\x0f\x83\x28\xf2\x49\xdb\x76\xbf\x90\x4f\x3d\xfb\x80\xf3\xc6\x47\x40\x5d\x3c\x53\xd5\xfc\x57\xfc\x40\x0b\x99\xc1\x47\x96\x23\x96\x2e\xfe\xe3\x45\xb2\xce\x7e\x2e\x5b\x9b\xb8\x88\x27\xdf\xbf\x93\x3f\xe9\x8c\x24\x7b\x73\xef\xa7\x8d\xd5\xe1\x60\xea\xa3\x9e\xfd\xa6\x91\x7a\x25\xd1\x44\xca\x4f\x73\xe9\xa8\x27\x66\x2e\x23\xf9\xc8\x43\x0d\xcb\x33\x61\x46\x59\xbb\x25\x0e\x36\x5d\xb9\xff\xb5\x3e\xea\x24\xe3\xa2\x9f\x1a\x27\x0e\xf5\xde\x33\x30\xf7\xd5\x9a\x23\x53\xec\xd0\x55\x95\xec\x40\x12\x48\x2a\xc9\x22\x57\x80\xeb\x5a\x1a\x9f\xe2\x37\x13\x2f\xf9\xa8\x89\x47\x1a\xd4\xb0\xa7\x6a\x5f\xe5\x0d\x40\x9d\x5d\xee\xdf\xc1\x99\x6a\x90\x6b\xb0\xa6\x6a\xea\x9b\x42\xe7\x95\x23\x12\xdc\xfa\xca\xc6\x97\xee\xab\x9a\x2f\x65\x09\x65\xcf\x87\xf2\x8d\xf3\x1d\x78\xb8\x78\xe6\xd4\x7a\xee\x7c\xa3\x1d\x5b\x0a\x9f\xb7\x8b\x90\xf7\xb2\x71\x79\x89\x21\x5d\x2f\x32\x96\x41\x98\xe5\x9d\xb6\xd1\x40\xc1\x1b\x74\x82\x6e\xb5\x06\xe1\x36\x2d\xd5\x62\x5d\xd0\x97\x2b\x6b\x38\x29\x24\x07\xc8\x2d\xbe\xd7\x43\x93\x24\x1b\xf2\xbd\x91\x69\xe7\x8f\x6f\x5d\x39\xeb\x5f\xc8\xf2\x08\xb5\xa0\x04\x58\xdc\x12\x83\x81\x4d\xdc\x3c\x84\xc1\xcb\x36\xc3\xf9\x84\x18\xdc\x52\x2a\x8b\x09\x49\x23\x74\x62\x24\xea\x14\xca\x52\x57\xee\x10\x05\x3a\x41\xa0\x6e\xb5\x45\xcb\x17\x28\xe4\xfa\x1d\xfc\xbd\x85\x42\x74\x84\xf8\x36\x7b\xf7\x85\x40\xee\xab\xf0\x58\xfe\xf9\x93\x68\x22\x7f\x3e\x7f\x6e\xf2\xa9\x04\x7c\x2b\x5a\x6e\xa1\xf0\xb3\xd9\xbf\x78\xac\x09\xa7\x55\x9d\xaa\x7a\x7b\x88\x4e\x14\xac\x52\x4b\x3d\x34\xb4\xd4\x43\x47\x4b\x3d\x34\xb4\xd4\x43\x53\x4b\x3d\x34\xb5\xd4\xc3\x95\x5a\xaa\xd2\x4f\x0f\x0c\x35\xcb\xd4\x4c\x0f\xab\x02\x83\x23\x63\xea\xa4\x87\xf5\x3a\x29\x40\x36\xb5\xc9\xc3\xdb\x3b\x7a\x68\x69\xa3\x1e\x3d\x54\x8c\xd6\x80\x5f\xd5\x40\x25\x1e\x75\xba\x67\xd9\xef\xa1\xab\x75\x1a\xfa\x26\x1f\xbb\xd4\x1d\x4e\x2a\x44\xd0\x73\xf4\x85\x2c\x11\x55\x19\x76\xaa\x6e\x62\xf7\x38\xd1\x73\x77\xfb\x85\x2c\x2d\x45\x5b\xb0\x2a\x3c\x46\x27\xbc\xa9\x89\x87\xfd\xaf\xda\xa0\xe0\x0b\xb5\x6e\x10\xfa\xf6\x59\x64\xe4\xd0\x8b\x40\x5d\xc2\xb6\x49\xd2\x55\x2e\xb2\x0a\xab\x3b\x90\x8b\x5c\x79\x83\xf8\x0c\xf0\x4f\xe8\xea\x2f\x54\x6a\x0f\xed\xdc\xc6\x47\x3d\xcf\x8a\x82\x0e\xe1\xb6\xb6\x60\xf9\x82\x9f\xa2\xae\x00\x13\xf9\x71\x5b\x5f\xfa\xde\xdd\xc1\x9a\xbf\xbb\x43\x5f\xbf\xa2\x4b\x18\x6f\x30\x21\xec\x83\x12\x04\x97\x63\xdd\xb6\xd3\x09\x46\x38\x49\x00\x44\xc7\xec\x56\xe7\xee\x53\x29\xf1\x4a\xa9\x05\x0e\x8d\x76\xa6\xbc\x3b\xdb\xc9\x0e\x11\x49\xbe\x5e\x0f\xbd\xce\x72\x34\xf4\xbb\x94\xa1\x42\xd9\x59\x54\xe8\x8f\x4c\x1b\x2f\x8b\x2f\x49\x74\x45\xd8\x6c\xb6\x28\x64\x60\xb3\xe8\x4c\x7d\x61\x38\x07\xc8\x47\x72\x14\xa2\x99\x74\x98\xbe\xf4\x3b\xcc\x71\xba\xae\xd1\x2c\x90\x79\xb1\xdb\xbd\x4f\xe9\x66\x6f\xd2\x45\xad\x56\xc7\xea\x45\xd7\x27\x54\x89\xc1\x0c\x31\x2c\x5a\x94\x19\x9a\xdd\x37\xc2\x7a\x04\x4f\x21\x7b\x8f\xaa\x44\x27\xe0\x1b\xf6\xdb\xbb\x8a\x27\x63\x4b\x84\x9a\xb7\x4a\x5e\x77\x27\x42\x79\xd7\x3b\xb1\xcc\x56\xb3\x8e\x2b\xfb\xdf\x67\x4c\x14\x9a\xa4\xe9\x44\x78\x9b\x16\x8c\x6b\x4c\x28\x1b\x23\xa3\x0a\x17\xd7\x78\xd4\x9f\x62\x26\x2f\xce\x0f\xb9\x9e\x44\x1e\x59\x4e\x66\x24\x59\xa2\x07\x42\x73\xa9\x08\x42\x66\x38\x1b\xbd\xaf\x5f\x6d\x7c\xe1\xa8\x78\xc3\x67\xbc\x92\xac\xa7\x92\xde\x43\xd6\x31\xa8\x54\x48\xd5\xda\xe0\xb7\x92\x7e\x76\x27\xea\x8b\x06\xe0\xba\x36\x99\xaa\xe2\x86\x19\x83\x3d\xdf\x85\x0e\xc4\x7a\x80\xc3\x0c\x2c\x53\xab\xe0\x16\x38\xe8\x0a\xca\x49\xd7\x78\xcd\xa9\xe5\xf3\xf9\xa2\x98\x0a\x04\x15\x47\xf5\x7a\xe8\x83\x8c\x75\x37\x12\x81\x17\x6e\x70\xbb\x28\x97\x16\x54\x97\x9f\x1e\xa0\x62\x6e\x63\x55\xcb\x26\x92\xcd\xd1\x09\x6a\xcb\xc5\xac\x31\x93\x72\xea\x75\x96\x2b\x1f\x27\x9b\x57\x3a\xfa\x0e\xf9\x67\x21\x08\x8e\xd0\x1f\xdf\xac\xb5\x90\x69\xe0\x1a\xa8\x54\x07\xfe\xf8\xd6\xf5\x2e\xb7\xae\x83\x97\x96\x96\x46\x5f\xea\x09\xef\xce\xa0\x94\xcc\x17\xac\x72\x96\x8e\x31\x4d\xb8\x7e\x0e\xc7\x61\xa8\x1d\x68\xe5\x21\xe5\xc7\x38\x70\x1d\x77\x58\x43\x29\xc5\x56\xa1\x1c\xce\x9e\x3f\x94\x33\x56\xbc\x14\x7d\x5c\xab\x5c\x9e\x6d\x23\xa3\x85\xdc\x9b\xcb\xac\x2b\xca\x83\x25\x27\x4c\xcb\x18\xdd\x8b\xec\x40\x48\x5e\x31\xf7\xdd\x26\xf9\x7e\x27\x04\x3c\x07\x56\x61\xbf\xbf\x2a\xa8\x8b\x9c\xef\x6e\x7f\x35\x12\x87\x9e\x32\x96\xd3\xe1\x82\x11\xd4\xc2\xb0\x23\xb5\xd0\x22\x4d\xf8\x51\xc5\xfc\xe8\xe7\x1a\x5a\x00\x3c\x77\x19\x7a\x9a\x38\xcc\x67\xf6\xdb\x56\xfd\x56\x97\xe4\x0f\x15\x48\x0d\xcb\xf1\x7d\x86\x3e\x5e\xbd\x2d\x4b\x8b\xd7\x2e\x71\xed\xe0\x67\x95\x23\xfb\xf1\x47\xe4\x7f\xad\x0b\xa0\x36\xf4\x5d\x56\x47\x51\x19\x26\x20\xeb\xdf\x86\xd5\xc5\x06\x70\xd6\x46\x05\xee\x46\xe0\x7b\x08\xd9\x5b\x74\x01\xb2\xd5\xa3\x11\x07\xd0\x77\xaa\x04\x5b\x65\x38\x32\x1f\xfa\xa4\x7e\x14\x1b\x72\x14\x90\xf3\x8d\x30\x18\xc2\x11\x72\xe0\x8a\x1a\x71\x02\x54\xb0\x51\x61\xb4\x3a\xb7\xf0\xe6\x19\xf0\x90\xb8\x69\xaa\xdc\xa5\x52\x01\xa3\xb4\xb2\x98\x80\xa9\x66\xad\xd6\xdf\x3b\x06\xbb\xd0\x5b\xd5\x23\xa6\xae\xb5\xe9\x34\x59\x39\xc9\x9b\xae\x6d\x35\x3d\x19\x72\xa1\x5b\x5e\xcd\x8b\x3f\xb5\x6a\xfd\xcd\x1a\x9b\x0d\x6e\x26\xd3\x81\x79\x1f\x07\x2c\xfb\x38\x9f\x93\xfc\x0c\x17\x90\x26\x5a\x0f\xbe\x6d\xa8\x7c\x77\x2a\x0d\xe7\xf9\x23\x2d\x18\x4d\x27\xaf\x75\xca\x65\x91\xe5\x47\x89\xb0\xd2\xf7\xa7\x1c\xa4\x4e\x2f\x6b\x09\x5f\x75\xa0\xaa\x7e\x69\x7b\x0d\xc9\xf7\x15\xfe\x93\x35\x4f\xca\x9a\x9c\x5a\x4d\x74\x82\x10\xf4\x0e\x29\x6b\xf1\x54\x0a\x8d\x4a\x21\x48\x1e\xe7\x09\x1d\x51\x96\x2c\xad\x6a\x86\x35\xcc\x50\xed\xe6\x87\x13\x79\x74\x2e\x47\xbe\xc6\x67\x26\x2f\xdc\xf9\xa3\x28\xcc\x9d\xb3\xcc\x35\xbb\x0a\x70\x17\xb5\x2a\xcf\x4a\x13\x4b\xe5\xec\x56\xdf\xb7\x25\xcf\x8f\xad\xb3\x4f\xad\x88\xd2\xfa\x6f\x13\x2d\x74\x23\x11\x85\x93\x2f\x48\x95\x18\x5e\x45\xda\xc2\xe8\xf3\x8a\x21\xf9\x20\x78\xc8\x59\xd4\x21\xd7\x45\x2d\xfd\xb7\x41\xbf\xea\x6a\x13\x15\x54\x44\x03\x73\x55\xf3\x27\xd0\x10\xd6\x01\x7f\x5e\x18\xe5\xa5\x21\x2b\x54\x99\xb4\x5e\x89\x2c\xb0\x3d\xde\x09\xe7\x72\xe1\xea\xa6\x70\xee\xa2\x5b\xd3\xec\xc2\xf7\x57\x53\x64\xd6\x18\x60\xdc\x66\x86\xcb\x8d\x69\x5f\x15\x35\x78\xc6\x34\x61\x24\x6f\xaf\x14\x5a\x20\x8b\x14\xc6\x9a\x32\x9d\x60\x86\xe7\xeb\x7d\x5c\x7e\xe3\xae\xee\x95\x84\x52\x25\x18\xcc\x33\x0a\xa4\xbd\x92\x29\xd2\x30\xdb\x28\xdc\x34\xb2\xe3\x45\xa2\x0b\xae\xe8\x02\x58\xc2\x10\x97\x92\xa2\x08\x3c\x56\xad\x09\x61\x57\xb2\xa7\x15\xe4\xb5\x9a\xfd\x29\xe4\xfd\xe1\xdf\x40\x5f\xdf\x00\x01\xe3\x5f\x29\x9b\x5e\x83\x83\x7d\xfd\x10\x9d\x86\x6d\xe1\x90\xff\xa7\x71\x92\xe1\xdf\x2f\xfe\xfc\x4f\x61\x29\x9c\xeb\xea\x83\x22\x28\xd1\x4b\x23\xb0\xa5\xae\x62\x01\xa3\x51\x0d\x03\x78\x88\xa8\x65\xd1\x7f\x7c\x3c\xff\x78\xfe\xaa\x71\xa6\x3e\xaa\xe2\xe1\x2b\x10\xb1\xdb\x7d\x07\x2e\x65\x58\x45\x13\x3a\xa7\x7c\x19\xad\x92\x3a\xba\xcd\x77\xa0\x71\xfa\xea\x95\x41\x11\x6d\x41\xb2\x27\x4f\xde\xbd\xc8\x32\xf2\x59\x5e\x96\x58\xf7\x4f\xe5\x29\xd4\x74\x5c\x29\x2c\x75\xa3\x3f\x4f\x54\x36\x06\xb0\xf0\xe3\x65\x6d\x2b\xc1\x1b\x7f\xee\x7a\xb8\x99\x12\x5f\xcd\x1f\xb3\xfc\x87\x56\x95\xa0\xe2\x8e\xae\x3d\x16\xa0\xdf\xb2\x85\x02\x33\xc2\x29\x6a\xc3\x7d\x28\x44\x27\x77\xb8\xf2\xb4\x98\x57\xea\x90\x69\x8b\x85\x51\xf0\xc6\x27\x70\x79\x37\x35\xd3\xa2\x4a\x94\x99\x67\x6c\x0e\xaf\xef\x46\xfa\xf6\x7a\xaa\xcc\x17\xa2\x0c\x51\x28\x93\xc3\x55\x3a\x69\xbd\x31\x14\x12\xeb\xa8\xca\x44\xea\x7e\x61\x49\x1b\x67\xf9\xac\x65\xd2\xd4\x6a\x5a\x58\xa7\x5a\x92\x8e\xd8\x72\x4e\x5a\x5d\xd4\x12\xd7\x4f\x38\x67\x3d\x0e\x60\x2b\xc6\x0c\x9b\x4a\x43\x5d\xd7\xe5\xad\x98\x4a\x10\xd9\x6e\x29\xb3\x4d\x0b\x34\xec\x1f\xac\xf6\xb6\xf5\xae\x15\x18\xe5\x1c\x3a\xb5\x48\x9b\x91\x60\xeb\xd6\x58\x50\xf9\x25\x3c\xe5\x16\xbc\x51\x6a\x76\xa1\x5f\x11\xa9\x66\x55\x65\x68\x20\x46\x45\x53\xd3\xb7\x13\xf6\xa5\x07\x30\xd8\x1b\x28\x64\xc6\x17\x28\xd4\x87\x37\xcf\x58\xbe\xf7\x6d\xcf\x65\x08\xf0\x4e\x30\xb5\x1b\xba\x57\x99\xfe\x56\x75\xa7\x95\x1a\x98\x75\xd7\xa9\xfe\xe6\xa6\x99\xd6\x99\x1e\x28\x9c\x63\x5f\x94\xd6\x20\x68\x73\xa8\x62\x4f\x2e\x11\x5a\xd5\xeb\x18\x01\x42\x9f\x0b\x65\xa4\x05\x2c\x04\x30\xb7\x29\xc3\xac\xa7\xcd\x0b\x14\xae\x49\x32\x1b\x23\x75\x4f\x5b\x2e\x1a\x17\xb3\xd5\x84\xaa\x94\x34\x11\xef\xb7\x04\x95\x2a\x81\xff\xce\x10\x6c\x4b\xc3\x0f\x35\xf9\xe0\xd7\x1a\x8c\x00\xd5\xea\xba\x54\xb2\xba\xa8\x1d\x9c\x07\x37\x59\xb8\xfe\x5f\xc3\x4a\x02\xa9\xa2\x25\x5f\xd4\xa7\x2a\x50\xfa\x34\x61\x90\xe5\x66\x20\xd3\x4d\x9c\x40\x0a\xb2\xd6\x00\x0d\xc9\x08\x2f\x0a\x82\x8a\x6c\xa6\x6d\xad\x85\xcc\x05\x23\xc6\x8c\x60\x31\x17\x36\xcc\x2c\xd5\x19\x67\xf5\xf6\xcd\x3f\xf1\x65\xc1\xa9\x1d\x22\xb8\x81\xdd\xd3\x42\xdd\x19\x9d\xa0\x96\x68\xd3\x5a\x67\x55\xc0\xd7\xf3\xac\x00\x3f\x23\xfe\x2d\x1e\x16\x59\xb2\x60\x64\xfd\xaf\x59\x36\xe7\x1f\x6e\xaf\xff\x85\xb4\xa9\x3f\xe5\x13\x9d\x4e\xfd\x29\x1f\x29\xe7\x38\xe7\x9b\xa6\x3b\x9f\x92\x29\x04\x48\x00\x57\x1a\x27\xac\x3d\x63\x0d\xe1\x66\x9e\x7b\xab\x58\x7a\x42\xe8\x20\xa3\x71\xab\x29\xc8\x14\x2e\x1f\x4d\x63\x60\x15\x2e\xbc\xf6\xd4\x56\x12\x2a\x5a\x75\x13\x11\xff\x55\xaf\xf2\xc3\x6d\xe9\xaa\x6a\xdc\xe4\xc3\x33\x75\x95\x0f\x3f\xcc\xbb\x7c\x78\x60\x34\xfd\xd9\x7a\x75\x64\xfe\x5a\xd3\xeb\xb4\xbc\xd7\x3f\xac\xb8\x4f\xda\xf7\xfb\xe1\xb6\x3f\x1e\x57\xb4\x09\xb7\xad\x9b\xfe\x70\x7b\x95\xfb\xa9\xb8\x7a\xb7\xae\xef\xc3\xed\x5b\x0e\xc8\xe3\x82\xda\x18\xad\x2b\xe9\x64\xf6\x5d\xe7\x88\x5a\x62\xdb\xec\x8b\x6a\x22\x17\x6e\xfb\xdd\x51\x3d\x0e\xa9\x25\xf7\x48\x37\x01\x1f\x4d\x25\x53\xe1\x38\xae\x0f\x29\x76\x02\x88\x7d\xb2\x58\xb8\xa6\x95\xce\x3a\xd2\x3f\xad\x70\x60\x95\x61\x50\x1e\x1d\xc5\x12\xc8\xa6\x17\x5b\xf9\x67\xf3\x87\xdf\x2c\xa7\xa0\x8f\x57\x6f\xa1\x42\x40\x1a\x67\x0f\xf0\x43\x6d\x27\xe8\x67\xf3\xe9\x91\xfa\xf1\x40\x86\x5f\x28\xfb\x78\xf5\xd6\xd4\xa4\xaf\x41\x9d\x87\x6c\xe1\x8e\x4a\x9f\xa5\xb6\x3d\x55\x3a\x64\x98\x17\x91\xea\xa0\xb1\xdc\x80\x0c\x48\x90\xf7\xe8\xaf\x30\x04\x4b\x10\xf0\x33\x96\xda\x53\xd8\x94\x2c\xe5\x59\x02\xd2\xaa\x11\x15\xda\x5a\x02\xc4\x13\x4c\xd3\x32\x17\xbe\xbe\xdf\x84\xf3\x4b\x4c\x0b\xae\x43\xea\xbd\xc4\xb3\xcc\x43\x5d\x55\xef\x5e\x94\x0c\xd5\x4b\x2a\x34\x17\x7b\xe8\x2e\xf6\xd0\x5c\xec\xa1\xb5\xd8\x43\x6b\xb1\x87\x6b\x3b\xef\x84\xdb\x35\xde\x3b\x61\xe8\x73\xdf\x09\x43\x7b\x55\x87\xcd\x0e\x3c\xce\x3a\x0c\xf9\x72\x0e\x57\xfb\xf0\xc8\x81\x96\x9d\xd4\x79\xf1\x84\x61\x93\x1b\x8f\xec\x3d\x0c\x57\x38\xf2\xc0\x2c\x48\x2d\xae\x42\x13\x71\xc2\x48\xdb\xba\x91\x9d\xd5\xff\x56\x3f\xff\x5c\xb3\x08\xb2\xb4\xdd\xb2\xdd\xa6\x6b\xb7\x1b\x7b\xf7\x12\x1e\xdf\x37\x55\xbf\x6e\x63\xb9\x75\x8e\x2b\x7d\x19\x81\xd8\xff\xde\x8e\x94\xd3\xaa\xd5\x4b\xd3\xf5\x92\x92\x51\xda\xe1\xd2\xbd\x42\xea\x98\xeb\xfe\x7c\x46\x19\xc2\x68\x60\xf9\x2b\x0e\xa4\x10\xa0\x63\xc3\x8c\xa6\xbd\xa2\xb5\xe1\x25\xa8\xe0\x6a\x74\x59\x8b\xab\xa1\x07\x3b\x86\x23\xc9\xe5\x70\x20\xd9\xd6\x17\x9e\xd0\xcc\x35\x75\x35\x34\xb5\xcc\x73\x56\x3b\x7f\xdd\x50\xb3\xd0\x6b\x4c\xc6\x24\xcf\x49\x8c\x8a\x4c\xa8\xae\x2e\x5d\x72\x02\xd5\xb5\x58\x0e\xd5\x8f\x0a\x84\xc7\x8c\xe4\x68\xa0\x1b\x54\x95\xa4\xb5\x22\x61\x7d\xf3\x67\xf5\xec\x9c\x99\xba\x68\xbb\xe3\xf1\x54\x2b\x67\x56\xc4\x68\x18\x09\x57\xcc\x93\xb3\xf5\xc2\x4e\xe8\xd2\x98\xa8\x85\xcf\x9c\x9b\xeb\xc5\xeb\xc4\xdd\x94\x10\xc6\x23\x8a\xf4\x57\xe2\x8f\xbf\xc9\xd0\x10\xc3\x41\xd5\x1a\xa5\xc9\xbe\x67\xa2\x92\x04\xdf\x1f\xf4\x8e\x65\x72\xa5\xe5\x7f\x65\x0c\x53\x9c\x4f\x8e\x2c\xcb\x89\x11\x64\x08\x1b\xc6\x91\x85\x64\x4b\xa7\x81\x6c\xd5\xe6\x86\x5c\x39\xa7\x25\x8c\x2e\x72\x0e\x66\x5d\xb7\x2f\x48\xe9\xe8\xf6\xe5\xcd\xf3\x88\x2a\x33\xea\x55\x46\x2a\x98\x88\x1e\x56\x63\x02\x29\x13\xd7\xc8\xfe\xa8\x8b\xa4\x15\x88\x32\xa4\x1c\x5b\xf8\xd2\xe2\x5f\x28\x31\x92\x67\x33\x34\x9a\xe6\xd9\x8c\x6c\xf0\xc3\xe4\x43\x0a\x7e\xf6\x43\x9c\xbb\x90\x64\x9a\xee\x82\xe1\xd1\x17\xde\xdd\x38\xc9\x1e\x20\x43\xf7\x3f\x17\xa4\x80\x6d\xa1\x17\x1e\xee\x46\x7b\x3b\xfd\xed\x1e\xe4\x76\xc4\x69\xbc\xc5\xb5\x04\x91\x2f\x41\x56\xcf\xdf\xe2\x1d\x6e\x89\x0e\xb7\x54\x77\xc5\x96\xa7\xbf\x9b\x7c\x29\x32\x71\xc8\x94\xb5\x50\x59\x45\x08\xc2\xe1\x62\x02\xe5\x84\x39\xc1\x52\xc2\xd0\xf9\xe3\x3c\xc9\x72\x92\xa3\x30\x44\xed\xeb\xb3\xab\x8b\x0f\x37\x7b\xbb\xbb\xfd\x5d\x44\x1e\xf9\xb1\x98\x66\x69\xa7\x72\xba\x21\xe3\x91\xbf\xd2\x30\x42\x2c\x5f\x56\x93\x2a\x89\xe6\x24\x88\x31\xc3\x37\x50\xc3\x87\xe4\x01\x19\x8f\xc9\x88\x9d\x26\x49\xf6\x40\xdc\xd0\x49\x34\x82\x1a\xe1\x6d\x15\xd0\x6d\xeb\xaf\x0e\x20\x4e\xa7\x73\x00\x86\x4e\xd0\x06\xdf\xcb\x36\x40\x48\x42\xb7\x5f\xbf\xa2\x8d\x84\xa6\x5f\xde\xd9\x8f\x7f\x56\x0d\x8f\xd0\xc6\x28\x9b\x2f\x37\x1c\x35\xfb\xfb\xb8\x10\xb8\x6b\x35\x13\x82\x03\x97\xcb\x85\xde\x84\xa0\xf5\x5d\x09\x18\xab\xfa\xca\xe6\xad\x15\xf9\x66\x9f\x36\x54\x09\x61\xd5\x6a\x8f\xab\x6b\xbd\x92\x48\xb6\x69\x2d\xc7\xd5\x81\x3d\xf3\x6c\x77\xb4\xd4\x9d\x51\x0e\xd6\x87\x34\x7b\xe8\x9a\x7a\xb9\x6b\xea\xd1\x45\xba\x60\x55\xcb\x5a\x43\x81\x0d\xba\x05\xb9\x52\x5b\x47\x88\x63\x7c\xf2\xc2\x7e\xe9\x90\x0b\x11\xf7\xf5\x5f\xe1\x6b\xe3\xf9\x37\xf4\xed\xb3\xad\x0a\x55\xad\xc6\xe3\x2c\x3f\xc7\xa3\xa9\xb1\xab\xba\x6d\xea\x35\x24\xbd\x2d\x08\x47\x4c\x93\xc4\x7a\x6b\x70\xa1\x99\x53\xe6\xdb\x20\x90\xf4\x20\x30\xa7\x11\x1e\xb4\xc9\x7d\xc5\xde\x0c\x03\xbf\x4c\x13\x91\x15\x5b\x96\x5a\x2a\x53\x30\x0b\x17\x16\x95\x82\x41\x79\xb0\xc8\xc4\xb0\x52\xf9\x10\x07\xde\x02\xec\x3c\x34\x4b\x1d\xf0\x7c\xaf\x76\x47\x00\x07\x43\xc5\x39\xa5\x33\x2e\xb9\x67\x81\xf0\x6a\x87\xa5\x5e\x6d\x50\x3a\x74\x8a\x67\x17\x70\xc9\xd3\x2e\xbf\xeb\x3a\x1f\x35\x5f\x5c\xf8\xec\x19\xb5\x96\x5f\x4e\xbf\xce\xb1\xf4\x28\x7f\xc0\xb9\x28\xe0\x0f\xcf\x1b\x0f\xef\xe5\x2d\x5e\x5e\x2d\xdf\xed\xfb\xfb\x5b\xad\x16\x4e\x52\x4e\xc3\x76\xc7\xf5\xf2\xb4\x6e\x45\x68\x4a\x99\xe1\x53\xef\xf3\xad\x1e\x2f\x40\x75\x24\x05\x23\x31\x5a\x12\xe6\xb9\x16\x8b\x49\xc1\xf2\x6c\x59\x73\x33\x26\xdf\xb6\x4d\x8f\x3f\x5a\x04\x72\x39\x97\x4a\x16\x13\xb5\xd5\xb8\xac\x3e\x4d\x12\xa1\x09\x83\xdf\x8d\x6a\xa0\xef\x62\xdc\x2b\x89\xd2\xf1\xd6\xf7\xda\x4c\x14\x75\x84\x74\x6a\xc3\xca\x4d\xd4\x9a\xb7\x28\xbe\xb6\x86\xfc\xf2\x22\x28\xf0\xb3\xdd\x73\xb4\x5b\xa0\xd7\x1d\xfa\xd8\x9e\x34\x8f\x2f\x76\x31\x4f\xe8\x88\xb4\x3d\x6f\x68\x1a\x93\xc7\xcb\x71\x5b\xfa\xea\x86\xf5\xd7\xe4\xb5\x87\xbb\x9a\xa9\x6c\x38\x0c\x5a\x37\x9f\xbe\x78\x63\x57\x87\xd0\xed\x74\xac\x31\x3a\xa9\x7b\x2b\xde\x18\xaf\x70\x79\x03\xae\xcc\x25\xee\xbd\xf8\xb1\x79\x85\x67\xb4\xf7\x98\x5c\x3d\x56\x98\xa8\x0e\xac\x61\x8f\x89\x4c\x7b\x4c\xe4\xda\x63\x22\xd3\x1e\x13\x59\xf6\x98\xc8\xb2\xc7\x44\x6b\x18\x5f\xb5\x45\x26\xac\x5e\x1c\xe9\x3e\x5c\x09\x25\xcd\x20\x91\x6d\x95\x89\x9a\x6c\xad\xa2\x0f\xcb\xc0\x12\xdd\x72\x18\x8e\x99\xd5\x6b\x60\x95\x54\x30\xbb\xf2\x99\x56\x15\x5a\xf5\x46\x55\x03\x8b\x30\xaa\xda\x53\x2b\x95\xef\x0d\x1b\xaa\x43\x20\x87\xc1\x9e\xcb\x64\x0f\x42\xc9\x0e\x74\x32\x89\x63\xef\x27\x6e\x73\x78\x53\x3d\xd9\xa1\x1a\x76\x0f\xb7\xb7\xa1\x60\xa6\x85\x41\xcf\x78\x50\xeb\x1b\x58\x0b\xaf\x62\x44\xaa\x86\x1f\x7b\x22\xf1\x5b\x5d\x1f\x44\x33\xf0\xbf\xeb\xa0\x59\xef\xb8\x0f\x11\xf7\x60\x0e\x1b\x89\xaa\xab\xd8\x70\xd3\xc0\x10\x83\xc3\x55\x01\x1d\x98\x8f\x72\x0c\x0e\x30\x6c\x8a\x53\x84\x65\xb5\xc9\x40\x81\x3d\x35\x1a\x82\xdb\x32\x5f\x89\x65\x76\xc1\x6c\x08\x37\x3d\xba\xe4\xc2\x10\x0a\x84\x27\xa2\xb6\x05\x2d\x44\x44\x33\x4e\x11\x08\x3c\x99\x87\xc4\xe7\xb6\x71\x37\x21\xec\x83\x42\xbc\x46\xb4\x59\x6d\xda\xa9\xed\x1a\x2a\x63\x9a\x6c\x9f\x56\x4d\x09\xe1\x92\x21\x01\xb5\x3c\xea\x9b\xff\xbb\x76\x5a\xef\xf0\x2a\x3f\x6c\x55\xdc\x18\xca\x5e\x9f\x3b\x79\x82\x1d\x07\xf9\x9f\x51\xeb\x96\x7f\x9d\xa2\xe7\xa8\xf5\xb9\x85\x8e\x44\x18\x98\xc9\xba\xdf\xcc\xc0\x94\xbf\x7a\x5c\xc3\x21\x9b\x90\x1a\x58\x57\x35\x66\xa6\x6b\xce\x03\x4d\x12\xb3\xf8\xae\xf8\x5a\x67\x75\x00\x67\x70\x95\xea\x41\x5c\xd7\x41\x98\x16\x53\x31\x47\x2a\xdb\x82\x6f\xd6\x4a\x4c\xea\xe6\xac\x6c\xe1\xd8\xeb\xea\x26\xcd\x18\xdc\x0f\xab\x66\xad\x92\x67\xce\x0d\xa9\xf4\x03\x36\xef\x68\x3c\xfe\x7d\x48\x56\x26\xc6\x4c\xad\x20\x20\x1d\x2e\xca\xc0\x1f\x6a\x87\x09\xc5\x19\x29\x44\x01\x7c\x11\xcc\x53\x56\x1b\x91\xc0\x8d\x59\xb4\xe3\xb0\x8a\x32\x24\x0c\xba\xed\xa2\x4c\xe9\xee\xe0\x85\x80\xc6\x94\x24\x22\x5f\xc4\x70\xc1\x58\x96\x82\xcb\x9a\x18\x1e\x89\x03\x74\xc9\x97\xee\x03\x2d\x08\x54\x45\x95\x09\x27\x00\x7f\x1d\xd7\x55\x94\x81\x2e\x0a\x0d\x38\xaf\x8d\xb8\xb6\x35\xc5\x60\xa1\x9c\xe3\x02\x1c\xe0\x2f\xce\xf7\xd1\x51\xdb\xef\xf7\xa6\x5c\xf6\x5f\x67\xf9\xac\xc1\xc7\xd3\x68\xe5\xa8\x1c\xc4\xf1\xfd\xf7\x84\x82\x22\x81\xbb\xab\x88\x80\x7d\xb0\xfa\x75\x53\x50\x41\x85\x57\xdc\xef\x2b\x82\x5a\x6c\x53\x24\x89\x0b\x91\xcb\x0e\x9d\x54\xcb\xa9\x2a\x06\xf8\xd4\x7a\xd1\xaa\xe8\xbc\xa6\x1f\x93\xea\xe5\x86\x3c\x5a\x47\x34\xab\x83\xe7\xbc\x87\xb9\xdf\x11\xca\x04\x20\xdc\xa0\xe6\x65\x97\x8a\xcd\xab\xd0\x04\xd3\xc8\xc2\x4c\x9c\xcd\x3f\xb5\x40\x6c\x9f\x7c\x2a\x05\x95\x2d\x47\xb7\x3b\x1c\xfc\xa7\x16\x6a\xad\x96\x57\x1b\xca\xd3\xe6\xa4\xf4\xb9\xd9\xb0\x35\xf6\xe7\xa8\x85\x7a\x2f\x6c\x3c\x8a\xc5\x70\x46\xd9\xa7\x96\xe0\x97\x93\x4f\x32\xe3\xc6\x0f\x50\x2c\x0a\xdc\xba\x8e\xab\x93\x50\x9f\x24\xdd\x1c\x75\xf5\xe4\xe1\x7a\xe3\x81\x10\x79\x7d\x79\xf5\xae\xe5\xe8\x93\xb3\xa6\x34\xec\xf0\x5e\x44\x9b\x99\xa4\x33\x23\xd5\x04\xd5\xa4\xef\xde\xc9\x27\x9f\xeb\xde\xa7\x16\x12\x41\x32\x3e\x18\x33\x5d\x30\x1e\xe8\xc0\x3f\xb2\x52\xb2\xf3\x07\x4e\xf6\x75\x3e\xee\xfa\x1d\x49\xda\x48\x65\xf5\x66\x2e\xbe\x20\xbe\x53\x20\x08\x22\x44\x76\x89\x95\x8f\x4f\x21\x4b\x28\xb1\x6a\xa5\xe7\x3f\xc1\x5d\xb1\x11\x88\x40\xa5\xd5\xf5\xd1\xa4\x53\x23\xce\x61\x52\xca\x93\x24\xfc\x3c\x92\xec\x52\x27\xcd\xad\x78\x4d\xed\x3d\x24\xe4\xf7\x52\x08\x05\xcb\xaf\xb3\x94\xd5\xdf\x25\x24\x5d\x51\x54\x2f\x28\xab\x42\xcb\x12\x96\x86\x28\x35\x6f\x58\x8c\xc7\x6d\x35\x9a\x15\xe7\xa4\x3e\xc4\xcf\x8b\xa6\xc6\xd1\xc8\x2c\x6b\x12\xba\x75\x4d\x42\xb3\xb0\x49\x68\x55\x36\x09\xad\xd2\x26\xe1\x3a\xb5\x4d\xf4\xd1\x28\xaa\x3f\x1a\x55\xaa\x9a\xc8\x33\x88\x5d\xd2\x24\x6c\xac\x69\x22\xfa\xb0\xce\x37\x7d\x7e\x34\x72\x4b\x9a\xd4\x1d\x8d\xfa\xf6\xa7\x4d\x47\xa3\x86\x4a\x26\x06\x16\xa1\xa7\x8e\x49\xe5\x68\x44\x12\x75\x30\xaa\x92\xa7\xd7\xfe\x9f\x5f\x51\x47\xf1\x6f\xfb\xbf\x7c\x45\x9d\x5e\xc0\x48\xc1\xda\x24\x29\xbd\x17\xeb\x4a\xe1\x93\xc4\xef\x32\x58\xbd\xf0\x82\x19\xc2\x79\x8e\x4e\xd0\x6d\x2b\xa6\xf7\xe0\xeb\xc9\xf7\x79\x4d\x37\x83\xb1\x42\x28\x5d\x72\x2c\xfe\xfa\x09\xbe\x93\xb3\x22\x9e\xd9\x79\x52\xc0\x4c\xa0\x3c\xa3\xa1\x31\x9f\x92\x1d\x63\x42\xcc\xf4\x10\xf6\x9d\xa0\x11\x41\x68\x32\x3e\x73\x02\x84\x95\xe5\xf6\xe5\xf2\x46\x74\xd4\x96\x1d\xba\x26\x41\x25\x47\x2a\x9d\x7d\xab\xd1\xba\xc1\xae\x80\x41\x50\x26\x89\xe1\xba\x52\xb0\x2c\x27\x31\x78\xa3\x94\xb7\x83\x55\x81\xe0\xf1\x54\xa9\x11\x08\x7e\x9f\x16\x5f\xdc\x40\x69\x61\xb6\x7d\xf8\x25\x3d\xf4\xe7\x3e\x75\xb9\xe6\x9a\x58\x24\xb3\x2f\x16\x90\xbb\xf9\xd6\x5a\x2a\x7a\xda\xe5\xbd\xbd\xf6\xc0\xd4\xfd\x48\x27\x18\x9f\xdb\x9d\x42\xb5\x14\x40\xee\x57\xc2\xfd\xe2\xb3\x7b\xc9\xc1\x51\x11\x06\xf4\xea\x77\xca\x19\xdd\xf5\x05\x04\x48\x5d\xdd\x67\x57\xc6\x52\xae\x4a\x11\x2f\x3a\x33\x38\xc1\x76\x9a\xb0\xd9\xe1\x15\xc1\xff\x1a\x43\x08\x2b\xe5\x5a\x1c\xe1\x6b\xfa\xff\xb3\x44\x13\x4b\x78\x28\xf6\x9f\xc2\x15\x22\x38\xb9\xf0\xfa\xb8\x41\x10\x3c\x38\xda\x98\x81\x63\x66\xbc\x18\xca\x72\x34\x24\x5c\x81\x2f\x13\x06\xfb\x0c\xf8\xc2\x16\x5f\x67\xc0\x57\x96\xfa\x6a\x74\xcb\x8e\x1b\xdd\xb2\xf6\xad\x17\xa9\xbd\xec\x6a\x2c\xf0\xe7\x8b\x76\xf5\xdd\x20\xb8\xac\xed\xbd\x05\x11\x2e\xb8\x6b\x45\x2b\x89\xd1\x06\x23\x23\x05\x70\xbb\xe2\x9f\x84\xfc\x56\x76\x71\x13\x53\x97\x7c\x2c\x75\x68\xfb\x6f\xa1\xa0\x4e\x67\xd7\x44\x3e\x93\x34\xde\x2d\xa3\xde\xa8\x91\xd2\x11\x49\x96\x48\xa4\xc5\x64\x24\x46\xaa\xec\x95\x87\xd9\xd4\xab\x1a\x82\xe8\x82\x59\x50\x2b\xcb\x62\x39\x71\x6b\x48\xe2\x6b\xfa\x3b\x71\x2f\x0b\xd4\xbb\x8f\x29\x05\xcf\xf4\x61\xcb\xba\x00\xe0\xc0\xd0\x0b\xdb\x99\x8a\x7f\xb6\x48\xa9\x08\xdb\xde\x60\xc3\x8d\x2e\xda\x98\xc0\xff\xce\xe0\x7f\xbf\xc0\xff\x0e\x37\x3e\xfb\xd2\x77\x51\xa1\xa6\x50\xf4\x93\x80\xa1\x95\x14\x6a\x6b\x28\x65\x37\xe8\x44\xb4\xbc\xa5\x96\xfc\xe1\xaf\x47\x0b\x96\x8d\xc7\xe8\x04\xbd\xc3\x6c\x1a\xcc\xb3\x07\xfb\xa8\xac\x48\xf2\x12\x17\xa4\x8b\x76\xd0\x16\xa2\x1d\xd4\x43\x96\x2b\xa2\x39\xcc\x13\x09\xd0\x95\x91\x0e\xfd\xa0\x71\xef\x09\x7d\x1e\x7b\xa1\x7d\x2c\xc7\x66\x37\xa8\xa8\xaf\xa6\x92\xf8\xac\x06\x29\xc0\x26\xcf\x16\x69\xdc\x0e\xb7\xd1\xa6\xf5\x5a\x0e\x1a\x3c\xa8\x16\x22\xfa\x23\x1b\xa3\x98\x4e\x28\x2b\x5c\x83\x8b\xb2\xa0\xfe\x54\xb0\x3c\x4b\x27\x60\x07\xb1\xba\x12\xd1\x5f\xe2\x25\xf2\x5b\x49\x68\x42\x78\xd3\x8f\x30\x6b\xe6\x70\x3f\xbb\x2b\xe1\x34\x8e\x21\xa7\x66\x2e\xa5\x35\xa4\xaf\x8d\x7f\xdf\x9a\xe1\x47\x70\xeb\x29\xb6\x64\x1e\xc6\x81\x30\xf8\x08\x7f\x22\x65\x00\xf5\xda\xac\xeb\x0b\xcb\xd4\x59\x43\x9b\x4a\xd1\xd8\x96\x51\xeb\x54\xac\x82\xa5\x8c\x72\x3b\xe5\xcd\x97\x15\x95\xaf\xdc\x12\x5f\x38\xe9\x39\x15\x08\xd7\x5f\x72\x05\x18\x5d\xde\xb4\x09\x0e\x32\x2e\x37\x36\x9c\xa4\x96\x1b\x5d\x43\x8e\x7b\x3c\x0b\xd7\xad\xec\x5b\x99\xa5\x86\x54\x14\x6b\x97\xa2\x6d\x02\x5a\xb7\x53\x80\x17\x4f\xcd\x26\xec\x38\xf4\x40\x5e\x22\xdb\x3b\xaa\xba\x13\xb8\xa6\x0e\xe3\x9e\x48\x74\x85\x48\xc7\xb1\x8e\x89\x1b\x55\xc7\xed\xca\x8e\x61\x31\xa0\x78\x23\x0a\x64\xb3\x5e\x0f\xf1\x0d\x04\x72\xb2\xb1\x0d\x61\xfa\x4e\x62\x50\x93\x8c\x7b\x58\x71\x83\x20\x03\x4b\xe5\x8a\xe0\xad\x74\x7d\xee\xa6\x58\x19\x10\xc4\x8c\xcc\x3c\x28\xc3\x63\xc7\x7d\x5d\x34\xfd\xf1\x47\xf1\x8d\x42\x40\xfd\xbe\xdd\xfe\x2c\x83\x0c\x7e\x21\xec\xb4\x38\x4f\x59\xbe\xf4\x57\x96\x92\xf1\xc9\xca\x40\x2f\xed\xf2\x22\xa1\xda\x5c\x4a\x25\x39\x0a\x48\x4c\x2d\x6b\xb9\x8b\xee\x69\x5a\x30\x82\x63\x68\x03\x99\xf3\x1c\x4e\xbf\x93\xb1\x1e\xc5\xeb\x3c\x9b\x5d\xf0\x4f\x04\xde\xcd\xce\xa8\xc2\xed\x00\xfa\x11\xab\xac\x6e\x4d\xd4\xf2\x9e\x70\x85\xf2\x33\x5f\x59\x52\xda\x98\x94\xbb\xbb\xc9\x02\xe7\xf1\xdd\x5d\x9b\x18\x76\x33\xc2\x75\x97\xf9\x30\xc3\x79\xfc\x0a\x33\x6c\xda\x6f\x4d\xf7\xea\x47\x8f\xda\xf2\xa8\x26\x4d\x62\xda\xa9\xa6\xf4\xaa\x32\x76\x95\x27\xe5\x40\x0c\xaf\x32\x9b\x4d\x2c\xfc\x34\x9f\x3c\x73\xd8\xc4\xc3\x6d\x56\xdd\xaf\x55\xb3\x54\x4b\x67\x63\x92\x6a\xa8\x5d\x9d\xc6\xaa\xe2\xbd\xeb\x2a\xde\xc6\xa5\xd5\x53\x54\xda\x5d\x7f\x68\x51\xf5\x1c\xf2\xab\xac\x40\x02\x6c\x8d\x64\xf6\xc0\x39\x89\x51\x3b\xcb\xcd\x9a\x22\x9c\xf8\x71\xa7\x2b\xe9\x3d\x13\x99\xde\xe5\x90\x74\x3e\x14\x77\x0d\x78\x37\xc0\x0a\x85\xeb\xf6\xbd\xba\xa9\xa8\x52\x6d\xaf\x8e\x6a\xde\x83\x6a\xed\x31\xd5\x63\x07\xe5\x07\x21\xe8\xd5\x30\x82\x9a\x05\x79\x43\xb7\xc6\x62\x68\x96\xe4\x0d\xad\x9a\xbc\xa1\x55\x94\x37\x5c\xa7\x2a\xaf\x36\x82\xf6\xeb\x8d\xa0\x95\x4a\xbd\xd2\xda\x68\x97\x57\x0c\x1b\xeb\xf4\x8a\x3e\x2c\x4b\xe6\xce\x2d\x87\xb1\xa6\x11\x74\xd7\xfe\xb4\xc9\x08\xda\x50\x55\xd1\xc0\x22\xf4\xd4\x54\xac\x18\x41\xf9\xc4\x28\x33\xa8\x4d\x20\xb0\x34\x70\x41\xef\x86\x0f\xf1\x4f\x6a\x77\x03\xbe\x65\xb4\xe1\x33\x39\xeb\x95\x96\xed\xaa\xbf\x20\x5c\x33\xf2\x77\x01\x2d\x5e\x57\x32\xa6\x23\xc7\x0e\x21\xd8\x55\x2f\x4e\xe8\x84\x6b\x52\xf0\x29\x87\xee\x7a\x51\x03\xbd\xcd\x3e\x5e\xd1\x1c\xfc\x18\x97\x5e\x27\xce\x53\xb8\xfa\x31\xe3\x64\x84\x42\x8a\x19\x8a\xd5\x87\x90\x65\xcc\xd9\xa2\x6a\xf0\xb4\xd6\xa0\xee\x59\xe0\xd2\x15\x14\x86\xab\xf4\x1a\xbc\x9b\x28\x51\x5e\xff\x35\xf8\x43\x96\xc3\xb7\x29\x55\x57\x19\x52\xb7\xfc\x42\xd3\x18\x19\x99\x04\xcc\x87\x27\x2a\x25\xc1\xbf\x61\xa6\xfe\xa4\x11\xbb\x96\xf9\x55\x40\xaa\x66\xfa\x1a\xab\xd4\xb7\xea\x69\xff\x97\x0c\x0e\x36\x79\xb6\x98\x4c\x85\xa3\x81\x9a\xe7\xae\x28\xa3\xc1\xcf\x40\x5c\xd5\x95\xfe\x3b\x0c\x8d\x69\x1a\x17\x28\x27\xa3\x45\x5e\xd0\x7b\x92\xf8\x32\xb3\xfb\x39\x67\x1d\x51\x5f\xb2\x99\x81\xc8\x1c\x9b\x7b\xb6\x16\xfc\xfb\xae\xe0\xe7\x6f\x62\x9a\x5f\x11\x1c\x83\xbd\x50\x83\x90\x97\xb5\xe2\x45\xdb\xd6\x8e\x21\x44\xe1\x0d\x6c\x65\xb9\x79\x6f\x66\x3e\x6f\x57\x0a\xd3\xa9\xed\x56\xa8\x4b\xef\xe0\x12\xf2\xee\xae\x3d\xca\xd2\x22\x4b\x48\x17\x6d\x24\xd9\x64\xc3\xd4\x8d\x32\xef\xbd\x42\x16\x24\xd9\x44\x42\x37\xd4\x3a\x33\xc7\xa2\x81\x6a\x4e\x70\xcc\x25\x11\x05\x75\xde\xb0\xfb\xea\xc7\xbe\x98\x3f\x4d\x91\xc0\x6c\x68\x98\x9c\xc4\x93\x6a\xf0\xa7\x7c\xa1\x0f\x88\x6e\xd4\x9a\x77\xcf\xe4\x9b\x81\xfc\xd0\xd8\x35\xcd\xc2\xc4\xa1\x5b\xbf\x33\x34\x4b\x13\x87\x56\x6d\xe2\xd0\x2a\x4e\x1c\x3e\xb5\x3a\x71\xd8\x5c\x9e\x38\x6c\xa8\x4f\x1c\xda\x65\x3c\xc3\xb5\x2a\x14\x87\x56\x89\xe2\x70\x97\xef\xa2\x4f\x2c\xe5\x19\xee\xd9\x20\x56\x54\x54\x0a\xd7\xa8\xe6\x29\xb1\x0a\x9f\x52\xcf\x53\x6d\x84\x0d\x54\x6c\xde\xf7\x90\xdc\x20\xc6\xa0\x86\xd6\xaa\xad\xce\x78\x60\x59\x97\x8e\xec\x93\x34\xcb\x49\x19\x7a\x5e\xe8\xaa\xc1\x90\xa4\xb4\x58\x0c\x85\xeb\x61\x7b\xbb\x8b\xc2\x8e\xa8\xee\x14\x6c\xf8\xc1\xbb\x87\x0c\x9b\x02\xd5\x67\xd0\xcd\x78\x91\x24\x1f\xb0\x28\xff\xc4\xff\x79\x8e\x5a\xbd\x16\x7a\x5e\x5f\xad\x14\x39\x9a\xf8\x7e\x73\x90\x7f\x43\x6d\xf6\x35\x77\x7d\xa4\xfa\x69\xde\xac\x2d\xec\x8d\x9d\xbb\xca\x0b\xf6\x2f\xeb\xa7\xa8\x24\xa3\xc4\xbe\x48\x6e\x6d\xcb\x1e\x08\x93\xef\xca\x54\xec\xea\x24\x0d\xee\x69\xe2\xac\xe0\x82\x13\x1e\x85\x79\xc1\xc0\xaf\x56\xc9\x1b\xb7\xd5\x35\x21\x47\x10\x81\x57\x1c\xf5\x7a\x31\xb9\x27\x49\x36\x27\x79\x30\xcb\x7e\xa7\x49\x82\x83\x2c\x9f\xf4\x48\xba\xf5\xf1\xba\x17\x67\xa3\xa2\xf7\x2b\x19\xf6\x4e\x3f\x5c\xf4\x34\x0d\x84\xf0\xfb\x8b\x81\xa9\xb3\xbf\x1a\x23\x58\x71\xc9\x63\x3a\xfc\xc3\xa6\x67\x6e\x12\x1e\xa1\xad\x77\xe1\x4a\x17\x96\x9b\xe6\x80\x2f\xe1\x76\x67\x20\x6a\x17\xe9\x0a\x5f\xd9\x82\xe9\xf2\x20\x56\x49\x2d\x9d\xb2\xb3\x04\x21\xca\x64\x25\x09\xdf\xa1\x95\x07\xad\xa8\x24\x2b\x83\x5d\xba\x16\x04\x37\x97\x65\x1b\x5c\x57\x70\x92\x64\x0f\x85\xf0\xd7\x2d\x96\xe9\x68\x9a\x67\x69\xb6\x28\x10\xe4\xb9\xc7\x65\x28\xa1\xe3\xf1\x52\x86\x18\x4d\xc9\xe8\x4b\xa1\x3b\x2a\xe8\xef\x44\x68\x11\xb4\xac\x1e\x18\x88\x7a\x0a\xb8\x28\x84\x45\x55\x41\x1a\x58\x99\x8b\x06\x02\x96\xef\x08\xa9\x32\x1f\x79\x75\x09\xf1\x52\xd5\xc3\xb6\x52\xec\xeb\x42\x42\xf2\xd6\xc0\x6b\xa4\xe4\xaf\x36\x51\xb8\x1d\xed\xc8\x7f\x7c\xfb\x29\x9f\x2c\xaf\x5d\xf9\x26\xcb\x5e\xd2\x89\x2e\xd5\xd0\xfa\xe3\x0f\x45\x86\x6f\xdf\x5a\x5d\xd3\x0a\x5e\x22\xd2\x13\xbd\xf1\x7f\x02\xde\x1d\xff\x63\xbb\x63\xc2\x30\x70\x03\x30\x75\x88\x77\x5c\xfb\x26\x58\x13\x8d\xf4\xf1\x7f\xe3\xd3\xa8\x85\x91\x03\xc8\x4e\x1c\xb5\xf6\xb0\x65\x11\x04\x18\xfd\x72\x4e\x7c\x28\xfc\x67\x18\xa6\xfd\xc8\x29\xab\xf9\xb9\xac\xb3\xe4\xa3\x6a\x3d\x49\x4d\x25\xbf\xea\x92\xef\xd6\x70\xaa\xa4\x36\x68\xb2\x31\xdb\x44\x2f\x63\xb5\x54\x81\xb1\x58\x54\x60\x31\xe5\x90\xc7\xe8\x24\x25\x7e\xdd\x52\x30\x37\x9e\xaa\xf2\x7c\xe0\x2a\xcf\x46\x50\x04\x3a\x31\xf0\x5e\x2c\x68\x7c\x54\xba\x3d\xf2\x9f\xf7\x3b\xed\x8e\x55\x06\x55\x56\x0e\x34\xdc\x72\x45\x1a\x17\x26\xbc\xfa\x9d\x32\x87\xc0\xf7\xf2\x18\x2a\x16\xc1\x58\x46\x19\x0e\xc9\x84\xa6\x29\x4d\x27\x26\x9c\x0b\xb0\x33\xcb\xb0\x44\x3a\x1e\x93\x5c\xc8\x43\x2c\x2c\xcb\x0a\xda\x90\x20\x96\xe3\xb4\x98\x51\x66\x55\x4d\x84\xae\x8f\xca\xce\x4a\x1c\x75\xa4\x88\x85\xf9\x58\xe6\x40\x97\x01\xf9\x15\x77\x74\xa3\x36\xd8\x74\x91\x7e\x21\xf1\x91\x3d\xa7\x2a\x81\x3d\xd8\x13\x58\xa5\xb6\xc3\x99\x7a\xad\x93\x6f\x7a\xc4\x11\xc0\x80\xcb\xb1\xae\x3d\x0e\xf8\xfa\x2c\x5b\x70\x9c\x41\x9c\x8c\x88\x2c\xff\xaf\xa4\x49\x0d\x9c\x72\x6b\x92\xd0\xca\xab\x72\x38\x59\x4a\xde\x35\x79\x41\x65\x05\x45\x76\x72\xd4\xc6\x1b\x83\x72\x15\x98\x8d\xee\x48\x0a\x8e\x0b\xba\xe4\x97\xd3\x9d\xb9\x34\x2c\x09\x6e\x1c\x52\xdc\x03\x18\xe8\x47\xd5\x72\xe1\x56\x02\xe3\x6a\xe2\x06\xa9\x2e\x1d\x04\x77\xf0\xed\x87\xb2\xba\xf1\x2d\xff\xf2\xb3\xdc\xd1\x45\x94\xe7\xaf\x34\x49\x44\x62\x76\xb5\x77\x09\x92\x94\x0a\x40\x55\x8d\x77\xfb\x77\x43\x3e\xb5\x96\x7b\x50\x0a\x81\x05\xcb\x20\x51\x88\x37\xe5\xde\x41\x20\x89\xe7\xd7\x22\xbf\x59\x88\xba\x3d\xd7\x1b\x06\x14\x19\x9a\xae\x17\x1b\xec\xc6\x39\x9e\xcf\x49\x0e\xeb\xd6\x40\xcf\xb3\x5b\x1b\x6f\xeb\x4c\xbd\x66\x13\xd7\x34\xee\x39\x60\xee\x79\x32\xa6\xed\x99\xc7\x4b\xb7\x20\xbb\x3c\x51\xe9\xa6\x3f\x5b\xaf\xcc\xe3\xe5\xde\xfa\x49\x94\x76\xeb\x92\x28\xed\x79\x93\x28\xd9\x55\xd8\xc3\xbd\x15\x49\x94\x6c\x8b\xea\x1e\x3f\x46\xee\xaf\x91\x44\x69\xdf\xfe\xac\x3e\x89\x52\x6d\xd1\x75\xa3\xf7\xb0\x52\x70\xdd\x49\xa2\x64\x06\xe8\xed\xba\xf9\x93\x6a\x99\xd6\x71\xd0\x2e\x35\x6a\xaf\x8f\x8d\x06\xb2\x9a\x77\xea\x36\xba\x43\x77\xa3\x2b\x15\x41\x4f\xda\x63\x10\x71\xfa\x98\x59\x2e\x27\x4f\xb9\x80\x1a\x21\x69\x27\x4e\xf6\xdc\xcd\xf3\xf5\x2e\x05\x8f\x67\xd9\x7f\x6f\xaa\x9e\xc3\x60\x6e\xc0\x6c\x7b\x72\xf4\x08\x77\xc4\x31\xc9\x73\xb5\x2b\x73\xbd\xa3\x22\x22\xaa\x81\x8b\x6e\x41\x1a\xa1\xf4\xf3\xd9\x17\x65\x69\x86\x44\xa5\xc2\x56\x99\x1b\x28\x03\x0f\x78\x15\xa8\x04\xe9\xf3\xcb\xc2\xf4\x59\x0e\x45\xd6\xd4\x19\x24\x58\xe3\x0e\xbd\xb2\x83\xd4\xd9\x12\xfd\x3b\x4d\x95\x2b\x44\x92\x45\x97\x2d\xec\xcd\x13\x6c\x86\x17\x33\x3c\x29\xc1\x95\x16\x08\x28\x67\x39\xc3\x6c\x34\x6d\xf7\x28\x6f\x13\x6c\xf6\x3a\xfa\x2d\x6c\xc6\x3f\x55\x15\x57\x0d\x68\xf5\x69\x43\xec\x9c\x76\x69\x4d\x6b\xaf\x7e\x3a\xc7\x98\xfc\x12\x6e\xeb\x62\x9c\x37\x56\x1f\x56\x82\xa4\xd5\x8c\x53\x3f\x65\x5e\xe8\x75\xf3\x56\x83\x8a\x67\xe2\xc2\xda\x89\xf3\x16\x17\xfd\xfa\xd5\x4f\xc9\xba\x64\x5c\x4d\x57\xd1\x35\xd5\x4b\xcd\x3d\xde\x10\x8c\xde\x6e\x8b\x29\x1d\x1b\x32\xd9\xd4\x7c\x04\xbf\xd9\x9c\xeb\x1c\x4d\x34\xb0\x5f\x69\xcc\xa6\x75\x2f\xdf\x40\x26\xd7\xba\xb7\xc2\x56\xdd\x95\xfb\x65\xc9\x2a\x31\x66\xf8\x63\x6e\x5d\xaa\x48\x82\xab\x20\xe4\x72\xed\xa9\x63\x8a\xfc\xe4\xb8\xf2\xc5\xea\x3a\xaf\x15\x7e\x0c\x57\xf2\x63\x55\x0f\x39\x13\xc1\x96\xd2\x66\x32\x14\x51\x90\x8b\x82\xe4\x22\x6a\x15\x2a\x00\x89\xc8\xe3\x5a\xcf\xea\x86\xcd\xa5\x6c\xe0\x09\x44\x5d\x9d\x5e\xbf\xb2\x98\x1b\xfc\x4c\x2b\x5a\x39\x64\xd1\x04\x13\x50\xbb\x7c\xe8\x55\xae\xc5\xe4\x38\x39\x00\x4d\xe0\x7a\x7d\x58\x1e\x3a\x35\x8c\x6f\xc3\x2c\x08\xab\x8f\x2f\x36\x9d\x98\xc7\x56\x81\x04\xbe\x29\x8c\x16\x39\x3f\xa7\x25\x4b\x43\xf0\x6b\xff\xb8\x84\x16\xbe\x94\x23\x76\x9e\x90\xc6\x59\xd1\xc9\x44\x04\x51\x2f\xc6\xef\x09\xef\x04\x9b\x36\xd2\x32\x27\x1b\x46\xa3\x6c\xbe\xd4\x9e\x09\xd2\x40\x69\xcc\x6f\x07\x89\xbc\xc0\xc2\x78\xf5\x57\xe5\xfa\x90\xe3\xa5\xe9\xb1\x54\xe9\xcb\xe7\xcb\xe2\x69\x64\xf3\xfd\xb7\x7a\xdd\x56\xdd\x68\xc9\xa9\x2a\x20\x19\x88\x99\x9d\x62\xdf\x54\x74\x0f\x5c\x45\x77\xdf\x54\x74\xf7\x2d\x45\x77\xdf\x52\x74\xf7\xd7\x57\x74\xf7\xea\x14\xdd\x7d\xaf\xa2\x7b\x60\x2b\xba\xfb\x2b\x14\x5d\xfb\xb2\x63\x9f\x2b\xba\x07\x6b\x28\xba\x07\xf6\x67\xf5\x8a\xee\x41\xa3\xa2\x2b\x7a\x0f\x0f\x9e\xa0\xe8\xba\xe4\x30\xc5\xc0\x0f\xb5\x55\x36\x1a\x98\x14\xd9\x2e\xee\xbe\x53\x5e\x4d\xf5\x5f\x53\x75\x2e\xd7\x24\x57\x2a\x0a\xc8\x9f\xc0\x95\x12\x15\xa5\x4f\x65\xa9\x8d\x02\x4c\x27\x22\x4a\xbf\x20\xf9\x3d\xc9\x03\xc7\x86\x4b\xc5\x12\x50\x55\x18\x86\x64\x8a\xef\x69\x96\xa3\x6c\xac\xfa\x18\xe8\x2d\x05\xdc\xf2\xb2\x7c\xc6\x91\x1e\x70\x72\x0c\x72\xe8\x1f\x76\xa7\x01\xd7\xf3\xe4\x03\xb1\x23\x0d\x54\xec\x68\x00\x9e\x76\x23\x1d\x1a\x5f\x20\x9a\xde\x67\x5f\xa4\xd9\x5b\xf5\xc3\xd1\x10\x9f\xc7\x68\x98\x64\x43\x9f\x31\x58\xbc\x07\x1d\xad\x56\x5c\xe8\x16\x72\x47\x7d\x10\x7b\xe7\x54\xee\x92\xa2\x81\xda\x15\x15\x52\x3e\xcd\x23\xaa\x71\x34\x6a\xd8\xbd\x1b\xfb\x02\xa9\xe0\xd9\x82\x39\x16\xe9\x3d\xae\x78\xde\x8a\xa7\xba\x46\x82\xd7\x7d\x51\xcc\x3a\x57\xbe\xd3\x8c\xa9\xba\x55\x40\xc3\xaa\x1e\xa8\xc6\x5a\xe1\xb7\xea\x9a\x93\x5e\x53\x1c\x79\x59\xd9\x50\xe5\x46\x0f\x23\x23\x5d\x82\xd9\xa0\xe2\xb3\xe4\x7e\xef\x77\xe2\xa8\xf4\xa2\xb5\xed\xba\xbb\x99\x12\x37\x70\xfe\x13\x29\xa8\x05\xad\x02\x96\xc9\x47\x4e\xef\xdd\x1a\xe4\xff\x63\x81\x13\xca\x96\x15\x51\x52\xc1\xfd\x04\x6d\x00\xa9\x7b\xff\x98\x93\xc9\x06\x5f\xe3\x4d\x4d\x26\x95\x4b\x49\xab\x6c\x2f\x41\x59\x4e\x27\x34\xc5\x09\x3a\xff\xfb\xc5\x6b\x44\x53\x11\x73\xe1\xa6\x52\xab\x8c\xf2\xfc\x91\x8e\xaf\x08\x44\x92\xf1\x01\xf0\x7f\x85\x44\x8a\x45\x93\xae\xf3\xc9\xaa\xfb\x2d\xcd\x11\x5a\x8c\x09\x40\x17\x2c\x7b\x99\x64\xc3\xb6\x03\xad\x26\xef\x2b\xf2\x1f\x08\x9c\x15\x52\xb3\x5e\xbf\x67\x1d\xd1\xc7\xcb\x9c\x92\x94\x01\xc5\x9a\xd7\x70\xa5\x72\x8f\x12\xf0\xda\x69\x84\x1f\x74\x5f\xeb\x07\x6d\xdb\x28\x2a\x1d\x29\xb2\x54\x9a\xc9\xed\x93\x96\x6d\x1a\x88\xf5\x34\x19\x5f\x2a\x87\x9c\x67\x06\x23\xbc\x82\xd4\x86\xc3\x0c\x72\xea\xc0\xf8\xf9\x39\x0b\x23\xad\x70\x83\xaa\x70\xfd\xb7\x5f\xc4\xea\x2e\xca\xa2\xe5\x90\xe4\xfc\x1e\xae\x39\xab\xbb\x12\x53\x6c\xd8\x12\x6c\x58\xdc\x4f\x9e\x3f\xce\x92\x56\x75\xdf\xd6\x92\xb8\xc6\xb1\xca\x12\x14\xd6\x40\x56\x30\x94\x77\x4b\xb5\xb4\xfe\xbe\x2b\x38\x5f\xe7\xd9\xec\x63\xfe\xaf\xcd\x7b\xed\x45\xac\x85\x3f\x8e\x4f\x0b\x25\x1d\xac\xf4\x2e\xab\x38\x57\xa2\xb8\x1e\x03\xff\x09\xe3\xe9\xa2\x51\x9e\x15\xc5\x25\xc8\x08\x1f\x53\x57\x02\xf6\x64\x96\xbf\x45\x01\xb5\x54\x38\x47\xc3\x06\x38\x40\x53\x92\x13\x6d\xa5\xc9\xc6\x08\xab\x74\xb2\x09\x66\xa4\x60\xe8\x0c\x72\xd3\xaa\x5a\xf8\x85\x91\x52\xff\x9a\x10\x7d\x07\x3f\xa1\x6c\xba\x18\x42\xfe\x5b\x92\x2e\xb3\x9e\x4a\x4e\xd3\x9b\x2f\x92\xa4\x17\x45\x7b\x06\x86\x74\x36\x69\xaa\x2e\x34\x9b\xb4\xec\xa4\x6e\xde\xa1\x22\x0e\x26\x30\x5e\x71\x09\x5f\xfe\xaa\x9c\xd6\x79\xeb\x9a\x35\xaa\x00\x42\x68\x69\x86\x63\x2e\x42\xcd\x46\xea\x59\xbb\x2a\x45\x7c\x82\x32\xf4\xd7\x4c\x30\x52\x15\x81\x44\xe7\xaa\xe1\x86\xf6\xde\xdb\x40\x3f\xfe\x58\x3e\x57\xd7\xa0\xf6\xf4\xdb\xdd\x7e\x07\xa6\x1a\x57\xde\x51\x30\x21\x8c\xf3\x7a\x9b\xce\x26\x4d\xa5\x4f\xaa\x03\x54\x5f\xdf\xe0\x89\xbc\xa2\xdc\x30\xb0\xdc\xa8\x78\x42\xda\x12\xa1\x49\x00\x68\xfc\x0d\x27\xb9\xba\xf1\x83\x40\x53\xc5\x66\xf8\xec\xc2\xdf\xc7\x6e\x0b\x5d\xc3\x86\x37\x11\x3f\x2a\x9e\xc1\x52\x21\x4c\xc7\x99\x56\x61\x76\x1c\x2d\xc0\x28\x7f\x1c\xee\x28\x63\x47\xc3\xd2\xed\x54\x3a\x51\xaa\x5a\x2d\xe3\x8b\x06\x76\x2a\x75\xf8\x90\x3d\x96\xda\xcb\x84\x40\x61\x1c\x7e\xb8\x69\x45\x71\xcb\xee\x46\xb6\x51\x44\x29\x87\x15\xb0\x7c\xf2\xab\x4b\x1e\xd9\x5a\x13\xc8\x6e\xfe\xa6\x4a\x2a\xce\xc1\xc6\x74\xa0\x17\xa8\xe2\x6a\xde\x88\x81\x02\xe9\xf9\xa0\x06\x89\x0a\xce\x96\xfb\x51\xf1\x40\x21\xa3\x74\x2d\x8b\x20\x51\x7e\x2f\x3a\x72\x18\xba\xd7\x43\xd3\x2c\xa7\xbf\x67\x29\xc3\x09\x1a\x27\x74\xee\x34\x18\xb1\x47\x71\x94\xe1\x32\xb0\x6d\x0e\xca\x4e\x6d\x5f\xb6\x2e\x46\x38\x21\xed\xad\xb0\x4c\xc3\x59\xfe\xe7\xf1\xc3\x03\xbc\xfa\x1e\xbc\xc2\x83\xed\xff\xeb\xff\x44\x79\xc6\x30\x23\x28\x21\x63\xf6\x04\xcc\x2c\x5a\x7a\xb1\x14\x70\xdb\x70\x4d\xfc\xe1\x62\x6d\x44\x77\x3c\x88\xde\x93\x9c\xd1\xd1\x3a\xe4\xdb\x5e\x07\x33\x41\xbf\xb0\x8b\xb6\xd6\xa7\xdf\xee\x2a\xb4\xd0\x73\x74\xb8\xad\x88\x09\xd9\xa4\xeb\x69\xb2\x1d\xec\xa2\x4d\x54\x47\x99\xef\x45\x71\xcf\x83\xe2\xa1\x31\xc3\xff\x32\x52\x16\x99\xb7\x9a\xe9\x5c\x87\xe4\xfe\xea\xf5\xf1\xe7\x52\xb2\x8e\x81\x57\xe0\xff\xbd\xeb\xec\x60\xc5\x24\xd4\x2c\x33\x39\x9c\xad\xa7\x8c\x67\x6b\x95\xac\xf0\xc4\x4a\xbb\x27\x76\x91\x05\x1d\xd4\xb0\x31\x7d\x04\x45\x9f\x5e\x5e\x6f\x20\x3e\x74\xae\xbc\x0d\x17\x13\xd3\x1f\x32\xce\xf1\x03\xa8\x72\x17\x97\xd7\xaf\xe9\x63\x7b\xc4\x1e\xbb\x08\xf6\x74\x43\x96\x16\xf9\xe8\xef\x46\xf0\x9e\xfb\xe6\x08\x6d\xbb\xcd\x7f\xab\x6d\xfe\x9b\xaf\xb9\xbc\x7d\xb0\x1f\xbe\xb1\x36\x46\x25\xd4\x6b\x10\x81\x37\x2e\x64\x96\x4f\x6a\x10\x81\x37\x9e\xe6\x55\x44\xf4\xce\x53\xdd\x93\x99\x71\x11\x51\x31\x0f\xc8\x33\xd2\x3c\x9d\x38\xdb\xec\x3a\xe7\x23\x57\x67\xd2\x3d\x69\x4b\x4e\x4d\xb8\x86\xe7\xa4\xb2\xaa\x3f\xa1\xda\x0a\xd7\xce\x13\xdd\x65\x45\x03\x96\x28\xf1\xd6\x45\x3e\x52\x66\x14\x79\x24\x5d\x19\x04\x22\xd2\x8c\xe0\x34\xd6\xc6\xfb\x42\xe5\x21\x01\x4f\xce\x9c\x28\x33\x3f\xcb\x32\x34\xc3\xe9\x52\xdd\xf5\xfa\x8c\x74\xe6\xc5\x74\x5d\x2c\xaa\x75\x77\x6d\x1d\x71\xe6\x38\xc7\x49\xa2\xee\x4d\x74\x66\x68\x33\x77\xaa\xf1\xda\x3a\xd7\x97\x97\x50\x6f\xe5\xa5\x87\xf6\x35\xac\x29\xe2\x63\x05\x97\xa2\x93\x0a\x04\xf3\x84\x75\xa3\xe8\x50\x26\xe4\x64\x28\x21\xb8\x60\x08\x17\x82\x28\x82\x66\xba\x48\x91\x70\x5a\x93\xa9\xf3\x87\xc4\x98\xf1\x0a\xa6\x2f\x4e\xdc\x81\xaf\x71\x49\xc9\xb1\xfe\x67\x59\x72\xc8\x18\xae\x55\x88\xc8\xe2\xb5\x1f\xda\xc6\x17\x66\xa8\xc7\x1a\xfd\x55\xae\xcc\xed\xf4\x8f\x26\x04\x55\xfd\x59\x5c\xbf\x28\x0a\x48\xd2\x88\x34\x48\x59\x4a\xa0\xe0\x09\x29\x98\x7b\x54\x80\x4e\x24\x8d\xc4\x20\x4c\xa4\xc5\x35\xc9\x76\xb7\xc2\x2a\x5b\x95\xf9\xab\xf8\xc8\x96\x18\x3e\x4c\x69\x42\x50\x9b\xa2\x9f\x9a\x28\x2f\x89\x56\xa5\x99\x5f\x26\x54\x5c\xb5\xde\x67\x6c\xca\x39\x01\x0a\x74\x42\x55\x17\x40\xd0\x68\xe6\x8e\xd5\x1e\xaa\xb8\x3e\xb6\xed\x93\xcf\x9f\xd7\xdd\x15\xf8\x3d\xb6\x06\x26\x25\x07\xf5\x0b\xb6\xe1\x6a\xd4\xc4\xcf\xbe\x1b\xad\x9d\x31\xe1\x60\x57\xb9\xc2\x7d\x0b\x33\xa5\x3c\xec\xc0\x4b\x5d\x48\xd2\xb2\xca\xd7\x5b\xb1\x7a\xda\x9d\x66\x54\xeb\x2e\x0c\x2d\x2c\x56\xfb\x97\x1d\x78\xfc\xcb\x0e\xcc\x6b\xb7\x43\xf7\xda\xed\xc0\xbc\x76\x3b\xb0\xae\xdd\x0e\xac\x6b\xb7\x83\xf5\xaf\xdd\xf6\xeb\xae\xdd\x0e\xbc\xd7\x6e\x87\xf6\xb5\xdb\xc1\x8a\x6b\x37\xdb\x51\xec\xe0\x96\x43\x58\xe3\xda\xcd\x2e\xd5\x79\x50\x7f\xed\x76\xd8\x78\xed\x26\x7a\x0f\x0f\x9f\x70\xed\x66\x92\x03\x76\xb2\x72\x61\x2b\x07\x0c\xce\x4c\x2f\xf1\xe8\xcb\x03\xce\xe3\x02\x32\x1b\x63\x26\x2b\xf6\xda\x9f\x56\x5d\xb6\xf4\x5d\x5d\xc5\x8b\x4d\xe4\x1e\xd0\x7d\x55\x9c\xbc\xbf\x43\x12\x7a\x01\x1b\xb5\xa9\xed\x1c\x0f\xde\xa4\xf0\x02\x78\x35\x25\x84\xcf\x0b\x67\x42\x20\x34\xa1\xf8\x95\xb2\xe9\xdf\xa7\x79\x43\xa2\x74\xb3\x59\xfb\x71\x9a\xdb\xdb\xb0\xf2\x4a\xb0\xd3\x2c\x9b\x09\x0a\xec\xbb\xeb\x31\x4d\x18\xc9\x57\x27\x2c\x80\x29\x79\x9c\xe6\x60\xa9\x7e\x9c\xe6\xa5\xb3\xc7\x7a\x09\x0f\xf8\xe3\x46\x07\x11\x48\xa4\xa6\x63\x5f\xa4\x0b\x3a\x57\x6d\x0a\xc2\xc4\x0b\xc9\x10\x2c\x43\x67\xa7\xef\xcf\xce\xdf\x9e\xbf\x52\x9f\x6f\x6e\xd2\xf1\xe6\xa6\x13\x7b\xc3\x16\x50\x77\x4f\x64\x60\x53\x1b\x98\x4e\x94\x7d\x21\x13\xa3\x14\x8c\x26\x89\x95\xb6\xcd\x8e\xc0\x11\x9f\x4b\xb7\x0d\xe1\x19\x41\x19\xe0\x55\xa2\xa4\x60\x82\x0f\x72\x89\x9d\x4f\xc7\x32\x7d\x4b\xea\x0c\xd3\x15\xf7\x93\x7f\xc1\xa1\x05\x12\xce\xe6\xd9\x62\xee\xe8\x1a\x15\x46\x52\xf3\x6b\xa7\x29\x76\x85\x2e\x97\x2c\x26\x38\x43\xf6\x1e\x1a\xb2\x37\xaa\x54\x43\x3e\x34\x65\xef\xa1\x25\x7b\x0f\x2d\xd9\x7b\xf8\x94\x84\x0b\x07\xf5\x09\x17\x0e\xfd\x09\x17\x22\xa7\xf8\xf1\xe1\xca\x84\x0b\xb6\x0f\xc3\xe1\x2d\x87\xb1\x5e\xc2\x85\xc8\xae\xb1\x7a\xd8\x90\x70\x21\x6a\xa8\x72\x6c\x60\x11\x79\x0a\x1c\x57\x12\x2e\x18\xf3\xa3\xc4\xb2\x4d\x27\xa3\x81\x47\xc8\x2a\xee\xad\xea\x2a\x96\xb9\x5c\xcb\x03\xc7\x64\xee\xb1\x07\x3f\x4e\xf3\x00\x0f\xb3\xdc\xae\xe9\xd8\xc0\x66\x40\x38\x3f\x9b\x45\x66\xd1\xed\xc8\xad\xc3\x1b\x99\x45\xb7\x23\xab\xe8\x76\x64\x15\xdd\x8e\xd6\x29\xba\xad\xd9\xec\xb0\x96\xcd\xa2\x4a\xa8\xb5\x9c\x4f\xbb\x1a\x6f\xd4\x58\x63\x5b\xf4\x81\xac\xf6\x9c\xcd\xc2\x35\xd9\x2c\xb4\x3f\x6d\x62\xb3\xda\xaa\xbc\x16\x16\x51\xa5\x2e\xaf\x87\xcd\xee\x3c\x7c\x66\x13\xca\xd8\x41\x8d\x8a\xb4\xe6\x77\x5e\x7e\x78\xc2\x1e\xed\xed\xc3\xd8\xa3\x4d\x1e\xf2\x5d\x82\x97\xc1\x6f\x2b\x1c\xcd\x75\x10\x90\xa7\x85\x70\x24\x5f\xc3\xe3\xbc\xba\xb2\xfc\x14\x72\xdc\x3c\xfe\x44\x7a\x58\xba\xbd\x45\x89\x5a\x05\xa9\xc9\x0b\xde\x73\x86\x70\x5d\x41\xeb\xf4\x9d\x9c\x14\x59\x72\x4f\x2e\xa1\x97\x7a\x97\xa0\xb2\x4d\x5b\x20\xe4\xe4\xd2\x13\xb2\x48\xbc\x12\xae\x1c\xea\x6b\x4b\x10\x95\x22\x26\x21\x69\x1f\x9d\xe8\x70\x5d\x75\x2a\xec\xf2\x27\x7c\xb2\x60\x55\xb7\x45\xb3\x17\x08\x2a\x79\xc3\xdf\x5b\x28\x44\x47\x68\xbb\xd3\x45\x77\x5f\xc8\x92\x83\x08\x8f\xe5\x9f\x3f\x89\x26\xf2\xa7\x9b\x80\x92\xc3\xbd\x15\x0d\xb7\x50\xf8\xd9\xec\x5b\x3c\xfe\xdc\x74\xf7\x26\x46\x16\xe0\xf9\x3c\x59\xca\x6b\x3d\x0e\xb0\x2e\x4a\x43\x34\xaf\x55\x32\x4b\x7d\xb4\xb6\xc4\x98\x6a\xd0\x70\x5a\x34\xb5\x5a\xe7\xb0\xd8\xd0\x63\x7d\x55\x33\x57\x47\xf6\x5c\x9c\x57\x12\x6e\x49\x9f\x6d\xd3\xb1\x4d\x7e\x6e\xde\x9a\xea\xf7\x4a\x04\x38\x8e\x5a\xf0\xc1\xed\xf6\x67\x55\x63\x4a\x06\x0a\x7a\x1c\xb6\x54\x20\x45\x69\x11\x29\x64\x86\x64\xf8\xa6\xf8\xc1\x31\x18\xcb\x6a\x30\x3a\xc6\x50\x72\x28\x2d\xb8\x8e\xd8\x45\x0f\x04\x6d\x6e\x7e\x49\xb3\x07\x50\x5a\x45\x39\x87\x5c\x54\x75\x82\x28\xfc\x21\x7f\x9f\xa5\x64\x73\x53\x9e\xb6\xc1\x93\xc4\xee\xc2\x29\xe1\x41\x85\x27\x19\x16\x65\x5e\x45\x6c\x39\xa7\x92\x62\x21\x47\x7a\xcb\x43\x9b\xa2\x80\x7b\xbd\xe9\x50\x0e\xf6\x5c\x9b\x96\x9e\x8f\xa0\x4a\x31\x89\xcb\xd8\x47\xab\x72\x1c\xb2\x63\x57\x05\xb1\x0b\x99\xdc\xcb\x81\x24\xb2\x10\xbc\x27\x8f\x0c\x80\x99\xb7\xe9\xce\xab\xca\xcd\x38\x5c\xce\xf2\x37\x17\x50\x97\xca\xc5\x00\x48\xf7\x9a\x4a\xf5\x9d\xef\x94\x22\x41\x15\x4d\x7d\xc8\xc1\xdc\x48\xca\x4a\x05\x07\x2d\x09\xb3\x33\x1f\x48\x83\x54\xf5\xf3\xdb\x12\x8f\xcf\xa0\x26\x79\xcb\x1f\x8a\xff\xca\xa6\xa6\x95\x08\x79\x93\x3b\x00\x3b\xce\x08\x4e\x8b\xae\x74\xe5\x4e\x12\xc9\x87\x68\x8a\xef\x89\x1d\xcf\x23\x67\x25\xa8\xa8\x03\x06\x95\x5e\x78\x6a\xad\x95\xd3\xd8\xd1\x46\x32\x0b\x46\x65\xba\x39\xe6\x95\xb9\x80\x56\xe8\xc4\x9c\x93\x4d\xb5\xaa\xab\xf1\xaf\xc7\x95\xef\x49\x1a\xab\xc4\xb4\x33\x9a\xb6\x05\xb8\xe7\xf5\x10\xba\x65\x60\x4f\xc7\x83\x4e\x8c\x19\x7e\x99\x64\x50\x78\xc0\x9d\x03\x11\x4d\xac\x20\xbb\xb5\x74\xba\x4e\x6b\x0e\xe9\xc8\x5d\x16\x32\x17\xd9\x75\x42\x47\x04\xfd\xdc\xf4\x56\x8c\xa4\xcb\xc7\xd7\x41\x55\x38\x85\xdb\xc6\xed\xbe\x0c\x7f\x36\x67\x4e\x3d\x75\x5b\x97\xd4\x3f\x32\xfe\xb6\xf9\xcc\xa1\xd6\x0a\x7e\xae\x92\x8f\x7f\x20\xb0\x71\x7b\xa7\x6e\xc7\x3e\x5a\xc2\xac\x1c\x95\x7f\x76\x41\x8e\xa6\xe2\xb6\xf0\x81\xa0\x07\x2c\x5c\xa2\x73\xc2\xf2\x65\xe0\x00\x10\xca\xd6\x91\xe7\x30\xec\x76\xe5\x8d\x82\x17\xff\x71\xc8\x94\xf0\x37\xca\x0c\x2e\xaa\xda\xa1\x6c\x8c\x18\x9d\xc1\xdd\x0b\x2d\xd0\x10\xd8\x67\x8a\x0b\xe5\xb6\xcb\xbf\x72\xd6\x97\x4b\x4c\xcd\x54\x82\xa0\xe0\xe2\x23\xb7\xab\x5b\x3d\xe2\xcf\xae\x4f\x4e\x8d\xe4\x54\xf6\x56\x58\x79\x1f\xe7\x15\xf7\x29\xa0\xb3\x4f\x2e\xe2\x24\x79\x2d\xbf\xf5\x84\x3c\x4b\x2e\xf1\x28\xae\xd7\x1f\xcf\xce\xce\xaf\xaf\xab\x82\xf4\x2c\x21\x58\x64\x04\xe0\x83\x28\xe3\x46\x00\x90\x07\xb4\xb9\xfa\x84\x5b\xbc\xcd\x72\x9e\xfc\xde\x0d\x72\xc9\x93\xee\x1b\x99\x46\x12\x9b\x79\xe9\x67\x50\x10\x1b\x64\xb0\x56\x73\x2a\x7b\x8c\x7b\x61\xec\x26\x22\xaa\xed\xd2\x1b\x72\x20\xc9\xe9\x43\xc0\x9e\xa1\x4a\x50\x7c\xb5\x6f\x67\x77\x80\x72\xab\x25\x8c\x6a\x17\x5e\xb9\x59\x7c\x94\xd6\xb1\x4a\x38\x7f\x6d\x22\x23\xce\xcb\x8a\x0f\x15\x27\x6f\x6c\x74\xc5\x35\x68\x05\xe5\xa6\x5c\x7a\xd5\xb3\xb5\x83\xa2\xba\xe5\x31\xd8\xbd\x52\x80\xe2\xcf\xe1\x9c\x15\xf3\xbe\x32\x05\x60\xe3\xf7\xc6\x75\xb2\xdf\x6f\x5f\x2f\x8e\xa2\xbe\x30\xc7\x1d\x8d\x22\x55\xa2\x27\x8a\xe4\x20\x0b\xa3\x46\x4f\x14\x55\x07\x56\x02\xbe\xe5\x0d\x7c\xb2\xbb\x69\xeb\xe3\xdf\xac\xb7\xfb\x49\xf8\xcd\x5b\x95\x6c\xe4\xee\x58\xae\xf8\xf4\x93\xbd\x41\x8e\x96\xa3\x6c\x74\x77\x87\x7f\x7a\x4e\x19\x31\x51\xd4\x1e\xd6\x02\xd0\x7a\x42\xef\x89\x50\x08\xc1\xd2\xfb\x38\xcd\x7d\xc9\x13\x27\x44\xcc\x73\x83\xad\x5e\xf0\x81\x58\x55\x96\xa9\xfe\x5f\x65\xd8\x7a\x21\x67\x29\x9a\x3a\xd0\xb9\x22\x98\x0c\x53\xbe\xd7\x73\xd6\xfb\xd5\xea\xfb\x4b\x3b\x48\x49\x1b\xe1\x17\xf2\xa6\x57\x59\xd6\xdb\x45\xc7\x09\x6f\x52\x00\x2e\xc6\xe6\x42\x90\xa9\xc9\x0b\xab\xe4\x3d\xdf\x6a\x58\xa6\xae\x08\xda\x5c\x13\xa6\xe9\xa4\xab\x4e\x52\x50\xdb\x8d\x9f\xd2\x08\x05\x4f\x7d\x95\x70\x46\xf0\xa9\xea\x47\x72\x4d\x96\x73\xed\x84\xde\xd3\x98\x83\x96\x4a\x34\x9f\x1c\x79\x16\x94\xbd\x74\x6a\xaa\x04\x28\x26\xac\xaf\x0a\xd0\xc0\xa6\x9e\x83\x6e\x25\x47\x32\x7f\x05\x53\x05\xf1\x0e\x7f\x7f\xf7\xf6\x0d\x63\xf3\x2b\x71\xfb\xde\xb6\xd2\xbd\x7f\x58\x88\x04\x28\xbc\x75\x36\xfc\x07\x19\x31\x75\xab\x01\x7c\x2c\x1e\x15\x32\x03\x0f\x1e\x26\x44\x28\x53\x90\xa6\x67\x04\x91\x67\x09\x66\x6a\x22\xbc\x56\xd9\xb0\x7a\xe3\x0a\xcf\xb4\x39\xd6\xad\x35\x27\x2d\x93\xba\xe9\xcf\xd6\x2b\xd3\x1c\x1b\xae\x7d\xe3\x1a\x6d\xd7\xdc\xb8\x46\xa1\xef\xc6\x35\xb2\xab\xcc\x45\x61\xf3\x8d\xab\x6d\xb2\x8f\x42\x2e\xab\xfa\xab\x6f\x5c\xa3\xbe\xfd\x59\xed\x8d\x6b\x54\x5b\x5d\xce\xe8\x3d\xaa\xd4\x96\xab\xbf\x71\xb5\xc8\x51\xde\xd1\x59\x37\x74\xcf\x6c\x91\xb1\xc2\xe2\xd1\xc8\x4a\xa6\xa0\x14\x6f\x20\xc7\x3e\xd5\xf5\x74\x71\x51\x64\x23\x8a\x19\x89\x05\x3b\x89\xbc\x72\xe3\x6c\x91\x4a\x9b\x84\x96\x8a\x16\xd6\x15\x9c\x8a\x5b\x63\xd7\xda\xfe\x1c\x18\x47\x0f\xdf\x08\x8d\xd5\x22\x2b\x61\x9e\xa8\x68\x4d\xd3\x86\xc8\xaa\x15\x29\xdd\x8b\x5c\x28\x18\x93\x27\x6b\x7c\xbf\xc8\x13\xf7\xe3\xc7\x69\x1e\x64\x73\x92\xb6\x15\x6c\x68\x03\x09\x49\xcc\xa5\x6a\x65\xdc\x12\xb9\x20\x10\x1e\x33\x7e\xd2\x98\x93\xd4\x8c\xfb\xb8\x38\x0f\x43\x44\x8b\x62\x61\x64\x56\x9c\x50\x96\x60\x11\xd5\x31\x23\xa9\x11\xd5\x01\xed\x8a\xde\x81\x81\x8c\x82\xbe\x7a\x34\xb2\xa5\xaf\x90\xc4\x1b\xac\xc5\x06\x20\x39\x10\x63\xec\x0c\x82\xf5\xa2\x4d\x24\x5e\xe1\xfe\xa1\x81\x19\x67\x86\xb3\x9c\xc4\x24\x65\x14\x27\x5c\xe5\xf9\xe1\x07\x0b\x21\xa7\x81\x46\x08\x68\x5c\x8d\x19\x21\xd5\x84\x08\x7b\xa5\x8a\xaa\xdd\xc8\x94\x18\x7e\x9c\xe6\x66\x91\x82\x6f\x0e\x78\xe5\xb7\xe7\xd7\x84\x35\x78\xa1\xf0\x09\xe0\x22\xe9\x4a\x09\xde\x03\x9b\x4f\x7d\x36\xd3\x19\x37\x0b\x14\x67\x60\x5a\x02\xa3\x0d\x67\x06\x95\xd7\x4d\xd4\x6c\xd5\x0e\x11\xd2\x47\x0e\xce\xad\x97\xc3\x7f\x08\xe6\x57\x6d\x4b\x47\x4c\xe3\xe1\x91\xb9\x3c\x8c\x4f\x83\x2c\x9d\x97\x45\xed\x6b\xa8\x67\x05\x7e\xed\xa9\xdc\x53\xa0\xe0\xd9\x55\xec\x57\x12\x13\x6c\x79\x10\xc7\x55\x58\x4a\x67\x4b\xa4\x10\x6c\x1d\xa1\x16\x9e\xcf\x13\x3a\x82\x38\x81\xde\x3f\x0a\x7d\x17\x00\xad\xce\xf0\x68\x4a\xb6\xce\xb2\x94\xe5\x59\xc2\x1b\xa7\xd9\xd6\x88\x3f\x33\x1b\xfd\x7d\x4b\x6e\x87\x24\xde\xfa\x95\xb2\x29\x6f\x67\xef\x93\xad\x0a\x5e\x95\x5b\x0e\x89\xa4\x49\x05\x7d\x5c\x23\x8f\x8c\xa4\x71\x5b\x36\x71\xd2\x75\xa8\x0f\x2b\xa2\x48\xef\x9f\xa2\x05\x14\xc9\xa4\x29\xf2\x74\x54\x36\xfa\x1b\x97\xfa\xe8\x44\x35\xba\x2d\x3f\xfd\x6c\x5f\x07\x19\xcd\xed\x4d\x8f\xb3\x40\x41\x98\x1c\xf8\x1b\x11\x1a\x59\x82\xe9\x9a\x1d\x35\x5d\x03\xc1\x2e\x23\xab\xc3\xab\x58\x4b\xf9\xd3\xd6\x3a\x4e\x63\x70\x98\xc4\x49\xa2\x8b\xd8\x83\x5b\xde\x8c\x30\x92\x17\x75\xe4\x86\x16\x15\x22\xe0\x38\xa6\xfc\x3d\x4e\xe0\xf0\xe1\x75\x21\x2d\x2b\x94\x58\x37\x40\xd5\x4f\x6b\xef\x82\x90\xaf\x1f\xf7\x91\x9b\xea\x51\x31\x79\xcd\xfe\x89\x7e\x2e\xbd\x2a\x4a\x95\x9f\x37\x94\x6a\xff\x91\x7b\x30\x36\x76\x74\xcd\x29\x5f\xc8\x92\xb3\x88\x8b\x4b\xf5\x52\xfa\x5e\xf2\x89\xdb\xf2\xf6\x0b\x59\xba\xe7\x46\x98\x33\x59\x6c\xba\xfd\x85\x2c\xbb\xe2\xeb\xa6\xc9\xef\xf5\xd0\x5b\x99\x4d\x0f\x72\xb4\xe0\x38\x36\xba\x12\xfa\x37\x1d\xa3\x54\x25\x49\xa8\xd7\x18\x23\x8f\xc6\x18\x99\x1a\xe3\x8e\xab\x31\x46\xa6\xc6\x18\x59\x1a\x63\x64\x69\x8c\xd1\xfa\x1a\x63\x58\xa7\x31\x46\x5e\x8d\x71\xc7\xd6\x18\xa3\x15\x1a\xa3\x7d\xfb\x1e\x71\x8d\x71\x67\x0d\x8d\x71\xc7\xfe\xac\x5e\x63\xdc\x69\xd4\x18\x45\xef\xd1\xce\x0a\x8d\xf1\xce\x54\x19\x43\xbf\xfb\x5c\x41\xd2\x58\xf8\xce\xdd\xe9\x03\x6b\x57\xb3\x50\xe5\xca\xf1\xfb\x5c\xe9\x64\x27\xae\x1f\x5d\x7d\x67\xcf\x0c\x10\x90\x3b\x3b\xcb\x67\x32\x3a\x4f\x1c\xab\xca\x4f\x4a\xf6\x7d\x4d\x53\x38\x76\xaa\xb0\xfd\xb1\x51\x48\xc3\x52\x68\x12\x0c\x25\x72\x84\xbe\x55\xf0\xbd\x59\x1c\x47\x0b\xd4\x26\x93\x23\x74\xdd\xef\x20\xf2\x38\xe7\x0a\xb0\x3e\x48\xc9\x14\xa6\x53\xf9\xb1\x16\x76\x0d\x07\xfb\x52\x95\xad\x2b\x54\xe8\x5e\x4d\x18\xca\x2f\xb5\x6b\xdf\x58\xeb\x59\x37\x83\x2c\xe1\xc6\xe1\x12\x2c\xad\xe6\x6f\x65\x66\xa9\xa1\xac\xa8\xe3\xaf\xce\x95\xd6\x5c\xd8\x3a\xae\x71\xd2\x57\x67\x6a\x33\xb3\x90\xbe\x76\x0c\xbc\xc9\x47\x44\x92\x69\xc8\x21\x52\x40\xf2\x5c\xf5\x81\x75\x44\x57\xb0\xa6\x44\x64\x33\xf6\x9e\xbd\xed\xbb\xdf\xba\xf3\xb7\xff\x86\xd8\x4e\x38\x5d\x9e\xbe\xbd\x85\x2a\x5c\x1b\x97\x65\x9c\x03\x1b\xf8\x62\x56\x2c\xd1\x03\x86\xbc\x45\xa0\x11\xc2\x8e\x68\x26\xe6\x06\x3f\xe9\x2e\x5a\xa4\x8c\x26\xe8\x02\x4d\x84\x9f\x20\xc8\x55\xa9\xeb\xa1\xd7\x0b\xb6\xc8\x09\x4a\xe8\x30\xc7\xe5\xfd\x06\xf0\x45\x96\x12\x30\x02\x41\xda\x83\x6d\xbb\xb2\x77\x92\x65\x73\x53\x93\x83\x07\x6d\x5a\xd5\x56\xf7\xfd\x33\x62\x86\xd0\xee\xab\xfd\x8d\x7e\x6e\xb8\x45\x77\xfc\x4d\x5c\x0b\x20\xfd\x5c\xbd\x2c\x76\xa5\xda\xf3\xe7\xd6\x98\x4e\x4e\x2c\x33\x66\xc5\x7c\x09\x39\xa3\xdd\xab\xfc\xf5\x23\x75\xea\x4c\x6d\xb5\x8b\x51\xd1\xd0\x75\x62\xd1\x9c\x8f\x39\xfb\x8e\x70\x2e\x42\xf3\x85\x06\x24\xb2\x42\xd0\x74\xbe\x60\xba\x26\x3f\x5c\x1c\xc9\x32\x93\xca\xdc\x75\xfa\xdf\x4e\xff\xae\xc3\x27\x6a\x2a\xb2\xd8\x22\xae\xa9\x1c\x4b\x9d\x30\x34\x73\x6b\x71\x74\x35\xb6\x3e\x34\x5d\x81\xae\x2a\x2b\xea\xda\xee\x27\x27\xa8\xf5\xfa\xf2\xea\x5d\xcb\xef\x53\xa3\x77\x31\x95\xb4\x43\x43\xf8\xe7\x82\xe4\xcb\x6b\xa8\xdd\x99\xe5\xa7\x49\xd2\x6e\x41\xcf\x5d\xc4\xc8\x23\xc3\x39\xc1\x5d\x59\x16\xb4\x8b\x86\x0b\xc6\xb2\xb4\x65\x24\xd1\x12\xe0\x94\xa6\xe0\x96\xf0\x92\x26\x17\xdd\xf4\x67\xeb\x95\xa9\x29\xf4\x9f\xe0\xea\x17\x55\x0b\xf5\x97\x7d\xd4\xb8\xfa\xd9\x25\xbc\xa2\xfe\x2a\x57\x3f\xa9\xe3\x94\xe8\x71\x18\x6b\xba\xfa\xed\xda\x9f\x36\xb9\xfa\xad\x28\xe1\x25\xb1\x88\xd6\x2a\xe1\x05\xec\x72\xe2\xa3\x90\x7e\x2d\x38\x45\xfc\x0d\x49\xe2\x19\xcb\xe9\x70\xc1\x48\xbb\xc5\xf7\x9d\x6a\x04\x3d\xb4\x94\xb9\x83\x7c\x5f\x71\xcd\xbe\x55\x51\x88\xf4\x57\x9d\x2a\x00\xfe\x77\xc0\xb2\xb7\xd9\x03\xc9\xcf\x70\x41\xda\xb6\x03\x40\xe9\x96\x23\xc6\x13\x67\xa4\x48\x37\xe4\xe9\x1b\x23\xb1\x83\x3e\xa8\x64\xa9\x22\x3d\x6a\xe0\x74\x2f\x8f\x1b\xc6\x88\x9d\x84\x11\x5f\xbf\x3a\x2f\x45\x5c\xe0\x28\x4b\x19\x4d\x17\xd5\x64\x4b\x62\xe4\xd6\x4a\xbb\x3e\x7f\x7b\x7e\x76\xd3\x82\xd2\x98\xf0\x76\x8a\x0b\x83\x2e\x5a\x75\xaa\x14\x39\xeb\xf5\xd0\x87\xac\x28\xe8\x30\x59\x22\xd5\x4a\x88\x0d\xbb\x92\x86\x67\xe5\xee\xe8\x49\x90\xbb\x84\xb1\x0c\xcd\x4a\x7a\x91\x5b\x13\x28\x32\x2b\xe9\x45\x56\x25\xbd\xc8\xaa\xa4\x17\xad\x53\x49\x0f\x99\x4b\xb1\xdf\x58\x13\x28\xaa\xa4\x39\x30\x78\xdf\xae\x09\x14\x35\x56\xd5\xd3\x0b\xc2\xb6\xe1\xee\xf0\x65\xf9\xc4\x9a\x40\xd1\x9e\x0d\x62\x45\x4d\xa0\x68\x8d\x9a\x40\x12\xab\xe8\x29\x35\x81\x94\x3b\x64\x13\x19\xa5\x57\x98\xaa\xab\xec\xa3\xa5\xab\x6c\x6a\xbe\xee\x2a\x9f\x32\xf7\x24\xa9\x70\xaa\xfb\x65\xd6\xbb\x28\x57\xaf\x5a\x32\xf0\xe3\x07\xbe\x02\xa0\xa6\xc8\x30\x7b\x2c\xd7\x40\xf9\x2e\xc7\x31\xcd\x5a\xfa\xa3\x00\xda\x56\x07\xd0\x80\xbc\xf8\xae\x8a\x7b\xb5\x3c\x9b\xbb\xf1\x5f\xa8\xec\x77\x5c\x33\x15\x2e\x7b\xb4\x00\xe3\x88\x36\xaa\x19\x29\xc1\x10\x1e\x66\x0b\x66\xdc\x25\x16\xe6\x25\x97\xf6\xd8\x9b\xe7\xd9\x3d\x8d\x49\xdc\x45\x14\x7c\xcd\x70\x51\x2c\xb8\x12\xac\xfc\x02\xd5\x3d\x17\x2d\x03\xed\x1a\x4a\x56\x7b\xac\x74\xcd\x15\xab\x57\x9b\xf5\xec\x28\xdf\xd2\x7a\x68\x47\x18\x19\xd2\x91\x34\xc5\x04\x18\x00\xc2\xed\x6d\xb4\x89\x48\x20\x43\x4b\x7b\x88\x88\x6b\x4f\x4f\xea\xc6\x95\x5e\x9a\x2b\x7c\x1a\x7b\x3d\x74\x2d\x93\x71\xa9\x48\x7e\xfb\x82\x0f\x24\x7f\x4a\x38\xdd\x33\x24\x28\x23\xee\x1c\xe7\x5c\x3f\xcf\x29\xff\x2d\xae\x3d\xd4\x00\x5c\x8f\xca\x91\xf4\x54\xf4\x18\x82\x6c\x7b\x30\xd2\xee\x30\x06\x2d\xd4\x9f\xd5\x46\xa2\x24\xc7\x49\x49\x1c\xb7\x81\x2e\x8f\x01\x8d\x04\x31\xdd\xcd\x96\x63\xf1\xa1\xec\xad\xe2\xfa\x34\x86\xaa\x38\xa2\x23\x31\xaf\xbe\x16\x2f\x8d\x9e\xec\xd9\x47\x8e\x8b\x92\x31\xb2\xda\x36\x6a\x60\xb5\x0d\xcc\x81\x6d\x7b\xdd\x21\xfe\x05\x6f\x8f\x7f\xf9\x02\x5d\x0f\x71\x85\x67\xa7\x97\x2c\xcf\x4f\x56\x40\x75\x85\x6a\x95\x70\xb5\x20\x2a\x6c\x52\x4f\xd7\x5a\x18\xba\x49\x83\x07\xcc\xea\xa9\xf7\x3e\xee\x35\x4e\x55\x93\xd5\xcc\xa3\xb7\xec\x7a\x0c\x8c\x66\x0d\xc3\xc8\x2d\x32\x11\x99\x35\x0c\x23\xab\x86\x61\x64\xd5\x30\x8c\xd6\xab\x61\xa8\xb5\x15\xb7\xf6\x9e\xa5\xab\x78\xea\x17\x4a\x15\xc0\x2e\x38\x11\xad\xa8\x5e\x28\x7a\xb2\x94\x8c\x5d\xae\xa7\xec\x57\xf4\x94\x1a\x2d\x45\x52\xc4\xec\xd0\xaf\xa3\x28\xf4\x9a\x34\x14\x03\x9b\xa8\x52\x84\x02\x55\xb5\x13\x6d\x88\x8c\x94\x6e\xe2\x12\x4d\xbc\xf5\x70\x92\x7f\x59\xd8\xcd\x1b\x04\xa5\xdb\x74\x95\xc8\xf4\x55\x6a\xf5\x70\x9f\xa7\xc4\x49\x64\x96\x38\x89\xdc\xcc\xcf\x91\x59\xe2\x24\xb2\x4a\x9c\x44\x56\x89\x93\x68\x75\x89\x13\x83\xf7\x76\xeb\x0f\xad\x7b\x35\x87\x56\x3b\xff\x73\xd4\x50\xe8\x44\xce\xb3\x7d\xf2\xdc\xe3\x5c\x77\xb0\xe6\xa1\xf5\xc0\xfe\xb4\xe9\xd0\x5a\x9b\x07\xda\xc2\x22\xaa\x64\x82\xf6\xc5\xa7\xf1\x99\xe9\x2b\x4e\xdb\xad\x8b\x4c\x13\x1c\x31\xd7\xba\x92\xfc\x4e\xfd\xeb\xf2\xa2\xfb\x5c\x73\x52\x7d\x78\x99\xe5\x5a\x71\x26\xcb\x06\x4a\x0d\x52\xe8\x2c\x4a\xaf\x2b\x33\x90\xd8\xd6\x7b\x2c\x93\xa8\x57\x9c\x77\x6b\xb4\xaa\x63\xcf\xe5\x52\x39\x01\xfb\x1e\xae\x35\xf3\x95\x47\x6e\xe2\x84\xc8\xcc\x57\x1e\x59\xf9\xca\x23\x2b\x5f\x79\xb4\x3a\x5f\xb9\xc1\xb5\x7b\xf5\x5c\xbb\x5f\xc3\xb5\x76\xfa\x84\xa8\x21\x6b\xb9\xe4\x17\xfb\x40\xb6\xcf\xb9\xf6\x70\x4d\xae\xb5\x03\x32\x7d\xb9\xcb\x4b\xb4\x56\x70\xad\xc0\x22\xaa\x24\x52\xa8\xe3\xda\x1d\xc5\xb5\x1e\x12\xc1\xfb\x8a\x84\xe4\x3a\x08\x57\xa7\xbf\x7e\x45\x76\x8b\x52\xd2\xf1\x26\xf6\x3b\x10\x93\x2e\xa5\x3d\xbc\x56\x71\x43\xb6\x3c\x32\xfd\x08\xf9\x45\x76\x1d\x6e\x5e\xcc\xbc\x97\x59\x46\x6a\x16\x96\xa1\x38\xeb\x1a\x97\x0f\x46\x7a\x9f\x70\x7b\xfb\xbf\x5a\x87\x08\x77\x58\x3e\x9f\xc7\xe6\xdb\xd9\x92\x17\x3c\x99\x47\x22\x33\xf3\x48\xdf\x8d\x7e\x8f\xcc\xcc\x23\x91\x95\x79\x24\xb2\x32\x8f\x44\xab\x33\x8f\x18\x0b\x68\xbf\x7e\x01\x1d\xf8\x17\x50\xdf\x8e\x7e\x8f\x1a\xf2\x8f\x48\xd6\xb5\xb5\x85\x83\x5b\x0e\x63\xbd\x05\xd4\xb7\x5d\xe9\x7c\x59\x48\x4a\xb4\x56\x2c\x20\x81\x45\x7f\x9d\xe8\x77\x60\xa4\x5d\xb5\x80\xf6\x9f\x26\xf6\x77\xbb\xc8\x11\xf4\xbb\x6b\x09\xfa\x67\xa8\x26\xab\x47\xc5\xff\xa8\xee\x30\xbe\xca\x51\xc9\x3a\x84\xe7\xa4\x98\x67\x69\x41\x8c\x63\x98\x71\x0a\xd7\xe7\x65\x5f\xb0\xb2\x8a\x41\x5e\x33\x6b\xd4\xe3\x54\x64\x60\x5e\x5e\x43\x52\x3e\x2e\x43\x3c\xa5\x56\x1b\x3e\x15\x88\x6a\xf3\xcd\x06\xd4\xea\x18\x2e\xc6\x63\x92\x43\x76\x5d\x7f\xab\x61\x92\x0d\x37\xec\x7e\xf4\x88\xad\x2f\xc8\x23\x73\xac\x05\xfc\xf5\x84\xb0\x2b\xd9\x42\xba\xc0\xb4\x46\x59\xca\x48\xca\xb6\x84\x55\x99\xf7\xfc\xbf\xad\xd5\x32\x80\xd8\xa5\xcb\x71\xbb\xea\xa8\xd4\x71\x6f\xc2\x96\x95\xd4\x52\x1a\xe9\xff\x76\x7d\xf9\x3e\x98\xe3\xbc\x20\x6d\xf5\xd4\x29\x0f\x38\xc2\x90\x36\xd5\x53\x2a\x11\x21\x0e\x01\x5e\x1c\xd7\xc1\x6f\xc9\xfa\xae\xd0\x51\xf9\x02\x02\x72\xa4\x83\x75\x6b\x95\xad\xeb\x99\xb1\x48\x56\x19\x87\xdc\xdc\x64\xd1\xf6\x36\xfa\x49\xcc\x8d\xe4\x3a\x39\xb7\xf2\xd7\x4f\xa8\xbf\x6d\xa7\x2a\x13\xdd\x34\x39\xd0\x75\x51\x85\x54\x15\x51\xb3\xb6\x7d\xc8\x6d\xe4\x89\xa1\x6a\x37\xba\xf0\x34\xd7\x5d\x10\x9f\xba\x01\x31\x0a\x7f\xd3\x39\x6e\x1d\xa9\x51\xa1\x4a\x9d\xd4\x58\x93\x7c\x95\xfc\x31\x7f\x96\x78\xa8\x73\x87\x52\xc5\x82\xcb\x74\xcd\x2c\x5f\x02\x55\x2b\x4e\x5f\x0d\x66\xb3\x92\xf8\xb6\xcf\x97\x30\x7b\xc9\x68\xbd\xe7\xcf\xd1\x4f\xb5\x9d\xbd\xa5\x33\xca\x3c\x09\x12\x7c\x61\x78\x4e\x84\x9a\x1d\x8c\x57\x51\x10\xaa\x2c\x30\xca\xd2\x22\x4b\x48\xf0\x80\xf3\xb4\xbd\x71\x25\xa2\x02\x65\x38\x02\x8c\x91\x65\x19\xca\xc6\x8c\xa4\x01\xfa\x85\xde\x8b\xa4\x44\xc1\x46\x93\x23\x96\x47\xf7\x38\xf4\xe8\x1e\x66\xe6\x9d\x7e\x25\x25\x8a\x99\x79\x27\xb2\x32\xef\x44\x56\xe6\x9d\x68\x75\xe6\x1d\xad\x79\x1c\xd4\x79\x54\x1d\xfa\x3c\xaa\xfa\x4e\x32\x94\x86\x9c\x3b\x02\xba\xa5\x38\x1c\x72\x9d\x23\x5c\xed\x51\xd5\xb7\x1d\xb1\x7c\xd9\x76\x14\x3a\x8d\x1e\x55\xa2\xf7\x7e\x25\x05\x4a\x83\x0f\xfe\x81\xeb\x50\x55\xa9\x5a\xeb\x08\x04\x5d\xed\xce\xac\x82\xad\x36\x22\x58\xc8\x66\x09\x6c\xb1\x50\xcf\xb2\x58\xd4\x15\x2f\xc5\x6a\xc7\x71\x34\xae\x13\x28\x96\x77\x4f\x8d\x2c\x59\xc3\x03\x48\x13\x5c\x78\x99\xa6\x71\xdb\xf1\xd7\x32\xf3\x79\xc1\x31\x97\xa6\x8c\xe4\xc2\x15\x0b\x4e\xbc\x46\x36\x38\xeb\x3a\x03\xa9\xfb\x95\x32\x12\x47\x26\x4c\x95\x11\xed\xc2\xe9\x6a\xa4\xa0\x56\x4c\xf3\x05\x19\x09\x42\xfa\x6e\x46\x54\x3f\xab\x74\x2f\x77\x96\xb8\x76\x61\xe9\x5e\xd5\xf5\x08\x4a\xae\xb3\x1e\xfb\x66\x8a\xa2\x7e\xe4\xac\xc7\xbe\x99\xa2\xa8\x6f\xa5\x28\xea\x5b\x29\x8a\xfa\xab\x53\x14\xe9\xf5\x78\x58\xb3\x1e\xfb\xdb\xde\xf5\x18\x59\xeb\xb1\xdf\x90\x9c\x48\x40\x47\x56\x6b\xbe\x1e\xa3\x35\xd6\x63\x64\x7f\x56\xbf\x1e\xa3\xc6\xf5\x28\x7a\xef\x47\x4f\x58\x8f\x87\x6e\x4c\x4c\x43\x48\xb3\xb5\x6e\xa5\x8f\xe2\x62\x34\x12\x87\x02\x71\x79\xe3\xf2\x83\xf7\xa3\x51\x36\x9b\x27\x84\x55\xaa\xfa\xfd\x8b\xee\x92\x02\x95\xaa\xbb\xe4\x93\x70\x5a\x9d\xb5\xf0\xdf\x94\xf6\xe7\x7f\x49\x71\xe0\xc8\xe6\xda\x0a\xb5\x7e\x11\x3e\x23\x45\x81\x27\xb5\xe1\x9c\x25\xc3\x7b\xa2\xe5\xfa\x66\xb4\x5c\xdf\x8d\x96\xeb\x9b\xd1\x72\x7d\x2b\x5a\xae\x6f\x45\xcb\xf5\xd7\x8f\x96\xeb\xd7\x45\xcb\xf5\xbd\xd1\x72\x7d\x3b\x5a\xae\xbf\x22\x5a\xce\x3e\xe2\xf7\x43\x2e\x19\xd6\x88\x96\xeb\xf7\xed\xcf\xea\x25\x43\x63\xb4\x9c\xec\xbd\xff\x84\x68\xb9\x7e\x25\x5a\xae\x2a\x19\xce\xaf\xae\x2e\xaf\xbc\xcb\x89\x08\x55\x5c\x4a\x05\x8b\x11\xfe\x13\x45\x02\x60\x51\x15\x08\xeb\xa3\xf3\xff\x9a\x34\x40\xe8\xdb\xe7\x2e\xba\xb5\xf2\x43\x2d\x68\x7c\xbf\x53\x97\x1a\x0a\x5e\xb6\x2b\x59\xa8\x36\x1e\xe5\x7f\x5b\xf0\x3f\x3b\xfc\x7f\x96\xea\xa7\xfa\x6f\x43\x6b\x50\xbd\xdb\xc7\xe5\xe7\x9e\x55\x4e\x67\xe4\xae\x95\x5c\xe5\x98\xc9\x71\x1a\x67\xb3\x76\x07\x6d\xa2\x70\x0f\x7d\x75\xef\xc1\xef\xd1\x09\x1a\x09\xa7\xaf\xc7\x0d\xf4\x33\xca\xd1\x11\xca\xd1\x8f\x68\xfb\xb1\xcf\x1b\x3f\x1e\x1c\xbb\x74\xb9\x0f\x58\x76\xcd\x72\x2e\x41\xc2\x3d\x4f\x89\x5c\x4e\x14\x71\x9a\x96\x1f\x28\x46\x3c\x7e\xf6\xad\x7d\x3e\xa3\x8c\x11\x3e\x9f\xcf\x34\x7f\xd2\x94\x32\x5d\xf8\xbf\x7c\x2c\x4b\x41\xa1\x13\xd4\xda\x0d\xfa\xc1\x76\xeb\xf8\xd9\x33\xab\x72\xc1\x0c\xcf\x91\xce\x95\x26\x62\x9c\x97\xd9\x22\x47\x31\x1d\x43\x0c\x30\x43\x2a\x60\xaf\x08\xd0\x69\x1c\xf3\x03\xcd\x98\x4e\x16\x39\x98\x3c\x0a\x0e\x0c\x5c\x58\x69\xa1\x62\x42\x1b\x40\x48\xdf\xd2\x22\x78\xd6\xeb\xf1\x2f\xcf\x1f\x31\x67\xbe\x23\xf9\x13\x99\xf1\x55\x3a\x1e\x73\xa9\x1e\x49\x97\xd6\x8b\x18\x9d\xa0\x3f\xd0\x0c\x3f\xaa\x2a\xdc\x47\x28\x44\xdf\x8e\x25\x90\x9b\x0c\xc5\xb4\x80\x48\x66\xce\x9f\xaf\x68\x31\xca\xee\x65\xea\x6c\x8c\x8a\x39\x19\xd1\x31\x1d\x29\x2f\xd7\x2e\x47\x15\xa2\x54\x0b\xc2\xd0\x00\x6c\xda\x03\x84\xa1\x04\xa7\xc0\x60\x15\x72\xa2\xaf\xd8\x44\x4e\x5a\xc6\xc5\x77\xa7\xe0\xdb\x8e\xa6\x6c\x96\x98\xa0\x7e\x02\xef\x5f\x0c\x9c\x77\xd2\xea\x89\x35\xde\x42\x34\x3e\x69\xcd\x96\xff\x0f\x79\xcf\xda\xdc\xc6\x8d\xe4\x77\xfe\x8a\x0e\x37\x25\x91\x12\x39\x94\x38\x92\x6c\x4b\xa6\xb3\xb2\x22\x27\xda\xf8\xb5\x96\x9d\x5c\x22\x79\x6d\x70\x06\x24\x61\x0f\x07\xdc\xc1\x50\x24\x7d\xf6\x7f\xbf\x42\xe3\x31\xc0\x3c\x68\x27\x57\x57\x75\x55\xfb\x49\xe2\x00\x68\x00\x8d\x46\xa3\xd1\xe8\x47\xdf\x20\xac\xaf\x87\xd9\x67\x71\x1b\x22\xb9\xbc\xa3\xb6\x29\x6b\x3f\x7a\x38\x90\x40\x1e\xb5\xca\xc3\x92\xf8\xf9\xa2\x16\xda\x0d\x67\xe0\xae\x31\x49\x0d\x06\x80\x67\x8e\x5d\x03\x9b\x40\x2a\x17\x8a\xdc\x11\x96\xc8\x89\x05\x15\xe8\x4f\x78\xa6\x27\xeb\xfb\x0a\xaa\x6f\x6a\x0b\x0d\x06\xf0\x93\xf6\x15\x7a\x5f\x41\x1a\x35\xa8\x7a\x8f\x43\x41\xda\x31\x83\x61\x13\x60\x39\xd0\x35\x13\x68\x80\x2c\x59\x8e\xb1\x1a\xf6\xed\x40\x59\x5c\x68\xda\x4a\x5b\xc4\x74\x74\x13\x91\x39\x4d\xd8\x27\xba\x0d\x04\x9e\x4a\xde\x79\xa4\xa1\x59\x9c\x60\x85\x96\xc6\xe7\xcf\x3c\x89\xe5\xb6\x49\x98\xc8\xd1\xcc\x3b\x49\x0a\xea\x66\xa9\xc8\x49\x1a\x51\xe1\x6e\x4b\xfd\xc9\x44\x34\x2b\xad\x89\x6d\x5b\xc4\x97\x70\x50\x41\xd2\x4d\x01\x6a\xf2\x0d\x78\x77\xcd\xad\x4c\xdd\xd1\x08\xda\x02\x59\x8d\x35\xd4\xb6\x65\x45\x82\x2b\xcf\x26\xdb\x02\x55\x73\x57\x70\xcd\x47\xc7\xb5\xd4\xe0\xd5\xce\xe2\xd4\x35\x79\x29\xa5\x08\xcd\x67\x19\x5f\xa1\x59\x9c\xd2\x49\xb5\x9f\x73\xbb\x64\xda\x15\xbc\x82\x84\xc0\x72\xaa\x45\xc6\xc7\x64\x8c\x41\xf0\x94\x5b\xce\x86\x2f\x77\x33\x0a\x79\xb6\xd1\xaf\x3e\x04\x65\x62\x49\x3e\x3a\x6b\xae\x05\x3e\x23\xb1\x75\xaa\x96\x35\x25\xaf\x64\x44\x52\x46\x00\x6f\x84\xb2\xe8\x7a\x2f\x3f\xbe\x37\x46\x92\x39\x97\xfc\x60\xb9\x00\xcc\x8d\x51\x38\xb9\xf1\xb1\x71\x04\xe2\xa9\x62\x72\x76\x79\xda\x16\x59\x9a\x80\xca\xc8\x39\x33\x34\x74\xad\xfc\x3c\x90\x4b\x48\xcc\x4a\x0e\x14\x63\x12\x49\x0c\x66\x65\x87\x2d\xe7\xb4\xcc\xf9\x9c\x60\x96\xa4\x64\x23\x45\x61\x15\xfb\x9a\xe4\x39\x89\x66\xb2\x42\x50\x62\xad\xb9\x70\x36\xac\xc7\xff\xec\xe3\x30\x46\xed\xe7\x3a\x9e\x85\xa4\xdf\x2a\x0c\xec\x44\xa5\x3c\x93\xc4\xee\x11\x69\x3e\xa3\xf3\xa2\x8b\xb8\x00\x5f\x76\x8a\x46\x27\x15\x73\x76\x78\xa6\x61\x92\x9a\xea\x09\xef\xbc\x20\x17\xb7\x69\x63\xe5\x4e\xdb\x0e\x5e\xe3\xdf\xdd\xc9\x2e\x08\xe3\x9c\x23\x2f\x10\x97\x70\xda\x69\x81\xd5\x34\xd2\xe8\xe3\xa5\x99\xb8\x33\x0d\xaf\xc0\x10\xbf\xa8\x88\x1d\xcd\xf9\x09\x55\x8e\xcd\x52\xd4\x9e\x9a\x2b\x81\xbc\x11\x1b\xf0\xce\xad\xc0\xf5\x88\x0c\xcb\x1e\x91\xa1\xeb\x11\x19\x7a\x1e\x91\xa1\xe7\x11\x19\x7e\xdd\x23\xd2\xb9\x17\x1c\x36\xbe\x1d\x86\xc3\x86\xb7\x43\xdf\x2f\x32\xdc\xe2\x17\xa9\xe5\x73\x4f\x21\x17\x0e\xe5\xed\xe0\xe8\x1b\xdf\x0e\x8f\xfc\xa6\xdb\xde\x0e\x1b\xfd\x23\xbd\x51\x84\x15\x0f\xc9\x9a\xb7\x43\x9a\x98\x7b\x42\x15\x3d\x83\xce\xbf\x3e\x43\xd7\x10\x5a\xe7\xfb\xcf\xd0\x1d\x04\x39\x15\x79\x87\x26\x01\x1e\xd8\xcf\xc9\x9c\x56\x6c\xf2\x15\x69\x04\x8b\xa5\x98\x75\x0a\xf9\x0a\x7f\xd2\xa4\xdb\xfd\x2a\x2e\xdc\xf6\x05\xc7\xfd\x9a\xad\x92\xa6\x58\x93\xc4\x56\x17\x1b\x04\xea\xe8\x4a\x3e\xd9\xdb\x9d\x37\xa5\xb9\xf9\xf8\x78\xf3\x5a\x39\x26\x74\xda\x31\xbb\x6b\x9b\xe1\xfe\xa9\x86\x52\x70\xd1\x2d\xbf\x38\x52\x6e\x75\x33\xd5\x6e\xa4\x9a\x4d\x24\x2f\x8f\x16\x93\xce\x2e\x72\xbd\x85\xc2\xb2\xb7\x50\xe8\x7a\x0b\x85\x9e\xb7\x50\xe8\x79\x0b\x85\x5f\xf3\x16\xb2\x3b\x68\xe8\x3d\x81\x15\xb0\xcb\x51\x9a\x70\x34\xde\xce\x69\xf4\x10\x52\x70\x3d\xd2\x0f\xe5\xae\x71\xbd\x83\x2a\x54\xa2\x67\xeb\x82\x2f\xef\x16\x33\x8c\xfa\x9d\xe2\xf4\x1a\x96\xbc\x81\xbc\x78\x00\xf6\x70\x18\x95\x11\x30\x18\xc0\x05\x9e\x21\xee\x11\xb2\x4c\x13\x79\x4a\xcb\xa3\x09\xec\xe1\x61\xa3\x26\x6a\xc9\x5d\x49\x02\x65\x59\xdd\xc1\x6b\xb3\x4c\x6a\xb7\x53\x17\xdf\x8c\xf1\x90\x2d\x3d\x19\xdb\x9d\x23\x65\x11\x03\xa9\x68\xd7\xfc\xac\xb8\x7d\xd7\x15\xf7\xd9\x9a\x9d\x86\xbb\xcc\x9c\xff\x26\xff\x33\xac\x66\x3c\x91\x72\x0a\x99\xee\xa6\xbb\x72\x24\x70\xfe\xf2\x4a\x49\x3b\x34\xcf\x37\x52\x58\xea\x29\xff\x63\x1b\x1b\x84\xc9\x0b\x93\x92\x0f\xf3\x9e\x84\x36\x5e\xe6\xe8\x30\x10\xf1\x2c\xa3\x51\x9e\x6c\x02\xec\x83\xc3\x95\x3e\xc1\x63\x20\x30\x4e\x48\xf4\xd1\xc8\xac\x4b\x41\xb3\xf3\x29\xca\x0a\xf0\xbb\xdc\x2c\x1b\x79\xb7\x7b\xac\x7a\x00\x91\xb2\xc9\x04\x03\x67\x5d\xc1\xc7\x94\xaf\x10\xdc\xe3\x65\x0e\x2b\xf4\x3c\xe0\x10\x73\xa5\xa6\xb3\x43\xda\xcb\x67\x94\x67\x54\x4b\x29\x7b\x20\x96\x8b\x05\xcf\x72\x79\xc7\x38\x7f\x79\x85\x3e\x7c\x10\x65\x44\xcc\x24\x24\x6c\xaa\x32\x1b\xb3\xdc\xdc\x03\x8b\xeb\xa8\x19\x63\x46\xa7\xcb\x44\xf2\xde\xf5\x22\xa3\x02\xb3\x19\x43\x8e\xd1\x3c\x80\x4c\x89\x94\xaa\x21\x25\x77\x6c\x2a\x49\x3b\xb0\x13\xd2\xe0\xf6\xf6\xe0\x2a\x37\x41\x99\x4d\xe4\xe4\xa5\xa0\xf2\x87\x19\xb6\x72\xa4\xd8\x8b\x79\x31\x5e\xf4\xc3\xd4\x03\x96\x60\x58\x6a\x71\x0a\x7b\x7b\x12\xb6\x25\x3b\x8b\x4f\x1a\x3f\x36\x68\x18\xc1\x4d\x4b\x07\x08\x9d\x93\x08\xb8\x92\xa2\x56\x2c\x8d\xf9\x4a\xc0\x62\x26\xa9\xdf\x5c\xc7\xf1\xc6\x4d\x33\x02\x87\x43\x10\x94\xce\xd1\xf1\x5c\x7b\x9c\x49\x49\x37\xa1\xf3\xc2\x07\x1a\x5d\xa4\x63\x45\x24\xb1\x26\x92\xa0\x35\x40\x00\xc1\x5e\xe7\x19\x89\x58\x9a\x73\x31\xfb\xfc\x9b\xee\xeb\xa5\xec\xab\x1b\xec\xe9\xde\x6e\x07\x87\xc3\x01\xd3\x97\x8f\x0b\xc9\xa5\x4d\x22\x38\x8b\x0c\x26\x0c\x16\x68\xec\x5c\x5e\x84\x9e\xdc\xb5\x29\x6b\x10\xf3\x22\xb2\x90\xdb\xd6\x90\x90\x63\x87\x28\x37\xab\x42\x41\x80\xd3\xd8\xd9\x01\xe7\xa7\xce\xda\xee\x7f\x7c\x2a\x49\xa0\xf8\xf4\x38\xe1\x63\xb7\x86\x09\x3f\xb2\xb3\xd3\x20\x16\x9a\xdd\xae\x4c\x10\xda\x78\x08\x4b\x98\x6d\x79\x0d\x6f\x4a\xe8\x4b\xda\x5d\xe7\x90\xae\xcc\xc7\xb1\x75\x2b\x71\x05\xbd\xe2\x06\x91\x1a\x8b\xc2\x23\x26\x98\x13\x24\x41\x87\x6a\x9a\xe3\xa9\xa1\x90\xb3\x8d\xd0\x9c\xc3\xcd\xf5\xc1\x0b\xcb\x3e\x78\xa1\xeb\x83\x17\x7a\x3e\x78\xa1\xe7\x83\x17\x7e\xdd\x07\xcf\x1e\x6f\x61\x93\xe2\xf8\xa8\x56\x71\xec\x7b\xdc\x85\x5b\x3c\xee\x14\x74\xef\xc4\x3a\x92\x87\xdc\xc9\x37\x28\x8e\x4f\xfc\x66\xcd\x8a\xe3\x46\xcf\x3a\xa7\xf7\xb0\xe2\x53\x57\x52\x1c\x67\x74\x8a\x11\xc4\x6b\xf1\x81\x85\x4a\x00\xac\xe1\x4f\x25\x39\x70\x1b\x99\xe9\x1a\xd6\x41\xb4\x18\x4c\xf9\xb4\xf1\x70\xd2\x0c\xd2\x15\xb3\xfc\x5a\xea\x60\x2a\xae\x74\x98\x65\xf2\x2a\xe7\xb8\xf3\xdc\x0d\xaf\x4b\xac\x8a\x27\xe2\xe9\x1d\xcd\x72\x18\x13\x41\x4f\x8e\x30\x70\x20\x59\xc1\x98\xa5\x24\xdb\xa8\x78\x30\x33\x9a\xa0\xf6\x8b\x80\xd2\x40\xa8\x76\x85\x8b\x6d\x1a\x27\x14\xde\xbc\x7a\x7a\x99\x46\x3c\xa6\x31\xa8\x7c\x9e\x57\x02\xfa\x92\x2d\xc2\xf5\x0b\x20\xa9\x58\xd1\x0c\xfe\x76\x72\xff\xf8\x60\x78\xef\x44\x05\x61\xe4\x31\x55\xfc\x3b\xe6\x3a\xfc\xb2\x66\x44\xe3\x4d\x4e\x95\x5a\x15\x46\x40\x72\x3e\x36\x63\x0e\xc4\x22\x61\x79\x67\xb7\xb7\xdb\xbd\x39\xd4\x9a\x55\x4c\xcd\xb4\x20\x99\x94\x50\xb8\x8e\x6d\x37\x67\x73\x8a\xd9\xc7\x78\xaa\x24\x0e\x8c\x1d\xc7\xe6\x05\xd4\x1a\x80\x07\x6f\xcd\xaf\x53\x04\x6f\x7e\x9d\x61\x99\xe9\x6b\x95\x31\xed\x3d\x86\x46\x83\x26\x0a\x80\x42\x0c\x5e\xf6\x53\x95\x67\xe2\x31\xda\xc1\xe9\xbe\xc9\x58\x07\x5a\x72\x8a\x3a\xc5\x34\xcd\x86\x3a\xd3\xd5\x99\x89\xcb\xf4\x86\xa5\xf9\x7d\x95\xb6\x82\x8c\xb1\xd8\x77\x8f\xea\xe9\x10\xea\x15\x50\x3d\x20\x22\x92\x35\xe0\xe1\x48\xd6\x39\xc3\xdf\x3f\x00\xd3\xbf\xe1\x14\x98\xdc\xd5\x6e\xd1\xfe\xbe\xfc\xda\xef\x5b\xd6\x4b\x54\xc0\x07\x07\x78\x34\x23\xd9\x05\x8f\xe9\x79\xae\x43\x28\x7c\xa9\xa0\xc5\x99\x21\xa2\x03\xc6\x09\x1f\x17\x44\x2b\x67\x25\x49\xb2\x73\x43\xc6\x6f\x7b\xf0\xdf\x90\x6f\x16\xf4\xd4\x5d\x9c\x2f\x85\x8c\x65\x74\x6c\x24\x05\xb4\x2d\xc4\xd3\xd4\x2c\x72\x46\x3f\xa0\x7b\x2b\xc6\xf8\x6f\x49\x94\x98\x52\x87\xda\xf5\xa7\x8e\x64\xbe\x3d\xdb\xe4\x2a\xa7\x73\x35\x4b\x93\x06\x9f\x89\xbc\x9a\x2d\x8d\xd9\x6a\x45\x2e\xd7\x9c\xce\x51\x24\x75\x41\x21\x22\xca\xa9\xd2\x1a\x1a\xab\xba\x76\x86\x64\x1c\xf5\x63\x3a\x79\x37\x9d\x31\xe8\x3f\x92\x3f\x7f\xa4\x93\x9f\x66\xac\xa5\x0e\x64\xa5\xf9\xf4\xf4\x19\x46\x1b\x2a\xf2\xcc\x9b\x82\xc8\x33\xe7\x55\xe4\xb6\xff\xee\x6d\xe7\x76\xd5\xf5\x9f\x46\xe6\x24\x8f\x66\xa5\x41\xe1\x37\x5c\xd8\xf3\xbc\x73\xd8\x0d\x72\xfe\x66\xb1\x28\x7c\xec\xbd\xd1\x5e\x18\x65\x52\xa1\xdf\x54\x56\x88\x8a\x2d\x58\xe6\xe3\x1d\xcb\x1e\xf3\x51\x35\x1d\xd5\x12\xbb\xdb\x92\xa0\x1f\x2f\xa6\x72\x0c\x31\xbb\x0b\x58\x9a\xd2\xec\xe7\xd7\xcf\x9e\xc2\x48\x77\x78\x56\xcc\x5e\x56\x88\x66\x2c\x89\x9f\xf3\x58\x3b\x88\xea\x31\xbf\xa6\x22\x47\x49\xa9\xa4\x97\x15\xc0\x52\xc1\x62\x0a\x1d\x79\x49\x91\x02\xf9\x06\x98\xe8\xaa\x10\xe7\x2a\x32\x2d\xcd\x8a\x29\x19\x75\xb7\x6a\x53\xa3\xba\xed\x15\xad\x0a\x2d\xae\xab\xbe\x2d\x15\x17\x8f\x6b\x3a\x54\x3b\xa6\x26\xbd\xe0\x93\x09\xa5\x22\xca\xd8\xa2\x08\x62\x60\x44\xdb\x98\x0f\x54\x3e\x8a\x84\xf3\x85\x64\x96\x3a\x3b\x45\xa1\x08\x36\xda\xca\x05\xc9\x68\x9a\x4b\x5c\xb8\x72\xd4\xd6\xd1\x54\xc6\xa3\xcf\x25\xe7\x5a\xaf\x0e\x21\xef\x98\x29\xf4\x02\x25\x9c\xf4\x30\xe6\x42\xb1\xd0\xc5\x18\x7d\x0d\xa2\xd5\x73\xff\x55\x15\xb7\xab\x30\x54\x93\x0c\x52\x1e\x1b\x7b\x63\x4f\x77\xed\xe2\xc9\xd5\x89\x17\x78\xd9\xae\xea\x36\x76\xb8\xef\xdb\xb0\x8f\xd3\x83\x7d\x68\x5b\x6d\xb3\xf1\xf5\x0e\xe0\x65\x42\x89\xa0\xe6\x03\x10\xb8\xb8\xbe\xd6\xb1\x50\x78\x06\xf8\x82\xb5\x48\x08\x4b\x01\xa9\xd9\xac\x59\x93\xea\xb9\x11\xe3\xa5\x28\x8f\x89\xa8\xe2\xbc\xe2\xf1\x4b\x8b\xa6\xfe\x3a\xd0\x44\xd8\x97\x0f\x3e\x51\x5c\xbc\x84\x37\x57\x01\xeb\x1a\x44\xd7\x48\xbf\xc7\x88\x63\x57\xc8\x75\x1d\x37\xc3\xb2\xe3\x66\xe8\x3a\x6e\x86\x9e\xe3\x66\xe8\x39\x6e\x86\x5f\x77\xdc\xf4\xe4\xd9\xe3\x5a\x79\xd6\xf7\xcb\x0c\xb7\xf8\x65\x2a\xa5\xa1\xd3\xbb\x6c\xfd\x0d\xb2\xec\x3d\xbf\x59\xb3\x2c\xdb\xe8\x83\xa9\x7b\x0e\x2b\xbe\x97\x8e\x1c\x6b\x1f\x0b\x50\x97\x61\xd2\x4c\x1b\xee\x69\xf7\x60\x59\xb7\x61\xcd\xd1\x0b\xe4\x38\x2b\xac\x52\x37\x94\xc4\x52\x6f\xa7\x8a\x6d\x5b\x55\x6c\x57\xf0\x9d\x6c\x7d\x07\xa0\x89\x70\x62\x04\x85\xae\xbb\x65\x58\x76\xb7\x0c\x5d\x77\xcb\xd0\x73\xb7\x0c\x3d\x77\xcb\xf0\x6b\xee\x96\x1e\xc5\x9c\xd4\xa8\xf8\x7c\x7f\xca\xb0\xd1\x9f\xb2\x44\x2d\x27\x92\x5a\xee\x7f\x45\xbd\x77\xdf\x6f\xd2\xa4\xde\x6b\xf0\x9d\x34\x54\x72\xbf\x41\xb5\xe7\x53\x08\x4d\xba\xb5\x2b\x4b\x13\xf1\x35\x9e\x89\xcb\x4a\x13\xf1\xd6\x0a\x7d\x0e\xe3\x14\x86\x73\xc2\xe7\xcf\xf0\x9d\xed\xd3\x8f\xf8\xf5\x7f\xc3\x4d\x7b\xb5\xbc\x54\xf1\x58\xa3\x85\xca\x67\x5c\x14\x2f\x7b\x15\xfe\x2a\xac\xa8\x70\x2e\x3e\x8a\x22\x32\xa6\xce\x19\x2b\x54\xb8\x8f\x34\xd6\x09\xb1\x09\x46\xb7\xa5\xb1\xec\xc3\x8a\xa0\x24\x8a\x78\x16\xb3\x74\x9a\x6c\xac\x32\x8c\x42\x4c\x27\x64\x99\xe4\x85\xb6\x4f\x85\x0e\xf9\xb0\x14\x18\x82\x48\xc0\x7b\xad\x0e\x41\x6b\x8c\x6c\xfe\xde\xa4\x9e\x35\xc9\xb7\xf3\x19\x45\x21\xd1\x8d\x53\xa1\x8d\xe5\x9c\x07\x42\xdd\xda\x3b\x0d\xcc\xc0\x7b\x76\xbc\x85\xf4\x5b\x88\x27\x7e\xf7\xb6\x51\xf9\x49\xde\x80\xe8\x94\xcf\x5a\x3b\xff\x12\xd1\x58\xc5\xa9\x2a\xd6\xed\x0c\x9a\x7f\x95\xcb\x8e\x72\xa4\xbd\xab\x49\xde\x02\x09\xfb\xa8\x62\x78\x18\x0b\x0b\x13\x7c\x3a\xa6\x77\x34\xe1\x0b\x9a\x05\x73\xfe\x89\x25\x09\x09\x78\x36\x1d\xd0\xb4\xff\xe6\x7a\x10\xf3\x48\x0c\xe4\xda\x0f\x34\xdf\x1b\x60\x08\x98\xbf\x91\x3c\xcf\xfa\x6a\xe0\xae\x2a\x0c\xfb\xd6\x59\xcf\xfc\xb4\xc6\x05\xa6\x9c\x74\x72\xa8\x7d\xaa\xf9\x5e\x2f\xbc\xa9\x08\x54\x19\x05\x92\x51\x48\x79\x41\x2a\x76\x8e\xa2\xa7\x12\x13\xbf\xf8\xa5\x05\x7e\x7f\xf2\xa6\xeb\xfe\xd6\xb7\xcf\x76\xaf\xad\xae\xb9\xe6\x06\xab\x63\x62\xa1\x7d\x9b\x84\x68\xae\x8c\xf2\xf6\xfe\xac\x28\x37\x55\x8b\x2b\xc1\xed\x20\xd8\xfb\x7e\xd0\x83\xb6\x06\x58\xc3\x9c\xef\x95\x07\xe1\xf0\x62\xd7\x89\x38\x2c\x3b\x11\x87\xae\x13\x71\xe8\x39\x11\x87\x9e\x13\x71\xb8\xdd\x89\xd8\x2a\xa8\x4c\xec\x00\x8f\x35\xdf\x2b\xb3\xec\xd0\x77\x19\x0e\x1b\x5c\x86\x15\x44\x8f\xcf\xde\x93\xac\xb9\x70\x16\x2e\x31\x66\x3d\x43\x17\xb0\xcf\x96\x4d\xf7\x75\x4c\xd9\xe9\x2d\xf4\x9c\x82\x35\x53\xd6\x31\x7e\x59\xac\x57\xca\x9b\xaf\x5b\x60\xff\x0f\xf2\x8c\xcd\x4d\xe7\xb2\xeb\xa2\x44\x5f\xdb\x0e\xba\xea\x48\x0e\xda\x55\x77\x20\x8c\x1e\xea\x47\x4e\xb3\x7e\x6f\x4e\x17\x6e\xb9\x4e\xb3\x86\x0d\x15\x46\xa1\xef\x0c\xc7\x20\x59\x5e\x83\xfb\x87\x75\xe6\x82\x99\x7b\x14\x81\x1f\x1c\x6a\x70\x3b\xb8\xdd\xfb\x5e\x3f\xaf\x5a\xa0\x5d\x3f\xaa\xa1\x7e\x49\x10\x7c\x4e\x95\x3f\x30\xf2\x06\x02\x6c\x4e\xa6\x74\xb0\x57\x6c\x28\x67\xb2\xfe\x0e\x18\xb9\x08\xac\xdb\x04\x7f\x66\xdc\x2e\x4e\xe7\xb5\x5d\x7c\x1b\xb4\xf2\x3b\x69\x71\xa1\x92\xa7\xcf\x72\x8a\x67\xd7\x87\x7f\x4a\xb1\xa8\xe5\x88\x5c\xea\x4b\x39\xf0\x12\xec\xec\xb8\x25\x05\xff\x55\x1f\x83\x49\x1a\x38\xaf\x7a\x05\xb3\xd3\x8f\x6d\x65\x46\x86\xb6\xa4\x24\x9a\x75\xea\x4c\x21\x1c\xe5\x8d\x7d\x6a\x53\x01\xb4\x0d\x34\x4d\xe3\x8a\xd3\x9f\xb5\xbe\xb4\xdc\x09\xcc\x79\xbc\x4c\x2a\x91\xa3\xe4\x04\x9c\x92\x62\x02\xea\x63\x40\xd7\x4a\x09\x3f\x72\xcd\x26\x8b\x05\xd1\x87\xd7\x8f\xc5\x1c\x9d\x6a\x88\xd1\xc2\x2e\x09\xd3\x7b\x2a\x6b\xe0\x88\xc7\xae\x69\x97\x4a\x01\x3c\x82\x36\x89\x63\x1a\xb7\xdd\x9b\x96\xca\xfd\x2b\xcb\x30\x75\xbc\x2c\x1c\x0c\xe0\x09\x97\xcc\x36\xfa\xb8\x22\x59\x2c\x50\xc9\x48\x72\x36\x66\x09\xcb\x37\x01\x3c\xe7\xab\x1e\x9a\x7c\x39\xa9\xea\xcd\xf1\x8b\x8c\x5f\xa7\xad\x51\x00\x25\x38\x9e\x15\x81\x21\x9c\x33\xfd\xfc\xe2\xe2\xf2\xe5\x6b\xec\xbd\x34\x1e\x77\x84\x36\x11\x9e\x1c\xa4\x05\xd3\x3e\x2b\x6a\xbc\x7c\xf5\xe2\xe2\xf2\xfa\x5a\x55\xa9\xb6\x3b\x93\xbb\x8d\x24\x8c\x08\x07\xaa\xf1\x13\x94\x40\x6d\xe6\x62\x07\x26\x1a\x51\xcb\x42\x65\x33\xed\x94\x68\xc7\x0b\x59\x66\xfc\x2c\x24\x6d\xef\xb5\x5a\xf0\x78\x39\x9d\xb0\x35\x9e\x3a\xec\xc5\x35\x9c\xa0\xa8\x73\xaf\x05\xd7\x7c\x99\x45\x3a\x01\xc6\xe9\x60\x20\x72\x12\x7d\xe4\x77\x34\x9b\x24\x28\x98\xcc\x07\x46\x28\x11\x83\xc3\xc3\x07\xc3\x07\x07\x0f\x1e\x0c\x66\xf9\x3c\x39\xee\x47\x24\xbd\x23\xa2\x1f\x67\x64\x85\x6c\xa1\x8f\xc6\xac\xfd\xf1\x72\xda\x67\x5c\xb4\xf0\x44\xc4\xb7\x42\x7c\xa3\xe5\xd9\x47\x0c\xe1\x5b\xcd\x67\x21\x72\x3e\x67\x39\x19\x30\x2e\xfa\x08\x48\x2e\x5d\x7f\x4e\xa7\x64\xc1\xd6\x34\x69\xb5\x60\x6f\xa0\xc8\x89\xe6\x34\xc2\xdc\x1e\x77\x34\xc3\x77\x52\x10\xff\x5e\x12\x31\x03\x96\x82\x8e\x73\x86\x00\xf0\xb1\xf5\x09\x5b\xa3\xd9\xd5\x78\x39\x85\xd5\x8c\x45\x33\x5b\x59\x56\xb1\x20\xd0\x5d\x42\x3f\x0d\xae\xf0\x3d\x35\xcd\x39\xa8\xb9\xa9\xf7\x73\x3e\xa7\xaa\x0d\x1a\xdc\x3a\xaf\xac\x12\x32\x4b\x25\x3a\x4f\x20\xa6\x77\x2c\xa2\x22\x28\xe5\x68\x42\xed\xdc\x5f\x98\x33\xaa\xe6\x70\xba\xbf\xea\x71\x5e\xab\xc1\x3b\x8c\xa4\xae\xbc\xc3\xe6\x8e\x72\x8f\xad\x60\x04\x6c\x3e\x0d\x52\x92\x2f\x33\x92\xfc\xc6\xe2\x7c\x66\x75\xdc\x33\xbf\xf0\x67\xca\xa6\xb3\xfc\xcc\xbe\x45\x22\x02\x9a\x55\x83\xaa\x82\x12\xea\xd5\xff\xc1\x4a\x82\xc7\xe4\xcd\xc5\xb7\x19\x42\x95\x3d\xd9\x8e\xa3\x7c\x0d\x23\x53\x3e\xa5\xf9\x05\x4f\x73\x79\xba\xb7\x87\xb1\x06\x97\xaf\x03\xb9\x1a\x57\x12\x31\x72\x46\x3d\x29\xec\x1c\x14\x72\xd8\xbb\x28\x5f\x7f\x3f\xa5\x39\x56\xd0\x59\x14\x64\x23\xf7\x53\xe7\x10\x5b\x1d\xf6\x80\xcd\x6c\x82\xb5\x58\xd5\xad\xb4\xc7\xd7\x9a\xe2\x35\x83\x64\x91\x21\x13\x1a\x4f\x29\xe0\x9a\xc0\x82\x0b\xa6\x12\x0d\xeb\xbc\x99\x2a\xa4\xa0\xa2\x2a\x1a\x3b\x14\x15\xb4\xcc\x48\xc5\xc6\x84\x57\x43\x7d\xd0\xc6\x43\xc4\xa2\xf8\xa9\x15\x89\x8b\x0d\x3c\x02\xb1\x71\xc5\x31\x92\x2c\x66\x44\x3f\x98\xdc\xc8\x0a\x7d\x38\xec\xc2\x1e\x1c\xc1\x3e\x84\x6f\x1d\x31\x4d\x57\x1c\x8d\xc0\xf1\x4b\xc3\x1e\x17\x9b\x5a\x29\x4b\x78\x65\x0a\x10\x0e\x89\x6e\x60\x5f\x96\x3e\x7a\xa4\x96\xf2\x8b\x1e\x2f\xee\x6f\x6c\x03\x03\x1c\xb7\x16\xd0\xf5\x77\xb7\x67\x7d\x5e\x1d\x36\x99\x05\x63\x13\xef\x52\x72\x0e\x5a\x48\x50\x5a\x6d\x7c\x9f\x42\xba\x28\x48\x41\x56\xeb\x60\x2a\x71\x29\xdf\xab\xbd\x29\x99\x17\xb2\xb2\x58\x72\xa9\x14\x2f\x78\xdd\x40\xed\x1f\xd3\xee\xea\xc5\xf5\x13\xb6\xf6\xb6\x8e\x5f\xd4\x89\xf2\x75\x0f\x90\xd0\xc4\xba\x07\x62\xd3\x03\xb1\xea\x81\x98\xf5\x20\x5e\xf7\x20\xde\xf4\x20\x5e\xf5\x20\x9e\x15\x5b\x4b\x2e\xb6\xda\x72\xaf\x34\x56\x1a\xb7\xa3\xa3\x25\xaf\xa1\xec\xed\x1d\xc2\xa0\xdc\x53\xf1\x18\xf0\xd8\xf0\xd7\x67\x2c\x65\x93\xcd\x3f\x16\x74\xaa\x6c\x56\x3c\x86\xbe\x5a\xad\x82\x05\xcd\xb2\x4d\x10\x7d\x1a\xa0\x4b\xca\xe0\x72\xcd\x26\xaf\xa8\xc8\x79\x46\xb3\xe0\x83\x30\x37\xbd\xd3\xc1\x80\x26\x2c\xe2\x69\x30\x4e\xf8\xf4\xf8\x5e\x30\x89\x86\xc8\xac\xe4\xcf\x3e\x4d\xf3\x6c\xd3\x1f\x1e\x9c\x04\x92\xfb\xb7\x10\xc3\x0e\xa0\x1a\x93\x06\xfb\xdb\xa9\x66\x45\x9a\x77\x68\x50\x70\x41\x92\x04\x4d\x29\xb4\x30\xe3\xd4\x2c\xb4\x05\xef\x14\xe7\x51\x6e\x19\x4e\x0d\x95\x0f\xb3\xe4\xf3\x62\x1d\x38\x1a\xdc\x5e\x1c\x07\x0f\xbb\x11\x50\xf4\xfa\xe5\xf2\xf7\x77\xd7\xaf\xe5\xb1\xba\x7b\xfe\xf8\xe2\xc7\xcb\x27\x3f\xfd\x7c\xf5\x8f\x5f\x9e\x3e\x7b\xfe\xe2\xe5\x3f\x5f\x5d\xbf\x7e\xf3\xeb\x6f\xff\xf5\xfb\x1f\x64\x1c\xc5\x74\x32\x9d\xb1\x0f\x1f\x93\x79\xca\x17\xff\xce\x44\xbe\xbc\x5b\xad\x37\x9f\x0e\x0e\x87\xe1\xd1\xf1\xc9\xbd\xfb\x0f\xf6\x07\xa3\x5d\x47\xcb\xe3\xfb\xc7\x51\x7c\xa1\x3d\x69\x72\xca\x31\xc5\x2a\xa2\xaa\x6f\x17\xc7\x97\xb9\x0a\x14\xbd\xbb\x7b\xe6\x7c\x8e\x66\xd9\x21\x8c\x7c\x3b\x7b\xa7\x6c\xb8\xa5\x2c\xac\x00\xa3\x69\xd4\x08\x8c\xa6\x51\x23\x30\x9a\x46\xe1\x96\xb2\xa3\x4a\x47\xcc\x8d\x3a\xa9\x99\x1f\x66\xf2\x72\xc4\x78\x3d\x33\x44\xc5\x0d\xf3\x94\xbe\x7a\x62\x0d\x45\x61\x43\x91\x9e\x1d\xc2\x7d\xf4\x08\x86\x5e\x89\x84\xd7\xc1\xa2\x1d\x08\xbb\xf0\xf0\x21\x1c\xc1\x67\xd5\xd1\xa3\x47\x70\xe4\xd5\x0d\x75\xdd\x21\xec\xc0\xe1\x31\x56\x1e\xaa\xca\xa1\xac\x7c\xe2\x55\x3e\x52\x5d\x86\xb0\x03\x27\xa1\xaf\x57\x64\xe2\x39\x79\x8e\x80\x4a\x26\x0d\xba\x0f\xdd\xfa\xe4\xa8\xa2\xee\xf6\x5a\x87\xd5\xd6\x95\x66\xf6\x3f\x4b\x46\xfa\x9f\x7d\x8f\xfc\xcd\x85\x56\xa2\xaa\xdb\x5c\x36\xdc\x52\x16\x6e\x29\x3b\xea\x9e\x95\x97\x57\x2f\x65\x85\x1c\xed\x72\xe9\xb5\xf1\x51\xe2\xd6\x53\x16\x4a\x0c\x1e\xea\xe0\xc3\xfa\x7a\xec\xe3\xa4\xa4\xb7\xf5\xed\x3f\x2c\x7f\x56\x38\x69\xdc\xbd\x99\x62\x3c\x0d\x9b\x57\x97\x76\x78\xc6\xa6\x4f\x58\x42\x1f\xa3\x3d\x07\x7a\x13\xb3\x4f\x4a\xa1\xa3\x3e\xf9\x3a\x82\xef\xfc\xfa\x01\xbe\x07\x77\x76\x31\x07\xac\xba\x6e\x7f\x58\xd0\xe9\x99\xb2\x0e\xe9\xed\xd6\xdd\x9b\x2b\x3d\x9c\x95\xa6\xa7\x4e\x6f\x75\xec\x98\x70\x20\x31\xd5\xbc\xa6\xd4\xbf\xb9\xab\x37\x8e\xa0\x07\xbb\xbb\x5d\x2f\xa5\x9f\xa0\x53\xa3\xa3\x56\x09\x4f\x12\x16\xd1\xe1\xb5\xfe\xda\x31\x3d\x7b\x6d\x98\x3b\x16\xba\x66\x93\x67\x24\x65\x8b\x65\x82\x27\x78\xa7\x32\xa3\x9e\xed\xc4\x42\xd1\x93\x6f\x37\x8c\xb3\x6d\xc8\xb0\x60\xaa\xce\x20\xea\x78\x73\x69\x10\x4d\x3c\xfa\xcf\x8c\xd5\xe3\xe0\xb2\x25\x6a\xd2\xcc\xb4\xa7\x34\xbf\x34\xdf\x3a\x95\xf9\xc9\x26\x29\x55\xa8\xf3\x9a\xb1\x54\xd0\x0c\x5b\xd6\xf5\x6d\x7b\xf1\x00\x11\x6d\x11\x52\x31\x6b\xf1\x7a\x28\xe3\x56\xb7\x6a\x44\x99\x3b\x81\x06\x74\xd5\xcf\xd1\xc3\x8b\xa0\xd3\xa6\xc3\x63\x5d\x73\x4e\xac\xe1\xa1\x45\x70\x4d\x56\x13\x05\xcd\x54\xb8\x59\x97\xb2\xbb\x09\x3a\xbd\x39\x50\xd9\xca\x87\xc7\xc7\xb0\x23\x6b\xde\x1c\xea\x0f\xe5\x58\xb2\xc6\xb4\x83\x4e\xeb\x58\xe9\x7a\x7f\xbf\xbc\xd1\x74\x03\xf3\x00\x57\x83\xb2\x62\xf1\x1a\x25\x94\x6f\x5b\x5d\x0f\x85\xcc\xb9\x09\x55\x5a\x7d\xe3\x96\x76\xf1\x3e\x5e\x4e\x2a\x7c\xc2\xf6\x51\xda\xfb\xca\xf6\xeb\x25\x67\xf8\xb2\x3f\x5e\x4e\xac\x7a\x73\x78\x7c\xdc\x83\xd0\xab\x3e\x27\x54\x57\x42\x26\xd1\x39\xe8\xf9\x10\x7c\xa2\xcd\xb9\x57\x79\x4b\x4d\xbd\x3f\xe6\xc4\xaa\xfc\xcc\x27\xfc\x1b\x44\x3c\x8d\x48\xde\xa9\x6e\x8e\xda\x6a\x24\xe7\x95\xad\x20\xcb\x1b\x57\xd5\xe7\x78\x4d\x51\x60\xea\xd9\x62\xcd\x72\xce\x28\x26\xe0\x3c\x68\x60\xb2\x85\x27\x54\x83\xe8\x24\xeb\xeb\xfc\x3b\x1e\xf1\x7b\x5d\x62\x06\x44\x77\x27\x54\x4b\x61\x1f\xcc\xd6\x38\xbc\xff\x4d\x07\xea\xff\xbe\x9f\x52\x50\x5d\x55\x3c\x72\xa5\xb5\x9a\x27\x7f\xad\x25\x1f\xd5\xc3\x1e\xbe\x85\x3d\x18\x1e\x9f\xc0\x7e\x7d\x79\xe8\xb9\x4d\x29\xa1\x35\x36\x04\xad\xeb\xe8\x1e\xf6\xdd\x81\xb8\xec\xcb\x03\xac\xe9\x55\x36\xed\x59\x58\x9e\xf9\x81\x65\x60\xf8\x30\x2c\xe8\xd4\x2b\xd5\xeb\x6f\x5a\x36\xa1\x19\xab\x3d\x2a\x75\x5d\x97\xe7\xe9\xdb\xa4\x1f\x33\xa6\x46\x2a\x37\xac\xa0\x81\xbe\x0b\x4e\xf1\x9f\x74\x7b\x29\xd8\xa5\x97\xb9\x2c\xa3\x73\x7e\x47\xd1\x33\x54\xca\xbf\x24\xca\x69\x26\x94\xb9\xad\x7a\x9d\xcc\xe1\xbc\xff\x47\x0f\x48\xff\x53\x0f\x0e\xfa\x0f\x7a\xb0\xdf\x83\x01\xe6\x4c\x1f\xb9\x90\x91\x43\xe7\x54\x48\xdc\x0d\x6e\xfe\x75\xde\xff\x83\xf4\x3f\x1d\xf4\x1f\xdc\xee\xdf\x0e\x6e\x47\x6f\x07\x53\xf7\x4d\xac\xa8\x1d\xd0\x35\x8d\xf4\x42\x78\x97\x2a\x2f\x90\xda\x6b\x7c\x2d\x5d\x61\xae\x0d\x6d\x0d\xa0\xad\x90\x9d\x31\xeb\x10\x30\x2a\xaf\x0f\x6a\x64\x6e\xd3\x5f\x1b\xea\xca\xa9\x95\xa6\x75\xbb\xbb\x7f\xbb\x2b\xff\x0c\x6e\x77\x7b\x24\x8d\xe1\x76\x77\x74\xbb\x7b\x9b\x5e\xaa\xd4\x7f\xa8\xc3\xc6\x4e\x90\x7c\x58\x3a\x75\xc2\xb6\xd9\x60\x1e\x3a\x47\x92\x12\xf0\x0b\x2b\xcb\x1a\x74\x78\x47\x59\x03\x7b\xd4\x84\xe2\x5d\x52\xcc\x99\x65\x12\x9f\xe0\x95\x85\xed\xef\xbb\x6e\x84\x9a\x88\xfe\x4a\xbb\xf0\x2f\xb6\x3b\xfa\x2b\xed\xf4\xae\xc2\x69\xea\xbb\x29\x0e\xdd\xbf\xc8\xea\xfd\x85\xf7\xb9\xe2\x22\x7b\xa4\x2a\x87\xa5\x1b\xb2\xde\x70\x78\xc1\xb3\x37\xe4\x13\x55\xd7\x81\x29\xcf\x6a\xe4\x68\x72\x08\x25\x2b\x1a\x6c\xfa\xdd\x48\x5e\x4c\x4b\xdc\xc9\x69\x34\xac\x09\xd9\x67\x9b\x1f\x7d\xb5\x79\x58\xdb\xfc\xff\xe3\x55\x73\xbc\x9c\x38\x7c\xd6\x8f\x52\xe2\x28\xb9\xce\x5a\xe8\xf3\xd6\x72\x3e\x95\x82\x94\x0c\xf6\x5a\xb0\x07\x3a\xb0\xaa\x7a\x05\x09\x3e\x88\x16\xe0\xe7\xf3\x65\x3e\xe3\xd9\x29\xfc\xc8\xe8\x94\xc3\x4b\x9a\xb1\x94\x41\x27\x96\xbf\x82\x85\xfa\x45\x72\x98\xce\x09\x4b\x82\x88\xcf\xbb\xb2\xcd\xf5\x72\x3e\x27\xd9\xe6\x14\xa2\x8c\x0b\xd1\x37\x3e\x39\xab\x8c\x2c\x16\x3a\x02\xc8\x8f\x2f\x9e\x5d\xa8\x0e\x9f\x62\x87\xb2\xd9\x1b\x0c\x6a\x1a\x9f\xc2\xf0\xe0\xf0\xe0\xf0\x60\x78\x20\x3f\x3e\x65\x11\x4d\x05\x3d\x85\x67\x57\xaf\xe5\xef\x5f\x95\x2f\xd5\x29\x1c\x06\x43\x3d\xc4\x37\xaf\x9e\x9e\xca\xbf\x5a\x05\xf9\x81\xdc\x11\x65\x7e\x1b\xa4\xab\x31\x5f\xa3\x06\xd2\xeb\x6c\xf0\xe7\x6a\x3f\xbb\x7a\xdd\x7f\x7a\x75\x71\xf9\xfc\xfa\xd2\xbe\x24\xfd\x7d\xc5\x52\xfd\x7e\x09\x19\xc5\xf0\x2a\x11\xaa\x97\xff\x3e\x49\xdd\x0b\xbd\x29\xc1\x23\xc7\x85\xea\x59\x84\xbb\x05\x9d\x15\x4b\x7b\x30\x49\x1d\x0b\x6b\xfd\xfe\x6b\x3c\x48\x30\xed\x25\xe6\x95\x34\x0f\xd4\xaa\x56\x04\x23\x39\xa4\xc0\x3c\xb8\x98\x92\x8c\x73\x6d\x7f\x6b\x8b\x2e\x8d\x61\x2a\x98\xd4\xce\xba\x02\x89\xe3\xcb\x3b\x39\x16\x26\x72\x9a\xd2\x0c\x7e\xc0\x77\x55\xef\x5b\x1b\x4e\xa1\xad\x42\x1f\xe0\xf7\xb6\xed\x88\xce\xb7\x80\x51\xe7\x59\x15\x52\x4c\xab\x90\x16\xa8\x0f\x6e\x82\x84\xcd\x78\x6a\x6b\x4b\x72\x76\xf1\x29\x7f\x77\x7c\xbb\x69\xb4\xb4\x51\x26\x16\x18\x30\x59\xe4\x24\xa7\xd1\x8c\xa4\x53\xda\xd6\x2e\x6c\xe5\x48\xca\x45\x80\xa8\xf2\x2b\x7a\xb1\xed\xc0\x07\xad\x62\xc7\xfc\x20\x57\x01\x4e\x25\xcc\xee\x4d\x46\xe7\x6f\x3b\x72\x3a\xfb\xa0\x6a\xf6\x70\x78\x3d\xed\x11\x5b\x98\x84\x7c\x87\xcb\xbc\xb3\x03\x1d\xbd\xde\x78\xe6\x54\xc3\x1c\xa4\x2a\x27\x28\x52\x89\xee\xfb\xf3\x67\xf0\xb4\x12\xf6\x99\x6b\xc1\x93\xc4\x45\x8c\xfc\x6d\xd5\xd6\xae\x01\xb0\x24\x91\x20\xe6\xd7\x51\x26\x6b\xb4\x13\x3a\xc9\x4d\x72\xbf\x3a\x63\x53\x41\xf3\xd7\x6c\x4e\xf9\x32\xef\x48\x90\x3d\x38\x3e\x28\xdd\x76\x5c\x14\x19\xdf\x09\xb9\x2a\x6d\x59\xbf\x6d\x6c\x0c\x8a\x18\x14\x5f\x47\xbe\xa9\xa8\x5f\x11\x25\x4d\xbc\x50\x81\x8e\x76\x76\xfc\xf1\x3b\x7a\x79\x2f\xe8\xb3\xda\x33\xdf\xc9\x2d\x32\xc9\xc8\x9c\x3a\x9b\x00\xea\x82\x3c\x7b\x81\xc0\xf8\xc2\xe5\xd1\x0a\x91\x55\xdb\x10\x90\x8b\x7e\x43\xe2\xd8\xac\x79\xbb\xcc\xe8\xda\x75\xeb\x5f\x6e\x54\x21\xd1\xba\x46\x1a\xad\x2b\x96\x7a\x6d\x91\x06\xab\xf5\x8b\x67\x32\x01\x04\x04\x4b\xa7\x09\x2d\x08\x43\x45\xec\xc3\x60\x4d\x39\x37\xae\x40\x54\x78\x51\x4c\xde\xb9\x61\x4c\x9e\x98\x96\xd5\x57\x1b\xcf\x2f\xdc\x6d\xd3\x14\x26\xc8\xb8\x9f\x3b\x46\x86\x15\x8e\x18\xf3\x55\x0f\xb6\x0f\x45\x1e\x65\x45\x7c\xc0\x77\xd3\x25\xc9\xe2\x77\xef\x3a\x78\xc7\xe8\x15\x39\x6f\x3d\x97\x1b\x6d\xdd\xa2\x32\xb6\xd7\x18\xb7\x14\x05\x3a\xd2\x8e\x05\xa3\xe0\x76\xdd\x48\x3b\x67\xad\x2f\x95\x01\x3c\xa3\xf9\x8c\xcb\x61\xf0\xf1\x87\x1e\xcc\xf1\x97\xca\x73\x57\x1a\x90\x63\x6b\xc3\xc7\x1f\xea\xc6\x62\x3e\xe3\x48\x76\x76\xa0\xa8\x7d\x53\xc0\x7d\xdb\x90\x5a\xdf\x5a\x34\x99\xe1\x97\xc6\x53\x0d\xda\xd2\x10\x7e\xa9\xf5\x3f\x01\x00\x00\xff\xff\xc5\xe3\x09\xd2\xd5\xd6\x01\x00") + +func staticJsDropzoneJsBytes() ([]byte, error) { + return bindataRead( + _staticJsDropzoneJs, + "static/js/dropzone.js", + ) +} + +func staticJsDropzoneJs() (*asset, error) { + bytes, err := staticJsDropzoneJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "static/js/dropzone.js", size: 120533, mode: os.FileMode(420), modTime: time.Unix(1519120693, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1015,7 +1057,7 @@ func staticTextSitemapXml() (*asset, error) { return a, nil } -var _templatesIndexTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x5a\xdd\x6f\xdb\x38\x12\x7f\x5f\x60\xff\x07\x56\xcd\xdd\x26\xb8\x4a\x8a\xd3\x36\x6d\x53\xdb\x0b\x5c\xd2\xc5\x06\x97\x4d\x8b\x7c\x2c\x70\x8f\x8c\x38\xb6\x98\x50\xa4\x96\xa4\xfc\x51\xc3\xff\xfb\x81\x94\x64\x4b\xb6\x25\x33\x4e\x52\xec\xe5\xa1\x25\xa5\xe1\xcc\x6f\x3e\x38\x33\xa4\xdc\x7d\x75\xf6\xf5\xf4\xe6\xbf\xdf\xbe\xa0\x58\x27\xac\xff\xf3\x4f\xdd\xe2\x7f\x84\x10\xea\xc6\x80\x49\x31\xb6\xf3\x04\x34\x46\xb1\xd6\xa9\x0f\x7f\x65\x74\xd4\xf3\x22\xc1\x35\x70\xed\xeb\x69\x0a\x1e\x2a\x66\x3d\x4f\xc3\x44\x87\x86\xd1\x67\x14\xc5\x58\x2a\xd0\xbd\xdb\x9b\xdf\xfc\x8f\xde\x1a\x33\x8e\x13\xe8\x79\x23\x0a\xe3\x54\x48\x5d\x61\x31\xa6\x44\xc7\x3d\x02\x23\x1a\x81\x6f\x27\x6f\x10\xe5\x54\x53\xcc\x7c\x15\x61\x06\xbd\x4e\x8d\x1b\xa3\xfc\x01\x49\x60\x3d\x0f\xa7\x29\x03\x5f\x8b\x2c\x8a\x7d\x1a\x09\xee\x21\x45\xbf\x83\xea\x79\xef\x3f\x4c\xde\x7f\xf0\x50\x2c\x61\xd0\x0b\x95\xc6\x9a\x46\x21\x4d\x86\x61\x24\xc6\x53\x11\xe6\xcb\xcc\x02\xdf\x12\x06\x29\x1f\x3e\x52\xc0\xf1\xe1\xe4\xf8\xb0\x51\xc0\x46\x51\x76\xc9\x0e\xa2\x3e\x1c\x4d\x3e\x1c\xb9\xe8\x62\x09\x77\x11\x70\x3c\xf9\x70\xec\x24\xc0\x10\xee\x20\xa0\xd3\x79\x37\xe9\x74\xde\xb9\x88\x28\x48\x77\x11\x72\x74\x38\xe9\x1c\x35\xfb\xa4\x2a\x24\x27\xdd\x45\xc8\xbb\x77\x93\xce\x3b\x37\x4d\x72\xd2\x5d\x84\xbc\x3f\x9a\x74\xde\x3b\xb9\xbc\x20\xdd\x45\xc8\xc7\xc3\x49\xe7\xa3\x9b\xb9\x72\xd2\x66\x21\x39\x63\x93\x18\x7a\x1e\x4d\xf0\x10\xc2\x94\x0f\x97\x92\x3e\x1d\x4d\x3a\x9f\x5a\xd4\xe1\x44\x0a\x4a\x0a\x59\x39\xf1\xae\xb2\xde\x1e\x4d\xde\x36\x4b\x1a\xe0\x91\x15\x62\xa9\x76\x15\xf1\xe9\x78\xf2\xa9\x79\xb7\x94\x22\x2c\xd5\xce\x16\x3b\x9e\x74\xb6\x8b\xb0\x54\xcd\x22\x12\xcc\xe9\x00\x94\x6e\xe4\x53\x12\x04\xf7\x4a\xf0\x86\x6c\x9d\x28\x13\x07\x34\xc2\x9a\x0a\xee\xdf\x50\x06\xa7\x82\x09\x59\x49\xde\xaf\x07\x83\x41\x53\xae\x5f\x5f\x7d\x6e\x74\xad\xac\x0e\x13\xb5\xb6\x5b\x9a\xb8\xe9\x18\x12\xf0\xa3\x06\xf9\xcb\x35\xb3\x19\xa2\x03\x84\x39\x41\xc1\x69\xa6\xb4\x48\x4e\xaf\xaf\x51\x70\x05\x98\x7c\xc3\x43\x40\xf3\xf9\x92\x74\xc5\x64\x4a\x4f\x19\xa8\x18\x40\x97\xbe\xb1\xd5\x2d\x52\xaa\x30\xa2\x57\x5a\x31\x52\x2a\x8c\x2c\xf3\xc0\xbc\xed\xd7\xa4\x03\x53\xcf\x28\x66\x48\x75\x9c\xdd\xf9\x09\x96\x0f\x44\x8c\xf9\xaa\xbc\x27\xf1\x4e\x80\x67\xca\x4f\xe8\xf3\x72\xbd\xc3\x0a\x1e\xc9\x74\x9d\x49\x4c\x87\x31\xa3\xc3\x58\x3f\x89\x0b\x81\x01\xce\xd8\x66\x1e\x2a\x92\x34\xd5\x55\x7d\xee\xf1\x08\xe7\x4f\x3d\xa4\x64\xb4\x64\x75\xaf\xc2\xfb\xbf\x32\x90\x53\xbf\x13\x7c\x0c\xde\x06\xf7\xca\xeb\x77\xc3\x9c\xb4\x81\xed\xea\xfa\xa5\x3e\xc6\x32\x0e\x0c\x1c\x71\x2d\xf9\xa6\x38\x7a\x68\x62\x6c\xa2\x92\x13\x1b\x94\x95\xcd\xa5\xa9\x66\xd0\x9f\xcd\x50\x50\xec\x8c\x6e\x98\x3f\xaa\x51\x55\xf1\xfc\xb2\x82\xe7\x97\x15\xf0\x31\xbb\x57\x81\xe9\xdd\x7e\x2f\x61\x51\x3e\xfc\xca\x2f\x04\x26\xfb\x07\x9f\xeb\xb4\x63\xca\x89\x18\x07\x36\x19\xa1\x1e\x9a\xd5\xdf\x9a\x3f\x02\x77\x22\xe3\x11\xfc\x71\x7d\x62\x34\x08\xce\x8a\x39\x9a\xcf\xdf\xac\x53\x33\xac\xf4\x6f\xa0\xa3\x38\x27\xbe\xe5\x74\x72\x43\x93\x06\xe2\x14\x0f\xe1\x12\x27\x70\x82\xbc\x8a\xfe\xde\x0a\x65\x65\x0f\x6f\x30\xea\x23\x3d\x65\x15\xdd\xe4\xa0\x6e\x58\x69\xbe\xbb\x77\x82\x4c\x11\x25\x3d\x2f\xc5\xc4\x43\x11\xc3\x4a\xf5\xbc\xd5\xec\x16\x7c\x21\x54\x17\xa0\xd1\x62\x5c\xf1\xf2\x0a\xf9\x9f\x14\xc6\x25\xf9\x62\xdc\x4c\x7e\x41\xd5\x82\xfb\x62\xdc\x4c\xfe\x3b\x55\x5a\xc8\x69\xb9\xa2\x3a\x6d\x5e\x54\x49\xc8\x68\x31\x6e\x26\x3f\x13\x5c\xff\x87\x8b\x85\x16\xb5\x79\xcb\x32\x2a\x21\xaa\x82\xab\x3f\x68\xd1\x09\xab\x33\xa1\xcf\xb9\x09\x12\xab\x54\x75\xbe\xb2\xac\x56\xb1\xb0\xd4\x34\x62\x50\x7a\xae\xcc\xdb\xbe\xf1\x6b\xbd\x50\x6d\x32\xc6\x5a\xdd\xb0\x3c\x5f\xf9\x3e\xba\x14\xc8\xa4\x6b\x34\x10\x12\x49\xc0\xc4\x86\x30\xf2\xfd\xfe\x1a\xc3\x8d\xf5\xc7\xf2\x21\x74\x54\xe2\x4a\x33\x09\xbe\x65\xb8\x18\xf9\xb1\x90\xf4\xbb\xe0\x1a\x33\xcf\x46\xa0\x79\xb8\x9a\x36\x17\xbc\x32\xb6\xc6\xca\x67\x54\xe9\xa6\x05\x28\xcf\xdb\xfd\x6e\xc8\x68\x1b\x89\xd1\xf5\xca\x9c\x39\x25\x10\xa4\x05\x7a\x00\x48\x91\xa9\xfd\x88\xc1\x08\xd8\xaf\xeb\x2a\xaf\x48\x58\x87\x45\x35\x24\x55\x35\xb1\xf2\xa3\x98\x32\x22\x81\x57\x1e\x63\xc6\xc4\xd8\x8f\xc5\x08\x64\x9b\x0e\x56\x0a\x2e\x6a\xcd\xeb\xa5\xa1\x2e\x28\x7f\xe8\x78\x9b\x6c\xc2\x1f\xbc\x7a\x92\xc5\xdb\xd8\x6f\xb2\x6d\x89\x78\x1b\x36\x54\x0d\x7e\x2c\xa7\x7f\x08\xb2\x39\x1a\x9c\x4d\xe7\xf5\x17\xfa\x86\x36\x0d\x63\x6d\x38\x86\x40\xa8\x6e\x54\xf8\x12\xc6\x46\xd1\x2d\xde\xae\x00\x6e\x8c\xda\x9d\x70\x3e\x23\xae\x95\xfc\xf0\x14\x58\xb1\xd6\xa9\x3a\x09\x8b\x9e\x2e\x88\x44\x12\xaa\x28\x16\x8c\x7d\xcf\xab\x43\x23\xea\x6b\x91\xc9\x08\x1e\x07\x7c\xa5\x4c\x3c\x8f\x06\xaf\x9b\x20\xe6\x25\x2b\xbb\x63\x54\xc5\x46\xa2\x5b\x98\xfa\x16\xe5\xb9\xfa\x96\x2f\x04\x82\x7c\x17\xa4\xb7\xbc\x90\xe4\x26\xc3\x86\x96\x13\xe3\x6f\x8f\x62\xcb\x1d\xe1\xbe\x50\xc0\xc5\xd2\x39\x10\xf6\x85\x44\xfb\xc1\xb9\xba\x10\xd1\x03\x90\x03\x3b\xfe\xc2\x23\x39\x4d\xb5\x99\x1e\xb8\xc8\x7b\xee\x3d\xda\x1e\x4a\x90\xa3\xcb\x43\xa9\x88\xe6\x0a\x66\x34\x9f\x9f\x81\x1d\x2f\x61\x15\x2f\x67\x33\xe0\x24\x4f\xb3\x8e\x46\x7f\x3a\x5a\x26\xa2\x87\x15\xa8\xb9\xa9\xd1\x7c\x7e\xcb\xcd\xdb\x25\xcc\x0b\x3b\x7b\x09\x8c\x61\xa5\xca\x84\x71\xde\x85\x35\xa6\x94\xa2\x4b\x7b\x0c\x04\xa7\x80\x7b\xba\x31\x15\xb0\xc1\x19\x28\x2d\xb3\xa8\xf0\xff\x35\xb0\x81\x4f\x8a\x47\x3f\xd4\xb1\x20\xb1\x82\x1c\xc4\x17\x33\x7c\xfe\xad\xdc\x0d\x33\xd6\xd6\xd0\xe4\xc2\x5e\xba\xe3\xb1\x70\xc7\x54\xc7\xb5\xb3\xc2\x92\x54\x01\x83\x48\x03\x59\x28\xe5\xdc\x22\xd5\x82\x72\x44\x61\xec\xa1\xa6\x90\x34\x92\x5f\xb8\x3b\x6a\x89\x88\x16\x13\x6f\xd4\xc5\x34\xe1\x8d\xbb\xeb\x34\x93\x12\xb8\x76\xd0\x66\x7b\x30\xcd\x66\x48\x62\x3e\x04\x73\x4c\x88\x80\x6b\x36\x35\x65\x1d\xc8\xd3\x13\x71\x53\xe4\x2f\xb4\x0d\x4a\x3d\xfb\x76\xec\x18\xfd\x3f\x28\xf2\x9f\x5e\xda\xd6\x93\xf5\x0e\xfb\xec\x6f\x50\x24\x9a\xb1\x35\xc5\x67\x05\x72\xbf\xab\x52\xcc\xf3\xcc\x8b\x47\x60\x62\xeb\xdf\x99\xd6\x82\xdb\x8b\x8a\x14\xf3\xbe\x03\x02\x97\xe6\xe0\xff\xa3\x29\xf8\x7b\xd8\x72\xcb\xf6\x99\xcd\x8c\x7a\x0e\xa1\x5d\xb9\xc9\xd9\xa5\x84\x2c\x8a\x42\x85\x4f\x6b\x51\x70\x74\x64\xc4\x00\xcb\xaf\x8c\x78\xfd\x53\x33\x42\x44\x70\x97\xd2\xfa\xa4\x28\x7b\x82\x32\xb5\xbc\x6f\x2f\x39\x9a\x62\xc1\xb0\x7e\x1e\x17\x3b\xe8\x51\x39\xdd\xed\xa0\x47\xeb\xf1\xbd\x39\x8e\xcd\xf8\x31\xb1\x6c\xf7\x5d\xc3\x1d\xd2\xe6\x02\xd0\x0d\x09\x1d\x6d\xb8\xd6\x5a\xbb\xc0\x46\xe5\x9d\x96\xc1\x39\x96\x38\xdd\x54\xc4\x5d\x4f\xc2\x0b\x46\xa9\x29\x77\x2d\x7e\xd1\x30\xd1\x58\x02\x6e\x2f\x6e\x38\xd3\x62\x20\xa2\x4c\xb5\x93\xa5\x0c\x47\x10\x0b\x46\x40\xf6\xbc\x5b\x05\xa8\xbc\x2f\x44\x5a\xa0\xb1\xa4\x1a\xd0\x54\x64\x12\x71\xa1\xe1\x15\xba\x84\xf1\x89\x99\xa3\x08\x9b\x3e\xce\x9e\x55\x97\xef\xd1\x38\x06\x6e\x5f\x63\x09\x76\x4b\xa1\xfd\x8a\xc3\x91\xdf\x2f\xcf\xb7\x07\x81\xd7\x0e\xcb\xd8\x21\x53\x20\xcf\x79\x9a\xe9\x16\x5a\x7b\xaf\x75\x85\xc7\xcb\xef\x07\x85\x71\x9a\x6e\x0d\x37\xb8\x16\xb5\xb9\x17\x55\x3d\x23\x81\x13\x90\xd0\xe8\x9e\xcd\x57\xc5\x2d\xae\x54\x5a\x8a\xda\xf7\xd3\x8d\x54\xa6\xe7\x02\xc7\xb3\x76\x70\x25\x32\x7b\x3b\x66\x3c\x82\x32\x83\x57\x69\x21\xc8\xab\x6d\xad\xd0\x56\x21\xdd\xb0\x15\x6d\xab\x05\xd1\xc6\x2f\x01\xad\xe9\x29\xb8\x2a\x8c\xdd\x4a\xec\x2a\xb5\xf1\xeb\xeb\x8b\x4a\xad\x7f\x97\x68\x31\x6d\xdc\x59\x1e\x87\xe3\x4e\x9b\x13\x5a\x3b\xd6\x5c\x74\xde\xab\xef\xd1\x37\x68\x0f\xd0\x49\x0f\x05\x7f\x82\x54\x54\x70\xe5\xda\xaf\xdb\x4f\x9a\x3d\xcf\xd4\x19\xdf\x8e\x4f\x10\x17\x1c\x3e\xbb\x5c\xa9\xd5\x52\xfd\x5e\xed\xdc\xf5\xeb\x28\xc7\xd1\x9b\xcd\xf6\xc0\x94\x05\xb7\xe3\x96\xf9\xfb\x27\xbf\x53\xe9\xe7\xfc\xdf\x9d\x31\x18\x7d\xd6\x30\x94\xf5\xf2\x07\x61\x90\x78\xdd\x0c\x57\xf8\x45\xac\x30\x9b\x51\x4e\x60\x82\xf6\x16\xfe\xbf\x81\x89\x46\x7b\x74\x3e\xcf\x59\xec\xcf\x66\x74\x80\x98\x46\xfb\xab\x84\xa7\xb1\x09\xa1\xeb\x2c\x51\x68\x8f\x1e\xa0\xc3\xf9\x3c\x2f\xc7\x45\x60\xd8\x9f\x40\x9c\xd8\x3c\x58\xf6\x81\x1b\xde\x0f\x25\x98\xe3\xf0\xbf\x8a\x0a\xbc\x0e\xa7\x26\xc5\xe4\x6e\x5b\xd3\x0f\x9c\xce\x77\x2d\x45\x1d\xb5\x9f\xec\x5c\xf7\xae\x53\xe3\x5a\x39\x1b\xef\x59\xf5\xcc\x9e\x63\x90\x00\xd7\x76\xe7\x19\x26\xe7\x1a\x12\xb5\xf5\x2c\x6a\xa2\xa4\x5c\xb9\x55\x62\x5b\xeb\xe6\xaa\xdf\xea\x87\xc9\xb6\x86\x03\xdf\x31\x28\x9d\x6b\x7f\x1f\x79\xd2\x39\x3c\xfc\x47\x7b\x3a\xe8\xea\x6d\x15\xab\xab\xe3\xfe\x99\x88\xb2\xc4\xde\x53\xe8\xd8\x81\xbc\xb8\xd5\xb0\xbf\x53\x72\x5c\x72\x99\x25\xf6\x03\xb5\x72\xa4\xbf\xc0\x4a\xa3\xfc\x7e\x63\xeb\x8a\x6e\xb8\x45\xc9\x32\x19\x2f\xad\xfd\x85\x6b\x49\x61\x4b\x2a\x76\xb1\x1d\x59\xe9\xaa\x8b\xef\xc4\xf9\x0d\x57\xbf\xf2\x24\x6f\x92\x35\x71\xe0\x38\x9b\x05\x17\xc0\x87\x3a\xb6\x9d\x94\xe3\x8a\xcb\x2c\x89\xec\x4e\x56\x8f\x59\x65\xcc\x6c\xac\x7c\x43\x13\x70\x58\xe7\x60\xe9\xed\x07\x9a\xd0\x06\xf2\xf6\xbc\xb0\xbe\xb0\xb1\x69\x34\x3b\xe9\x34\xa6\xcc\xf6\x0b\xc6\xe0\xcd\x3b\xbd\xab\x20\xd2\x54\xf0\xf2\xc4\x53\x5f\xd6\xda\xf1\xc7\x47\xfd\x6b\x00\x84\x99\x12\xdd\x30\x3e\xda\xb9\x3f\x58\x5e\xe4\x39\x62\x5e\xb0\x65\x74\x25\xdc\xea\xa1\x86\x9c\x6e\x36\x9c\x7c\xd4\xa8\x40\x37\x2c\x0c\xd8\xde\xbe\xd7\x97\xd4\x1d\xd7\x0d\x8b\x1f\x47\x2c\x7e\xf8\x72\x27\xc8\xb4\xff\xf3\x4f\xdd\xb0\xf8\x29\xfa\xff\x02\x00\x00\xff\xff\x14\xe8\xbc\x79\xa4\x2e\x00\x00") +var _templatesIndexTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x1b\x5d\x6f\xdb\x38\xf2\x7d\x81\xfd\x0f\xac\x9a\xbb\x4d\x70\x95\x15\xa7\x6d\xda\xa6\xb6\x17\xd7\xa4\xc5\x06\x97\xa6\x45\x3e\x16\xb8\x47\x46\x1a\x5b\x4c\x28\x52\x4b\x52\xb6\x53\xc3\xff\xfd\x40\x4a\xb2\x25\x59\x1f\x8c\x93\x14\x7b\x7e\x68\x29\x69\xbe\x67\x38\x33\x1c\x29\x83\x17\x27\xdf\x8e\xaf\xfe\xfb\xfd\x33\x0a\x55\x44\x47\xbf\xfe\x32\xc8\xfe\x47\x08\xa1\x41\x08\x38\xc8\xd6\xe6\x3a\x02\x85\x51\xa8\x54\xec\xc2\x5f\x09\x99\x0e\x1d\x9f\x33\x05\x4c\xb9\xea\x3e\x06\x07\x65\x57\x43\x47\xc1\x5c\x79\x9a\xd0\x47\xe4\x87\x58\x48\x50\xc3\xeb\xab\x2f\xee\x7b\x67\x83\x18\xc3\x11\x0c\x9d\x29\x81\x59\xcc\x85\x2a\x90\x98\x91\x40\x85\xc3\x00\xa6\xc4\x07\xd7\x5c\xbc\x42\x84\x11\x45\x30\x75\xa5\x8f\x29\x0c\xfb\x25\x6a\x94\xb0\x3b\x24\x80\x0e\x1d\x1c\xc7\x14\x5c\xc5\x13\x3f\x74\x89\xcf\x99\x83\x24\xf9\x01\x72\xe8\xbc\x7d\x37\x7f\xfb\xce\x41\xa1\x80\xf1\xd0\x93\x0a\x2b\xe2\x7b\x24\x9a\x78\x3e\x9f\xdd\x73\x2f\x45\xd3\x08\xae\x01\xec\xc5\x6c\xf2\x40\x06\x87\xfb\xf3\xc3\xfd\x46\x06\xb5\xac\x0c\xca\x16\xac\xde\x1d\xcc\xdf\x1d\xd8\xe8\x62\x00\xb7\x61\x70\x38\x7f\x77\x68\xc5\x40\x03\x6e\xc1\xa0\xdf\x7f\x33\xef\xf7\xdf\xd8\xb0\xc8\x40\xb7\x61\x72\xb0\x3f\xef\x1f\x34\xfb\xa4\xc8\x24\x05\xdd\x86\xc9\x9b\x37\xf3\xfe\x1b\x3b\x4d\x52\xd0\x6d\x98\xbc\x3d\x98\xf7\xdf\x5a\xb9\x3c\x03\xdd\x86\xc9\xfb\xfd\x79\xff\xbd\x9d\xb9\x52\xd0\x66\x26\x29\x61\x9d\x18\x86\x0e\x89\xf0\x04\xbc\x98\x4d\xd6\x9c\x3e\x1c\xcc\xfb\x1f\x5a\xd4\x61\x81\xe0\x24\xc8\x78\xa5\xc0\xdb\xf2\x7a\x7d\x30\x7f\xdd\xcc\x69\x8c\xa7\x86\x89\x81\xda\x96\xc5\x87\xc3\xf9\x87\xe6\xdd\x92\xb3\x30\x50\x5b\x5b\xec\x70\xde\xef\x66\x61\xa0\x9a\x59\x44\x98\x91\x31\x48\xd5\x48\x27\x07\xe8\xdd\x4a\xce\x1a\xb2\x75\x24\x75\x1c\x10\x1f\x2b\xc2\x99\x7b\x45\x28\x1c\x73\xca\x45\x21\x79\xbf\x1c\x8f\xc7\x4d\xb9\x7e\x13\xfb\x54\xeb\x5a\xc0\xf6\x22\xb9\xb1\x5b\x9a\xa8\xa9\x10\x22\x70\xfd\x06\xfe\x6b\x9c\xc5\x02\x91\x31\xc2\x2c\x40\xbd\xe3\x44\x2a\x1e\x1d\x5f\x5e\xa2\xde\x05\xe0\xe0\x3b\x9e\x00\x5a\x2e\xd7\xa0\x15\x93\x49\x75\x4f\x41\x86\x00\x2a\xf7\x8d\xa9\x6e\xbe\x94\x99\x11\x9d\xdc\x8a\xbe\x94\x9e\x6f\x88\xf7\xf4\xd3\x51\x89\x3b\x50\x69\xcd\x66\x93\x6c\x20\x78\xfc\x83\x33\xa8\x12\x7e\x94\xac\x13\xa2\xc2\xe4\xc6\x8d\xb0\xb8\x0b\xf8\x8c\x3d\x29\xed\x08\x58\x22\xdd\x88\x3c\x2d\xd5\x1b\x2c\xe1\xc9\x89\x86\x64\x12\x52\x32\x09\xd5\x93\x52\x0d\x60\x8c\x13\x5a\x4f\x53\xfa\x82\xc4\xaa\x48\xe4\x16\x4f\x71\x7a\xd7\x41\x52\xf8\x6b\x52\xb7\xd2\xbb\xfd\x2b\x01\x71\xef\xf6\x7b\xef\x7b\xaf\x7b\xb7\xd2\x19\x0d\xbc\x14\xb4\x81\x6c\x15\x7f\xad\x9f\xb6\x9c\x05\x01\x4b\xb9\xd6\x74\x63\xec\xdf\x6d\x23\xd9\x2a\xaa\x1b\x70\xf5\xb6\x61\x81\xd9\x35\x85\xdd\xaf\x88\xa2\x30\x5a\x2c\x50\x2f\xdb\xba\x03\x2f\xbd\x55\x82\x2a\xea\xf2\x5b\x45\x97\xdf\x2a\xf2\x85\xf4\x56\xf6\x74\x73\xf9\x47\xae\x12\x61\x93\x6f\xec\x8c\xe3\x60\x77\xef\x63\x19\x76\x46\x58\xc0\x67\x3d\x93\x2d\xd1\x10\x2d\xca\x4f\xf5\x2f\x80\x1b\x9e\x30\x1f\xbe\x5e\x1e\x69\x0d\x7a\x27\xd9\x35\x5a\x2e\x5f\x6d\x42\x53\x2c\xd5\x17\x50\x7e\x98\x02\x5f\x33\x32\xbf\x22\x51\x03\x70\x8c\x27\x70\x8e\x23\x38\x42\x4e\x41\x7f\xa7\x02\x59\x48\x32\x35\x46\x7d\xa0\x97\x8d\xa2\x75\x0e\x1a\x78\x85\xd3\xc1\xe0\x86\x07\xf7\x88\x04\x43\x27\xc6\x81\x83\x7c\x8a\xa5\x1c\x3a\xd5\xf4\xdb\xfb\x1c\x10\x95\x09\x8d\x56\xeb\x82\x97\x2b\xe0\x7f\x12\x98\xe5\xe0\xab\x75\x33\xf8\x19\x91\x2b\xea\xab\x75\x33\xf8\x1f\x44\x2a\x2e\xee\x73\x8c\xe2\x65\x33\x52\xa1\x62\xa0\xd5\xba\x19\xfc\x84\x33\xf5\x1f\xc6\x57\x5a\x94\xae\x5b\xd0\x88\x00\xbf\x28\x5c\xf9\x46\x8b\x4e\x58\x9e\x70\x75\xca\x74\x90\x18\xa5\x8a\xd7\x15\xb4\x52\x49\xc5\x42\x11\x9f\x42\xee\xb9\xbc\x26\xb8\xda\xaf\xe5\x4a\x5a\x67\x8c\x8d\xc2\x66\x68\xbe\x70\x5d\x74\xce\x91\x2e\x05\x68\xcc\x05\x12\x80\x03\x13\xc2\xc8\x75\x47\x1b\x04\x6b\x0b\xa4\xa1\x13\x90\x69\x2e\x57\x9c\x08\x70\x0d\xc1\xd5\xca\x0d\xb9\x20\x3f\x38\x53\x98\x3a\x26\x02\xf5\xcd\x6a\xca\x5d\xd1\x4a\xe8\x06\x29\x97\x12\xa9\x9a\x10\x50\x5a\x03\x46\x03\x8f\x92\x36\x10\xad\xeb\x85\x3e\x14\x0b\x08\x90\xe2\xe8\x0e\x20\x46\xba\x39\x41\x14\xa6\x40\x7f\xdf\x54\xb9\xc2\x61\x53\x2c\xa2\x20\x2a\xaa\x89\xa5\xeb\x87\x84\x06\x02\x58\xe1\x36\xa6\x94\xcf\xdc\x90\x4f\x41\xb4\xe9\x60\xb8\xe0\xac\x4e\xbd\x5c\x1b\xea\x8c\xb0\xbb\xbe\x53\x67\x13\x76\xe7\x94\x93\x2c\xee\x22\x5f\x67\xdb\x5c\xe2\x2e\xd9\x50\x31\xf8\xb1\xb8\xff\xca\x83\xfa\x68\xb0\x36\x9d\x33\x5a\xe9\xeb\x99\x34\x8c\x95\xa6\xe8\x41\x40\x54\xa3\xc2\xe7\x30\xd3\x8a\x76\x78\xbb\x20\x70\x63\xd4\x6e\x25\xe7\x13\xca\x55\xc9\x0f\x8f\x11\x2b\x54\x2a\x96\x47\x5e\xd6\x2f\xf6\x7c\x1e\x79\xd2\x0f\x39\xa5\x3f\xd2\xea\xd0\x28\xf5\x25\x4f\x84\x0f\x0f\x13\xbc\x52\x26\x9e\x46\x83\x97\x4d\x22\xa6\x25\x2b\xb9\xa1\x44\x86\x9a\xa3\x5d\x98\xba\x46\xca\x53\xf9\x3d\x45\x84\x00\xb9\x36\x92\x5e\xb3\x8c\x93\x1d\x0f\x13\x5a\x56\x84\xbf\x3f\x88\x2c\xb3\x14\xf7\x99\x02\x2e\x14\xd6\x81\xb0\xcb\x05\xda\xed\x9d\xca\x33\xee\xdf\x41\xb0\x67\xd6\x9f\x99\x2f\xee\x63\xa5\x2f\xf7\x6c\xf8\x3d\xf5\x1e\x6d\x0f\x25\x48\xa5\x4b\x43\x29\x8b\xe6\x82\xcc\x68\xb9\x3c\x01\xb3\x5e\x8b\x95\x3d\x5c\x2c\x80\x05\x69\x9a\xb5\x34\xfa\xe3\xa5\xa5\xdc\xbf\xab\x88\x9a\x9a\x1a\x2d\x97\xd7\x4c\x3f\x5d\x8b\x79\x66\xae\x9e\x43\x46\xaf\x50\x65\xbc\x30\xed\xc2\x1a\x53\x4a\xd6\xa5\x3d\x44\x04\xab\x80\x7b\xbc\x31\x25\xd0\xf1\x09\x48\x25\x12\x3f\xf3\xff\x25\xd0\xb1\x1b\x64\xb7\x7e\xaa\x63\x41\x60\x09\xa9\x10\x9f\xf5\xf2\xe9\xb7\xf2\xc0\x4b\x68\x5b\x43\x93\x32\x7b\xee\x8e\xc7\x88\x3b\x23\x2a\x2c\x9d\x15\xd6\xa0\x12\x28\xf8\x0a\x82\x95\x52\xd6\x2d\x52\x29\x28\xa7\x04\x66\x0e\x6a\x0a\x49\xcd\xf9\x99\xbb\xa3\x96\x88\x68\x31\x71\xad\x2e\xba\x09\x6f\xdc\x5d\xc7\x89\x10\xc0\x94\x85\x36\xdd\xc1\xb4\x58\x20\x81\xd9\x04\xf4\x31\xc1\x07\xa6\xe8\xbd\x2e\xeb\x10\x3c\x3e\x11\x37\x45\xfe\x4a\xdb\x5e\xae\xe7\xc8\xac\x2d\xa3\xff\x27\x45\xfe\xe3\x4b\xdb\x66\xb2\xde\x62\x9f\xfd\x0d\x8a\x44\xb3\x6c\x4d\xf1\x59\x10\x79\x34\x90\x31\x66\x69\xe6\xc5\x53\xd0\xb1\xf5\x29\x51\x8a\x33\x33\xa8\x88\x31\x1b\x59\x48\x60\xd3\x1c\xfc\x7f\x34\x05\x7f\x0f\x5b\x76\x6c\x9f\xc5\x42\xab\x67\x11\xda\x85\x49\xce\x36\x25\x64\x55\x14\x0a\x74\x5a\x8b\x82\xa5\x23\x7d\x0a\x58\x7c\xa3\x81\x33\x3a\xd6\x2b\x14\x70\x66\x53\x5a\x1f\x15\x65\x8f\x50\xa6\x94\xf7\xcd\x90\xa3\x29\x16\x34\xe9\xa7\x71\xb1\x85\x1e\x85\xd3\xdd\x16\x7a\xb4\x1e\xdf\x9b\xe3\x58\xaf\x1f\x12\xcb\x66\xdf\x35\xcc\x90\xea\x0b\xc0\xc0\x0b\xc8\xb4\x66\xac\xb5\x31\xc0\x46\xf9\x4c\x4b\xcb\x39\x13\x38\xae\x2b\xe2\x75\x27\xe1\x06\x71\x72\x52\xb1\x2e\x78\xad\x3d\x57\xed\x70\xbe\xfa\x3b\xc9\x87\xf2\x3c\x56\x84\x33\xd9\x4b\x24\x88\x53\x16\x27\xea\x0b\x17\x51\xfd\xc8\xbb\xfa\xf3\x29\xf1\xef\xf0\x0d\x85\x23\x34\xc6\x54\x42\xcd\x28\xbb\xfa\x8b\xf0\xfc\x0b\xa1\x20\xc9\x0f\x38\xca\xb5\xff\x8a\xe7\xd7\x31\xe5\x38\xf8\xfa\x09\x2d\x97\x68\xb1\x28\xde\x31\x37\xf2\x8d\x85\xfa\xfb\xa9\xd3\xd0\x72\xf9\x0a\x79\x1e\xfa\xfa\xa9\x9b\x25\x61\x44\x1d\xa1\x71\xc2\x7c\xad\xa8\xb9\xcc\x95\xdf\xdd\xb3\x51\x53\xff\x54\x48\x64\x8f\xb3\x5d\xc7\xe7\x51\x4c\x41\x81\xf3\x0a\x71\x96\x0a\xf9\x85\x30\x33\x1e\xa8\xbe\x43\xa8\xfb\x75\x74\x1d\xcb\x16\x12\x85\xc1\x7c\x0b\xd0\x98\x8b\xa8\x9d\x87\x0e\xa2\x92\xb3\x9d\x76\x78\x6c\xec\x36\x74\xbc\xc4\x68\x2b\x3b\xc0\x33\xa7\xfe\x5b\xb7\xef\xda\xd5\xa9\x8d\x64\x67\xc3\x95\xed\xf5\xfc\x65\x51\x37\x97\xae\x1c\xd5\xd5\xdb\x2a\x98\x2b\x2c\x00\x77\x3b\x0d\x27\x8a\x8f\xb9\x9f\xc8\x6e\xd0\x98\x62\x1f\x42\x4e\x03\x10\x43\xe7\x5a\x02\xca\x47\xec\x48\x71\x34\x13\x44\x01\xba\xe7\x89\x40\x8c\x2b\x78\x81\xce\x61\x76\xa4\xaf\x91\x8f\xf5\xd1\xc7\x8c\x77\xd6\xcf\xd1\x2c\x04\x66\x1e\x63\x01\xa6\x0a\xa1\xdd\x42\x8e\x44\xee\x28\x1f\x09\xed\xf5\x3a\xcc\x85\xaa\x7e\xef\x80\x37\x23\xe1\x0b\x3c\x5b\xbf\x7a\xcb\x8c\xd5\xda\x12\xeb\xd8\x6b\x9a\xc8\xd7\xa4\x4d\xd4\x96\x3a\x51\x31\xe7\x09\x60\x01\x08\x08\x9a\xce\x41\xf5\xaf\x61\xda\x52\xa4\x12\xbc\xf4\xf1\x44\x2d\x94\x3e\xcf\x80\xe5\x1c\xab\x77\xc1\x13\x33\x79\xd6\xae\x43\x89\x96\x57\x2a\xce\x83\x17\x5d\xc7\x8c\x4e\x26\x03\xaf\x55\xda\x56\x0b\xa2\xda\xb7\x6c\xad\xa5\xbf\x77\x91\x19\xbb\x15\xd8\x96\x6b\xe3\xa7\x17\xcf\xca\xb5\xfc\xce\xaf\xc5\xb4\x61\x7f\x3d\x6a\x0a\xfb\x6d\x4e\x68\x3d\x0d\xa6\xac\xd3\x73\xf0\x0e\x79\x85\x76\x00\x1d\x0d\x51\xef\x4f\x10\x52\xd7\x56\xdb\xb3\xb0\xf9\xf4\x60\xe8\xe8\x1e\xce\x35\xeb\x23\xc4\x38\x83\x8f\x36\xe3\xea\x52\x1b\xb5\x53\x9a\x69\xfc\x3e\x4d\xe5\x18\x2e\x16\x3b\xa0\x5b\x2e\xbb\x51\x86\xfe\xfd\x93\xdd\xc8\xf8\x63\xfa\xef\xd6\x32\x68\x7d\x36\x64\xc8\x7b\xd1\x9f\x24\x83\xc0\x9b\x66\xb8\xc0\xcf\x62\x85\xc5\x82\xb0\x00\xe6\x68\x67\xe5\xff\x2b\x98\x2b\xb4\x43\x96\xcb\x94\xc4\xee\x62\x41\xc6\x88\x2a\xb4\x5b\x05\x3c\x0e\x75\x08\x5d\x26\x91\x44\x3b\x64\x0f\xed\x2f\x97\x69\xab\x9b\x05\x86\xf9\xfe\xe9\xc8\xe4\xc1\xfc\x8c\x55\xf3\x7c\x22\x00\x98\x33\xfa\x57\xd6\xdd\x6e\x8a\x53\xe2\xa2\x93\xbb\xe9\x97\xf7\xac\x66\x27\x2d\x0d\x33\x6a\x9f\x9a\xd8\xee\x5d\xab\x43\x61\x61\xee\xb4\x63\xd4\xd3\x7b\x8e\x42\x04\x4c\x99\x9d\xa7\x89\x9c\x2a\x88\xba\xdb\x0e\x1d\x25\x39\x66\x27\xc7\xb6\x96\xc3\x56\xbf\xea\x4b\xff\x16\x63\x2a\xdd\x5b\xe7\xce\x35\x1f\x47\x1f\xf5\xf7\xf7\xff\xd1\x9e\x0e\x06\xaa\xab\x62\x0d\x54\x38\x3a\xe1\x7e\x12\x99\x19\xa0\x0a\x2d\xc0\xb3\x89\xa1\xf9\x48\xd1\x12\xe5\x3c\x89\xcc\xc7\x1f\xd2\x12\xfe\x0c\x4b\x85\xd2\xd9\x61\x27\xc6\xc0\xeb\x50\x32\x4f\xc6\x6b\x6b\x7f\x66\x4a\x10\xe8\x48\xc5\x36\xb6\x0b\x2a\x27\xd6\xec\x1b\x8c\x74\x7a\x3c\x2a\xdc\x49\x0f\xa0\x2a\xb0\xa0\xb8\x58\xf4\xce\x80\x4d\x54\x68\x5a\x2d\x4b\x8c\xf3\x24\xf2\xcd\x4e\x96\x0f\xc1\xd2\x66\xd6\x56\xbe\x22\x11\x58\xe0\x59\x58\xba\x7b\x58\xe0\x99\x40\xee\xce\x0b\x9b\x88\x8d\x4d\xa3\xde\x49\xc7\x21\xa1\xa6\x5f\xd0\x06\x6f\xde\xe9\x03\x09\xe9\xc9\x2f\x3b\x61\x94\xd1\x5a\x47\xeb\xe1\xc1\xe8\x12\x00\x61\x2a\xf9\xc0\x0b\x0f\xb6\xee\x0f\xd6\x43\x72\x4b\x99\x57\x64\x29\xa9\x84\x5b\x39\xd4\x90\xd5\xd4\xd0\xca\x47\x8d\x0a\x0c\xbc\xcc\x80\xed\xed\x7b\x19\xa5\xec\xb8\x81\x97\x7d\x78\xb4\xfa\xa8\xec\x86\x07\xf7\xa3\x5f\x7f\x19\x78\xd9\xdf\xa1\xfc\x2f\x00\x00\xff\xff\x28\x93\x0f\xfe\xa1\x32\x00\x00") func templatesIndexTmplBytes() ([]byte, error) { return bindataRead( @@ -1030,7 +1072,7 @@ func templatesIndexTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "templates/index.tmpl", size: 11940, mode: os.FileMode(493), modTime: time.Unix(1518738836, 0)} + info := bindataFileInfo{name: "templates/index.tmpl", size: 12961, mode: os.FileMode(493), modTime: time.Unix(1519120693, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1090,6 +1132,7 @@ var _bindata = map[string]func() (*asset, error){ "static/.DS_Store": staticDs_store, "static/css/base-min.css": staticCssBaseMinCss, "static/css/default.css": staticCssDefaultCss, + "static/css/dropzone.css": staticCssDropzoneCss, "static/css/github-markdown.css": staticCssGithubMarkdownCss, "static/css/highlight.css": staticCssHighlightCss, "static/css/menus-min.css": staticCssMenusMinCss, @@ -1122,6 +1165,7 @@ var _bindata = map[string]func() (*asset, error){ "static/img/cowyo/ms-icon-70x70.png": staticImgCowyoMsIcon70x70Png, "static/img/logo.png": staticImgLogoPng, "static/js/cowyo.js": staticJsCowyoJs, + "static/js/dropzone.js": staticJsDropzoneJs, "static/js/highlight.min.js": staticJsHighlightMinJs, "static/js/highlight.pack.js": staticJsHighlightPackJs, "static/js/jquery-1.8.3.js": staticJsJquery183Js, @@ -1180,6 +1224,7 @@ var _bintree = &bintree{nil, map[string]*bintree{ "css": &bintree{nil, map[string]*bintree{ "base-min.css": &bintree{staticCssBaseMinCss, map[string]*bintree{}}, "default.css": &bintree{staticCssDefaultCss, map[string]*bintree{}}, + "dropzone.css": &bintree{staticCssDropzoneCss, map[string]*bintree{}}, "github-markdown.css": &bintree{staticCssGithubMarkdownCss, map[string]*bintree{}}, "highlight.css": &bintree{staticCssHighlightCss, map[string]*bintree{}}, "menus-min.css": &bintree{staticCssMenusMinCss, map[string]*bintree{}}, @@ -1218,6 +1263,7 @@ var _bintree = &bintree{nil, map[string]*bintree{ }}, "js": &bintree{nil, map[string]*bintree{ "cowyo.js": &bintree{staticJsCowyoJs, map[string]*bintree{}}, + "dropzone.js": &bintree{staticJsDropzoneJs, map[string]*bintree{}}, "highlight.min.js": &bintree{staticJsHighlightMinJs, map[string]*bintree{}}, "highlight.pack.js": &bintree{staticJsHighlightPackJs, map[string]*bintree{}}, "jquery-1.8.3.js": &bintree{staticJsJquery183Js, map[string]*bintree{}}, diff --git a/handlers.go b/handlers.go index 5bd2b39..fa55180 100755 --- a/handlers.go +++ b/handlers.go @@ -1,10 +1,14 @@ package main import ( + "crypto/sha256" "fmt" "html/template" + "io" "io/ioutil" "net/http" + "net/url" + "os" "path" "strconv" "strings" @@ -22,6 +26,8 @@ var customCSS []byte var defaultLock string var debounceTime int var diaryMode bool +var allowFileUploads bool +var maxUploadMB uint func serve( host, @@ -39,6 +45,7 @@ func serve( allowInsecure bool, hotTemplateReloading bool, ) { + if hotTemplateReloading { gin.SetMode(gin.DebugMode) } else { @@ -63,8 +70,8 @@ func serve( page := c.Param("page") cmd := c.Param("command") - if page == "sitemap.xml" || page == "favicon.ico" || page == "static" { - return false // no auth for sitemap + if page == "sitemap.xml" || page == "favicon.ico" || page == "static" || page == "uploads" { + return false // no auth for these } if page != "" && cmd == "/read" { @@ -88,6 +95,9 @@ func serve( c.Redirect(302, "/"+randomAlliterateCombo()) } }) + + router.POST("/uploads", handleUpload) + router.GET("/:page", func(c *gin.Context) { page := c.Param("page") c.Redirect(302, "/"+page+"/") @@ -135,7 +145,7 @@ func serve( if TLS { http.ListenAndServeTLS(host+":"+port, crt_path, key_path, router) } else { - router.Run(host + ":" + port) + panic(router.Run(host + ":" + port)) } } @@ -267,7 +277,26 @@ func handlePageRequest(c *gin.Context) { } c.Data(http.StatusOK, contentType(filename), data) return + } else if page == "uploads" { + pathname := path.Join(pathToData, command[1:]+".upload") + + if allowInsecureHtml { + c.Header( + "Content-Disposition", + `inline; filename="`+c.DefaultQuery("filename", "upload")+`"`, + ) + } else { + // Prevent malicious html uploads by forcing type to plaintext and 'download-instead-of-view' + c.Header("Content-Type", "text/plain") + c.Header( + "Content-Disposition", + `attachment; filename="`+c.DefaultQuery("filename", "upload")+`"`, + ) + } + c.File(pathname) + return } + p := Open(page) if len(command) < 2 { if p.IsPublished { @@ -394,6 +423,8 @@ func handlePageRequest(c *gin.Context) { "Date": time.Now().Format("2006-01-02"), "UnixTime": time.Now().Unix(), "ChildPageNames": p.ChildPageNames(), + "AllowFileUploads": allowFileUploads, + "MaxUploadMB": maxUploadMB, }) } @@ -583,6 +614,45 @@ func handlePublish(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"success": true, "message": message}) } +func handleUpload(c *gin.Context) { + if !allowFileUploads { + c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("Uploads are disabled on this server")) + return + } + + file, info, err := c.Request.FormFile("file") + defer file.Close() + if err != nil { + c.AbortWithError(http.StatusInternalServerError, err) + return + } + + h := sha256.New() + if _, err := io.Copy(h, file); err != nil { + c.AbortWithError(http.StatusInternalServerError, err) + return + } + + newName := "sha256-" + encodeBytesToBase32(h.Sum(nil)) + + // Replaces any existing version, but sha256 collisions are rare as anything. + outfile, err := os.Create(path.Join(pathToData, newName+".upload")) + if err != nil { + c.AbortWithError(http.StatusInternalServerError, err) + return + } + + file.Seek(0, io.SeekStart) + _, err = io.Copy(outfile, file) + if err != nil { + c.AbortWithError(http.StatusInternalServerError, err) + return + } + + c.Header("Location", "/uploads/"+newName+"?filename="+url.QueryEscape(info.Filename)) + return +} + func handleEncrypt(c *gin.Context) { type QueryJSON struct { Page string `json:"page"` diff --git a/main.go b/main.go index b3c3dbc..5cf4831 100755 --- a/main.go +++ b/main.go @@ -40,6 +40,9 @@ func main() { fmt.Printf("\nRunning cowyo server (version %s) at http://%s:%s\n\n", version, host, c.GlobalString("port")) } + allowFileUploads = c.GlobalBool("allow-file-uploads") + maxUploadMB = c.GlobalUint("max-upload-mb") + serve( c.GlobalString("host"), c.GlobalString("port"), @@ -131,6 +134,15 @@ func main() { Value: "secret", Usage: "random data to use for cookies; changing it will invalidate all sessions", }, + cli.BoolFlag{ + Name: "allow-file-uploads", + Usage: "Enable file uploads", + }, + cli.UintFlag{ + Name: "max-upload-mb", + Value: 2, + Usage: "Largest file upload (in mb) allowed", + }, } app.Commands = []cli.Command{ { diff --git a/static/css/dropzone.css b/static/css/dropzone.css new file mode 100644 index 0000000..0494d1c --- /dev/null +++ b/static/css/dropzone.css @@ -0,0 +1,388 @@ +/* + * The MIT License + * Copyright (c) 2012 Matias Meno + */ +@-webkit-keyframes passing-through { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); } + 30%, 70% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); } + 100% { + opacity: 0; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); } } +@-moz-keyframes passing-through { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); } + 30%, 70% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); } + 100% { + opacity: 0; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); } } +@keyframes passing-through { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); } + 30%, 70% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); } + 100% { + opacity: 0; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); } } +@-webkit-keyframes slide-in { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); } + 30% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); } } +@-moz-keyframes slide-in { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); } + 30% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); } } +@keyframes slide-in { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); } + 30% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); } } +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); } + 10% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); } + 20% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); } } +@-moz-keyframes pulse { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); } + 10% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); } + 20% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); } } +@keyframes pulse { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); } + 10% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); } + 20% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); } } +.dropzone, .dropzone * { + box-sizing: border-box; } + +.dropzone { + min-height: 150px; + border: 2px solid rgba(0, 0, 0, 0.3); + background: white; + padding: 20px 20px; } + .dropzone.dz-clickable { + cursor: pointer; } + .dropzone.dz-clickable * { + cursor: default; } + .dropzone.dz-clickable .dz-message, .dropzone.dz-clickable .dz-message * { + cursor: pointer; } + .dropzone.dz-started .dz-message { + display: none; } + .dropzone.dz-drag-hover { + border-style: solid; } + .dropzone.dz-drag-hover .dz-message { + opacity: 0.5; } + .dropzone .dz-message { + text-align: center; + margin: 2em 0; } + .dropzone .dz-preview { + position: relative; + display: inline-block; + vertical-align: top; + margin: 16px; + min-height: 100px; } + .dropzone .dz-preview:hover { + z-index: 1000; } + .dropzone .dz-preview:hover .dz-details { + opacity: 1; } + .dropzone .dz-preview.dz-file-preview .dz-image { + border-radius: 20px; + background: #999; + background: linear-gradient(to bottom, #eee, #ddd); } + .dropzone .dz-preview.dz-file-preview .dz-details { + opacity: 1; } + .dropzone .dz-preview.dz-image-preview { + background: white; } + .dropzone .dz-preview.dz-image-preview .dz-details { + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + -ms-transition: opacity 0.2s linear; + -o-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; } + .dropzone .dz-preview .dz-remove { + font-size: 14px; + text-align: center; + display: block; + cursor: pointer; + border: none; } + .dropzone .dz-preview .dz-remove:hover { + text-decoration: underline; } + .dropzone .dz-preview:hover .dz-details { + opacity: 1; } + .dropzone .dz-preview .dz-details { + z-index: 20; + position: absolute; + top: 0; + left: 0; + opacity: 0; + font-size: 13px; + min-width: 100%; + max-width: 100%; + padding: 2em 1em; + text-align: center; + color: rgba(0, 0, 0, 0.9); + line-height: 150%; } + .dropzone .dz-preview .dz-details .dz-size { + margin-bottom: 1em; + font-size: 16px; } + .dropzone .dz-preview .dz-details .dz-filename { + white-space: nowrap; } + .dropzone .dz-preview .dz-details .dz-filename:hover span { + border: 1px solid rgba(200, 200, 200, 0.8); + background-color: rgba(255, 255, 255, 0.8); } + .dropzone .dz-preview .dz-details .dz-filename:not(:hover) { + overflow: hidden; + text-overflow: ellipsis; } + .dropzone .dz-preview .dz-details .dz-filename:not(:hover) span { + border: 1px solid transparent; } + .dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span { + background-color: rgba(255, 255, 255, 0.4); + padding: 0 0.4em; + border-radius: 3px; } + .dropzone .dz-preview:hover .dz-image img { + -webkit-transform: scale(1.05, 1.05); + -moz-transform: scale(1.05, 1.05); + -ms-transform: scale(1.05, 1.05); + -o-transform: scale(1.05, 1.05); + transform: scale(1.05, 1.05); + -webkit-filter: blur(8px); + filter: blur(8px); } + .dropzone .dz-preview .dz-image { + border-radius: 20px; + overflow: hidden; + width: 120px; + height: 120px; + position: relative; + display: block; + z-index: 10; } + .dropzone .dz-preview .dz-image img { + display: block; } + .dropzone .dz-preview.dz-success .dz-success-mark { + -webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + -moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + -ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + -o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); } + .dropzone .dz-preview.dz-error .dz-error-mark { + opacity: 1; + -webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + -moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + -ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + -o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); } + .dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark { + pointer-events: none; + opacity: 0; + z-index: 500; + position: absolute; + display: block; + top: 50%; + left: 50%; + margin-left: -27px; + margin-top: -27px; } + .dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg { + display: block; + width: 54px; + height: 54px; } + .dropzone .dz-preview.dz-processing .dz-progress { + opacity: 1; + -webkit-transition: all 0.2s linear; + -moz-transition: all 0.2s linear; + -ms-transition: all 0.2s linear; + -o-transition: all 0.2s linear; + transition: all 0.2s linear; } + .dropzone .dz-preview.dz-complete .dz-progress { + opacity: 0; + -webkit-transition: opacity 0.4s ease-in; + -moz-transition: opacity 0.4s ease-in; + -ms-transition: opacity 0.4s ease-in; + -o-transition: opacity 0.4s ease-in; + transition: opacity 0.4s ease-in; } + .dropzone .dz-preview:not(.dz-processing) .dz-progress { + -webkit-animation: pulse 6s ease infinite; + -moz-animation: pulse 6s ease infinite; + -ms-animation: pulse 6s ease infinite; + -o-animation: pulse 6s ease infinite; + animation: pulse 6s ease infinite; } + .dropzone .dz-preview .dz-progress { + opacity: 1; + z-index: 1000; + pointer-events: none; + position: absolute; + height: 16px; + left: 50%; + top: 50%; + margin-top: -8px; + width: 80px; + margin-left: -40px; + background: rgba(255, 255, 255, 0.9); + -webkit-transform: scale(1); + border-radius: 8px; + overflow: hidden; } + .dropzone .dz-preview .dz-progress .dz-upload { + background: #333; + background: linear-gradient(to bottom, #666, #444); + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 0; + -webkit-transition: width 300ms ease-in-out; + -moz-transition: width 300ms ease-in-out; + -ms-transition: width 300ms ease-in-out; + -o-transition: width 300ms ease-in-out; + transition: width 300ms ease-in-out; } + .dropzone .dz-preview.dz-error .dz-error-message { + display: block; } + .dropzone .dz-preview.dz-error:hover .dz-error-message { + opacity: 1; + pointer-events: auto; } + .dropzone .dz-preview .dz-error-message { + pointer-events: none; + z-index: 1000; + position: absolute; + display: block; + display: none; + opacity: 0; + -webkit-transition: opacity 0.3s ease; + -moz-transition: opacity 0.3s ease; + -ms-transition: opacity 0.3s ease; + -o-transition: opacity 0.3s ease; + transition: opacity 0.3s ease; + border-radius: 8px; + font-size: 13px; + top: 130px; + left: -10px; + width: 140px; + background: #be2626; + background: linear-gradient(to bottom, #be2626, #a92222); + padding: 0.5em 1.2em; + color: white; } + .dropzone .dz-preview .dz-error-message:after { + content: ''; + position: absolute; + top: -6px; + left: 64px; + width: 0; + height: 0; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #be2626; } diff --git a/static/js/cowyo.js b/static/js/cowyo.js index 9d90886..aef9056 100644 --- a/static/js/cowyo.js +++ b/static/js/cowyo.js @@ -353,3 +353,36 @@ $(window).load(function() { event.target.classList.add('deleting'); }); }); + +// TODO: Avoid uploading the same thing twice (check if it's already present while allowing failed uploads to be overwritten?) +function onUploadFinished(file) { + this.removeFile(file); + var cursorPos = $('#userInput').prop('selectionStart'); + var cursorEnd = $('#userInput').prop('selectionEnd'); + var v = $('#userInput').val(); + var textBefore = v.substring(0, cursorPos); + var textAfter = v.substring(cursorPos, v.length); + var message = 'uploaded file'; + if (cursorEnd > cursorPos) { + message = v.substring(cursorPos, cursorEnd); + textAfter = v.substring(cursorEnd, v.length); + } + var prefix = ''; + if (file.type.startsWith("image")) { + prefix = '!'; + } + var extraText = prefix+'['+message+'](' + + file.xhr.getResponseHeader("Location") + + ')'; + + $('#userInput').val( + textBefore + + extraText + + textAfter + ); + + // Select the newly-inserted link + $('#userInput').prop('selectionStart', cursorPos); + $('#userInput').prop('selectionEnd', cursorPos + extraText.length); + $('#userInput').trigger('keyup'); // trigger a save +} diff --git a/static/js/dropzone.js b/static/js/dropzone.js new file mode 100644 index 0000000..54b3ba6 --- /dev/null +++ b/static/js/dropzone.js @@ -0,0 +1,3504 @@ +"use strict"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/* + * + * More info at [www.dropzonejs.com](http://www.dropzonejs.com) + * + * Copyright (c) 2012, Matias Meno + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +// The Emitter class provides the ability to call `.on()` on Dropzone to listen +// to events. +// It is strongly based on component's emitter class, and I removed the +// functionality because of the dependency hell with different frameworks. +var Emitter = function () { + function Emitter() { + _classCallCheck(this, Emitter); + } + + _createClass(Emitter, [{ + key: "on", + + // Add an event listener for given event + value: function on(event, fn) { + this._callbacks = this._callbacks || {}; + // Create namespace for this event + if (!this._callbacks[event]) { + this._callbacks[event] = []; + } + this._callbacks[event].push(fn); + return this; + } + }, { + key: "emit", + value: function emit(event) { + this._callbacks = this._callbacks || {}; + var callbacks = this._callbacks[event]; + + if (callbacks) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + for (var _iterator = callbacks, _isArray = true, _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { + var _ref; + + if (_isArray) { + if (_i >= _iterator.length) break; + _ref = _iterator[_i++]; + } else { + _i = _iterator.next(); + if (_i.done) break; + _ref = _i.value; + } + + var callback = _ref; + + callback.apply(this, args); + } + } + + return this; + } + + // Remove event listener for given event. If fn is not provided, all event + // listeners for that event will be removed. If neither is provided, all + // event listeners will be removed. + + }, { + key: "off", + value: function off(event, fn) { + if (!this._callbacks || arguments.length === 0) { + this._callbacks = {}; + return this; + } + + // specific event + var callbacks = this._callbacks[event]; + if (!callbacks) { + return this; + } + + // remove all handlers + if (arguments.length === 1) { + delete this._callbacks[event]; + return this; + } + + // remove specific handler + for (var i = 0; i < callbacks.length; i++) { + var callback = callbacks[i]; + if (callback === fn) { + callbacks.splice(i, 1); + break; + } + } + + return this; + } + }]); + + return Emitter; +}(); + +var Dropzone = function (_Emitter) { + _inherits(Dropzone, _Emitter); + + _createClass(Dropzone, null, [{ + key: "initClass", + value: function initClass() { + + // Exposing the emitter class, mainly for tests + this.prototype.Emitter = Emitter; + + /* + This is a list of all available events you can register on a dropzone object. + You can register an event handler like this: + dropzone.on("dragEnter", function() { }); + */ + this.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "addedfile", "addedfiles", "removedfile", "thumbnail", "error", "errormultiple", "processing", "processingmultiple", "uploadprogress", "totaluploadprogress", "sending", "sendingmultiple", "success", "successmultiple", "canceled", "canceledmultiple", "complete", "completemultiple", "reset", "maxfilesexceeded", "maxfilesreached", "queuecomplete"]; + + this.prototype.defaultOptions = { + /** + * Has to be specified on elements other than form (or when the form + * doesn't have an `action` attribute). You can also + * provide a function that will be called with `files` and + * must return the url (since `v3.12.0`) + */ + url: null, + + /** + * Can be changed to `"put"` if necessary. You can also provide a function + * that will be called with `files` and must return the method (since `v3.12.0`). + */ + method: "post", + + /** + * Will be set on the XHRequest. + */ + withCredentials: false, + + /** + * The timeout for the XHR requests in milliseconds (since `v4.4.0`). + */ + timeout: 30000, + + /** + * How many file uploads to process in parallel (See the + * Enqueuing file uploads* documentation section for more info) + */ + parallelUploads: 2, + + /** + * Whether to send multiple files in one request. If + * this it set to true, then the fallback file input element will + * have the `multiple` attribute as well. This option will + * also trigger additional events (like `processingmultiple`). See the events + * documentation section for more information. + */ + uploadMultiple: false, + + /** + * Whether you want files to be uploaded in chunks to your server. This can't be + * used in combination with `uploadMultiple`. + * + * See [chunksUploaded](#config-chunksUploaded) for the callback to finalise an upload. + */ + chunking: false, + + /** + * If `chunking` is enabled, this defines whether **every** file should be chunked, + * even if the file size is below chunkSize. This means, that the additional chunk + * form data will be submitted and the `chunksUploaded` callback will be invoked. + */ + forceChunking: false, + + /** + * If `chunking` is `true`, then this defines the chunk size in bytes. + */ + chunkSize: 2000000, + + /** + * If `true`, the individual chunks of a file are being uploaded simultaneously. + */ + parallelChunkUploads: false, + + /** + * Whether a chunk should be retried if it fails. + */ + retryChunks: false, + + /** + * If `retryChunks` is true, how many times should it be retried. + */ + retryChunksLimit: 3, + + /** + * If not `null` defines how many files this Dropzone handles. If it exceeds, + * the event `maxfilesexceeded` will be called. The dropzone element gets the + * class `dz-max-files-reached` accordingly so you can provide visual feedback. + */ + maxFilesize: 256, + + /** + * The name of the file param that gets transferred. + * **NOTE**: If you have the option `uploadMultiple` set to `true`, then + * Dropzone will append `[]` to the name. + */ + paramName: "file", + + /** + * Whether thumbnails for images should be generated + */ + createImageThumbnails: true, + + /** + * In MB. When the filename exceeds this limit, the thumbnail will not be generated. + */ + maxThumbnailFilesize: 10, + + /** + * If `null`, the ratio of the image will be used to calculate it. + */ + thumbnailWidth: 120, + + /** + * The same as `thumbnailWidth`. If both are null, images will not be resized. + */ + thumbnailHeight: 120, + + /** + * How the images should be scaled down in case both, `thumbnailWidth` and `thumbnailHeight` are provided. + * Can be either `contain` or `crop`. + */ + thumbnailMethod: 'crop', + + /** + * If set, images will be resized to these dimensions before being **uploaded**. + * If only one, `resizeWidth` **or** `resizeHeight` is provided, the original aspect + * ratio of the file will be preserved. + * + * The `options.transformFile` function uses these options, so if the `transformFile` function + * is overridden, these options don't do anything. + */ + resizeWidth: null, + + /** + * See `resizeWidth`. + */ + resizeHeight: null, + + /** + * The mime type of the resized image (before it gets uploaded to the server). + * If `null` the original mime type will be used. To force jpeg, for example, use `image/jpeg`. + * See `resizeWidth` for more information. + */ + resizeMimeType: null, + + /** + * The quality of the resized images. See `resizeWidth`. + */ + resizeQuality: 0.8, + + /** + * How the images should be scaled down in case both, `resizeWidth` and `resizeHeight` are provided. + * Can be either `contain` or `crop`. + */ + resizeMethod: 'contain', + + /** + * The base that is used to calculate the filesize. You can change this to + * 1024 if you would rather display kibibytes, mebibytes, etc... + * 1024 is technically incorrect, because `1024 bytes` are `1 kibibyte` not `1 kilobyte`. + * You can change this to `1024` if you don't care about validity. + */ + filesizeBase: 1000, + + /** + * Can be used to limit the maximum number of files that will be handled by this Dropzone + */ + maxFiles: null, + + /** + * An optional object to send additional headers to the server. Eg: + * `{ "My-Awesome-Header": "header value" }` + */ + headers: null, + + /** + * If `true`, the dropzone element itself will be clickable, if `false` + * nothing will be clickable. + * + * You can also pass an HTML element, a CSS selector (for multiple elements) + * or an array of those. In that case, all of those elements will trigger an + * upload when clicked. + */ + clickable: true, + + /** + * Whether hidden files in directories should be ignored. + */ + ignoreHiddenFiles: true, + + /** + * The default implementation of `accept` checks the file's mime type or + * extension against this list. This is a comma separated list of mime + * types or file extensions. + * + * Eg.: `image/*,application/pdf,.psd` + * + * If the Dropzone is `clickable` this option will also be used as + * [`accept`](https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept) + * parameter on the hidden file input as well. + */ + acceptedFiles: null, + + /** + * **Deprecated!** + * Use acceptedFiles instead. + */ + acceptedMimeTypes: null, + + /** + * If false, files will be added to the queue but the queue will not be + * processed automatically. + * This can be useful if you need some additional user input before sending + * files (or if you want want all files sent at once). + * If you're ready to send the file simply call `myDropzone.processQueue()`. + * + * See the [enqueuing file uploads](#enqueuing-file-uploads) documentation + * section for more information. + */ + autoProcessQueue: true, + + /** + * If false, files added to the dropzone will not be queued by default. + * You'll have to call `enqueueFile(file)` manually. + */ + autoQueue: true, + + /** + * If `true`, this will add a link to every file preview to remove or cancel (if + * already uploading) the file. The `dictCancelUpload`, `dictCancelUploadConfirmation` + * and `dictRemoveFile` options are used for the wording. + */ + addRemoveLinks: false, + + /** + * Defines where to display the file previews – if `null` the + * Dropzone element itself is used. Can be a plain `HTMLElement` or a CSS + * selector. The element should have the `dropzone-previews` class so + * the previews are displayed properly. + */ + previewsContainer: null, + + /** + * This is the element the hidden input field (which is used when clicking on the + * dropzone to trigger file selection) will be appended to. This might + * be important in case you use frameworks to switch the content of your page. + */ + hiddenInputContainer: "body", + + /** + * If null, no capture type will be specified + * If camera, mobile devices will skip the file selection and choose camera + * If microphone, mobile devices will skip the file selection and choose the microphone + * If camcorder, mobile devices will skip the file selection and choose the camera in video mode + * On apple devices multiple must be set to false. AcceptedFiles may need to + * be set to an appropriate mime type (e.g. "image/*", "audio/*", or "video/*"). + */ + capture: null, + + /** + * **Deprecated**. Use `renameFile` instead. + */ + renameFilename: null, + + /** + * A function that is invoked before the file is uploaded to the server and renames the file. + * This function gets the `File` as argument and can use the `file.name`. The actual name of the + * file that gets used during the upload can be accessed through `file.upload.filename`. + */ + renameFile: null, + + /** + * If `true` the fallback will be forced. This is very useful to test your server + * implementations first and make sure that everything works as + * expected without dropzone if you experience problems, and to test + * how your fallbacks will look. + */ + forceFallback: false, + + /** + * The text used before any files are dropped. + */ + dictDefaultMessage: "Drop files here to upload", + + /** + * The text that replaces the default message text it the browser is not supported. + */ + dictFallbackMessage: "Your browser does not support drag'n'drop file uploads.", + + /** + * The text that will be added before the fallback form. + * If you provide a fallback element yourself, or if this option is `null` this will + * be ignored. + */ + dictFallbackText: "Please use the fallback form below to upload your files like in the olden days.", + + /** + * If the filesize is too big. + * `{{filesize}}` and `{{maxFilesize}}` will be replaced with the respective configuration values. + */ + dictFileTooBig: "File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.", + + /** + * If the file doesn't match the file type. + */ + dictInvalidFileType: "You can't upload files of this type.", + + /** + * If the server response was invalid. + * `{{statusCode}}` will be replaced with the servers status code. + */ + dictResponseError: "Server responded with {{statusCode}} code.", + + /** + * If `addRemoveLinks` is true, the text to be used for the cancel upload link. + */ + dictCancelUpload: "Cancel upload", + + /** + * If `addRemoveLinks` is true, the text to be used for confirmation when cancelling upload. + */ + dictCancelUploadConfirmation: "Are you sure you want to cancel this upload?", + + /** + * If `addRemoveLinks` is true, the text to be used to remove a file. + */ + dictRemoveFile: "Remove file", + + /** + * If this is not null, then the user will be prompted before removing a file. + */ + dictRemoveFileConfirmation: null, + + /** + * Displayed if `maxFiles` is st and exceeded. + * The string `{{maxFiles}}` will be replaced by the configuration value. + */ + dictMaxFilesExceeded: "You can not upload any more files.", + + /** + * Allows you to translate the different units. Starting with `tb` for terabytes and going down to + * `b` for bytes. + */ + dictFileSizeUnits: { tb: "TB", gb: "GB", mb: "MB", kb: "KB", b: "b" }, + + /** + * Called when dropzone initialized + * You can add event listeners here + */ + init: function init() {}, + + + /** + * Can be an **object** of additional parameters to transfer to the server, **or** a `Function` + * that gets invoked with the `files`, `xhr` and, if it's a chunked upload, `chunk` arguments. In case + * of a function, this needs to return a map. + * + * The default implementation does nothing for normal uploads, but adds relevant information for + * chunked uploads. + * + * This is the same as adding hidden input fields in the form element. + */ + params: function params(files, xhr, chunk) { + if (chunk) { + return { + dzuuid: chunk.file.upload.uuid, + dzchunkindex: chunk.index, + dztotalfilesize: chunk.file.size, + dzchunksize: this.options.chunkSize, + dztotalchunkcount: chunk.file.upload.totalChunkCount, + dzchunkbyteoffset: chunk.index * this.options.chunkSize + }; + } + }, + + + /** + * A function that gets a [file](https://developer.mozilla.org/en-US/docs/DOM/File) + * and a `done` function as parameters. + * + * If the done function is invoked without arguments, the file is "accepted" and will + * be processed. If you pass an error message, the file is rejected, and the error + * message will be displayed. + * This function will not be called if the file is too big or doesn't match the mime types. + */ + accept: function accept(file, done) { + return done(); + }, + + + /** + * The callback that will be invoked when all chunks have been uploaded for a file. + * It gets the file for which the chunks have been uploaded as the first parameter, + * and the `done` function as second. `done()` needs to be invoked when everything + * needed to finish the upload process is done. + */ + chunksUploaded: function chunksUploaded(file, done) { + done(); + }, + + /** + * Gets called when the browser is not supported. + * The default implementation shows the fallback input field and adds + * a text. + */ + fallback: function fallback() { + // This code should pass in IE7... :( + var messageElement = void 0; + this.element.className = this.element.className + " dz-browser-not-supported"; + + for (var _iterator2 = this.element.getElementsByTagName("div"), _isArray2 = true, _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { + var _ref2; + + if (_isArray2) { + if (_i2 >= _iterator2.length) break; + _ref2 = _iterator2[_i2++]; + } else { + _i2 = _iterator2.next(); + if (_i2.done) break; + _ref2 = _i2.value; + } + + var child = _ref2; + + if (/(^| )dz-message($| )/.test(child.className)) { + messageElement = child; + child.className = "dz-message"; // Removes the 'dz-default' class + break; + } + } + if (!messageElement) { + messageElement = Dropzone.createElement("
"); + this.element.appendChild(messageElement); + } + + var span = messageElement.getElementsByTagName("span")[0]; + if (span) { + if (span.textContent != null) { + span.textContent = this.options.dictFallbackMessage; + } else if (span.innerText != null) { + span.innerText = this.options.dictFallbackMessage; + } + } + + return this.element.appendChild(this.getFallbackForm()); + }, + + + /** + * Gets called to calculate the thumbnail dimensions. + * + * It gets `file`, `width` and `height` (both may be `null`) as parameters and must return an object containing: + * + * - `srcWidth` & `srcHeight` (required) + * - `trgWidth` & `trgHeight` (required) + * - `srcX` & `srcY` (optional, default `0`) + * - `trgX` & `trgY` (optional, default `0`) + * + * Those values are going to be used by `ctx.drawImage()`. + */ + resize: function resize(file, width, height, resizeMethod) { + var info = { + srcX: 0, + srcY: 0, + srcWidth: file.width, + srcHeight: file.height + }; + + var srcRatio = file.width / file.height; + + // Automatically calculate dimensions if not specified + if (width == null && height == null) { + width = info.srcWidth; + height = info.srcHeight; + } else if (width == null) { + width = height * srcRatio; + } else if (height == null) { + height = width / srcRatio; + } + + // Make sure images aren't upscaled + width = Math.min(width, info.srcWidth); + height = Math.min(height, info.srcHeight); + + var trgRatio = width / height; + + if (info.srcWidth > width || info.srcHeight > height) { + // Image is bigger and needs rescaling + if (resizeMethod === 'crop') { + if (srcRatio > trgRatio) { + info.srcHeight = file.height; + info.srcWidth = info.srcHeight * trgRatio; + } else { + info.srcWidth = file.width; + info.srcHeight = info.srcWidth / trgRatio; + } + } else if (resizeMethod === 'contain') { + // Method 'contain' + if (srcRatio > trgRatio) { + height = width / srcRatio; + } else { + width = height * srcRatio; + } + } else { + throw new Error("Unknown resizeMethod '" + resizeMethod + "'"); + } + } + + info.srcX = (file.width - info.srcWidth) / 2; + info.srcY = (file.height - info.srcHeight) / 2; + + info.trgWidth = width; + info.trgHeight = height; + + return info; + }, + + + /** + * Can be used to transform the file (for example, resize an image if necessary). + * + * The default implementation uses `resizeWidth` and `resizeHeight` (if provided) and resizes + * images according to those dimensions. + * + * Gets the `file` as the first parameter, and a `done()` function as the second, that needs + * to be invoked with the file when the transformation is done. + */ + transformFile: function transformFile(file, done) { + if ((this.options.resizeWidth || this.options.resizeHeight) && file.type.match(/image.*/)) { + return this.resizeImage(file, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, done); + } else { + return done(file); + } + }, + + + /** + * A string that contains the template used for each dropped + * file. Change it to fulfill your needs but make sure to properly + * provide all elements. + * + * If you want to use an actual HTML element instead of providing a String + * as a config option, you could create a div with the id `tpl`, + * put the template inside it and provide the element like this: + * + * document + * .querySelector('#tpl') + * .innerHTML + * + */ + previewTemplate: "
\n
\n
\n
\n
\n
\n
\n
\n
\n \n Check\n \n \n \n \n \n
\n
\n \n Error\n \n \n \n \n \n \n \n
\n
", + + // END OPTIONS + // (Required by the dropzone documentation parser) + + + /* + Those functions register themselves to the events on init and handle all + the user interface specific stuff. Overwriting them won't break the upload + but can break the way it's displayed. + You can overwrite them if you don't like the default behavior. If you just + want to add an additional event handler, register it on the dropzone object + and don't overwrite those options. + */ + + // Those are self explanatory and simply concern the DragnDrop. + drop: function drop(e) { + return this.element.classList.remove("dz-drag-hover"); + }, + dragstart: function dragstart(e) {}, + dragend: function dragend(e) { + return this.element.classList.remove("dz-drag-hover"); + }, + dragenter: function dragenter(e) { + return this.element.classList.add("dz-drag-hover"); + }, + dragover: function dragover(e) { + return this.element.classList.add("dz-drag-hover"); + }, + dragleave: function dragleave(e) { + return this.element.classList.remove("dz-drag-hover"); + }, + paste: function paste(e) {}, + + + // Called whenever there are no files left in the dropzone anymore, and the + // dropzone should be displayed as if in the initial state. + reset: function reset() { + return this.element.classList.remove("dz-started"); + }, + + + // Called when a file is added to the queue + // Receives `file` + addedfile: function addedfile(file) { + var _this2 = this; + + if (this.element === this.previewsContainer) { + this.element.classList.add("dz-started"); + } + + if (this.previewsContainer) { + file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim()); + file.previewTemplate = file.previewElement; // Backwards compatibility + + this.previewsContainer.appendChild(file.previewElement); + for (var _iterator3 = file.previewElement.querySelectorAll("[data-dz-name]"), _isArray3 = true, _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) { + var _ref3; + + if (_isArray3) { + if (_i3 >= _iterator3.length) break; + _ref3 = _iterator3[_i3++]; + } else { + _i3 = _iterator3.next(); + if (_i3.done) break; + _ref3 = _i3.value; + } + + var node = _ref3; + + node.textContent = file.name; + } + for (var _iterator4 = file.previewElement.querySelectorAll("[data-dz-size]"), _isArray4 = true, _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) { + if (_isArray4) { + if (_i4 >= _iterator4.length) break; + node = _iterator4[_i4++]; + } else { + _i4 = _iterator4.next(); + if (_i4.done) break; + node = _i4.value; + } + + node.innerHTML = this.filesize(file.size); + } + + if (this.options.addRemoveLinks) { + file._removeLink = Dropzone.createElement("" + this.options.dictRemoveFile + ""); + file.previewElement.appendChild(file._removeLink); + } + + var removeFileEvent = function removeFileEvent(e) { + e.preventDefault(); + e.stopPropagation(); + if (file.status === Dropzone.UPLOADING) { + return Dropzone.confirm(_this2.options.dictCancelUploadConfirmation, function () { + return _this2.removeFile(file); + }); + } else { + if (_this2.options.dictRemoveFileConfirmation) { + return Dropzone.confirm(_this2.options.dictRemoveFileConfirmation, function () { + return _this2.removeFile(file); + }); + } else { + return _this2.removeFile(file); + } + } + }; + + for (var _iterator5 = file.previewElement.querySelectorAll("[data-dz-remove]"), _isArray5 = true, _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) { + var _ref4; + + if (_isArray5) { + if (_i5 >= _iterator5.length) break; + _ref4 = _iterator5[_i5++]; + } else { + _i5 = _iterator5.next(); + if (_i5.done) break; + _ref4 = _i5.value; + } + + var removeLink = _ref4; + + removeLink.addEventListener("click", removeFileEvent); + } + } + }, + + + // Called whenever a file is removed. + removedfile: function removedfile(file) { + if (file.previewElement != null && file.previewElement.parentNode != null) { + file.previewElement.parentNode.removeChild(file.previewElement); + } + return this._updateMaxFilesReachedClass(); + }, + + + // Called when a thumbnail has been generated + // Receives `file` and `dataUrl` + thumbnail: function thumbnail(file, dataUrl) { + if (file.previewElement) { + file.previewElement.classList.remove("dz-file-preview"); + for (var _iterator6 = file.previewElement.querySelectorAll("[data-dz-thumbnail]"), _isArray6 = true, _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) { + var _ref5; + + if (_isArray6) { + if (_i6 >= _iterator6.length) break; + _ref5 = _iterator6[_i6++]; + } else { + _i6 = _iterator6.next(); + if (_i6.done) break; + _ref5 = _i6.value; + } + + var thumbnailElement = _ref5; + + thumbnailElement.alt = file.name; + thumbnailElement.src = dataUrl; + } + + return setTimeout(function () { + return file.previewElement.classList.add("dz-image-preview"); + }, 1); + } + }, + + + // Called whenever an error occurs + // Receives `file` and `message` + error: function error(file, message) { + if (file.previewElement) { + file.previewElement.classList.add("dz-error"); + if (typeof message !== "String" && message.error) { + message = message.error; + } + for (var _iterator7 = file.previewElement.querySelectorAll("[data-dz-errormessage]"), _isArray7 = true, _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) { + var _ref6; + + if (_isArray7) { + if (_i7 >= _iterator7.length) break; + _ref6 = _iterator7[_i7++]; + } else { + _i7 = _iterator7.next(); + if (_i7.done) break; + _ref6 = _i7.value; + } + + var node = _ref6; + + node.textContent = message; + } + } + }, + errormultiple: function errormultiple() {}, + + + // Called when a file gets processed. Since there is a cue, not all added + // files are processed immediately. + // Receives `file` + processing: function processing(file) { + if (file.previewElement) { + file.previewElement.classList.add("dz-processing"); + if (file._removeLink) { + return file._removeLink.textContent = this.options.dictCancelUpload; + } + } + }, + processingmultiple: function processingmultiple() {}, + + + // Called whenever the upload progress gets updated. + // Receives `file`, `progress` (percentage 0-100) and `bytesSent`. + // To get the total number of bytes of the file, use `file.size` + uploadprogress: function uploadprogress(file, progress, bytesSent) { + if (file.previewElement) { + for (var _iterator8 = file.previewElement.querySelectorAll("[data-dz-uploadprogress]"), _isArray8 = true, _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) { + var _ref7; + + if (_isArray8) { + if (_i8 >= _iterator8.length) break; + _ref7 = _iterator8[_i8++]; + } else { + _i8 = _iterator8.next(); + if (_i8.done) break; + _ref7 = _i8.value; + } + + var node = _ref7; + + node.nodeName === 'PROGRESS' ? node.value = progress : node.style.width = progress + "%"; + } + } + }, + + + // Called whenever the total upload progress gets updated. + // Called with totalUploadProgress (0-100), totalBytes and totalBytesSent + totaluploadprogress: function totaluploadprogress() {}, + + + // Called just before the file is sent. Gets the `xhr` object as second + // parameter, so you can modify it (for example to add a CSRF token) and a + // `formData` object to add additional information. + sending: function sending() {}, + sendingmultiple: function sendingmultiple() {}, + + + // When the complete upload is finished and successful + // Receives `file` + success: function success(file) { + if (file.previewElement) { + return file.previewElement.classList.add("dz-success"); + } + }, + successmultiple: function successmultiple() {}, + + + // When the upload is canceled. + canceled: function canceled(file) { + return this.emit("error", file, "Upload canceled."); + }, + canceledmultiple: function canceledmultiple() {}, + + + // When the upload is finished, either with success or an error. + // Receives `file` + complete: function complete(file) { + if (file._removeLink) { + file._removeLink.textContent = this.options.dictRemoveFile; + } + if (file.previewElement) { + return file.previewElement.classList.add("dz-complete"); + } + }, + completemultiple: function completemultiple() {}, + maxfilesexceeded: function maxfilesexceeded() {}, + maxfilesreached: function maxfilesreached() {}, + queuecomplete: function queuecomplete() {}, + addedfiles: function addedfiles() {} + }; + + this.prototype._thumbnailQueue = []; + this.prototype._processingThumbnail = false; + } + + // global utility + + }, { + key: "extend", + value: function extend(target) { + for (var _len2 = arguments.length, objects = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + objects[_key2 - 1] = arguments[_key2]; + } + + for (var _iterator9 = objects, _isArray9 = true, _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) { + var _ref8; + + if (_isArray9) { + if (_i9 >= _iterator9.length) break; + _ref8 = _iterator9[_i9++]; + } else { + _i9 = _iterator9.next(); + if (_i9.done) break; + _ref8 = _i9.value; + } + + var object = _ref8; + + for (var key in object) { + var val = object[key]; + target[key] = val; + } + } + return target; + } + }]); + + function Dropzone(el, options) { + _classCallCheck(this, Dropzone); + + var _this = _possibleConstructorReturn(this, (Dropzone.__proto__ || Object.getPrototypeOf(Dropzone)).call(this)); + + var fallback = void 0, + left = void 0; + _this.element = el; + // For backwards compatibility since the version was in the prototype previously + _this.version = Dropzone.version; + + _this.defaultOptions.previewTemplate = _this.defaultOptions.previewTemplate.replace(/\n*/g, ""); + + _this.clickableElements = []; + _this.listeners = []; + _this.files = []; // All files + + if (typeof _this.element === "string") { + _this.element = document.querySelector(_this.element); + } + + // Not checking if instance of HTMLElement or Element since IE9 is extremely weird. + if (!_this.element || _this.element.nodeType == null) { + throw new Error("Invalid dropzone element."); + } + + if (_this.element.dropzone) { + throw new Error("Dropzone already attached."); + } + + // Now add this dropzone to the instances. + Dropzone.instances.push(_this); + + // Put the dropzone inside the element itself. + _this.element.dropzone = _this; + + var elementOptions = (left = Dropzone.optionsForElement(_this.element)) != null ? left : {}; + + _this.options = Dropzone.extend({}, _this.defaultOptions, elementOptions, options != null ? options : {}); + + // If the browser failed, just call the fallback and leave + if (_this.options.forceFallback || !Dropzone.isBrowserSupported()) { + var _ret; + + return _ret = _this.options.fallback.call(_this), _possibleConstructorReturn(_this, _ret); + } + + // @options.url = @element.getAttribute "action" unless @options.url? + if (_this.options.url == null) { + _this.options.url = _this.element.getAttribute("action"); + } + + if (!_this.options.url) { + throw new Error("No URL provided."); + } + + if (_this.options.acceptedFiles && _this.options.acceptedMimeTypes) { + throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated."); + } + + if (_this.options.uploadMultiple && _this.options.chunking) { + throw new Error('You cannot set both: uploadMultiple and chunking.'); + } + + // Backwards compatibility + if (_this.options.acceptedMimeTypes) { + _this.options.acceptedFiles = _this.options.acceptedMimeTypes; + delete _this.options.acceptedMimeTypes; + } + + // Backwards compatibility + if (_this.options.renameFilename != null) { + _this.options.renameFile = function (file) { + return _this.options.renameFilename.call(_this, file.name, file); + }; + } + + _this.options.method = _this.options.method.toUpperCase(); + + if ((fallback = _this.getExistingFallback()) && fallback.parentNode) { + // Remove the fallback + fallback.parentNode.removeChild(fallback); + } + + // Display previews in the previewsContainer element or the Dropzone element unless explicitly set to false + if (_this.options.previewsContainer !== false) { + if (_this.options.previewsContainer) { + _this.previewsContainer = Dropzone.getElement(_this.options.previewsContainer, "previewsContainer"); + } else { + _this.previewsContainer = _this.element; + } + } + + if (_this.options.clickable) { + if (_this.options.clickable === true) { + _this.clickableElements = [_this.element]; + } else { + _this.clickableElements = Dropzone.getElements(_this.options.clickable, "clickable"); + } + } + + _this.init(); + return _this; + } + + // Returns all files that have been accepted + + + _createClass(Dropzone, [{ + key: "getAcceptedFiles", + value: function getAcceptedFiles() { + return this.files.filter(function (file) { + return file.accepted; + }).map(function (file) { + return file; + }); + } + + // Returns all files that have been rejected + // Not sure when that's going to be useful, but added for completeness. + + }, { + key: "getRejectedFiles", + value: function getRejectedFiles() { + return this.files.filter(function (file) { + return !file.accepted; + }).map(function (file) { + return file; + }); + } + }, { + key: "getFilesWithStatus", + value: function getFilesWithStatus(status) { + return this.files.filter(function (file) { + return file.status === status; + }).map(function (file) { + return file; + }); + } + + // Returns all files that are in the queue + + }, { + key: "getQueuedFiles", + value: function getQueuedFiles() { + return this.getFilesWithStatus(Dropzone.QUEUED); + } + }, { + key: "getUploadingFiles", + value: function getUploadingFiles() { + return this.getFilesWithStatus(Dropzone.UPLOADING); + } + }, { + key: "getAddedFiles", + value: function getAddedFiles() { + return this.getFilesWithStatus(Dropzone.ADDED); + } + + // Files that are either queued or uploading + + }, { + key: "getActiveFiles", + value: function getActiveFiles() { + return this.files.filter(function (file) { + return file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED; + }).map(function (file) { + return file; + }); + } + + // The function that gets called when Dropzone is initialized. You + // can (and should) setup event listeners inside this function. + + }, { + key: "init", + value: function init() { + var _this3 = this; + + // In case it isn't set already + if (this.element.tagName === "form") { + this.element.setAttribute("enctype", "multipart/form-data"); + } + + if (this.element.classList.contains("dropzone") && !this.element.querySelector(".dz-message")) { + this.element.appendChild(Dropzone.createElement("
" + this.options.dictDefaultMessage + "
")); + } + + if (this.clickableElements.length) { + var setupHiddenFileInput = function setupHiddenFileInput() { + if (_this3.hiddenFileInput) { + _this3.hiddenFileInput.parentNode.removeChild(_this3.hiddenFileInput); + } + _this3.hiddenFileInput = document.createElement("input"); + _this3.hiddenFileInput.setAttribute("type", "file"); + if (_this3.options.maxFiles === null || _this3.options.maxFiles > 1) { + _this3.hiddenFileInput.setAttribute("multiple", "multiple"); + } + _this3.hiddenFileInput.className = "dz-hidden-input"; + + if (_this3.options.acceptedFiles !== null) { + _this3.hiddenFileInput.setAttribute("accept", _this3.options.acceptedFiles); + } + if (_this3.options.capture !== null) { + _this3.hiddenFileInput.setAttribute("capture", _this3.options.capture); + } + + // Not setting `display="none"` because some browsers don't accept clicks + // on elements that aren't displayed. + _this3.hiddenFileInput.style.visibility = "hidden"; + _this3.hiddenFileInput.style.position = "absolute"; + _this3.hiddenFileInput.style.top = "0"; + _this3.hiddenFileInput.style.left = "0"; + _this3.hiddenFileInput.style.height = "0"; + _this3.hiddenFileInput.style.width = "0"; + document.querySelector(_this3.options.hiddenInputContainer).appendChild(_this3.hiddenFileInput); + return _this3.hiddenFileInput.addEventListener("change", function () { + var files = _this3.hiddenFileInput.files; + + if (files.length) { + for (var _iterator10 = files, _isArray10 = true, _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) { + var _ref9; + + if (_isArray10) { + if (_i10 >= _iterator10.length) break; + _ref9 = _iterator10[_i10++]; + } else { + _i10 = _iterator10.next(); + if (_i10.done) break; + _ref9 = _i10.value; + } + + var file = _ref9; + + _this3.addFile(file); + } + } + _this3.emit("addedfiles", files); + return setupHiddenFileInput(); + }); + }; + setupHiddenFileInput(); + } + + this.URL = window.URL !== null ? window.URL : window.webkitURL; + + // Setup all event listeners on the Dropzone object itself. + // They're not in @setupEventListeners() because they shouldn't be removed + // again when the dropzone gets disabled. + for (var _iterator11 = this.events, _isArray11 = true, _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) { + var _ref10; + + if (_isArray11) { + if (_i11 >= _iterator11.length) break; + _ref10 = _iterator11[_i11++]; + } else { + _i11 = _iterator11.next(); + if (_i11.done) break; + _ref10 = _i11.value; + } + + var eventName = _ref10; + + this.on(eventName, this.options[eventName]); + } + + this.on("uploadprogress", function () { + return _this3.updateTotalUploadProgress(); + }); + + this.on("removedfile", function () { + return _this3.updateTotalUploadProgress(); + }); + + this.on("canceled", function (file) { + return _this3.emit("complete", file); + }); + + // Emit a `queuecomplete` event if all files finished uploading. + this.on("complete", function (file) { + if (_this3.getAddedFiles().length === 0 && _this3.getUploadingFiles().length === 0 && _this3.getQueuedFiles().length === 0) { + // This needs to be deferred so that `queuecomplete` really triggers after `complete` + return setTimeout(function () { + return _this3.emit("queuecomplete"); + }, 0); + } + }); + + var noPropagation = function noPropagation(e) { + e.stopPropagation(); + if (e.preventDefault) { + return e.preventDefault(); + } else { + return e.returnValue = false; + } + }; + + // Create the listeners + this.listeners = [{ + element: this.element, + events: { + "dragstart": function dragstart(e) { + return _this3.emit("dragstart", e); + }, + "dragenter": function dragenter(e) { + noPropagation(e); + return _this3.emit("dragenter", e); + }, + "dragover": function dragover(e) { + // Makes it possible to drag files from chrome's download bar + // http://stackoverflow.com/questions/19526430/drag-and-drop-file-uploads-from-chrome-downloads-bar + // Try is required to prevent bug in Internet Explorer 11 (SCRIPT65535 exception) + var efct = void 0; + try { + efct = e.dataTransfer.effectAllowed; + } catch (error) {} + e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy'; + + noPropagation(e); + return _this3.emit("dragover", e); + }, + "dragleave": function dragleave(e) { + return _this3.emit("dragleave", e); + }, + "drop": function drop(e) { + noPropagation(e); + return _this3.drop(e); + }, + "dragend": function dragend(e) { + return _this3.emit("dragend", e); + } + + // This is disabled right now, because the browsers don't implement it properly. + // "paste": (e) => + // noPropagation e + // @paste e + } }]; + + this.clickableElements.forEach(function (clickableElement) { + return _this3.listeners.push({ + element: clickableElement, + events: { + "click": function click(evt) { + // Only the actual dropzone or the message element should trigger file selection + if (clickableElement !== _this3.element || evt.target === _this3.element || Dropzone.elementInside(evt.target, _this3.element.querySelector(".dz-message"))) { + _this3.hiddenFileInput.click(); // Forward the click + } + return true; + } + } + }); + }); + + this.enable(); + + return this.options.init.call(this); + } + + // Not fully tested yet + + }, { + key: "destroy", + value: function destroy() { + this.disable(); + this.removeAllFiles(true); + if (this.hiddenFileInput != null ? this.hiddenFileInput.parentNode : undefined) { + this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput); + this.hiddenFileInput = null; + } + delete this.element.dropzone; + return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1); + } + }, { + key: "updateTotalUploadProgress", + value: function updateTotalUploadProgress() { + var totalUploadProgress = void 0; + var totalBytesSent = 0; + var totalBytes = 0; + + var activeFiles = this.getActiveFiles(); + + if (activeFiles.length) { + for (var _iterator12 = this.getActiveFiles(), _isArray12 = true, _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _iterator12[Symbol.iterator]();;) { + var _ref11; + + if (_isArray12) { + if (_i12 >= _iterator12.length) break; + _ref11 = _iterator12[_i12++]; + } else { + _i12 = _iterator12.next(); + if (_i12.done) break; + _ref11 = _i12.value; + } + + var file = _ref11; + + totalBytesSent += file.upload.bytesSent; + totalBytes += file.upload.total; + } + totalUploadProgress = 100 * totalBytesSent / totalBytes; + } else { + totalUploadProgress = 100; + } + + return this.emit("totaluploadprogress", totalUploadProgress, totalBytes, totalBytesSent); + } + + // @options.paramName can be a function taking one parameter rather than a string. + // A parameter name for a file is obtained simply by calling this with an index number. + + }, { + key: "_getParamName", + value: function _getParamName(n) { + if (typeof this.options.paramName === "function") { + return this.options.paramName(n); + } else { + return "" + this.options.paramName + (this.options.uploadMultiple ? "[" + n + "]" : ""); + } + } + + // If @options.renameFile is a function, + // the function will be used to rename the file.name before appending it to the formData + + }, { + key: "_renameFile", + value: function _renameFile(file) { + if (typeof this.options.renameFile !== "function") { + return file.name; + } + return this.options.renameFile(file); + } + + // Returns a form that can be used as fallback if the browser does not support DragnDrop + // + // If the dropzone is already a form, only the input field and button are returned. Otherwise a complete form element is provided. + // This code has to pass in IE7 :( + + }, { + key: "getFallbackForm", + value: function getFallbackForm() { + var existingFallback = void 0, + form = void 0; + if (existingFallback = this.getExistingFallback()) { + return existingFallback; + } + + var fieldsString = "
"; + if (this.options.dictFallbackText) { + fieldsString += "

" + this.options.dictFallbackText + "

"; + } + fieldsString += "
"; + + var fields = Dropzone.createElement(fieldsString); + if (this.element.tagName !== "FORM") { + form = Dropzone.createElement("
"); + form.appendChild(fields); + } else { + // Make sure that the enctype and method attributes are set properly + this.element.setAttribute("enctype", "multipart/form-data"); + this.element.setAttribute("method", this.options.method); + } + return form != null ? form : fields; + } + + // Returns the fallback elements if they exist already + // + // This code has to pass in IE7 :( + + }, { + key: "getExistingFallback", + value: function getExistingFallback() { + var getFallback = function getFallback(elements) { + for (var _iterator13 = elements, _isArray13 = true, _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _iterator13[Symbol.iterator]();;) { + var _ref12; + + if (_isArray13) { + if (_i13 >= _iterator13.length) break; + _ref12 = _iterator13[_i13++]; + } else { + _i13 = _iterator13.next(); + if (_i13.done) break; + _ref12 = _i13.value; + } + + var el = _ref12; + + if (/(^| )fallback($| )/.test(el.className)) { + return el; + } + } + }; + + var _arr = ["div", "form"]; + for (var _i14 = 0; _i14 < _arr.length; _i14++) { + var tagName = _arr[_i14]; + var fallback; + if (fallback = getFallback(this.element.getElementsByTagName(tagName))) { + return fallback; + } + } + } + + // Activates all listeners stored in @listeners + + }, { + key: "setupEventListeners", + value: function setupEventListeners() { + return this.listeners.map(function (elementListeners) { + return function () { + var result = []; + for (var event in elementListeners.events) { + var listener = elementListeners.events[event]; + result.push(elementListeners.element.addEventListener(event, listener, false)); + } + return result; + }(); + }); + } + + // Deactivates all listeners stored in @listeners + + }, { + key: "removeEventListeners", + value: function removeEventListeners() { + return this.listeners.map(function (elementListeners) { + return function () { + var result = []; + for (var event in elementListeners.events) { + var listener = elementListeners.events[event]; + result.push(elementListeners.element.removeEventListener(event, listener, false)); + } + return result; + }(); + }); + } + + // Removes all event listeners and cancels all files in the queue or being processed. + + }, { + key: "disable", + value: function disable() { + var _this4 = this; + + this.clickableElements.forEach(function (element) { + return element.classList.remove("dz-clickable"); + }); + this.removeEventListeners(); + + return this.files.map(function (file) { + return _this4.cancelUpload(file); + }); + } + }, { + key: "enable", + value: function enable() { + this.clickableElements.forEach(function (element) { + return element.classList.add("dz-clickable"); + }); + return this.setupEventListeners(); + } + + // Returns a nicely formatted filesize + + }, { + key: "filesize", + value: function filesize(size) { + var selectedSize = 0; + var selectedUnit = "b"; + + if (size > 0) { + var units = ['tb', 'gb', 'mb', 'kb', 'b']; + + for (var i = 0; i < units.length; i++) { + var unit = units[i]; + var cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10; + + if (size >= cutoff) { + selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i); + selectedUnit = unit; + break; + } + } + + selectedSize = Math.round(10 * selectedSize) / 10; // Cutting of digits + } + + return "" + selectedSize + " " + this.options.dictFileSizeUnits[selectedUnit]; + } + + // Adds or removes the `dz-max-files-reached` class from the form. + + }, { + key: "_updateMaxFilesReachedClass", + value: function _updateMaxFilesReachedClass() { + if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) { + if (this.getAcceptedFiles().length === this.options.maxFiles) { + this.emit('maxfilesreached', this.files); + } + return this.element.classList.add("dz-max-files-reached"); + } else { + return this.element.classList.remove("dz-max-files-reached"); + } + } + }, { + key: "drop", + value: function drop(e) { + if (!e.dataTransfer) { + return; + } + this.emit("drop", e); + + var files = e.dataTransfer.files; + + this.emit("addedfiles", files); + + // Even if it's a folder, files.length will contain the folders. + if (files.length) { + var items = e.dataTransfer.items; + + if (items && items.length && items[0].webkitGetAsEntry != null) { + // The browser supports dropping of folders, so handle items instead of files + this._addFilesFromItems(items); + } else { + this.handleFiles(files); + } + } + } + }, { + key: "paste", + value: function paste(e) { + if (__guard__(e != null ? e.clipboardData : undefined, function (x) { + return x.items; + }) == null) { + return; + } + + this.emit("paste", e); + var items = e.clipboardData.items; + + + if (items.length) { + return this._addFilesFromItems(items); + } + } + }, { + key: "handleFiles", + value: function handleFiles(files) { + var _this5 = this; + + return files.map(function (file) { + return _this5.addFile(file); + }); + } + + // When a folder is dropped (or files are pasted), items must be handled + // instead of files. + + }, { + key: "_addFilesFromItems", + value: function _addFilesFromItems(items) { + var _this6 = this; + + return function () { + var result = []; + for (var _iterator14 = items, _isArray14 = true, _i15 = 0, _iterator14 = _isArray14 ? _iterator14 : _iterator14[Symbol.iterator]();;) { + var _ref13; + + if (_isArray14) { + if (_i15 >= _iterator14.length) break; + _ref13 = _iterator14[_i15++]; + } else { + _i15 = _iterator14.next(); + if (_i15.done) break; + _ref13 = _i15.value; + } + + var item = _ref13; + + var entry; + if (item.webkitGetAsEntry != null && (entry = item.webkitGetAsEntry())) { + if (entry.isFile) { + result.push(_this6.addFile(item.getAsFile())); + } else if (entry.isDirectory) { + // Append all files from that directory to files + result.push(_this6._addFilesFromDirectory(entry, entry.name)); + } else { + result.push(undefined); + } + } else if (item.getAsFile != null) { + if (item.kind == null || item.kind === "file") { + result.push(_this6.addFile(item.getAsFile())); + } else { + result.push(undefined); + } + } else { + result.push(undefined); + } + } + return result; + }(); + } + + // Goes through the directory, and adds each file it finds recursively + + }, { + key: "_addFilesFromDirectory", + value: function _addFilesFromDirectory(directory, path) { + var _this7 = this; + + var dirReader = directory.createReader(); + + var errorHandler = function errorHandler(error) { + return __guardMethod__(console, 'log', function (o) { + return o.log(error); + }); + }; + + var readEntries = function readEntries() { + return dirReader.readEntries(function (entries) { + if (entries.length > 0) { + for (var _iterator15 = entries, _isArray15 = true, _i16 = 0, _iterator15 = _isArray15 ? _iterator15 : _iterator15[Symbol.iterator]();;) { + var _ref14; + + if (_isArray15) { + if (_i16 >= _iterator15.length) break; + _ref14 = _iterator15[_i16++]; + } else { + _i16 = _iterator15.next(); + if (_i16.done) break; + _ref14 = _i16.value; + } + + var entry = _ref14; + + if (entry.isFile) { + entry.file(function (file) { + if (_this7.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') { + return; + } + file.fullPath = path + "/" + file.name; + return _this7.addFile(file); + }); + } else if (entry.isDirectory) { + _this7._addFilesFromDirectory(entry, path + "/" + entry.name); + } + } + + // Recursively call readEntries() again, since browser only handle + // the first 100 entries. + // See: https://developer.mozilla.org/en-US/docs/Web/API/DirectoryReader#readEntries + readEntries(); + } + return null; + }, errorHandler); + }; + + return readEntries(); + } + + // If `done()` is called without argument the file is accepted + // If you call it with an error message, the file is rejected + // (This allows for asynchronous validation) + // + // This function checks the filesize, and if the file.type passes the + // `acceptedFiles` check. + + }, { + key: "accept", + value: function accept(file, done) { + if (file.size > this.options.maxFilesize * 1024 * 1024) { + return done(this.options.dictFileTooBig.replace("{{filesize}}", Math.round(file.size / 1024 / 10.24) / 100).replace("{{maxFilesize}}", this.options.maxFilesize)); + } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) { + return done(this.options.dictInvalidFileType); + } else if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) { + done(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}", this.options.maxFiles)); + return this.emit("maxfilesexceeded", file); + } else { + return this.options.accept.call(this, file, done); + } + } + }, { + key: "addFile", + value: function addFile(file) { + var _this8 = this; + + file.upload = { + uuid: Dropzone.uuidv4(), + progress: 0, + // Setting the total upload size to file.size for the beginning + // It's actual different than the size to be transmitted. + total: file.size, + bytesSent: 0, + filename: this._renameFile(file), + chunked: this.options.chunking && (this.options.forceChunking || file.size > this.options.chunkSize), + totalChunkCount: Math.ceil(file.size / this.options.chunkSize) + }; + this.files.push(file); + + file.status = Dropzone.ADDED; + + this.emit("addedfile", file); + + this._enqueueThumbnail(file); + + return this.accept(file, function (error) { + if (error) { + file.accepted = false; + _this8._errorProcessing([file], error); // Will set the file.status + } else { + file.accepted = true; + if (_this8.options.autoQueue) { + _this8.enqueueFile(file); + } // Will set .accepted = true + } + return _this8._updateMaxFilesReachedClass(); + }); + } + + // Wrapper for enqueueFile + + }, { + key: "enqueueFiles", + value: function enqueueFiles(files) { + for (var _iterator16 = files, _isArray16 = true, _i17 = 0, _iterator16 = _isArray16 ? _iterator16 : _iterator16[Symbol.iterator]();;) { + var _ref15; + + if (_isArray16) { + if (_i17 >= _iterator16.length) break; + _ref15 = _iterator16[_i17++]; + } else { + _i17 = _iterator16.next(); + if (_i17.done) break; + _ref15 = _i17.value; + } + + var file = _ref15; + + this.enqueueFile(file); + } + return null; + } + }, { + key: "enqueueFile", + value: function enqueueFile(file) { + var _this9 = this; + + if (file.status === Dropzone.ADDED && file.accepted === true) { + file.status = Dropzone.QUEUED; + if (this.options.autoProcessQueue) { + return setTimeout(function () { + return _this9.processQueue(); + }, 0); // Deferring the call + } + } else { + throw new Error("This file can't be queued because it has already been processed or was rejected."); + } + } + }, { + key: "_enqueueThumbnail", + value: function _enqueueThumbnail(file) { + var _this10 = this; + + if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) { + this._thumbnailQueue.push(file); + return setTimeout(function () { + return _this10._processThumbnailQueue(); + }, 0); // Deferring the call + } + } + }, { + key: "_processThumbnailQueue", + value: function _processThumbnailQueue() { + var _this11 = this; + + if (this._processingThumbnail || this._thumbnailQueue.length === 0) { + return; + } + + this._processingThumbnail = true; + var file = this._thumbnailQueue.shift(); + return this.createThumbnail(file, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, true, function (dataUrl) { + _this11.emit("thumbnail", file, dataUrl); + _this11._processingThumbnail = false; + return _this11._processThumbnailQueue(); + }); + } + + // Can be called by the user to remove a file + + }, { + key: "removeFile", + value: function removeFile(file) { + if (file.status === Dropzone.UPLOADING) { + this.cancelUpload(file); + } + this.files = without(this.files, file); + + this.emit("removedfile", file); + if (this.files.length === 0) { + return this.emit("reset"); + } + } + + // Removes all files that aren't currently processed from the list + + }, { + key: "removeAllFiles", + value: function removeAllFiles(cancelIfNecessary) { + // Create a copy of files since removeFile() changes the @files array. + if (cancelIfNecessary == null) { + cancelIfNecessary = false; + } + for (var _iterator17 = this.files.slice(), _isArray17 = true, _i18 = 0, _iterator17 = _isArray17 ? _iterator17 : _iterator17[Symbol.iterator]();;) { + var _ref16; + + if (_isArray17) { + if (_i18 >= _iterator17.length) break; + _ref16 = _iterator17[_i18++]; + } else { + _i18 = _iterator17.next(); + if (_i18.done) break; + _ref16 = _i18.value; + } + + var file = _ref16; + + if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) { + this.removeFile(file); + } + } + return null; + } + + // Resizes an image before it gets sent to the server. This function is the default behavior of + // `options.transformFile` if `resizeWidth` or `resizeHeight` are set. The callback is invoked with + // the resized blob. + + }, { + key: "resizeImage", + value: function resizeImage(file, width, height, resizeMethod, callback) { + var _this12 = this; + + return this.createThumbnail(file, width, height, resizeMethod, false, function (dataUrl, canvas) { + if (canvas === null) { + // The image has not been resized + return callback(file); + } else { + var resizeMimeType = _this12.options.resizeMimeType; + + if (resizeMimeType == null) { + resizeMimeType = file.type; + } + var resizedDataURL = canvas.toDataURL(resizeMimeType, _this12.options.resizeQuality); + if (resizeMimeType === 'image/jpeg' || resizeMimeType === 'image/jpg') { + // Now add the original EXIF information + resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL); + } + return callback(Dropzone.dataURItoBlob(resizedDataURL)); + } + }); + } + }, { + key: "createThumbnail", + value: function createThumbnail(file, width, height, resizeMethod, fixOrientation, callback) { + var _this13 = this; + + var fileReader = new FileReader(); + + fileReader.onload = function () { + + file.dataURL = fileReader.result; + + // Don't bother creating a thumbnail for SVG images since they're vector + if (file.type === "image/svg+xml") { + if (callback != null) { + callback(fileReader.result); + } + return; + } + + return _this13.createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback); + }; + + return fileReader.readAsDataURL(file); + } + }, { + key: "createThumbnailFromUrl", + value: function createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) { + var _this14 = this; + + // Not using `new Image` here because of a bug in latest Chrome versions. + // See https://github.com/enyo/dropzone/pull/226 + var img = document.createElement("img"); + + if (crossOrigin) { + img.crossOrigin = crossOrigin; + } + + img.onload = function () { + var loadExif = function loadExif(callback) { + return callback(1); + }; + if (typeof EXIF !== 'undefined' && EXIF !== null && fixOrientation) { + loadExif = function loadExif(callback) { + return EXIF.getData(img, function () { + return callback(EXIF.getTag(this, 'Orientation')); + }); + }; + } + + return loadExif(function (orientation) { + file.width = img.width; + file.height = img.height; + + var resizeInfo = _this14.options.resize.call(_this14, file, width, height, resizeMethod); + + var canvas = document.createElement("canvas"); + var ctx = canvas.getContext("2d"); + + canvas.width = resizeInfo.trgWidth; + canvas.height = resizeInfo.trgHeight; + + if (orientation > 4) { + canvas.width = resizeInfo.trgHeight; + canvas.height = resizeInfo.trgWidth; + } + + switch (orientation) { + case 2: + // horizontal flip + ctx.translate(canvas.width, 0); + ctx.scale(-1, 1); + break; + case 3: + // 180° rotate left + ctx.translate(canvas.width, canvas.height); + ctx.rotate(Math.PI); + break; + case 4: + // vertical flip + ctx.translate(0, canvas.height); + ctx.scale(1, -1); + break; + case 5: + // vertical flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.scale(1, -1); + break; + case 6: + // 90° rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(0, -canvas.height); + break; + case 7: + // horizontal flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(canvas.width, -canvas.height); + ctx.scale(-1, 1); + break; + case 8: + // 90° rotate left + ctx.rotate(-0.5 * Math.PI); + ctx.translate(-canvas.width, 0); + break; + } + + // This is a bugfix for iOS' scaling bug. + drawImageIOSFix(ctx, img, resizeInfo.srcX != null ? resizeInfo.srcX : 0, resizeInfo.srcY != null ? resizeInfo.srcY : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, resizeInfo.trgX != null ? resizeInfo.trgX : 0, resizeInfo.trgY != null ? resizeInfo.trgY : 0, resizeInfo.trgWidth, resizeInfo.trgHeight); + + var thumbnail = canvas.toDataURL("image/png"); + + if (callback != null) { + return callback(thumbnail, canvas); + } + }); + }; + + if (callback != null) { + img.onerror = callback; + } + + return img.src = file.dataURL; + } + + // Goes through the queue and processes files if there aren't too many already. + + }, { + key: "processQueue", + value: function processQueue() { + var parallelUploads = this.options.parallelUploads; + + var processingLength = this.getUploadingFiles().length; + var i = processingLength; + + // There are already at least as many files uploading than should be + if (processingLength >= parallelUploads) { + return; + } + + var queuedFiles = this.getQueuedFiles(); + + if (!(queuedFiles.length > 0)) { + return; + } + + if (this.options.uploadMultiple) { + // The files should be uploaded in one request + return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength)); + } else { + while (i < parallelUploads) { + if (!queuedFiles.length) { + return; + } // Nothing left to process + this.processFile(queuedFiles.shift()); + i++; + } + } + } + + // Wrapper for `processFiles` + + }, { + key: "processFile", + value: function processFile(file) { + return this.processFiles([file]); + } + + // Loads the file, then calls finishedLoading() + + }, { + key: "processFiles", + value: function processFiles(files) { + for (var _iterator18 = files, _isArray18 = true, _i19 = 0, _iterator18 = _isArray18 ? _iterator18 : _iterator18[Symbol.iterator]();;) { + var _ref17; + + if (_isArray18) { + if (_i19 >= _iterator18.length) break; + _ref17 = _iterator18[_i19++]; + } else { + _i19 = _iterator18.next(); + if (_i19.done) break; + _ref17 = _i19.value; + } + + var file = _ref17; + + file.processing = true; // Backwards compatibility + file.status = Dropzone.UPLOADING; + + this.emit("processing", file); + } + + if (this.options.uploadMultiple) { + this.emit("processingmultiple", files); + } + + return this.uploadFiles(files); + } + }, { + key: "_getFilesWithXhr", + value: function _getFilesWithXhr(xhr) { + var files = void 0; + return files = this.files.filter(function (file) { + return file.xhr === xhr; + }).map(function (file) { + return file; + }); + } + + // Cancels the file upload and sets the status to CANCELED + // **if** the file is actually being uploaded. + // If it's still in the queue, the file is being removed from it and the status + // set to CANCELED. + + }, { + key: "cancelUpload", + value: function cancelUpload(file) { + if (file.status === Dropzone.UPLOADING) { + var groupedFiles = this._getFilesWithXhr(file.xhr); + for (var _iterator19 = groupedFiles, _isArray19 = true, _i20 = 0, _iterator19 = _isArray19 ? _iterator19 : _iterator19[Symbol.iterator]();;) { + var _ref18; + + if (_isArray19) { + if (_i20 >= _iterator19.length) break; + _ref18 = _iterator19[_i20++]; + } else { + _i20 = _iterator19.next(); + if (_i20.done) break; + _ref18 = _i20.value; + } + + var groupedFile = _ref18; + + groupedFile.status = Dropzone.CANCELED; + } + if (typeof file.xhr !== 'undefined') { + file.xhr.abort(); + } + for (var _iterator20 = groupedFiles, _isArray20 = true, _i21 = 0, _iterator20 = _isArray20 ? _iterator20 : _iterator20[Symbol.iterator]();;) { + var _ref19; + + if (_isArray20) { + if (_i21 >= _iterator20.length) break; + _ref19 = _iterator20[_i21++]; + } else { + _i21 = _iterator20.next(); + if (_i21.done) break; + _ref19 = _i21.value; + } + + var _groupedFile = _ref19; + + this.emit("canceled", _groupedFile); + } + if (this.options.uploadMultiple) { + this.emit("canceledmultiple", groupedFiles); + } + } else if (file.status === Dropzone.ADDED || file.status === Dropzone.QUEUED) { + file.status = Dropzone.CANCELED; + this.emit("canceled", file); + if (this.options.uploadMultiple) { + this.emit("canceledmultiple", [file]); + } + } + + if (this.options.autoProcessQueue) { + return this.processQueue(); + } + } + }, { + key: "resolveOption", + value: function resolveOption(option) { + if (typeof option === 'function') { + for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + args[_key3 - 1] = arguments[_key3]; + } + + return option.apply(this, args); + } + return option; + } + }, { + key: "uploadFile", + value: function uploadFile(file) { + return this.uploadFiles([file]); + } + }, { + key: "uploadFiles", + value: function uploadFiles(files) { + var _this15 = this; + + this._transformFiles(files, function (transformedFiles) { + if (files[0].upload.chunked) { + // This file should be sent in chunks! + + // If the chunking option is set, we **know** that there can only be **one** file, since + // uploadMultiple is not allowed with this option. + var file = files[0]; + var transformedFile = transformedFiles[0]; + var startedChunkCount = 0; + + file.upload.chunks = []; + + var handleNextChunk = function handleNextChunk() { + var chunkIndex = 0; + + // Find the next item in file.upload.chunks that is not defined yet. + while (file.upload.chunks[chunkIndex] !== undefined) { + chunkIndex++; + } + + // This means, that all chunks have already been started. + if (chunkIndex >= file.upload.totalChunkCount) return; + + startedChunkCount++; + + var start = chunkIndex * _this15.options.chunkSize; + var end = Math.min(start + _this15.options.chunkSize, file.size); + + var dataBlock = { + name: _this15._getParamName(0), + data: transformedFile.webkitSlice ? transformedFile.webkitSlice(start, end) : transformedFile.slice(start, end), + filename: file.upload.filename, + chunkIndex: chunkIndex + }; + + file.upload.chunks[chunkIndex] = { + file: file, + index: chunkIndex, + dataBlock: dataBlock, // In case we want to retry. + status: Dropzone.UPLOADING, + progress: 0, + retries: 0 // The number of times this block has been retried. + }; + + _this15._uploadData(files, [dataBlock]); + }; + + file.upload.finishedChunkUpload = function (chunk) { + var allFinished = true; + chunk.status = Dropzone.SUCCESS; + + // Clear the data from the chunk + chunk.dataBlock = null; + + for (var i = 0; i < file.upload.totalChunkCount; i++) { + if (file.upload.chunks[i] === undefined) { + return handleNextChunk(); + } + if (file.upload.chunks[i].status !== Dropzone.SUCCESS) { + allFinished = false; + } + } + + if (allFinished) { + _this15.options.chunksUploaded(file, function () { + _this15._finished(files, '', null); + }); + } + }; + + if (_this15.options.parallelChunkUploads) { + for (var i = 0; i < file.upload.totalChunkCount; i++) { + handleNextChunk(); + } + } else { + handleNextChunk(); + } + } else { + var dataBlocks = []; + for (var _i22 = 0; _i22 < files.length; _i22++) { + dataBlocks[_i22] = { + name: _this15._getParamName(_i22), + data: transformedFiles[_i22], + filename: files[_i22].upload.filename + }; + } + _this15._uploadData(files, dataBlocks); + } + }); + } + + /// Returns the right chunk for given file and xhr + + }, { + key: "_getChunk", + value: function _getChunk(file, xhr) { + for (var i = 0; i < file.upload.totalChunkCount; i++) { + if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].xhr === xhr) { + return file.upload.chunks[i]; + } + } + } + + // This function actually uploads the file(s) to the server. + // If dataBlocks contains the actual data to upload (meaning, that this could either be transformed + // files, or individual chunks for chunked upload). + + }, { + key: "_uploadData", + value: function _uploadData(files, dataBlocks) { + var _this16 = this; + + var xhr = new XMLHttpRequest(); + + // Put the xhr object in the file objects to be able to reference it later. + for (var _iterator21 = files, _isArray21 = true, _i23 = 0, _iterator21 = _isArray21 ? _iterator21 : _iterator21[Symbol.iterator]();;) { + var _ref20; + + if (_isArray21) { + if (_i23 >= _iterator21.length) break; + _ref20 = _iterator21[_i23++]; + } else { + _i23 = _iterator21.next(); + if (_i23.done) break; + _ref20 = _i23.value; + } + + var file = _ref20; + + file.xhr = xhr; + } + if (files[0].upload.chunked) { + // Put the xhr object in the right chunk object, so it can be associated later, and found with _getChunk + files[0].upload.chunks[dataBlocks[0].chunkIndex].xhr = xhr; + } + + var method = this.resolveOption(this.options.method, files); + var url = this.resolveOption(this.options.url, files); + xhr.open(method, url, true); + + // Setting the timeout after open because of IE11 issue: https://gitlab.com/meno/dropzone/issues/8 + xhr.timeout = this.resolveOption(this.options.timeout, files); + + // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179 + xhr.withCredentials = !!this.options.withCredentials; + + xhr.onload = function (e) { + _this16._finishedUploading(files, xhr, e); + }; + + xhr.onerror = function () { + _this16._handleUploadError(files, xhr); + }; + + // Some browsers do not have the .upload property + var progressObj = xhr.upload != null ? xhr.upload : xhr; + progressObj.onprogress = function (e) { + return _this16._updateFilesUploadProgress(files, xhr, e); + }; + + var headers = { + "Accept": "application/json", + "Cache-Control": "no-cache", + "X-Requested-With": "XMLHttpRequest" + }; + + if (this.options.headers) { + Dropzone.extend(headers, this.options.headers); + } + + for (var headerName in headers) { + var headerValue = headers[headerName]; + if (headerValue) { + xhr.setRequestHeader(headerName, headerValue); + } + } + + var formData = new FormData(); + + // Adding all @options parameters + if (this.options.params) { + var additionalParams = this.options.params; + if (typeof additionalParams === 'function') { + additionalParams = additionalParams.call(this, files, xhr, files[0].upload.chunked ? this._getChunk(files[0], xhr) : null); + } + + for (var key in additionalParams) { + var value = additionalParams[key]; + formData.append(key, value); + } + } + + // Let the user add additional data if necessary + for (var _iterator22 = files, _isArray22 = true, _i24 = 0, _iterator22 = _isArray22 ? _iterator22 : _iterator22[Symbol.iterator]();;) { + var _ref21; + + if (_isArray22) { + if (_i24 >= _iterator22.length) break; + _ref21 = _iterator22[_i24++]; + } else { + _i24 = _iterator22.next(); + if (_i24.done) break; + _ref21 = _i24.value; + } + + var _file = _ref21; + + this.emit("sending", _file, xhr, formData); + } + if (this.options.uploadMultiple) { + this.emit("sendingmultiple", files, xhr, formData); + } + + this._addFormElementData(formData); + + // Finally add the files + // Has to be last because some servers (eg: S3) expect the file to be the last parameter + for (var i = 0; i < dataBlocks.length; i++) { + var dataBlock = dataBlocks[i]; + formData.append(dataBlock.name, dataBlock.data, dataBlock.filename); + } + + this.submitRequest(xhr, formData, files); + } + + // Transforms all files with this.options.transformFile and invokes done with the transformed files when done. + + }, { + key: "_transformFiles", + value: function _transformFiles(files, done) { + var _this17 = this; + + var transformedFiles = []; + // Clumsy way of handling asynchronous calls, until I get to add a proper Future library. + var doneCounter = 0; + + var _loop = function _loop(i) { + _this17.options.transformFile.call(_this17, files[i], function (transformedFile) { + transformedFiles[i] = transformedFile; + if (++doneCounter === files.length) { + done(transformedFiles); + } + }); + }; + + for (var i = 0; i < files.length; i++) { + _loop(i); + } + } + + // Takes care of adding other input elements of the form to the AJAX request + + }, { + key: "_addFormElementData", + value: function _addFormElementData(formData) { + // Take care of other input elements + if (this.element.tagName === "FORM") { + for (var _iterator23 = this.element.querySelectorAll("input, textarea, select, button"), _isArray23 = true, _i25 = 0, _iterator23 = _isArray23 ? _iterator23 : _iterator23[Symbol.iterator]();;) { + var _ref22; + + if (_isArray23) { + if (_i25 >= _iterator23.length) break; + _ref22 = _iterator23[_i25++]; + } else { + _i25 = _iterator23.next(); + if (_i25.done) break; + _ref22 = _i25.value; + } + + var input = _ref22; + + var inputName = input.getAttribute("name"); + var inputType = input.getAttribute("type"); + if (inputType) inputType = inputType.toLowerCase(); + + // If the input doesn't have a name, we can't use it. + if (typeof inputName === 'undefined' || inputName === null) continue; + + if (input.tagName === "SELECT" && input.hasAttribute("multiple")) { + // Possibly multiple values + for (var _iterator24 = input.options, _isArray24 = true, _i26 = 0, _iterator24 = _isArray24 ? _iterator24 : _iterator24[Symbol.iterator]();;) { + var _ref23; + + if (_isArray24) { + if (_i26 >= _iterator24.length) break; + _ref23 = _iterator24[_i26++]; + } else { + _i26 = _iterator24.next(); + if (_i26.done) break; + _ref23 = _i26.value; + } + + var option = _ref23; + + if (option.selected) { + formData.append(inputName, option.value); + } + } + } else if (!inputType || inputType !== "checkbox" && inputType !== "radio" || input.checked) { + formData.append(inputName, input.value); + } + } + } + } + + // Invoked when there is new progress information about given files. + // If e is not provided, it is assumed that the upload is finished. + + }, { + key: "_updateFilesUploadProgress", + value: function _updateFilesUploadProgress(files, xhr, e) { + var progress = void 0; + if (typeof e !== 'undefined') { + progress = 100 * e.loaded / e.total; + + if (files[0].upload.chunked) { + var file = files[0]; + // Since this is a chunked upload, we need to update the appropriate chunk progress. + var chunk = this._getChunk(file, xhr); + chunk.progress = progress; + chunk.total = e.total; + chunk.bytesSent = e.loaded; + var fileProgress = 0, + fileTotal = void 0, + fileBytesSent = void 0; + file.upload.progress = 0; + file.upload.total = 0; + file.upload.bytesSent = 0; + for (var i = 0; i < file.upload.totalChunkCount; i++) { + if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].progress !== undefined) { + file.upload.progress += file.upload.chunks[i].progress; + file.upload.total += file.upload.chunks[i].total; + file.upload.bytesSent += file.upload.chunks[i].bytesSent; + } + } + file.upload.progress = file.upload.progress / file.upload.totalChunkCount; + } else { + for (var _iterator25 = files, _isArray25 = true, _i27 = 0, _iterator25 = _isArray25 ? _iterator25 : _iterator25[Symbol.iterator]();;) { + var _ref24; + + if (_isArray25) { + if (_i27 >= _iterator25.length) break; + _ref24 = _iterator25[_i27++]; + } else { + _i27 = _iterator25.next(); + if (_i27.done) break; + _ref24 = _i27.value; + } + + var _file2 = _ref24; + + _file2.upload.progress = progress; + _file2.upload.total = e.total; + _file2.upload.bytesSent = e.loaded; + } + } + for (var _iterator26 = files, _isArray26 = true, _i28 = 0, _iterator26 = _isArray26 ? _iterator26 : _iterator26[Symbol.iterator]();;) { + var _ref25; + + if (_isArray26) { + if (_i28 >= _iterator26.length) break; + _ref25 = _iterator26[_i28++]; + } else { + _i28 = _iterator26.next(); + if (_i28.done) break; + _ref25 = _i28.value; + } + + var _file3 = _ref25; + + this.emit("uploadprogress", _file3, _file3.upload.progress, _file3.upload.bytesSent); + } + } else { + // Called when the file finished uploading + + var allFilesFinished = true; + + progress = 100; + + for (var _iterator27 = files, _isArray27 = true, _i29 = 0, _iterator27 = _isArray27 ? _iterator27 : _iterator27[Symbol.iterator]();;) { + var _ref26; + + if (_isArray27) { + if (_i29 >= _iterator27.length) break; + _ref26 = _iterator27[_i29++]; + } else { + _i29 = _iterator27.next(); + if (_i29.done) break; + _ref26 = _i29.value; + } + + var _file4 = _ref26; + + if (_file4.upload.progress !== 100 || _file4.upload.bytesSent !== _file4.upload.total) { + allFilesFinished = false; + } + _file4.upload.progress = progress; + _file4.upload.bytesSent = _file4.upload.total; + } + + // Nothing to do, all files already at 100% + if (allFilesFinished) { + return; + } + + for (var _iterator28 = files, _isArray28 = true, _i30 = 0, _iterator28 = _isArray28 ? _iterator28 : _iterator28[Symbol.iterator]();;) { + var _ref27; + + if (_isArray28) { + if (_i30 >= _iterator28.length) break; + _ref27 = _iterator28[_i30++]; + } else { + _i30 = _iterator28.next(); + if (_i30.done) break; + _ref27 = _i30.value; + } + + var _file5 = _ref27; + + this.emit("uploadprogress", _file5, progress, _file5.upload.bytesSent); + } + } + } + }, { + key: "_finishedUploading", + value: function _finishedUploading(files, xhr, e) { + var response = void 0; + + if (files[0].status === Dropzone.CANCELED) { + return; + } + + if (xhr.readyState !== 4) { + return; + } + + if (xhr.responseType !== 'arraybuffer' && xhr.responseType !== 'blob') { + response = xhr.responseText; + + if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) { + try { + response = JSON.parse(response); + } catch (error) { + e = error; + response = "Invalid JSON response from server."; + } + } + } + + this._updateFilesUploadProgress(files); + + if (!(200 <= xhr.status && xhr.status < 300)) { + this._handleUploadError(files, xhr, response); + } else { + if (files[0].upload.chunked) { + files[0].upload.finishedChunkUpload(this._getChunk(files[0], xhr)); + } else { + this._finished(files, response, e); + } + } + } + }, { + key: "_handleUploadError", + value: function _handleUploadError(files, xhr, response) { + if (files[0].status === Dropzone.CANCELED) { + return; + } + + if (files[0].upload.chunked && this.options.retryChunks) { + var chunk = this._getChunk(files[0], xhr); + if (chunk.retries++ < this.options.retryChunksLimit) { + this._uploadData(files, [chunk.dataBlock]); + return; + } else { + console.warn('Retried this chunk too often. Giving up.'); + } + } + + for (var _iterator29 = files, _isArray29 = true, _i31 = 0, _iterator29 = _isArray29 ? _iterator29 : _iterator29[Symbol.iterator]();;) { + var _ref28; + + if (_isArray29) { + if (_i31 >= _iterator29.length) break; + _ref28 = _iterator29[_i31++]; + } else { + _i31 = _iterator29.next(); + if (_i31.done) break; + _ref28 = _i31.value; + } + + var file = _ref28; + + this._errorProcessing(files, response || this.options.dictResponseError.replace("{{statusCode}}", xhr.status), xhr); + } + } + }, { + key: "submitRequest", + value: function submitRequest(xhr, formData, files) { + xhr.send(formData); + } + + // Called internally when processing is finished. + // Individual callbacks have to be called in the appropriate sections. + + }, { + key: "_finished", + value: function _finished(files, responseText, e) { + for (var _iterator30 = files, _isArray30 = true, _i32 = 0, _iterator30 = _isArray30 ? _iterator30 : _iterator30[Symbol.iterator]();;) { + var _ref29; + + if (_isArray30) { + if (_i32 >= _iterator30.length) break; + _ref29 = _iterator30[_i32++]; + } else { + _i32 = _iterator30.next(); + if (_i32.done) break; + _ref29 = _i32.value; + } + + var file = _ref29; + + file.status = Dropzone.SUCCESS; + this.emit("success", file, responseText, e); + this.emit("complete", file); + } + if (this.options.uploadMultiple) { + this.emit("successmultiple", files, responseText, e); + this.emit("completemultiple", files); + } + + if (this.options.autoProcessQueue) { + return this.processQueue(); + } + } + + // Called internally when processing is finished. + // Individual callbacks have to be called in the appropriate sections. + + }, { + key: "_errorProcessing", + value: function _errorProcessing(files, message, xhr) { + for (var _iterator31 = files, _isArray31 = true, _i33 = 0, _iterator31 = _isArray31 ? _iterator31 : _iterator31[Symbol.iterator]();;) { + var _ref30; + + if (_isArray31) { + if (_i33 >= _iterator31.length) break; + _ref30 = _iterator31[_i33++]; + } else { + _i33 = _iterator31.next(); + if (_i33.done) break; + _ref30 = _i33.value; + } + + var file = _ref30; + + file.status = Dropzone.ERROR; + this.emit("error", file, message, xhr); + this.emit("complete", file); + } + if (this.options.uploadMultiple) { + this.emit("errormultiple", files, message, xhr); + this.emit("completemultiple", files); + } + + if (this.options.autoProcessQueue) { + return this.processQueue(); + } + } + }], [{ + key: "uuidv4", + value: function uuidv4() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, + v = c === 'x' ? r : r & 0x3 | 0x8; + return v.toString(16); + }); + } + }]); + + return Dropzone; +}(Emitter); + +Dropzone.initClass(); + +Dropzone.version = "5.3.0"; + +// This is a map of options for your different dropzones. Add configurations +// to this object for your different dropzone elemens. +// +// Example: +// +// Dropzone.options.myDropzoneElementId = { maxFilesize: 1 }; +// +// To disable autoDiscover for a specific element, you can set `false` as an option: +// +// Dropzone.options.myDisabledElementId = false; +// +// And in html: +// +//
+Dropzone.options = {}; + +// Returns the options for an element or undefined if none available. +Dropzone.optionsForElement = function (element) { + // Get the `Dropzone.options.elementId` for this element if it exists + if (element.getAttribute("id")) { + return Dropzone.options[camelize(element.getAttribute("id"))]; + } else { + return undefined; + } +}; + +// Holds a list of all dropzone instances +Dropzone.instances = []; + +// Returns the dropzone for given element if any +Dropzone.forElement = function (element) { + if (typeof element === "string") { + element = document.querySelector(element); + } + if ((element != null ? element.dropzone : undefined) == null) { + throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone."); + } + return element.dropzone; +}; + +// Set to false if you don't want Dropzone to automatically find and attach to .dropzone elements. +Dropzone.autoDiscover = true; + +// Looks for all .dropzone elements and creates a dropzone for them +Dropzone.discover = function () { + var dropzones = void 0; + if (document.querySelectorAll) { + dropzones = document.querySelectorAll(".dropzone"); + } else { + dropzones = []; + // IE :( + var checkElements = function checkElements(elements) { + return function () { + var result = []; + for (var _iterator32 = elements, _isArray32 = true, _i34 = 0, _iterator32 = _isArray32 ? _iterator32 : _iterator32[Symbol.iterator]();;) { + var _ref31; + + if (_isArray32) { + if (_i34 >= _iterator32.length) break; + _ref31 = _iterator32[_i34++]; + } else { + _i34 = _iterator32.next(); + if (_i34.done) break; + _ref31 = _i34.value; + } + + var el = _ref31; + + if (/(^| )dropzone($| )/.test(el.className)) { + result.push(dropzones.push(el)); + } else { + result.push(undefined); + } + } + return result; + }(); + }; + checkElements(document.getElementsByTagName("div")); + checkElements(document.getElementsByTagName("form")); + } + + return function () { + var result = []; + for (var _iterator33 = dropzones, _isArray33 = true, _i35 = 0, _iterator33 = _isArray33 ? _iterator33 : _iterator33[Symbol.iterator]();;) { + var _ref32; + + if (_isArray33) { + if (_i35 >= _iterator33.length) break; + _ref32 = _iterator33[_i35++]; + } else { + _i35 = _iterator33.next(); + if (_i35.done) break; + _ref32 = _i35.value; + } + + var dropzone = _ref32; + + // Create a dropzone unless auto discover has been disabled for specific element + if (Dropzone.optionsForElement(dropzone) !== false) { + result.push(new Dropzone(dropzone)); + } else { + result.push(undefined); + } + } + return result; + }(); +}; + +// Since the whole Drag'n'Drop API is pretty new, some browsers implement it, +// but not correctly. +// So I created a blacklist of userAgents. Yes, yes. Browser sniffing, I know. +// But what to do when browsers *theoretically* support an API, but crash +// when using it. +// +// This is a list of regular expressions tested against navigator.userAgent +// +// ** It should only be used on browser that *do* support the API, but +// incorrectly ** +// +Dropzone.blacklistedBrowsers = [ +// The mac os and windows phone version of opera 12 seems to have a problem with the File drag'n'drop API. +/opera.*(Macintosh|Windows Phone).*version\/12/i]; + +// Checks if the browser is supported +Dropzone.isBrowserSupported = function () { + var capableBrowser = true; + + if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) { + if (!("classList" in document.createElement("a"))) { + capableBrowser = false; + } else { + // The browser supports the API, but may be blacklisted. + for (var _iterator34 = Dropzone.blacklistedBrowsers, _isArray34 = true, _i36 = 0, _iterator34 = _isArray34 ? _iterator34 : _iterator34[Symbol.iterator]();;) { + var _ref33; + + if (_isArray34) { + if (_i36 >= _iterator34.length) break; + _ref33 = _iterator34[_i36++]; + } else { + _i36 = _iterator34.next(); + if (_i36.done) break; + _ref33 = _i36.value; + } + + var regex = _ref33; + + if (regex.test(navigator.userAgent)) { + capableBrowser = false; + continue; + } + } + } + } else { + capableBrowser = false; + } + + return capableBrowser; +}; + +Dropzone.dataURItoBlob = function (dataURI) { + // convert base64 to raw binary data held in a string + // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this + var byteString = atob(dataURI.split(',')[1]); + + // separate out the mime component + var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; + + // write the bytes of the string to an ArrayBuffer + var ab = new ArrayBuffer(byteString.length); + var ia = new Uint8Array(ab); + for (var i = 0, end = byteString.length, asc = 0 <= end; asc ? i <= end : i >= end; asc ? i++ : i--) { + ia[i] = byteString.charCodeAt(i); + } + + // write the ArrayBuffer to a blob + return new Blob([ab], { type: mimeString }); +}; + +// Returns an array without the rejected item +var without = function without(list, rejectedItem) { + return list.filter(function (item) { + return item !== rejectedItem; + }).map(function (item) { + return item; + }); +}; + +// abc-def_ghi -> abcDefGhi +var camelize = function camelize(str) { + return str.replace(/[\-_](\w)/g, function (match) { + return match.charAt(1).toUpperCase(); + }); +}; + +// Creates an element from string +Dropzone.createElement = function (string) { + var div = document.createElement("div"); + div.innerHTML = string; + return div.childNodes[0]; +}; + +// Tests if given element is inside (or simply is) the container +Dropzone.elementInside = function (element, container) { + if (element === container) { + return true; + } // Coffeescript doesn't support do/while loops + while (element = element.parentNode) { + if (element === container) { + return true; + } + } + return false; +}; + +Dropzone.getElement = function (el, name) { + var element = void 0; + if (typeof el === "string") { + element = document.querySelector(el); + } else if (el.nodeType != null) { + element = el; + } + if (element == null) { + throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector or a plain HTML element."); + } + return element; +}; + +Dropzone.getElements = function (els, name) { + var el = void 0, + elements = void 0; + if (els instanceof Array) { + elements = []; + try { + for (var _iterator35 = els, _isArray35 = true, _i37 = 0, _iterator35 = _isArray35 ? _iterator35 : _iterator35[Symbol.iterator]();;) { + if (_isArray35) { + if (_i37 >= _iterator35.length) break; + el = _iterator35[_i37++]; + } else { + _i37 = _iterator35.next(); + if (_i37.done) break; + el = _i37.value; + } + + elements.push(this.getElement(el, name)); + } + } catch (e) { + elements = null; + } + } else if (typeof els === "string") { + elements = []; + for (var _iterator36 = document.querySelectorAll(els), _isArray36 = true, _i38 = 0, _iterator36 = _isArray36 ? _iterator36 : _iterator36[Symbol.iterator]();;) { + if (_isArray36) { + if (_i38 >= _iterator36.length) break; + el = _iterator36[_i38++]; + } else { + _i38 = _iterator36.next(); + if (_i38.done) break; + el = _i38.value; + } + + elements.push(el); + } + } else if (els.nodeType != null) { + elements = [els]; + } + + if (elements == null || !elements.length) { + throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector, a plain HTML element or a list of those."); + } + + return elements; +}; + +// Asks the user the question and calls accepted or rejected accordingly +// +// The default implementation just uses `window.confirm` and then calls the +// appropriate callback. +Dropzone.confirm = function (question, accepted, rejected) { + if (window.confirm(question)) { + return accepted(); + } else if (rejected != null) { + return rejected(); + } +}; + +// Validates the mime type like this: +// +// https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept +Dropzone.isValidFile = function (file, acceptedFiles) { + if (!acceptedFiles) { + return true; + } // If there are no accepted mime types, it's OK + acceptedFiles = acceptedFiles.split(","); + + var mimeType = file.type; + var baseMimeType = mimeType.replace(/\/.*$/, ""); + + for (var _iterator37 = acceptedFiles, _isArray37 = true, _i39 = 0, _iterator37 = _isArray37 ? _iterator37 : _iterator37[Symbol.iterator]();;) { + var _ref34; + + if (_isArray37) { + if (_i39 >= _iterator37.length) break; + _ref34 = _iterator37[_i39++]; + } else { + _i39 = _iterator37.next(); + if (_i39.done) break; + _ref34 = _i39.value; + } + + var validType = _ref34; + + validType = validType.trim(); + if (validType.charAt(0) === ".") { + if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) { + return true; + } + } else if (/\/\*$/.test(validType)) { + // This is something like a image/* mime type + if (baseMimeType === validType.replace(/\/.*$/, "")) { + return true; + } + } else { + if (mimeType === validType) { + return true; + } + } + } + + return false; +}; + +// Augment jQuery +if (typeof jQuery !== 'undefined' && jQuery !== null) { + jQuery.fn.dropzone = function (options) { + return this.each(function () { + return new Dropzone(this, options); + }); + }; +} + +if (typeof module !== 'undefined' && module !== null) { + module.exports = Dropzone; +} else { + window.Dropzone = Dropzone; +} + +// Dropzone file status codes +Dropzone.ADDED = "added"; + +Dropzone.QUEUED = "queued"; +// For backwards compatibility. Now, if a file is accepted, it's either queued +// or uploading. +Dropzone.ACCEPTED = Dropzone.QUEUED; + +Dropzone.UPLOADING = "uploading"; +Dropzone.PROCESSING = Dropzone.UPLOADING; // alias + +Dropzone.CANCELED = "canceled"; +Dropzone.ERROR = "error"; +Dropzone.SUCCESS = "success"; + +/* + + Bugfix for iOS 6 and 7 + Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios + based on the work of https://github.com/stomita/ios-imagefile-megapixel + + */ + +// Detecting vertical squash in loaded image. +// Fixes a bug which squash image vertically while drawing into canvas for some images. +// This is a bug in iOS6 devices. This function from https://github.com/stomita/ios-imagefile-megapixel +var detectVerticalSquash = function detectVerticalSquash(img) { + var iw = img.naturalWidth; + var ih = img.naturalHeight; + var canvas = document.createElement("canvas"); + canvas.width = 1; + canvas.height = ih; + var ctx = canvas.getContext("2d"); + ctx.drawImage(img, 0, 0); + + var _ctx$getImageData = ctx.getImageData(1, 0, 1, ih), + data = _ctx$getImageData.data; + + // search image edge pixel position in case it is squashed vertically. + + + var sy = 0; + var ey = ih; + var py = ih; + while (py > sy) { + var alpha = data[(py - 1) * 4 + 3]; + + if (alpha === 0) { + ey = py; + } else { + sy = py; + } + + py = ey + sy >> 1; + } + var ratio = py / ih; + + if (ratio === 0) { + return 1; + } else { + return ratio; + } +}; + +// A replacement for context.drawImage +// (args are for source and destination). +var drawImageIOSFix = function drawImageIOSFix(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) { + var vertSquashRatio = detectVerticalSquash(img); + return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio); +}; + +// Based on MinifyJpeg +// Source: http://www.perry.cz/files/ExifRestorer.js +// http://elicon.blog57.fc2.com/blog-entry-206.html + +var ExifRestore = function () { + function ExifRestore() { + _classCallCheck(this, ExifRestore); + } + + _createClass(ExifRestore, null, [{ + key: "initClass", + value: function initClass() { + this.KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + } + }, { + key: "encode64", + value: function encode64(input) { + var output = ''; + var chr1 = undefined; + var chr2 = undefined; + var chr3 = ''; + var enc1 = undefined; + var enc2 = undefined; + var enc3 = undefined; + var enc4 = ''; + var i = 0; + while (true) { + chr1 = input[i++]; + chr2 = input[i++]; + chr3 = input[i++]; + enc1 = chr1 >> 2; + enc2 = (chr1 & 3) << 4 | chr2 >> 4; + enc3 = (chr2 & 15) << 2 | chr3 >> 6; + enc4 = chr3 & 63; + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4); + chr1 = chr2 = chr3 = ''; + enc1 = enc2 = enc3 = enc4 = ''; + if (!(i < input.length)) { + break; + } + } + return output; + } + }, { + key: "restore", + value: function restore(origFileBase64, resizedFileBase64) { + if (!origFileBase64.match('data:image/jpeg;base64,')) { + return resizedFileBase64; + } + var rawImage = this.decode64(origFileBase64.replace('data:image/jpeg;base64,', '')); + var segments = this.slice2Segments(rawImage); + var image = this.exifManipulation(resizedFileBase64, segments); + return "data:image/jpeg;base64," + this.encode64(image); + } + }, { + key: "exifManipulation", + value: function exifManipulation(resizedFileBase64, segments) { + var exifArray = this.getExifArray(segments); + var newImageArray = this.insertExif(resizedFileBase64, exifArray); + var aBuffer = new Uint8Array(newImageArray); + return aBuffer; + } + }, { + key: "getExifArray", + value: function getExifArray(segments) { + var seg = undefined; + var x = 0; + while (x < segments.length) { + seg = segments[x]; + if (seg[0] === 255 & seg[1] === 225) { + return seg; + } + x++; + } + return []; + } + }, { + key: "insertExif", + value: function insertExif(resizedFileBase64, exifArray) { + var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''); + var buf = this.decode64(imageData); + var separatePoint = buf.indexOf(255, 3); + var mae = buf.slice(0, separatePoint); + var ato = buf.slice(separatePoint); + var array = mae; + array = array.concat(exifArray); + array = array.concat(ato); + return array; + } + }, { + key: "slice2Segments", + value: function slice2Segments(rawImageArray) { + var head = 0; + var segments = []; + while (true) { + var length; + if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) { + break; + } + if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) { + head += 2; + } else { + length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]; + var endPoint = head + length + 2; + var seg = rawImageArray.slice(head, endPoint); + segments.push(seg); + head = endPoint; + } + if (head > rawImageArray.length) { + break; + } + } + return segments; + } + }, { + key: "decode64", + value: function decode64(input) { + var output = ''; + var chr1 = undefined; + var chr2 = undefined; + var chr3 = ''; + var enc1 = undefined; + var enc2 = undefined; + var enc3 = undefined; + var enc4 = ''; + var i = 0; + var buf = []; + // remove all characters that are not A-Z, a-z, 0-9, +, /, or = + var base64test = /[^A-Za-z0-9\+\/\=]/g; + if (base64test.exec(input)) { + console.warn('There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, \'+\', \'/\',and \'=\'\nExpect errors in decoding.'); + } + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ''); + while (true) { + enc1 = this.KEY_STR.indexOf(input.charAt(i++)); + enc2 = this.KEY_STR.indexOf(input.charAt(i++)); + enc3 = this.KEY_STR.indexOf(input.charAt(i++)); + enc4 = this.KEY_STR.indexOf(input.charAt(i++)); + chr1 = enc1 << 2 | enc2 >> 4; + chr2 = (enc2 & 15) << 4 | enc3 >> 2; + chr3 = (enc3 & 3) << 6 | enc4; + buf.push(chr1); + if (enc3 !== 64) { + buf.push(chr2); + } + if (enc4 !== 64) { + buf.push(chr3); + } + chr1 = chr2 = chr3 = ''; + enc1 = enc2 = enc3 = enc4 = ''; + if (!(i < input.length)) { + break; + } + } + return buf; + } + }]); + + return ExifRestore; +}(); + +ExifRestore.initClass(); + +/* + * contentloaded.js + * + * Author: Diego Perini (diego.perini at gmail.com) + * Summary: cross-browser wrapper for DOMContentLoaded + * Updated: 20101020 + * License: MIT + * Version: 1.2 + * + * URL: + * http://javascript.nwbox.com/ContentLoaded/ + * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE + */ + +// @win window reference +// @fn function reference +var contentLoaded = function contentLoaded(win, fn) { + var done = false; + var top = true; + var doc = win.document; + var root = doc.documentElement; + var add = doc.addEventListener ? "addEventListener" : "attachEvent"; + var rem = doc.addEventListener ? "removeEventListener" : "detachEvent"; + var pre = doc.addEventListener ? "" : "on"; + var init = function init(e) { + if (e.type === "readystatechange" && doc.readyState !== "complete") { + return; + } + (e.type === "load" ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) { + return fn.call(win, e.type || e); + } + }; + + var poll = function poll() { + try { + root.doScroll("left"); + } catch (e) { + setTimeout(poll, 50); + return; + } + return init("poll"); + }; + + if (doc.readyState !== "complete") { + if (doc.createEventObject && root.doScroll) { + try { + top = !win.frameElement; + } catch (error) {} + if (top) { + poll(); + } + } + doc[add](pre + "DOMContentLoaded", init, false); + doc[add](pre + "readystatechange", init, false); + return win[add](pre + "load", init, false); + } +}; + +// As a single function to be able to write tests. +Dropzone._autoDiscoverFunction = function () { + if (Dropzone.autoDiscover) { + return Dropzone.discover(); + } +}; +contentLoaded(window, Dropzone._autoDiscoverFunction); + +function __guard__(value, transform) { + return typeof value !== 'undefined' && value !== null ? transform(value) : undefined; +} +function __guardMethod__(obj, methodName, transform) { + if (typeof obj !== 'undefined' && obj !== null && typeof obj[methodName] === 'function') { + return transform(obj, methodName); + } else { + return undefined; + } +} diff --git a/templates/index.tmpl b/templates/index.tmpl index d9f034e..1a17730 100755 --- a/templates/index.tmpl +++ b/templates/index.tmpl @@ -24,6 +24,7 @@ {{ if and .CustomCSS .ReadPage }} {{ else }} + @@ -32,6 +33,7 @@ + {{ end }} {{ .Page }} @@ -130,12 +132,32 @@
{{ if .EditPage }} +
- + + + +
+ +
{{ end }} diff --git a/utils.go b/utils.go index 51f87cd..5f33e2e 100644 --- a/utils.go +++ b/utils.go @@ -196,8 +196,13 @@ func MarkdownToHtml(s string) string { func GithubMarkdownToHTML(s string) string { return string(github_flavored_markdown.Markdown([]byte(s))) } + func encodeToBase32(s string) string { - return base32.StdEncoding.EncodeToString([]byte(s)) + return encodeBytesToBase32([]byte(s)) +} + +func encodeBytesToBase32(s []byte) string { + return base32.StdEncoding.EncodeToString(s) } func decodeFromBase32(s string) (s2 string, err error) {