diff --git a/auto/gui.files.go b/auto/gui.files.go index 048636a2b..54ba7da4d 100644 --- a/auto/gui.files.go +++ b/auto/gui.files.go @@ -18,7 +18,7 @@ func init() { bs, _ = ioutil.ReadAll(gr) Assets["angular.min.js"] = bs - bs, _ = hex.DecodeString("1f8b080000096e8800ffd41bdb72db36f63d5f81aa69492532e574767676a2389dd64d3bdeb44d26aefbe2d1034542126b0ae082506c8dab7fdf830b49800029da8e3759cdb4b1808373c7b900d0f4d95f659e118e168c5e9798bd449c6df1042594f08c6c71f5bdc8b7a5f84f7d47cfa64fa6cf56395dc4397afa122de3bc04a098acb679ccf47701f424d8c21f256759c283d993271f6386ca1d49f83a232b7452ad883634dde6380ceab960822ee7e3995cb065f9220634272860b894786ab84830ca689e631606e7d5e829673960586ee17b46090a9f96092d80c3a76bce8b31ba7d82e02370170c7ffc29e602f9f1ac1e5d61feee2d0c09599b51413c665c712e45044ec4a4c22e582158122c01e0763f6b4d2eb3953bbed99dfd24240bac5142532c905cce3d48ce8810d4624fcf63c628f3ac2b31266fc49c4b09348f73972d860b5a2192e3d3293a073392558916784919460b4af312e5945ec108e798d9143997c080428edf66e94b14fc9a951c134004d6010913f0156935f49e514e139a2305817e48535077894b00e4bb02fc30e0f886c3376d05e588fb8981fcb7f8e61c93f4eda2280df4efb67c4585cd3e0833ff9a6d328ec2b73f16e5b8414db69b0566bdc83f00ba989c1190f3639c9f1b04d40caaa6507867ccda71fcc8f5e4fdf1bf8f590cfb23ff80ffb305205337a03104fa819524952a6a4086e30724a76bd8c8b8a57881fce72cc748cd2afd0fd6bc41e01719677e20e40d8917394e0d1a6a0ac11c85bd8e1bbcc2397bb9fe95261d38e5cc7d509e8bf11f551c35fd5b0ca366dc4467adbf784fdebbeca8112426fd8be776145a6db373ffe6d37bca54dfc5d94336dc852da8c0f6c396af31a48e249681f7c212f920c2f771595e5396f62335a034e2a219f121af3454e70388efe7db24c138c56958a503f1c99628fc4a467f73546a370cbe269803952b194983b1089d711e06eb2cc5c1786641bb09447cf6169d269df86835b3fd947c49c9a6b77785ff39867de94adecd11c37ccb4897247753d8ed224eae52460b301cd003b382d9aef06e416396eada61dfa1cf41028ae4794a3745cc70184fd0a22da6701aba4471f47bbcc1e8ab13c8895b92e2654660e3a16fbf451a60e10568cb29306a54aff492b105d0e80f1dbd681b4f0eebe5aff5f22e3503184806e582a423fff4dbc9a2d3e068a82934af6b3433538f7505b0047f580ba5d76594494e9652111826aceab3e72898963b88261bb07529f6575986cde234e6719b5f7b23dacaa92a098911d810eb0db1c6aada09fddc69e495a39beb9abfcd5a27829ae64d9cac0d7c62dcf16aafd4b288fa5ec09f043080490203171fce84175202a14be28ac05e431563b027915f6a047347116da12c01bddc1a75ea604389fa97d06ba02eaa65a84fafc3f1c482e0294c8602e6a8aeaac7688a5e1c1f1fdb9059aae371f5318a7058eff5828c4071d114e9ad59bae5f5b4350f46456196a28ca02e2dcb902f26a3755cbebb2650891698f11d2c1bfbe0c5a7ea8e66ceecde19e16cd7814510bdccd2792ddc6f315f479bf8263c9ea07fa167ca1212e28cfcb8e3b8fc8372284d8e3c0d87032554cfd3b1cba145b9565c3769a80f87d0b6c03a89ef11e4f0648d42dca55a4729c74345f000bad6b0dce9f9498b9c8bc1763073811a6aed439f73da6d613b8a1ddaacaaa51bbc4fdb8da09fdc7ef6a4ddec4195cab7a515eddbf1cfc89d4e6882b8d49f2675f2092ec815ec71129809caa2e0a206db40df03bb5866e24ecce79c160550f66296070f5cc59840c4680f1939dfacaec0e5bf97c7f388d30b20c04ec134906b9eab09b0cba2e42c7c319ed972e8e52768241a5ca8a946e8efbf51337a96e678d496454d839b8d50386ab814c71def314b2093c42bac0df31c8dbe198fbcd26a951802b5737b414f73289a1fdfdea2e63fcac8923e82c525eeeb981151257f2ab35bb60b32b0523f7dbd2f83aeaaadc1552a3fe84757b06c13b39d175d974e6de3dacef2e81686fcde25ba47d9eacc50660a89ff781856cba045c2412a80803ce5f51db1e11489a90fc0e061d6d6adcc8309cef210a8f8a3a5682f3cd152761d4bab7312cc8ae80f709eaca917e8127c6e7ba000f4751a623c1265658e2559a143d0842f9b56de7246905048d04a55088b33daee653a6aa1506c9b3659c84cdf8cdb187b2251f053566ad9eb08ed51eb592244fa7f502abdbaab3e753f7517a56da0c62cbbb5e546f02f565d6e901ca43337181ed49919165d958953aeffb1c634635269fa90ad2fb67fdf636f43e59f4d845610e8cd53dda2fc890f9a413063732a1dcdb836e96053437cc4ac04dc3efe1e533d790679f7cf6eda03ec2c0f83eea21d71e4e4e7c904e9e1c616b92a69a115fca73f05e234e3c62173c70151187c5d5d030d3dfc9387b6636f55137fc487497aafc95a87861650f4ae90568fd431b8dea09663b850e79c456591673c0c2642b2b830bab21b60a8d2eb4dc4218285e399a7d12b68e91ccb002950c7bfcfdffd1e95f2b22d5bee428b93f104ddae719c8283bd44b7c12925c00f3ffa038ab800541a17c0963a269ffe555212ec2dc23e8b8cc4a9f2a8ab319407c29dfab60e9fedb3eeae33ec724daf83c3cad04b03f7b4aef30ed4e3a3c29f0feda40aed9631d0a45ef13482121b9334bcdd4faadde1b2224880706f6ec02bbc3ab0c0ce71be544764ada066c53457de86b1a8bea4010f9487650a533d1cfd4533024e898296d52b65dc6b1fda7a8dd3d451eb417dde9a9c03c97447e20dd0dc0fd0a97ffbda4a6dc37c5a91a175c01cf74beda3e85cd8c8b346bfa0876f5cda1aa8de08985fa36596736c1e8a77652b52f9df578d039aae665e0c48fa5d3b5142b6f930ce42e411acc8b8993ca3837f5ed907ef39262bbe8689e7cf3b4eb324dc65366f93b2c707c8fe00f9db3a70ed7120eb7c8ea0dff26391437bbd589df2cba0324129257882b2d95d051db4133415e4d3bd03d504385fd0bb6736ae8908395d31d4cd81e3b26a97f5b8ac71ee21612bf7d4e5ab1dfc7b6e7daac58dc4eee1b4e6dc4e3ad567c1707c35a07152f71f80a963f329898b6db90edd44d81195a292321e1af7b0f70d1e5fc2aea17c8d59c567571d64761e9d917870201695c0c1537bbececa83bb3983f2a51d8cefe1d5a4652270cc99e3f664609f66087f49e6dd2eea9159de6b88227ca029d43d886b8bae7e09477f64f226befd70eea035921cc7ec4d75edd25b1a99aff12c3e2f6dae953dd0117a31976c1d4c2672dd547212f8b95c32684fd37ce7ba336c2293d59eac7dd059647b6dc676bfcb94b28685ff8b3c9ec7090e933a304edafdb0981b8f7b5a58c0d3d9067c803ae16e6d805ed1b401259480e2ec522a0ec2c9beaf2f309054a589f3b8c0a94d3c6b2da297d5f69abbef8aeed19ae82c2de87c9aa6c051f241ed7a947a8f76e0d30a224aa45e49d443e0827e8a12c9e2d929913415a74412ab1ca83a915ecedd39db8f8cc8ecba52bdef890ae519f163f1953d7e72a472da1345cb9f0d0c2154ad71ab9cfda566a4fd20ac9d27c447b5697e7eef5bef1d6c518c7aaf6e47740aac18e9adf3aa45a886ff4c759e9254ea5e3332a0db8984339619a79057da8dd91756c629efe88f5283f6e5276de2ab77f6f653b476b9c23aca1516791bd80feaad989d201e66c02fbfc5f5be9ed19700839ecfd8f706d6db995a7f0f7ef458dfd17b1f351aa159cf19adc00126b49aefc044fd93142f135d27df07cec6755b6e9d443ae70bee01bb0ed215e0d02eb242e6f48ddedde57179df1a794f5bbd191da4f5a978737177d5d71b495ada1c6bd12e71fde390d0667322df571e03a004ae09a738c936b03d2197e750a96e37e68f9ed26c95f152bcb14f2a0588a0267e5ce2bcc9d091e6d8ba935108aa6783cb9c5216ca3f73ba527fc40b497a2c5e02d6332f8eab125e506ebd3a041ea1d551983594a6add8dc9bbffad21132203140c4f66fbd2aeef5ea662223c5964f907c59e411514e479cfe9cdde034ac1568ad6a828e54b7cbd02223e2c27a383fed4b3d3928cd50bfbce97a2f748c3a1f1d292cafc139befb077a66fee3d42f12727ae2019df9a8f66be9bbb1789716a05fb2bbb03684a70730f3db30667ab97800f9b77ef2e6832346c1d8953f8835c1213fdb60f19bca2fc8cfe46b2ce39f1e6db6411fe26777e16c084b0f71b341bcf432f100ea578fe064e51a12f03d7dcc62defba0a083689c5fc7bbf2f7ea77818fefdfdee78b26fb5d1ca719136f463ee230a0b2067a938aaaa28f69533fea57d150dc9e0613b365174761fa67d7f530673129937c9b3a33b21a78d97e46ac2ef901f789fed320b137d0e20d90e3e22774af94c2c46bd0939178603a426475249f4d9e8cec4aef52e38cb2743e7afd6a2a57bed614b49afe0b0000ffff010000ffffed81752e583e0000") + bs, _ = hex.DecodeString("1f8b080000096e8800ffd41bdb72db36f63d5f81aa69492532e574767676a2389dd64d3bdeb44d26aefbe2d1034542126b0ae082506c8dab7fdf830b49800029da8e3759cdb4b1808373c7b900d0f4d95f659e118e168c5e9798bd449c6df1042594f08c6c71f5bdc8b7a5f84f7d47cfa64fa6cf56395dc4397afa122de3bc04a098acb679ccf47701f424d8c21f256759c283d993271f6386ca1d49f83a232b7452ad883634dde6380ceab960822ee7e3995cb065f9220634272860b894786ab84830ca689e631606e7d5e829673960586ee17b46090a9f96092d80c3a76bce8b31ba7d82e02370170c7ffc29e602f9f1ac1e5d61feee2d0c09599b51413c665c712e45044ec4a4c22e582158122c01e0763f6b4d2eb3953bbed99dfd24240bac5142532c905cce3d48ce8810d4624fcf63c628f3ac2b31266fc49c4b09348f73972d860b5a2192e3d3293a073392558916784919460b4af312e5945ec108e798d9143997c080428edf66e94b14fc9a951c134004d6010913f0156935f49e514e139a2305817e48535077894b00e4bb02fc30e0f886c3376d05e588fb8981fcb7f8e61c93f4eda2280df4efb67c4585cd3e0833ff9a6d328ec2b73f16e5b8414db69b0566bdc83f00ba989c1190f3639c9f1b04d40caaa6507867ccda71fcc8f5e4fdf1bf8f590cfb23ff80ffb305205337a03104fa819524952a6a4086e30724a76bd8c8b8a57881fce72cc748cd2afd0fd6bc41e01719677e20e40d8917394e0d1a6a0ac11c85bd8e1bbcc2397bb9fe95261d38e5cc7d509e8bf11f551c35fd5b0ca366dc4467adbf784fdebbeca8112426fd8be776145a6db373ffe6d37bca54dfc5d94336dc852da8c0f6c396af31a48e249681f7c212f920c2f771595e5396f62335a034e2a219f121af3454e70388efe7db24c138c56958a503f1c99628fc4a467f73546a370cbe269803952b194983b1089d711e06eb2cc5c1786641bb09447cf6169d269df86835b3fd947c49c9a6b77785ff39867de94adecd11c37ccb4897247753d8ed224eae52460b301cd003b382d9aef06e416396eada61dfa1cf41028ae4794a3745cc70184fd0a22da6701aba4471f47bbcc1e8ab13c8895b92e2654660e3a16fbf451a60e10568cb29306a54aff492b105d0e80f1dbd681b4f0eebe5aff5f22e3503184806e582a423fff4dbc9a2d3e068a82934af6b3433538f7505b0047f580ba5d76594494e9652111826aceab3e72898963b88261bb07529f6575986cde234e6719b5f7b23dacaa92a098911d810eb0db1c6aada09fddc69e495a39beb9abfcd5a27829ae64d9cac0d7c62dcf16aafd4b288fa5ec09f043080490203171fce84175202a14be28ac05e431563b027915f6a047347116da12c01bddc1a75ea604389fa97d06ba02eaa65a84fafc3f1c482e0294c8602e6a8aeaac7688a5e1c1f1fdb9059aae371f5318a7058eff5828c4071d114e9ad59bae5f5b4350f46456196a28ca02e2dcb902f26a3755cbebb2650891698f11d2c1bfbe0c5a7ea8e66ceecde19e16cd7814510bdccd2792ddc6f315f479bf8263c9ea07fa167ca1212e28cfcb8e3b8fc8372284d8e3c0d87032554cfd3b1cba145b9565c3769a80f87d0b6c03a89ef11e4f0648d42dca55a4729c74345f000bad6b0dce9f9498b9c8bc1763073811a6aed439f73da6d613b8a1ddaacaaa51bbc4fdb8da09fdc7ef6a4ddec4195cab7a515eddbf1cfc89d4e6882b8d49f2675f2092ec815ec71129809caa2e0a206db40df03bb5866e24ecce79c160550f66296070f5cc59840c4680f1939dfacaec0e5bf97c7f388d30b20c04ec134906b9eab09b0cba2e42c7c319ed972e8e52768241a5ca8a946e8efbf51337a96e678d496454d839b8d50386ab814c71def314b2093c42bac0df31c8dbe198fbcd26a951802b5737b414f73289a1fdfdea2e63fcac8923e82c525ee543497ec9359dd325d908191fac9eb6d1974156d0dae52b9413fba82659b98edbce8ba546adbd6f695473730a4f72ed13dca564786325148fcc7c3b05a062d120e520104a429afeb88fda6484c7d00060fb3b66e651a4c70968740c51f2c4577e10996b2e9585a8d936056047f80f3244dbd4057e073db0305a0afd110e391a82a732cc90a1d82267cc9b4f296338284428256a642581cd1762fd3410b8562dbb4c94262fa66dcc6d81388829fb252cb5e07688f5acf1221d2ff8352e9d55df5a9dba9bb286d032566d9ad2d37807fb1ea7283e4209db9c1f0a0ceccb0e8aa4c1c72fd8f35a619934ad3676c7db1fdfb1e7b1b2aff6c22b482406f9eea16e54f7cd00c82199b53e968c6ad49079b1ae2236625e0f6f1f798eac933c8bb7f76d31e606779167417ed8813273f4f26480f37b6c855450b9de03ffd2910a71937ce983bce87c2e0ebea1668e8d99f3cb31d7bab9af8233e4cd27b4bd63a33b480a27785b47aa44ec1f506b51cc3853ae72c2a8b3ce361301192c585d194dd0043955e6f220e112c1ccf3c7d5e414be7540648813afe7dfeeef7a894776dd972175a9c8c27e8768de3141cec25ba0d4e29017ef8d11f50c405a0d2b800b6d429f9f4af9292606f11f65964240e95475d7da13c0feed4b775f66c1f75771d61976b7a1d1c56865e1ab887759d57a01e1f15fe7c68275568b78c8126f58aa71194d898a4e1ed7e52ed0e97154102847b73035ee1d58105768ef3a53a216b05352ba6b9f2368c45f51d0d78a03c2b5398eae1e82f9a11704a14b4ac5e29e35efbd0d66b9ca68e5a0feaf3d6e41c48a63b126f80e67e804efddbd7566a1be6d38a0cad03e6b85f6a1f45e7be461e35fa053d7ce1d2d640f544c0fc1a2db39c63f34cbc2b5b91caffbe6a1cd07435f35e40d2efda8912b2cd877114224f6045c6cde4111dfcf3ca3e77cf3159f1354c3c7fde719825e12eb3799b943d3e40f607c8dfd6816b8f0359e77304fd961f8b1cdaebc5ea905f0695094a29c11394cdee2ae8a09da0a9209fee1da826c0f982de3db3714d44c8e98aa12e0e1c9755bbacc7658d730f095bb9a72e5fede0df73e9532d6e2476cfa635e776d2a93e0b86e3ab018d93bafe004c1d9b4f495c6ccb75e826c28ea8149594f1d0b886bd6ff0f812760de56bcc2a3ebbea20b3f3e88cc48303b1a8040e1edaf375561edccd19942fed607c0faf262d138163ce1cb72703fb3443f84b32ef76518fccf25a4314e1034da1ae415c5b74f54b38fa239317f1ed777307ad91e438666faa5b97ded2c87c8c67f1796973adec818ed08bb964eb603291eba69293c0cfe592417b9ae63bd79d611399acf664ed83ce22db6b33b6fb5da694352cfc5fe4f13c4e7098d48171d2ee87c5dc78dcd3c2029ece36e003d409776b03f48aa60d28a1041467975271104ef67d7d8181a42a4d9cb7054e6de2596b11bdacb6d7dc7d56748fd644676941e7d334058e920f6ad7a3d47bb4039f56105122f54aa2de0117f453944816cf4e89a4a938259258e540d589f472eeced97e644466d795ea7d4f5428cf881f8bafecf1932395d39e285afe6c6008a16a8d5be5ec2f3523edf760ed3c213eaa4df3f37bdf7aef608b62d47b753ba25360c5486f9d572d4235fc67aaf394a452f79a9101dd4e249cb1cc3885bcd26eccbeb0324e79477f941ab42f3f69135f3db3b75fa2b5cb15d651aeb0c8dbc07e504fc5ec04f130037ef92daef7f18cbe0418f47ac6be37b09eced4fa7bf09bc7fa8edefba6d108cd7ace68050e30a1d57c0726ea5fa47899e83af93e7036aedb72eb24d2395f700fd87590ae008776911532a76ff4ee2e8fcbfbd6c87bdaeac9e820ad4fc59b8bbbabbede48d2d2e6588b7689ebdf8684369b13f9bcf2180025704d38c549b681ed09b93c874a75bb317ff39466ab8c97e2897d5229400435f1db12e74d868e34c7d69d8c4250bd1a5ce694b250fe99d395fa235e48d263f110b09e79715c95f08272ebd121f008ad8ec2aca1346dc5e6defcd1978e9001890122b67fea5571af5737131929b67c82e4c3228f88723ae2f4e7ec06a761ad406b551374a4ba5d8616191117d6c3f9695feac9416986fae54dd77ba163d4f9e84861790dcef1dd3fd033f31fa77e9190d3130fe8cc47b55f4bdf8dc5b3b400fd92dd85b5213c3d8099df8631d3cbc503c8bff593371f1c310ac6aefc41ac090ef9d9068b9f547e417e265f6319fff468b30dfa103fbb0b6743587a889b0de2a597890750bf7a04272bd79080efe96316f3de07051d44e3fc3ade95bf573f0b7c7cfff63e5f34d9efe238cd987833f21187019535d09b5454157d4c9bfa513f8a86e2f63498982dbb380ad3bfbaae87398b4999e4dbd49991d5c0cbf62b6275c90fb84ff49f0689bd81166f801c17bfa07ba514265e839e8cc403d31122ab23f96cf26464577a971a6794a5f3d1eb5753b9f2b5a6a0d5f45f000000ffff010000ffffe046b7fd573e0000") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) Assets["app.js"] = bs @@ -63,7 +63,7 @@ func init() { bs, _ = ioutil.ReadAll(gr) Assets["favicon.png"] = bs - bs, _ = hex.DecodeString("1f8b080000096e8800ffec5c6f73db36937f9f4f8170e6d264ce946c27e93de3c89a49ecf4a9a76d928993ebdd74fa022221113508b00068474d7d9ffd7601fe17255bb294b8d3beb04512c002f861b1fb03b8e0e8e1e9db930ffffbee35496c2ac60f46f8430495b3e380c980c85948b3ec38307319d984cb598079188dc70f0819a5cc521225541b668f83dc4ec37f057542626d16b2df737e791cfc4ff8f16578a2d28c5a3e112c20919296492875f6fa98c533d6282769ca8e834bceae32a56d23eb158f6d721cb34b1eb1d0ddec112eb9e5548426a2821d1f0cf61704c5cc449a67962bd990b5908de636517a2187e0f2826826000248b6516e098f5052a2d9f43898d24bbc1d640e192c60b9156c5ce1351afa07952c5f6ea2943556d36c181933acee0629970378121455dab9602661ccfac6b87b62e719b4d7b24f160bbb1442262a9e93cfee92908cc631d41d4e94b52a3d22ffb59f7d7a51a44da17fe194a65ccc8f48f03d1397ccf28892372c67c11ea91eec91971a80dd23864a131aa6f9d48bb87ee07e92833d921cc2df53f87b067fcfe1efdbaa0977aea61071c5f82cb147e4e9fe7eab7a3a985859d5866084318b94a638ce47442ac95af973f19fc9f32a7f4af58ccbd0aaec881c0c9eb3b49577e0c4a54a2a93d188f5f7a94aee14a5a0de21a844cca461f1d8bac962f51895753115876d79ea14f462796a25395e29b937b5921c57bd9b281d33ed315980cf5546ac868b36e854f019e01dc19461ba0d855033d541fc88ecbf68eb68e389ab397c5eab6aa60cf7c309b30106f6b28375a6d54c3363aa4a9242590e0f6a21c550975381cb0474cc2e11545d8513aa2bb1306f59d827db2984e17f30d0a2c3f27129345242d00cd00e2fb941a357c98bb9c9049db7616e97b955712eb1651dd0b9b1a154e1241782d94617e0b1331f219a0f5f75a720e887c853b9ac9e7022547451c10a983a130cd6a59c3e15d8da437550274c687431d32a9731d6a2340ce96cf2f8f0e9b77be4f0d93efe3b78f2a2ad889ac63c3730f31b0a51ea0c8c0179d61d63181b78dc18874ebf60b6ca414cc1e277cc80605368ed7e6d075add3bd8af1f3755de75f2c5cd589500833d8e84a217fd6a401ef214dd1d95b66efe68e8860c5ceed0fbdc072367e75114a89e061561fa38382f9dcd89d5023c98a0c61c07657d855f7a1886e483ca082a7618fa67925e56b9e925a6f81f3402e565cca63417e086a136e6f2f19933b285e319c5bc12828da2d07d5da4a1cb02d0db7584134d651c8c473c9d9529682a026274843e2fc4bbf0e0f05fceab12eff583a7874131bfddf5989cd72e162ba96a9ce430d365e125fd4d8509fa0cf82b3be5ae4d4a32982c5e69cb5e4382233f91e0d10550a198db73662dd4661e3f81b637bb3513f32c411640aa2b181ee00345c348597234f4cd29801b0272cead0fa1523f204bb0f4f97104bfe3da58188aab3da2a4981320255792f029912c02b345f5fc0579cf8ca5da922baa25545b8e76211e3ac581803c04f9533e3b930863850f08ae87aed51811a6318c4995da4e876e3241dcffb0a8b691b3276f88faec728d92a7ed14c7978271d98b378cc52c8609f0745c21b65c2c4e8f56cd90291b7f4818f1fdcd3d4120093564c21818057a09d616c60566a12534022f432d8b07b57a913447c88be658556542a708b85fb5450f46c3acd5c69b1b8dceb83167d6d063d0dda63ad77adc54dea2e9b7d25b20a7903da975b71a0675d556dfbeee4482513de59f829ea16a3f68dd366e8acb058567b35c807902fdeca8734b714b7958f03d73f441e9b9737ee431da34b4f44f6a09bd4afeed2d74bc348a77d6f1a28d9c99bb68782e2a438a7e3e97ce6dc44e0934cb18b5a8059902ef44f0d77404b8b549f751c778b7397130fefc19250d4eb96611a27c7dddb6c35d3185dd7185cee42538d1b8526741270c579d138416d69e38198a3c47a4a8a8b85f514d07858a042d74766987bb8857dc21206ec48e8386569d9df60a5e025c0e4685f4cd384b6b4f711b7148602af4cf4e97e3e14a76f569837ee25236d14af23fbce9047b60f3450ddaa4ef914a535838acdf7f6fddfccc87969ee0e5e3029127253ae7aea1d5e30d911a0dfb35654305fab750132afc2cf4f84e39acf1b702e70c64b38d9429553113bf1448fd3a98b9467e870d237f122aaee8dcbcc9d309d3d7d7bebd7b6449a15773eb0a4db8a468145eed443d7f54d1ae404c54ba150c0536714d085d99ed20b865b5fd286b3300c06d0f6e58a2e47118038b85b54abc0de02510c63571c722bb55dced58cb4d3cc588165b8eddf50c9a78671c6fc30b3326232e6a5af81a048c86746573d6d4cdd130170bb464216737d74ee875633dd8cfb49b58d2387650de0a46819eb304f1651c3768eaaee975931cbf01fd6fd062d7d57bc48bb179eb12e2366ac9f3f13bc63429253ddf80314b287b329d216956b0d4d34e160ef316b833ca7e4353f6b8a864053bf922bcd629046832ee7d6ec558e1bb8e8dac3902021343df02192763530ae17a7c0fb9addf63f438785e5b0351e25330db3b22b4658a705af870a2a965f7851b801809eb53185bf34b01d700471ebd3e97930c3d7ecaace6d1f535dced44d33e66bb8025cf76028acaed7650d9b276b9e97ac9b4a9779eef86e2a6eb6e04ecbfd9ceccd33d248a087dd5ddbf1e575c20061f126e1c31b83b2fb020cac1b36b56f088a5267bf175b8c149ae357832f2fee54f24b75c14ce723bb330d968129ab9b12c1dc04f73c5862ddc89052f113879f7b18900797cb04fcce2d06f04043517e62e584459fe8e697c0fdf59f7c2ad04baa0a9383ab8befe0fecc47d30e82dba80cb104bc576a0dc026df80ad4600710dc81227c651a50bc2c28541bfafa524a95cb88bdfd813c3c26b984852697acf10661d9462b2d0a12c3f4e5c22ec066e8a2894d94961b727b9347f8ae3658d5cb60fcd605126c5441f10aa57ad5bba482e9f4a61afe612f5f9dbdaca8e46bec74956467839d2ecfb8bec01e97bff61b5dc3f61b637cf45a6ba54d7f5404c3b41f81493d7e32104cce6c42c664ff3e8647bc519647ec4e61114d4e0b1d473edbe83f8e714a850067004f071f78cac01dc0646347c1f747697a0416ecfafa0846d8e5229f3f4f3567321673bf4f86851cd48ec4ee3e24622d4d765ae615017bfaf6872f1bdbd0d2d02ad0a70acbc2c7af5cbce2eda2b5caf08fe2161ac9e222e091243c8e990c3f99db856b659d582db4d5c8078a95776b281b8b0f6c5a51a271e923511ac08089033bddaec16d1416b61b23c68f86008e8954ae0d1b5461d403c9ec30189fe71906c99121f94ee93cf576b969389756510261d26665066a9b719be49341a4d26144459a0cab4a879ac1a01b7cd3f523e8bd8125907fb046bd6bd476c52f78303e55518e1b876e85b1eb0e726372ecdeab1ca3d3765a170c1e8c2910b113e707da75d5beae2f2acebdb160f64ae90b6fa148aa62e076e5c44095e631b4d0e771f3bab20b3eeb94c6ac6706b8c430e654a859af65f7198a33014bacbbcf83161be630150cf4d3fdaf42599aa62279d62e5698f3b6d9b9c9b9b24f90983a0d090d9f2d21a227d5369ff7792d8b953c5b62b0fafab6e03e4659bbaa3a58ce30961a8c929b30824bb03da230689c6946b82194645a4d044bc915280a99834690338c1c87a123f5b6e4a025fc3d2c41e620fb51c284e0ad5d909663b9c1eeb60cb08f1073a16d2ec4af579f7495e13e68139753b5035dea46fc75a02f11f822ca031a52633e20ef9cb1258912f1b6c7de6d27e3f260a93129d70eeb0fbd17188aede8401bba550c0816fd069a8beb2168894979252a2054731a7aab0d0b309d431f1e59a074e6451ff341cd02b284c1c5b07c4424603c5e7f025eb830174aa5ab197e53393aa26e2509175c3da236d0b3a9d26911b68e97dd99d19080c9219e4fc87af6715d7022e4f03bbf18f6e7b4e7ec143c18a62d94e032c378e262f5bdd069e7aabca456fd45487fd038e0e538ab0b5681e1f59b905877f1b606e7acab6ba105cd25cd12ccaf604211fc875e1c5f0a2d8847b2d7b3aead3922ccc9cc9f74085c88b5f4b090082c0e98ff291ef7f0bbe48c04a5828082fa59a27c827bb5ee8a7623a77bd7d59b8c1ac5882edc575f3d6099a011436383672abe57b0de39f77b467ec450cac6e3457d5059ff68f5027aee23fba5b178f24a4d49a17425a0112cb0c17116afac77855d1112801cf16579b9068af11c60e39183054c129e428bfb34991c1f93748e1302a1ae2bdd14efaaade756af89fb6ba42304dfde53203319c5bdd978f58b1b9e1de1aaa4dceca89a8fd46765c1029eb220b0a68c6967b5680e8b37207811718b21d0c239ea000e7c21fe16233e1aa2ac8585f672cbde96f773c224f127ae80b8e141079ca57be482b10cb530e530bd6d422d19b1748cafc25c86d110eefca189896b2dc0d79aeb8683225ba506048d46a9d6ae7785082002479dcd0acd30d26feead12dedd72fddde7297a36176e75da22d33ca57adedc48c0e323e59ed8395cf77ad3354e24f5bbeff109baf655b2fb8d3d79f48894837ccec434b8a10d6ebde24f91e049896647618a315b75f5d4dd2d36687d0a9ea99b6918e6fa8786dd9a8635430ab742c69609bc0f940c03589109b50e66ace3a18aed16d3f151bdacada86c03aff4de871aafcf01b4dd23b9e4bfe76014416b2c9f7298a253bfa86e44c00fc84f85c5c5e706f8061a5d2a444514d0b0ee8c276043de517c9bdf18087cb0c650fcdff0b41e8c126e277453c0abc3496be28e95a2376e435c7a3117a58f0c01e4313d203f734019808f34735c814f094c9a5831e3ce143254a1ade2dedcc24d587431519f7adebc8d7a816f80eff1ab242cc1f03d98bfb7520084042f095e2fd6b564947bfab81d4a8fba5cc509f7d7dd8752378ce7c6d8deadc168c06346a01dae2217755786dc05f8eea415f9f3e4fafa0e082f3526ae05fed02a360215dc245433cfbb1a7a8e7b735f835ed64de82399d8f09695c7eda21cbf9580339537662a779d9b31c73627cc5ee1415f6ffe9072ce09763ac2ad25c3247e62e212782a54e3382bb0ee2881494b232be6556934a45ec2fde19de5a983fbc73befcc33cbae6d8b679627f097904c5324ff5d49661ff36b7cb5e08b71bee6fbf5bef49e93287dd91a4ea469f08b5146ab520d78af5d6f4620f98c031c04dca4f806e9c637e4cf3fc9428a74d176df2c8981697aafcf9fcbc2789ed9c5f015f7ee5b55b8c25dea742ab7837adb11b48a26d559f11e3337fc94fb7ec1e06de643c26b99bf2ee54d3daab064c89a7eb117d1895262356afd69842ce0b60a9b156e7ab3ee2ff5c92bb0e977d7bd0f77a1f6b39c9fef4ef37bd33268da95d2f15f785efcfbe3d9df754eacd3f55dce871bb9e797e65ecd8f017d79fe756bfa8397feeb87fee34a40bcf03b2aee3383bff9f83c973aee66fcedf79ce9797838d81f3cbd3977fd35c3dfba1f335c598e66592703f415bf5b871fbc72dfa3fc7f000000ffff010000ffffc1d333b8a0520000") + bs, _ = hex.DecodeString("1f8b080000096e8800ffec5c5173dbb6b27ecfaf403873d364ae29d94ed2db7164cd2476da7ada269938b93d673a7d804848440d022c00da515d9fdf7e76019222294a96642971a77d484c12c002f876b1fb015c6af0f0f4edc9877fbf7b4d129b8ae18301fe2182cac971c06440e424a459761c98a98c6cc2e524c03a8cc6c307840c5266298912aa0db3c7416ec7e137c1ac20b1360bd9ef39bf3c0efe157e7c199ea834a3968f040b48a4a465125a9dbd3e66f184d5da499ab2e3e092b3ab4c695bab7ac5639b1cc7ec92472c74377b844b6e3915a189a860c707bdfd3941313391e699e54ad664cd55a3b94d949eab21b8bc209a0980008a6d945bc223949468363e0ec6f4126f7b9943061b586e051b56780dfafe4125cbb71b29658dd534eb47c6f4abbb5eca650f9e044597762a984918b37e30ee9ed86906e3b5ec93c5c6ae8490918aa7e4da5d1292d13886bec391b256a547e4fff6b34f2f8ab231cc2f1cd3948be91109be67e292591e51f286e52cd823d5833df25203b07bc4506942c3341f7b11370fdc9fe4608f2487f0ef29fc7b06ff9ec3bfafab21dcb99b42c415e393c41e91a7fbfb8dee696f6465d51b8211c62c529aa29e8f88549235eae7e27f93e755fd94ea0997a155d91139e83d6769a36ecf894b955426a311eb9e5355dc6a4ac1bc4330899849c3e2a1758bc5ea211aeb7c29aa6d71e918ec62716925395e2ab9b3b4921c57b31b291d33ed319983cf7546ac868b26e854f009e01dc19261ba09855013d542fc88ecbf68da68ed89eb397c3e33d54c19eed509ab01147bd9c23ad36aa29931552749612c8707332185aacba5c0650236661708aaaec211d5955858b72cec92ed0cc2f03f1858d161f9b8141a29216806688797dca0d3abe4c5dc64824e9b3037dbacd49c4b1c590b746e6c285538ca8560b6360578ecdc4788eec377dd6a08f621f2542eea271c09155d54b002a6ce05837729974f05b6f6501dcc0a4634ba986895cb187b511a543a193d3e7cfaf51e397cb68fff1d3c79d134444d639e1b58f93583286d0674409eb5750cba81c7353db4e605ab55f6620a1ebfe506041bc368f7677ea031bd83fdd9e3bac9bb49beb81dab1260f0c79150f4a2db0cc8439e62b8a3d2ce863fe83b9541c8edfb98fb60e0fc3c8a02d3d360224c1f07e765b039b15a400413d498e3a0ecaf884b0fc3907c501941c30e43ff4cd2cbaa36bdc412ff079d407919b331cd058461e88db97a7ce29c6c11780631af84e0a0284c5f176518b200f4661fe148531907c3014f276509ba8a80181d61cc0bf12e3c38fcc64555e2a37ef0f43028d6b7bb1e92f35988c54eaa1e4739ac745944497f5361823103fe959372d72625192c166fb4e5aca1c0919f48f0e802a850cced39b3167a338f9fc0d8ebd39a886996200b20d515a807f840313052b61cf4fd700ae0fa809c0beb7de8d42b640196be3e6af05bae8d05555ced1125c5940029b992848f896411b82daaa72fc87b662cd5965c512da1db52db857898140702f210e48ff9e44c228c153e2078a6bac6604498c6a093aab4590ed36482b8ffc3a2db5acd8eba21dab3ab35489e364b1c5f0a86e52cde3016b31816c0d36185d862b1b83c1a3d43a56cf82161c4cf37f7048124d4901163e014e825785bd00bac424b680451865a16f766e645d21c212f86635555098322e07ed514dd1bf4b3c6186f1f3406e3da9a59c38ec176ebe63cb3e3baf116435fc96e819c42f56466bb951ad455d37cbba6130946f5987f0a3a54d57cd0b8addd14977306cf26b900f704f6d932e786e196f2b0e17be6e883d25317fcc863f469e8e99fcc24741af9d72bd878e914ef6ce3c518393377b1f05c548e14e37c2e5dd8889d116896316ad10a3205d189e05fd312e0f626ed472de7dde4c4c1f0fa1a25f54eb96611a27c73d3f4c36d3185df4955ccc42faee9d9e9af3d2e2f219cc695610b3a62b8ff1c21c8b00bc565717ddddd68498f2d402a3e3437ef85736f835fd1888038e51d0735033b3bed14bc00c31cfc0be95a7c96ce82c62ae290cb548a383b5d8c876bd936ad0de689bbda442bc9fff05e145c83cde78d6993b9472a4d610fb1fefcbda3f34e00467a82978f0b449e94e89cbb81568f37446ad0efb6940d0de83ba14654f805e9f11d73d8ee6f05ce09c8661b19536bad4ddc20bfc581913f091557746adee4e988e99b1b3fde3db2a0d1aba9758d465c52f40faf76629e3faa685720262add0a860287b82684aecd7610dcb2d97e94333700c06d0f6ed8ade4711803a1856d4bbc0de02570c73571c726bb35dced78cb4d22c58016a78fedad0dba78e71c57a188199311173386f81a040cfa74e970d6b4cd413f17730c65ae66bbd64e98766d6bd84dbaeb58d2387650ae04a3c0c85982f8328e6b8c75d74cbbce93df80fdd718b29bea3da2c838bc75b97113b5e4f9f01d639a94929e6f409e25b43d194f903f2bd8f569270bd5bc051a8db2dfd0943d2e3a59c24e3e0baf750601968cc7a05b7156f8da63236f8e80c0c2d02b20e3646c4a21dc8cef21b7f5c78d1e07cf6b674094f814ccf68e086d99229c16319c686ad97de1062046c25615746b7e29e0eaa1e6fd8e729461c44f99d53cbab981bb9d58dac76c17b0e4d94e4051b9dd0e2a5bb62eb75c2f9936b343e8bba1b8e9be1b01fb7fb633f7740f8922425f4df7afc715e788c187841b470ceece0b2c8872f0ec9a153c62a9c95e7c196e70926b0d918cbc7ff913c92d1745b0dcce2a4c365a84666a2c4b7bf0a7be63c311eec48397089cbcfb5847803c3ed827665ef51b0141cd85b90b165196bf631a5fc9b7f6bd702b812e682a8e0e6e6efe0727711f1c7a832ee036c452b11d28b7401bbe0035d8010477a0085f980614ef0d0ad386b9be9452e532626f7f200f8f492e61a3c925abbd425874d04a8b86c4307d39770ab019bae86213a5e586dcdee411beb60d96cd3218be7539051b7550bc43a9defa2ee8603cbead877fd8cb17672f4b3af912275d25d9d9e0a4cb33aecf70c6e5affd4157bff9f2181fbdd65a69d39d20c1b0ec4760528f9ff40493139b9021d9bf8f99126f94e511bb5386449dd3c2c491cfd6e68f3a4ea910100ce069ef034f198403586cec28f8fe284d8fc083dddc1c81865d2d727d3dd69cc9584cfd39193672503b12bbfbec88b52cd9599937049ce9db1f3e6f9a43c342ab9c9f2a430b1fbf72a98bab256e959920c52d0c92c545ee2349781c33197e32ab656e65adb42df4d5c8078a9d774395b5cd070ead6851bbf449293560c0c5819f6ef6e00e0a0bdf8dc9e3477d00c7442ad786f5aa8cea9e64b61f0ccff30cf3e5489f7cab749e7abf5c779c0bbb28813069bd3303bd4db84df2512f52693fa2224dfa55a77dcd40e906df74fd08766f600be41facd1ef1abd5df10b1e0c4f5594e3c1a1db61ec7a82dc981ca7f72ac744b59df605ca039d02113b7171a0d9d72cd67525c8b93716cc5e297de13d1449550cdcae5c1868d23c8611fa3a6e5d577ec1571dd39875ac005718c69c0a35e9f4ecbe42f179c002efeeeba0c786354c0503fb74ff57b92c7557913c6b362bdc79d3eddc165cd927284c9d8584864f1610d193ea98cfc7bc86c74a9e2d70585d739b0b1f83acd9d52c6fce30961a4c981b31825bb03da2307f9c6946b82194645a8d044bc915180a99824590334c2207d591d9b164af21fc3d6c41a620fb51c284e08d53904660b9c5ef361cb04f1673596e2edbafd39e7455e13e58139763b5035b6a27ffb5a02f11f82cc6031632c3bc47de39674b1225e26debde1d27e3f660a13329f70eebabde0b0cc5766ca009dd3206049b7e03c3c5fd108cc4a4bc121510aa390dbdd7860d98ce610e8f2c503af3a28bf9a0650159c23c63d83e2212a08fd79f8017cead85d2e8660cbf6e1c2d512b49c20d5787a80dec6cac745a64b0e3657b65d4246071889f2a641de7b82e3b116af8935f4cfb73d673760a110ccbe65a7099616a71b1fb9e9bb40b555e52a3ff22bb3fa87debe538ab4b5601f5fa4348ecbb785b836bd6f5353782fa966601e657b0a008fe87511c5f0acd8947b2d7b1af9d7144589399ffe82170d9d6d2c34222f038e0fec7f8e5873f256724280d040cd4af12e50bdcab75d7b49d44ddb9afde446b1433baf05c7db9c232412386ce063faff85ec17ee7dc9f19798da1948df5457d5259b7b63a013df749fed258fc084b8d49617425a0116cb0217016afac77855d9112801cf16579b9068af11460e39183055c127e9016775932393e26e9141704423deb7453bcabb19e5bbd26eeaf918e107c7b4f81cc6414cf66e3e52f6e787684bb92f2b0a31a3e529fa50d0b78ca86c09a32a69dd7a2396cde80e045c46d86c00aa76803a8f842fc0a1a1ff451d6dc467bb1676fcafb396192f88faf80b8e1370fb84af7c80563195a61ca6179db845a3260e9105f85b90a833edcf9ef27466eb4005f63ad1b0e866c95ea11741aa559bbd9152280081cb50e2b34c34cbfa9f74a78b7e2febb2b52741c2eacf4e145a6794af5b47e90805f92946762e770dd194dd7f838a93b7c0f4f30b42f93ddedecc9a347a454f23913e3e09631b8fd8affa0043f9aa84f149618b3d5544fddddfc80d6a7e099ba9d8661ad7f68d8ca34ac9e52b81532b648e07da06498c08a4ca8f161c63a11aa386e31ad18d5c9da8ace36884aef7daaf1fa1c40db3d924bfe7b0e4e11acc6f23187253af69bea5a067c8ffc54785c7c6e806fa0d3a5425444011debce78020ee41dc5b7f93545e0833554f19ffee94c1925dc4ee8a68057df29ad893b768ad1b8097119c55c963e320490c7748ffccc0165003ed2cc71053e26b06862c58cfbbc90a1096d15f7fa116ec2a28b91fad4f1e66dd0097c0d7c8f5f25610186efc1fdbd950220247849f07abeaf055aee98e376283dda729527dcdd77174aed349e5b737bb706a38188198175b88e5cd65d997217e0bb9346e6cf939b9b3b20bcd099b811f8ef57711068e026a19a79de55b3733c9bfb12f47236842e9289036f78793c2ecaf1671370a5f2da4ae56e7213e6d8e688d92bfce6d7bb3fa49c5382938ef068c93089bf3671093c15ba719c15587794c0a2a59115d3aa353a522fe1fef0cef2ab83fbc73befcc33cba96d8b67961fe32f2099a628febb92cc2ee657fb0183cfc6f9eaefd7bbca3bbe44e9aa560b2275875f6819bd4aa5f04ebf5ecf40f2157ba8043ca4f80ae9c657e4cf3fc95c8974d9765f2dc881a947afebebb2317ecfec72f88a7bf7b355b8c35d1874aab08376db12b48c26cdaae23d56aec529f75306bdb7994f099fc9fc75216fea3085052aabc7c54e44474a89e5a87597113287db326c9684e9cda6bf30262fc1a63b5c773edc85d94f727ebe3bcbef2ccb6068574ac77fe175f1ddc7b3bfeb9a5867eabb5c0fb772cfcfcdbdeabf0bf4f9f9d7caf4072ffd0f21fadf5902e2853fa9e27e71f0379f9fe74a87ed8abffd9e333d0d0f7bfbbda7b7d79efdb0e16feddf355cda8e6659ab02cc157fc20e7ffbcafd34e57f010000ffff010000ffffb28c923fab520000") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) Assets["index.html"] = bs diff --git a/cmd/syncthing/config.go b/cmd/syncthing/config.go index a5a089835..7422b60c4 100644 --- a/cmd/syncthing/config.go +++ b/cmd/syncthing/config.go @@ -285,3 +285,13 @@ func ensureNodePresent(nodes []NodeConfiguration, myID string) []NodeConfigurati return nodes } + +func invalidateRepo(repoID string, err error) { + for i := range cfg.Repositories { + repo := &cfg.Repositories[i] + if repo.ID == repoID { + repo.Invalid = err.Error() + return + } + } +} diff --git a/cmd/syncthing/model.go b/cmd/syncthing/model.go index 4356998f7..bda17b36b 100644 --- a/cmd/syncthing/model.go +++ b/cmd/syncthing/model.go @@ -559,7 +559,7 @@ func (m *Model) ScanRepos() { } } -func (m *Model) ScanRepo(repo string) { +func (m *Model) ScanRepo(repo string) error { sup := &suppressor{threshold: int64(cfg.Options.MaxChangeKbps)} m.rmut.RLock() w := &scanner.Walker{ @@ -572,9 +572,13 @@ func (m *Model) ScanRepo(repo string) { } m.rmut.RUnlock() m.setState(repo, RepoScanning) - fs, _ := w.Walk() + fs, _, err := w.Walk() + if err != nil { + return err + } m.ReplaceLocal(repo, fs) m.setState(repo, RepoIdle) + return nil } func (m *Model) SaveIndexes(dir string) { diff --git a/cmd/syncthing/puller.go b/cmd/syncthing/puller.go index b95961d4b..20708c40d 100644 --- a/cmd/syncthing/puller.go +++ b/cmd/syncthing/puller.go @@ -173,7 +173,11 @@ func (p *puller) run() { if debugPull { dlog.Printf("%q: time for rescan", p.repo) } - p.model.ScanRepo(p.repo) + err := p.model.ScanRepo(p.repo) + if err != nil { + invalidateRepo(p.repo, err) + return + } default: } @@ -190,7 +194,11 @@ func (p *puller) runRO() { if debugPull { dlog.Printf("%q: time for rescan", p.repo) } - p.model.ScanRepo(p.repo) + err := p.model.ScanRepo(p.repo) + if err != nil { + invalidateRepo(p.repo, err) + return + } } } diff --git a/gui/app.js b/gui/app.js index cbef4afa1..8feec1e7e 100644 --- a/gui/app.js +++ b/gui/app.js @@ -142,7 +142,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) { } if ($scope.model[repo].invalid !== '') { - return 'text-warning'; + return 'text-danger'; } var state = '' + $scope.model[repo].state; diff --git a/gui/index.html b/gui/index.html index e36f30642..1b1e65d5d 100644 --- a/gui/index.html +++ b/gui/index.html @@ -134,7 +134,7 @@