<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8581670382435927721</id><updated>2024-08-29T23:59:26.706-07:00</updated><category term="JavaScript"/><category term="Flash as3.0"/><category term="ActionScript 3"/><category term="Flash"/><category term="FlashDeveloper"/><category term="css"/><category term="google map"/><category term="html5"/><category term="JQuery"/><category term="StarLing"/><category term="ios"/><category term="panorama"/><category term="vue.js"/><category term="Action Script 2"/><category term="Augment Reality"/><category term="Away3D"/><category term="Back-End"/><category term="Eront-End Developing"/><category term="FP"/><category term="Facebook modified"/><category term="LittleTolls"/><category term="MouseEvent.MOUSE_WHEEL"/><category term="Nape"/><category term="NotePad++"/><category term="OOP"/><category term="PhotoShop CS6"/><category term="Physical"/><category term="QR Code"/><category term="Quick Response Code"/><category term="SqlMethods"/><category term="Three.js"/><category term="User Experience"/><category term="Windows"/><category term="ar"/><category term="background-image"/><category term="bug"/><category term="c#"/><category term="click"/><category term="color random"/><category term="css3"/><category term="database"/><category term="draggable"/><category term="dynamic"/><category term="error"/><category term="es6"/><category term="exif"/><category term="exiftool"/><category term="express"/><category term="facebook"/><category term="firebase"/><category term="flash bug"/><category term="git"/><category term="google"/><category term="grunt"/><category term="gulp-sass"/><category term="import"/><category term="input"/><category term="input.type"/><category term="insert"/><category term="introduction"/><category term="json"/><category term="lambda"/><category term="line.app"/><category term="linq"/><category term="mobile"/><category term="modernizr"/><category term="nodejs"/><category term="not in"/><category term="nuxt"/><category term="offset"/><category term="online"/><category term="output style"/><category term="p2p"/><category term="prepros"/><category term="programming"/><category term="react.js"/><category term="safari bug"/><category term="scss"/><category term="sharing"/><category term="social"/><category term="spark"/><category term="spark ar bug"/><category term="sublime"/><category term="svg"/><category term="touch"/><category term="url"/><category term="visual effect"/><category term="vs code"/><category term="vue-cli"/><category term="vue-svg-loader-nuxt"/><category term="youtube"/><category term="不是目前內容的模型的一部分"/><category term="工具"/><category term="技巧"/><category term="新手錯誤"/><category term="案例分享"/><category term="臉書"/><category term="自動編號"/><category term="雷"/><title type='text'>LeoYeh interactive channel</title><subtitle type='html'>Hello World ! &#xa;I am happy to share some thing new for you. Please  type anything to me.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>121</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-770682532525762926</id><published>2021-06-27T02:33:00.001-07:00</published><updated>2021-06-27T08:34:19.075-07:00</updated><title type='text'>XSS 簡易攻擊手段</title><content type='html'>&lt;p&gt;最近在看 front-end 貼文看到一篇 &lt;a href=&quot;https://medium.com/cymetrics/intigritis-0521-xss-challenge-writeup-b859a65acc48&quot; target=&quot;_blank&quot;&gt;XSS 攻擊&lt;/a&gt;的介紹，覺得很有趣，&lt;br /&gt;讓我想起了多年前的一個&lt;a href=&quot;https://xss-game.appspot.com/&quot; target=&quot;_blank&quot;&gt;練習&lt;/a&gt;，順便整理一下有哪些我知道的攻擊方式與防範手段。&lt;br /&gt;&lt;br /&gt;XSS 是啥呢？&lt;br /&gt;XSS cross site script，簡單說就是因為後端信任了使用者的輸入資料，在有漏洞或是沒有過濾掉或者瀏覽器問題的文字下，使用者可能幫你填入邪惡的程式碼，導致網站出錯。&lt;br /&gt;所以在使用者輸入的部分要特別小心處理，可能是網址又或者只是個輸入框。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;舉例：一個 html tag 可能因為漏洞，被迫產生兩個 html&lt;/p&gt;&lt;blockquote style=&quot;border: none; margin: 0 0 0 40px; padding: 0px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;lt;h1&amp;gt;{{ user }}&amp;lt;h1/&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 多寫一個 html 截止與開始的 tag，在裡面其中多塞自己的程式。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;h1&amp;gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;lt;/h1&amp;gt;&amp;lt;script&amp;gt;document.body.innerHTML = &#39;&#39;;&amp;lt;/script&amp;gt;&amp;lt;h1&amp;gt;&lt;/span&gt;&amp;lt;/h1&amp;gt;&lt;/p&gt;&lt;p&gt;以下統整了XSS-Game 這個網站介紹的幾個簡單攻擊手法。&lt;br /&gt;1. 在前端可以讓 user 輸入 html 變且顯示，document.body.innerHTML = &#39;&amp;lt;h1&amp;gt;&#39; + {{ msg }} + &#39;&amp;lt;/h1&amp;gt;&#39;，像 {{ msg }} 就可能會被寫 &#39;&amp;lt;/h1&amp;gt;&amp;lt;alert&amp;gt;alert(&#39;hi&#39;);&amp;lt;/alert&amp;gt;&amp;lt;h1&amp;gt;&#39;&lt;br /&gt;2. 透過 html tag 上的屬性觸發，像是 img onError 寫入&lt;br /&gt;3. 使用者輸入要先過濾&lt;br /&gt;4. a tag 可以使用 javascript:[function] 使用 js&lt;br /&gt;5. 要正規化檢查使用者的輸入 decodeURIComponents 或是 toLowerCase() 再比對是必須的&lt;br /&gt;&lt;span style=&quot;background-color: #1a1a1a; color: #eeeeee; font-family: monospace; font-size: 3px; text-align: center; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;另一個 xss 的練習&lt;br /&gt;&lt;a href=&quot;http://prompt.ml/1&quot;&gt;http://prompt.ml/1&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/770682532525762926/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2021/06/xss.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/770682532525762926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/770682532525762926'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2021/06/xss.html' title='XSS 簡易攻擊手段'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-4930477875225003299</id><published>2021-01-18T20:29:00.002-08:00</published><updated>2021-01-18T20:29:47.248-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dynamic"/><category scheme="http://www.blogger.com/atom/ns#" term="es6"/><category scheme="http://www.blogger.com/atom/ns#" term="import"/><category scheme="http://www.blogger.com/atom/ns#" term="vue.js"/><title type='text'>dynamic import</title><content type='html'>&lt;p&gt;為了要處理相同 html 跟不同的 style，會用到判斷並動態載入 css modules 的，&lt;/p&gt;&lt;p&gt;但如果依照判斷後寫入 import &#39;XXX&#39; 則會發生&lt;br /&gt;&lt;span style=&quot;background-color: rgba(0, 0, 0, 0.85); color: #e8e8e8; font-family: Menlo, Consolas, monospace; font-size: large; white-space: pre-wrap;&quot;&gt;&#39;import&#39; and &#39;export&#39; may only appear at the top level&lt;/span&gt;&lt;/p&gt;&lt;p&gt;但 import 其實還可以 import(XXX) 這個就可以動態載入 module 的位置&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color: #9cdcfe;&quot;&gt;isA&lt;/span&gt;) {&lt;/div&gt;&lt;div&gt;      &lt;span style=&quot;color: #569cd6;&quot;&gt;import&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;../assets/sass/A.scss&#39;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;    } &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt; {&lt;/div&gt;&lt;div&gt;      &lt;span style=&quot;color: #569cd6;&quot;&gt;import&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;../assets/sass/B.scss&#39;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;/div&gt;&lt;p&gt;而 vue.js 也有支援這樣的打包方式，真棒！&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-width: 0px; color: black; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 0px; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVGtLGXcb-l_K6HEK5V6ZwoJHO1BmGVaWOoBvjhei8P1nBD8fHk4MXZLNulRVBD0sn3xPuSXmeqStGijCr5LQs2l5IOkOTME2tVNZb3roubvLjiVebqTUN0k6U2QjwdTS6BkLm8jHzuX83/s976/%25E6%2588%25AA%25E5%259C%2596+2021-01-19+%25E4%25B8%258B%25E5%258D%258812.26.38.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;380&quot; data-original-width=&quot;976&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVGtLGXcb-l_K6HEK5V6ZwoJHO1BmGVaWOoBvjhei8P1nBD8fHk4MXZLNulRVBD0sn3xPuSXmeqStGijCr5LQs2l5IOkOTME2tVNZb3roubvLjiVebqTUN0k6U2QjwdTS6BkLm8jHzuX83/w640-h250/%25E6%2588%25AA%25E5%259C%2596+2021-01-19+%25E4%25B8%258B%25E5%258D%258812.26.38.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; white-space: pre-wrap;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-width: 0px; color: black; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 0px; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-width: 0px; color: black; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 0px; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-width: 0px; color: black; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 0px; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;&quot;&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/4930477875225003299/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2021/01/dynamic-import.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/4930477875225003299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/4930477875225003299'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2021/01/dynamic-import.html' title='dynamic import'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVGtLGXcb-l_K6HEK5V6ZwoJHO1BmGVaWOoBvjhei8P1nBD8fHk4MXZLNulRVBD0sn3xPuSXmeqStGijCr5LQs2l5IOkOTME2tVNZb3roubvLjiVebqTUN0k6U2QjwdTS6BkLm8jHzuX83/s72-w640-h250-c/%25E6%2588%25AA%25E5%259C%2596+2021-01-19+%25E4%25B8%258B%25E5%258D%258812.26.38.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-1997930672502697227</id><published>2020-12-03T00:18:00.002-08:00</published><updated>2020-12-03T00:18:31.503-08:00</updated><title type='text'>前端開發時才會碰到的問題 has been blocked by CORS policy</title><content type='html'>&lt;p&gt;在開發前端的時候常會在 http://localhost 的環境去連 https://stage.com/api/ ，&lt;br /&gt;這時候常常就會被 chrome 的同源政策擋下來，但實際上測試機，前端檔案與 api 是相同 domain 的，這時候就可以安裝以下插件。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf&quot;&gt;https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf&lt;/a&gt;&lt;/p&gt;&lt;p&gt;但如果 api 跟 js 不同 domain 的話，還是需要請後端改一下 api header 加一下白名單&lt;br /&gt;&lt;/p&gt;&lt;p&gt;範例：&lt;/p&gt;&lt;pre class=&quot;default s-code-block hljs less&quot; style=&quot;border-radius: 5px; border: 0px; box-sizing: inherit; color: var(--highlight-color); font-family: Consolas, Menlo, Monaco, &amp;quot;Lucida Console&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.30769; margin-bottom: calc(var(--s-prose-spacing) + 0.4em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 12px; vertical-align: baseline; width: auto;&quot;&gt;&lt;code style=&quot;border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;&quot;&gt;&lt;span class=&quot;hljs-selector-tag&quot; style=&quot;border: 0px; box-sizing: inherit; color: var(--highlight-keyword); font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;header&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot; style=&quot;border: 0px; box-sizing: inherit; color: var(--highlight-variable); font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&#39;Access-Control-Allow-Origin: *&#39;&lt;/span&gt;);&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/1997930672502697227/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/12/has-been-blocked-by-cors-policy.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/1997930672502697227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/1997930672502697227'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/12/has-been-blocked-by-cors-policy.html' title='前端開發時才會碰到的問題 has been blocked by CORS policy'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-35933748182473759</id><published>2020-11-22T18:39:00.002-08:00</published><updated>2020-11-22T18:39:07.852-08:00</updated><title type='text'>gulp not found command (mac)</title><content type='html'>npm i gulp -D 後雖然有在專案資料夾中長出 /gulp&amp;nbsp;&lt;br /&gt;但 node 卻找不到 gulp 這個 node 檔案&lt;br /&gt;&lt;br /&gt;解決方法有兩種&lt;br /&gt;一種是將 gulp 安裝在 global 環境中&lt;br /&gt;npm i gulp -g&lt;br /&gt;但我不想這樣作，因為不是每個專案都用到 gulp &lt;br /&gt;&lt;br /&gt;所以我讓 node 在專案資料夾中 從設路徑 可以找到 gulp 指令&lt;br /&gt;步驟如下：&lt;br /&gt;建一個 .bashrc 檔案，在專案根目錄，貼上..&lt;br /&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;alias&lt;/span&gt; gulp=&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;node ./node_modules/gulp/bin/gulp.js&quot;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;終端機中測試&lt;br /&gt;&lt;span style=&quot;background-color: #1e1e1e;&quot;&gt;&lt;span style=&quot;color: #dcdcaa; font-family: Menlo, Monaco, Courier New, monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre;&quot;&gt;gulp -v&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style=&quot;color: #dcdcaa; font-family: Menlo, Monaco, Courier New, monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre;&quot;&gt;
CLI version: 2.3.0
Local version: 4.0.2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;完工&lt;span style=&quot;background-color: #1e1e1e;&quot;&gt;&lt;span style=&quot;color: #dcdcaa; font-family: Menlo, Monaco, Courier New, monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre;&quot;&gt;


&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/35933748182473759/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/11/gulp-not-found-command-mac.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/35933748182473759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/35933748182473759'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/11/gulp-not-found-command-mac.html' title='gulp not found command (mac)'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-1896239200987212024</id><published>2020-11-12T23:07:00.005-08:00</published><updated>2020-11-12T23:33:04.761-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="click"/><category scheme="http://www.blogger.com/atom/ns#" term="ios"/><category scheme="http://www.blogger.com/atom/ns#" term="touch"/><title type='text'>ios12 的事件分類改了！apple 在瀏覽器&quot;嚴格&quot;模式，一直領先群雄</title><content type='html'>&lt;p&gt;apple 在瀏覽器&quot;嚴格&quot;模式，一直領先群雄&lt;/p&gt;&lt;p&gt;最近發現 ios12 把 device 上的 click 事件改掉了～&lt;br /&gt;以後再 device 用 touch 事件取代 click 會比較好唷～&lt;br /&gt;&lt;br /&gt;window.addEventListener(&#39;click&#39;, () =&amp;gt; {&lt;br /&gt;&amp;nbsp; console.log(&#39;click not trigger in ios12&#39;);&lt;br /&gt;})&lt;br /&gt;&lt;br /&gt;window.addEventListener(&#39;touchstart&#39;, () =&amp;gt; {&lt;br /&gt;&amp;nbsp; console.log(&#39;ios12 use touch event, not click!&#39;);&lt;br /&gt;})&lt;/p&gt;&lt;p&gt;值得一提的是 div 上面的事件，還是可以繼續沿用原來的 click 事件，&lt;br /&gt;只有 window 才有差異.&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/1896239200987212024/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/11/ios12-apple.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/1896239200987212024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/1896239200987212024'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/11/ios12-apple.html' title='ios12 的事件分類改了！apple 在瀏覽器&quot;嚴格&quot;模式，一直領先群雄'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-3357959753937406063</id><published>2020-07-12T03:35:00.001-07:00</published><updated>2020-07-12T03:35:56.331-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="express"/><title type='text'>heroku react deploy with node.js</title><content type='html'>&lt;a href=&quot;https://reate-test-app.herokuapp.com/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArgAAAIFCAYAAAA5lI6EAAAgAElEQVR4Aey9+V8UV/Y+/vlzvo4ICiKCgCCryK6AKCAKyCrIDiJucd9iTDQaNSZxTaKJa+K+G/ctMcskzkzyzmSbmSQzmffM+8fzfT3X6UzbaaDrdlXTXfX8wKvp7uqqe8996t7nnjrnOf/v/wuLEv7RBsQAMUAMEAPEADFADBADdsHA/7NLR9gP3pTEADFADBADxAAxQAwQA8AACS492PTgEwPEADFADBADxAAxYCsMkOAS0LYCNHfu3LkTA8QAMUAMEAPEAAkuCS4JLjFADBADxAAxQAwQA7bCAAkuAW0rQHPXzl07MUAMEAPEADFADJDgkuCS4BIDxAAxQAwQA8QAMWArDJDgEtC2AjR37dy1EwPEADFADBADxAAJLgkuCS4xQAwQA8QAMUAMEAO2wgAJLgFtK0Bz185dOzFADBADxAAxQAyQ4JLgkuASA8QAMUAMEAPEADFgKwyQ4BLQtgI0d+3ctRMDxAAxQAwQA8QACS4JLgkuMUAMEAPEADFADBADtsIACS4BbStAc9fOXTsxQAwQA8QAMUAMkOCS4JLgEgPEADFADBADxAAxYCsMkOAS0LYCNHft3LUTA8QAMUAMEAPEAAkuCS4JLjFADBADxAAxQAwQA7bCAAkuAW0rQHPXzl07MUAMEAPEADFADJDgkuCS4BIDxAAxQAwQA8QAMWArDJDgEtC2AjR37dy1EwPEADFADBADxAAJLgkuCS4xQAwQA8QAMUAMEAO2wgAJLgFtK0Bz185dOzFADBADxAAxQAyQ4JLgkuASA8QAMUAMEAPEADFgKwyQ4BLQtgI0d+3ctRMDxAAxQAwQA8QACS4JLgkuMUAMEAPEADFADBADtsIACS4BbStAc9fOXTsxQAwQA8QAMUAMkOCS4JLgEgPEADFADBADxAAxYCsMkOAS0LYCNHft3LUTA8QAMUAMEAPEAAkuCS4JLjFADBADxAAxQAwQA7bCAAkuAW0rQHPXzl07MUAMEAPEADFADJDgkuCS4BIDxAAxQAwQA8QAMWArDJDgEtC2AjR37dy1EwPEADFADBADxAAJLgkuCS4xQAwQA8QAMUAMEAO2wgAJLgFtK0Bz185dOzFADBADxAAxQAyQ4JLgkuASA8QAMUAMEAPEADFgKwyQ4BLQtgI0d+3ctRMDxAAxQAwQA8QACS4JLgkuMUAMEAPEADFADBADtsIACS4BbStAc9fOXTsxQAwQA8QAMUAMkOCS4JLgEgPEADFADBADxAAxYCsMkOAS0LYCNHft3LUTA8QAMUAMEAPEAAkuCS4JLjFADBADxAAxQAwQA7bCAAkuAW0rQHPXzl07MUAMEAPEADFADJDgkuCS4BIDxAAxQAwQA8QAMWArDJDgEtC2AjR37dy1EwPEADFADBADxAAJLgkuCS4xQAwQA8QAMUAMEAO2wgAJLgFtK0Bz185dOzFADBADxAAxQAyQ4JLgkuASA8QAMUAMEAPEADFgKwyQ4BLQtgI0d+3ctRMDxAAxQAwQA8QACS4JLgkuMUAMEAPEADFADBADtsIACS4BbStAc9fOXTsxQAwQA8QAMUAMkOCS4JLgEgPEADFADBADxAAxYCsMkOAS0LYCNHft3LUTA8QAMUAMEAPEAAkuCS4JLjFADBADxAAxQAwQA7bCAAkuAW0rQHPXzl07MUAMEAPEADFADJDgkuCS4BIDxAAxQAwQA8QAMWArDJDgEtC2AjR37dy1EwPEADFADBADxAAJLgkuCS4xQAwQA8QAMUAMEAO2wgAJLgFtK0Bz185dOzFADBADxAAxQAyQ4JLgkuASA8QAMUAMEAPEADFgKwyQ4BLQtgI0d+3BvWsfEREjERPSJHJStkSm5KjX8LgUGTlmPHHIuYgYIAaIAWLANAyQ4BJMpoGJ5DK4yeVwjc+omGSJmzZbUut7JbtnjUxduUNmvPSmVO05K83vfygtZz6W3rs/SP9H/5CeW99K26Un0nDklsx46W2ZuuIVmdyxQhLLGiQ6q0RwruHqB69LfBMDxAAxEDoYIMElwSVhIAZMx8DvIsYrQjqle7XMeOktqX37urRf+aMsevxPWfLZ/w35t+jjf0nfgx+l5/b30n75iTQcuyOzXzulyHFaY5/EFc2RyJRcCRsbb3rbuYCFzgLGseJYEQPEwEAYIMEluSFBIAZMxUBM3kwpXvea1L97SzqvfyX9j38ZktD6Qnpdxyy4/zdpOvFAyrcdlrSmhSrMYWTUBFP7MNCEyc+5mBIDxAAxEBoYIMEluSExIAZMwUB4TLJkdayQhqN3pffeX2TxJ/82ldi6CK7nK0j0zC1vSULpXBkZSaLLxTc0Fl+OE8eJGLAWAyS4JDemkBveqNbeqMFs3xHh0QKv7aydx6X71rey6OP/DQix9SS6eI+Y3oJlW2R83kwZOSaW2Ob8RgwQA8SAQzFAguvQgQ9mwsS2hQ5ZRgzs5PbnpPXcZyq+dvGnQ8fXeiOmZn0GrzFid+ef+0zKth6WiRXNEjYuiQsc5zligBggBhyGARJchw04yWPokMdgHyuQ28JlL0vXjT/LcBNbT4K8+NN/C2J1W04/lhkvvimTajokYkIqF7ggmO+QgBiRkCFR6QUSmZorY5KmCMJb8CQg2DHP9nH+JAZCBwMkuEEw4fOGCZ0bhmP1dKxASCa3LZOOq38atnAET1I70HsQ3XnvPZKSDW9Iwsw6CY+dJCNGjSWZMnnuQ6JfxIQUiUhIl/DYZInKKBQoXhQu36Yk32a/flqqD1yUOW+cEfwPVYzy7e9K6eYDkr9ks6TUdkv89LkSPblIbUZGRsZxjEweI85fXGuchAESXE4gXESIAUMYGBWTJLl9G5Rm7UCkMhg/X/jo71L3zg3JW7xZxueXCQmU/4t9RHyasmXCzHrJaF4sRWteldpD11WSITAAbeO+hz9L38Of1P/wrA+Fja4PvlbnKN20T4WYjGKIiaH700kEhn31/x62sw1JcEluOHkSAz5jAI+XM9uW/UpghiIrwfg9YnTnvH5aUuZ2qsfjfDRubJFEqMfE8iaZ0r1GecVrDlyWzutfC7SLzR5vxFTjKUH59nckYUYddY85V/k8V9mZuLFvvs1ZJLicMDhhEAM+Y2BCUZV0XPsy6GJudYgVpMwQn0tv7tCLBcIPQDALlm2VWTtPSOPx+9J7NzBScIjvhve948ofZeZLb0vctEoZGUmFDJKcoXFLGznbRiS4JDc+kxtOFs6eLEYnZUntW1dN99LpkFMzf9Nz6zvllQ6LTuC94DEfjk7MUKEHc/aclZazH0vP7e8s8dT6Op4L7v1Vmk7cV8mNUWn5TEzzGC/O0c6eozn+z44/CS4nCC7qxMCQGIAHr2j1TtuRW3diBa9k7NRKRyegjYiIUWEAUDcoXv+6tF/+gyK1qEYXTEoZUO4o3/aOxE2bTb1jzl9Dzl8kfs8SP6fYgwSXkwMnB2JgUAygYMLE8kbpvvmNKQQXcZW9d38QJBPBI4iYWHeiOZz/L/zwH1K0epfjtHNHhMdIZEqOxE+vkYpXjqqEMBTsCCZS64kLhC1U778gSbNbhaWanUlgnELU2E89fJPgktwMSm54Y+ndWHayG4gPJJ08CYbR9yBM7Vf+KHPfvCJTV7wiydVtEltQ9iv+IN8VmZonsQXlSjIK8lIzX3pLKR+ADBu9nu7xyPpvPHZPkipbfm2bncbTvS/YvERnFUvS7PlKwitQ5ZV1x8bb7xqO3lF4YeU6zlXu2Ob/xAMJLgmu7RdxTnT6Ex08Y6n1vSqhyBu58OUzSEP13P5eqvaelczWpRIelzIk5kBWIEGFOEtoo2Z1rJAZLx6UusMfqCQ3eO98ubbuMYse/1Naz/9eCpdvV9qudsMQdIBjcmdIVvtyqdpzViVx6doqGH43/9ynCidUxNC/1+2GcfaHWCDBJcEdkmxwonDuRDEuZ7oS5dclMfAItl16osT+x2WX+IU1kO3YwlmS07tOKnedkNYLn6vwBqu8jjgvPMdlLx+WuKI5frU9WO6hEaOilTTalO7VUr3vnCBpS3dsg+13DUdui78YC5ZxYjucO+dy7M0bexJcElxbLNycFMybFFy2DBubIFO6VvnlvYWGaf6SF1X1MNd5zXhFkQYkhJW+sF/aLnwhCH+wgnAhBhWV0GoOXFKe7FBVWgCxRXnczPlL1YYFSVpW2Gs4zwkd3uoDl1QssRkY4znMn1NoU9o0kBggwSXBJcElBrxiICa/zC/vLbyfqGwVOWmK1/ObNdGNSZoiuQs3SsuZx5aRNqgIoNxvzoL1KmzCrLYH4jwg5Yh3nvPGaeVNH04SavW1UTlt1s7jTDrjnGbpnBOI+5bX8H8zQILLiYATATHgFQOoWIaiDjqkBGoEM7celqi0PK/ntmLyRoWtrM5VMu/9DwWEVKfdg/0GIQud175S1bsQuhHs8Z6Q/IrJnSmlLxyQtotPLLHJYPYaru+g9pHasMDRcm9W3F88p/+EizYMrA1JcEluAkZAeHMH9ub2x95IBJu55W1BspUOUUFm+8SKpoBjC3G6YzMKJbt3ncx776F2+wfrMyqgVew4LnHFVUHpKUQCWURCuuQu3CAtZz9RIRaD9SeQ30GhAmQbahr4Q3x2z61vVRsXf2JOqV9sRBqP3ZWI+PSA48+fe46/DZ35kWMVGmNFgkuCy0WAGPgNBpIqm6XpxAMtcovQhOyetTIqJuk35w3EwgCCFx6bLBOKq6V47W6VjGZ2jC7OV3vouiRXtUrYuMRh6aenLeFRBsFPmFmv2gYyaVUCnjdSjHhlhAj0PfxJvSLOd/brp2Xqylckfd4iSa5ql+TqdqVbm9bQpyqkZbYuk4JlW6R00z6pffuaIrwL7v8oUN7wdg1fP4POMsJjPG3E96FBTDhOHCczMECCS3LDRYAY+A0Gpq7coYow+Eoo3I+b8/ppJUFlxgTlzzlA+BCfmz6vX6r2nvMrWc69f+7/Q54KoRxh0YnD+kg8bGy8snnxutcEpYcDSWz7HvykvLHNpx8rQpvTu1a1RVVFi05UGx0Q76FCOlwqGegDvLv+9gElfeOmVf4G2/5gir8l8SIGQgcDJLgkN1wAiIFnMBAeN0lq37qqpUyA2FsQSpCVYFkIRkY9VVyYtnqXtJz5WHkX3Umqv/+DUMILiRjgQPfZReKhjoCwkH7NkBKjNuj/6BdFQuF1RYxvelO/qcl3Uen5MnPLIb/GCuE1pZv2B3xMAo0BXi90CBfHKrBjRYJLcsMFgBh4BgMJM+uk/fIftB4Rg/CgMlYwTuSIK05r7FMFJ1B4wl8PoTspxKP5orW7VexroPoOGTcllbb5oHTf+lZrvNz74Mv/KLABz2jJxj2qaAd0Z38XMd6S8UZlu2krX5GeOz9o9w1V81AZL1BjwusElsDQ3rT3YBggwSW54eRPDDyDgbxFmwSJVL4QHs9jJnesUI/rB5t0hvu76MnFUrz+DWm7aL5+buWr70lUesEz9rSiv5GTsiWjZYmKtV346GetsfIcu8He9z34UWoOXlZybAkz6nyqRmdGv8NjkqV4/evaBSmgYYyiFma0hecgmSIGQgsDJLgkN5z8iYFnMFC5+32tR93wIoLcIckr2BcChFCAIDadfCgIqxiM3Bn5DolWtW9flfF5ZUPGnOraKL6kRqY/v0dQRMNML7S3fmKjA11ZlGuGNNpwFLoYnZgpc944oxUygz5VvHJUxmZYv+nQHU/+LrRIE8crdMaLBJfkJujJCCeUwE4oPbe/0yJ81fsuBFXsrS+4iUovFBB6eCi9ETydz6Cw0HD0rsDTOXJMrGn3F6q3IdYW6g0IFdBpmy+/QUUwKDBU7n5P4qfXyOiJWab2w5dxcT8GG6a4oippPvWRVp/nn/tMKUu4n5P/B3ZOob1p7+HAAAkuCa5pC/BwAJjXNG/iBJFAYQBfSJDnMZB1yu5ZE7JYyu1/3q+EJk97IMEJCW2JZQ3yuzH+x6giJAHKFoiNBgH1vJ4Z79FmeGzn7DmnPNCQeRsRHhMUY4qNwvSNe7RCFeDlzlv0vIyKSQ6KvnDOMm/Ooi1py8EwQIJLgstJnxhQGMBj+yndq7TIU9/9HyV6clFIY2l8QYXMP/uJIMzADMIIYoVCC9DK9YcoJpbVy+zXTinyaVbb3PsHwgztYihnmO11HmzxMfpdbGGFsqdOWEb1vvOmqjwYbTuPJxEjBgKPARJckpuQJiWcNMybNCImpEnpC/sNkzsQpMbj9wW6p6E+HrBB5a6Thm3gThg9/28+9ViyOlZq2SataaEidVbJf/Xe/YvUHfpAUHDBzHAKK3CA9pVs3KvCJzxtPNR7KDEgudCKdvGc5s1BtCVtaSYGSHBJcDnpEwMKA5D3QonTociC5/fI4q/YccwWOEKYBopDIBzArDhXhG+0nv9cxc8ijtaXCfzpI/m90nn9a8Pj4Tk+3t73P/5FVaqbtmqnjEnM9KlNvrTb6mMQQrPg3l8N2wRjkDCj3habMKttzPOTZNoFAyS4JDchs7jZ5aYL1n7ETZstSMjxRogG+6zz+leS1annoQxGW4DkRiSkK0KqqwfsaS94uVH1DHYazFM6YlS0epQ+982rggphnufx9z0e77ddeiLTn98bkolX0NyF8oVOqEbxut2D2j4Yscg2kWwSA/oYIMElwSXBJQYUBlJqu7S8Yy1nHktSZbOtcDQibKyEjUtS8lgNx+6YQjSfktzPJK1x4W8SnkCqXaVqEbcLJQZ/yazn7yGHVrXnjKQ2LJDw2NBMuEIYTMGyrVq2QXw1yYI+WaDtaLtQwwAJLskNJ31iQGFgStcqLV3VusMfKI3UUJv8fGkvqoUlzZ4v1fsvCFQGPEmj0fdKXeH0Y5nc9tyvmrLw2sJjjIIEfY9+1vJODtYOkOXWC59L/tKXJCZvRkjf7yhNjGQzVI4brM/evuu9+0NAinD4giseQ7JIDFiPARJckpuQXvA4SZgzSYSNS1SlZr0Rg6E+m/HSm5YVNQiG8R0ZFSfx0+fK7NdPm6KXizABhCuk1vUIpLiiMgqlcPk2UwtOuMYMlbyg85tY1hiw6mNWj1lkSo40v29cExeJZlC0sLp9PL85cxLtSDv6iwESXBJcTvjEgESl5WmrBxStedX2GBo5ZrwgRhnJdD23vzfsPXQRTtfr4k/+JU0nH0hO3wap2HFcyyPpOtdAr4i1ze5dp8bWH5kyfxcZs38/JilLyrcdNjwGUIwoWPqS7bFqtr15PhLNUMUACS7JDSd8YkCiJ0+V6gMXDZMGxHXm9K13BIZAEpHFX7r5oHTf/MawrQYiomZ+juQrhEEgSQ2atogjDtXFaaB2h8ckS96iTYbtj6S9mVvetp09BrITPycxdToGSHBJbjjhEwMysbJZ5r33yDBpgJcwubrDURiKyiiQkg1vSNeNP5seL+sP2UWsLdo0beUOiYhPt60kFhLN0uctMizjhtAQJNk5fdFn/0l8nYIBElySG074xIAiDCCrRgkW9F0TZtY7DkOjJ2YKNGSfktx/G7abUTsPdTw0exuO3pFJNZ0CRQa7L2CT5nZKx7UvDdt97ptXBGWP7W4f9o8klhiIEhJckhtO9sSATG5fLp3X/8cwYUAVrJjc0M7M110IIhIyZNqqXcPqyYVXsuf2d1K+7R1HjcPEiiYVwzwU8ff8vv7ILYkrruKcxzmPGHAABkhwHTDIugs4f+ccL0B271pFlDwJwVDvy7e/qyp/ORUr0K6FJ7fn1reGNwdD2Xao7126unmLXnDcGMROrZTat64atnnTiQeSVNlCcsN1jxhwAAZIcB0wyE4lH+y37wQdSTsL7v9omDDMeOktiZiQ6ujFImxsvOT2b1Ke3KFIqVnf9z38SereuSkptT0SFp3oOPtDWg3axEbt2XbhCyXPxrnB97mBtqKtQhUDJLgkuI5bHEP1ZrWy3agO1f/4F8OEASVfw6ITiKGwKJm64hXpvfcXwzY0StIQ91u+/YhSdEDhAytxEaznhm5z1Z6zhm2N0suTapyVFBmsY8h2kThbjQESXBJcRy6QVt9YoXZ+PGY3SrRwfNHa3WInjVV/x21K12pLSW7bxSeqIlnkpBxBBTR/2xvKv5+187j0G6wuh2S8lNpuR9stlMecbScpNoIBElwSXE72DsfAyMg4KdnwumGCC1mqwuXbiR83/KAgRE7vWul7+LNhew61wWg5+4lkti2jx/w/9i57+bBA23You3l+j9LLRhZJHktSRQyEJgZIcN0WJ4I4NEHMcfNv3MJjk6V08wHDRGHho58lf8mLJAsec8jk1qUC8u9JrPx5X/nqSaU3DAJNvD/Fe/n2o1obCZRIHjkmlnb0wC1x5d88SvsFn/1IcHmTc6J3OAZGJ2YIvGFGCRhKn+b2bSB+/oMfhAwgu19Hbm0o20/fuMcR+rZGSALiv7HJGsp2nt9nNC8WqF8YuRaPDT7ywjHhmAyFARJch5OboQDC7+0/iUSm5krFjuOGiQKSnaZ0rSJRCItShCmxvElJraFcriep8uc9zofs//Smftrabb4uWLZFUCraqG0z5y8VhOVwbrP/3MYxdvYYk+C6TZi8GZx9Mzh1/KMnF8ns104ZJgodV/8kIAtOtZur38joR+lYxN2aTW5d5A2at9BwjZ06y/H2dtl96sodsvhT41Xk8pe+aNsyxi7b8JVrGTHASmZcLEjwHY+BmLyZWpqirRc+l7TGhY61H0riho1LktT6BYLsfBcZteoV3krE4kZnFjrW5q5Fe0REjGT3rDFsc1R+g5yb6zx8JREkBuyLAXpwSfA42TscA3FFs7WqQrWc+VhS5nY5Ej8gtxHxaZKlShx/bZho6ZLgBff+Kog9jUzJcaTdXWQEIQZpjX2G7Y6NSP7SlxxtO5cN+WpfYsexfTq2JLgOJze8ETjJjcsukTlvnDZMFhCiMLl9uSPJAshtzoIN0n3zG8N20yW3rt+hLHDhcy87uoJc2NgEmdz+nGHboxBH7sKNjsQs53rO9U7DAAkuCS4ne4djAGVP57xxxjBZ6Lz+lWS2LnMcfqA6kd2zVlrP/96wzVwk1d/XtktPVPyzU9UARsUkS07fesP2x4ZkSvdqx2HWacSG/SWZBwZIcB1ObjgRcCJAklnNwSuGyUL7lT9KasMCR5GFiAmpShqt48ofDdvLX1Lr/nskndUfuS0JM+ocmTCFcUB5aXeb+PJ/x7UvHbkp4zzPed6JGCDBJcF1FEFx4k0+VJ/H5UyXhiO3DZOF9st/kKRK51SFGp2YqRKbEHvsC5ka6hgkPOmoALjOi2ISs18/LdigICZ4qHG20/cRCRmqTLTLFr6+tl38QtIot+YorNgJ9+yLsY0KCS4JLic7h2MAGel179zQIm0ptd2OwA8eiWf3rhUQJF/J1GDHdX3wtTSdfCDQEvZHWgwxpcVrd0tEfLojxsG1wI9JmiKlL+w3PBYqMdIhmHXZiq/GSBHtZR97keA6nNzwZrbPzezPWDadfGiYLIDAJZY12J5YhUUnypTuNTL/3Key+JN/adnJnex2XP1SCp/bKrEFFVKyca8suP83v87Zc+d7ye1/XsKiE2w/Fi6MozhJ+fZ3DdsNOE+a3eoYO7nsxVfO807EAAkuCS4ne2JAmt//UPDI3J2I+fJ/QmmdjAiPti2GIEeV1blSJZTp2MfThvDc5i/dIqMnZimbRaUXSPX+84JwA89jjbxvPvWRTKxotu04eC7OsJtOcZKGo3ccsSnztBffk+A6EQMkuCQ3jlkUnXiD+9rnuW9e1SJZGc2LbF32FJXa8FjbXwIKstp+5U9SuHybjE6a8sw9l1A6V+a998ivUAWcv/bQdUHRDl/HPJSPU4mRBy4Z3hTARnHFVY6wUSiPL9tOQm4GBkhwSXA52RMDUnfoAy0PbsrcTttm8aOQQPPpx7Lo8T8NEylP72vr+c8lu3edhMeleL3fkipbpP3yE7+vM33jGwIZMzMWh2A+R2JZveiE1VQfuCixBeW2t08wjx3bRvIaKAyQ4JLccLJ3OAYQYqATzwgSN231Lltm8E8sb5SWM49N8dx23/pGsjpXSdi4xEHvtdS6bkERB09ybPR9WkOf2F0fN6NliUDFw6htUNAEhU0CtcDyOiRzxMDwYYAE1+Hkhjff8N18wWL7sLHxUrppn2Gy0P/4n6qiVrD0w6x2jJ1cJE0nHmh5tD0JV+f1r1UMb3hMsowIG1rKq3j967Lww38YHgv36/bc/l4mFM2WEeExtiVyWR0rBLZ177cv/1fuOilR6fm2tYtZ9wDPw3XBDhggwSXB5WTvcAwg+z63f5NhstD/0T+k4pWjtsJPeFzqfzy3/qsl9D38WVLregzFKI8cM14qX33PL7UGyI41HL0rY5KybOldx8KLcA+oR/hCat2PmfHiQYGesR0Wb/aBJJQYGBwDJLgOJze8QQa/QZxgHzw6z+5ZY5gswNM4a+cJ25CFUTFJUnPgsime2967f5HMtmXyu4jxhu2DKl31R24ZHg93Ioe44ZlbD8mIUfZUuChavUuwgXDvsy//A+dOklNzwvzFPnINGwgDJLgkuIYX4IHAxM9Dc6IBCUquajVMFkAoGo/fC3n8IHQgIj5Nyrcdlv7Hv2jZwZ1cQdd2SvdqbSKFmOgJxdXScfVPfrUFJBvFKex4X85544xWfDQKk6CwiR1twj6F5vzLcbNu3EhwSXA52RMDMqmmQxBy4E7UfPm/7vANCRsbugUGUOIWqgPTVu0wRS0BSWKK3I5L8uu+QpIYVBz8icdFGeDW87+XhBm1frUl2BZgjFnjsbuGsQo8T6xosm3YRrCNE9tjHXGjbX2zLQkuyY2tFj/e+L7d+J52AsHtvP6VYdJQ/+4tic4qDkkMKc/thFTJ7lkrfQ9/Mtx3zw1Az50fVNlcsx6Bo/wuVCp0Nh6utuG3c/ackdETn9Xe9Rz/UHo/KjZZaQq7+ujrK2xBBQW9+QnG7ooAACAASURBVCGU8MG2coxdGCDBJcENSXLiAjBfzZnMUL4UBQ18JQuu4xqP3w/ZylCIPc5oXiKd1//HcL9d/ccrkrpAbqc/v0+gSGEWJhGqMC6nVKtil6t9qm23v5dpq3YaSnYzqw9WnCcqLU/L29598xvby6dZYW+e05w5lnYMvB1JcElwTVuQeQMH/gY2y+aJ5Y3SeOyeYaKHErHw/prVjkCdZ2RUnKTM7RK030UGdV5dBHL6xj0CKTCz249SwXis3nD0tnY7UWJ4/rlPVX/Nbl+gz4d48QnFVVq2aLvwhenjE+j+83qhO8dy7AI/diS4JLic9IkB5Sms0Sh92nHtS8loXhxSGBo5JlYSZtYLyhPrkFr33yy491cp3XxQoHxg1QIGT/NT3Vd9TzNieav3nVPjbFU7A3FehH9ktS83PG4IT6jae86yMQpE33mNwBMk2jy0bU6CS3LDSZ8YkDGJmVK977xh4gAPJqSXQmUhwGP/2IIKmb37lNZjbndyi7jdspcPS2RqnuX9j0zJkZKNewWE2r0NRv7vvfcXKdm4RyIS0i1vr1V4gNrF1BXbDdtAbUQ27Q/ZfltlT543tAkcx2/w8SPBJbnhpE8MKOmk6v0XDBMHEKzchRtMjT21ctKOzpwqZVsPC6S8jJBDz2MXPvq70gCOyZsZsPsntqBcqvac9UtZofX858rjPjIyNmDtNnM8kdBYseOY4bFD1bPc/udDss9m2o/nGpwQ0T72sg8JLskNJ31iQGGgfNs7AuLmSeaGeg/R/VDwCo6emCnF63ZL981vDffR3QZ43F1z8IrET58b0HsH+q2Tajql+f0PtYtRLPr4X4JQFHixQ3ExTyidK3Xv3DQ8fkigTK3vDck+h+I4sc32IoqhOp4kuCQ3nPSJAYWBqSteERQHcCdzvvxfvv1diZyUHdQ4GhWTrDx4/hZPgD2aTz9WGrVjkqZIeNwkGRkVH7CKYaNiJ0n+0pek68afDY+Tayz77v8oalMSnxbUY+ZtUU2ft0jaLj0x3PfaQ9clvqQ65PrrzQb8jOSRGPANAyS4JDec9IkBhYEp3Wu0CG7TyQcC6aZATbpINIJiAZKvoDLgft3IlFxB2EBSZYtSDUhv6pfM1mWKFCKLHooCLqKn+1p36AMpWrtbSl/YLzNefFPFtYIwFi7fJnmLN6vPUCYX8a5TV+5Qn8G2GS1LBJW0kiqbZUJJtWpnVHqB8n4bkReDrWftOC4LHxkvVevqMwpApDYs+I393G0ZjP/DxjrhJbN2HpeojIJnsBKM/WObfCMutBPt5AsGSHBJbjjpEwMKAxOmz9UiD0jgMduDGx6XoghJwow6gYRZcnWHpNZ1C/R6szpXSsHSl6RkwxsqMa7unRvSdvELab/yR/WKx9EtZz+RlrMfq0peUHqAZxqP510Ez4rXRY//KX0PfpK+hz+r1957f1X6uAiJ6Prga+m89tV/2vhE5p/7vWpj86nHMu+9RwI94Yajd5SyA8rQztzylmQvWCcZzYskta5HlVKGHeKn10hMXpmkz+uXljOP/SLsiOeNyZ0RMO+zLwvSYMdA/aLilaNafQYxDotO5FzHuY4YcBAGSHAdNNiDLR78jjtiEID+x78YJoFQUoidOtsnojQqJkmQCQ9ZLXhgUXZ1XPZ0Sa3vkfwlLyrJreoDl6T6wEVB0htIX+Pxe9J28YmqNoZreZJTfObtc8/jQuE9SHj/R78oggxSjMfx0LBF3C3K09Yd/kDJXRWvf12aTtz3s8rZL1KwbKsKswiF+z8qPV9QGlpnHDNbl7JEL9c6kluHYYAE12EDHgoLGds4PGQbHjI8xtchEPA0eo4bvLDRk4slobRWkqvbVYIUFBfw6B6apPPPfaaIKR61Q8IKXtYF93/Uur5Om/mb/1OeZXiGkcDmOX7B9h7axSD7Rset68bXIVttL9jGgO0ZnrmZdtezOwkuCW7QL2y8ufVubqN2g3cVj8eNEoj+x/9Untdx2SUqrjO3b4MKH0Dy2ezXTinPI7yRRs/L43/rrbbCJjUHLwskyJCIh0phRnETqOPhhdXBUdPJhyoUI1Dt5HUCM1/RzrTzUBggwSXBDdoFbSjw8ntzJ7jw2ElSvP41w0QU4QGIw20995l6pA7NUR25MSvIG8/pG0nuufWtgAiiAAYKKcAjH1dcJVCKCBbSO+Olt1SYitExRdwuJOI4X5g7X9CetGewY4AElwSXEz8xoDCATP7JbcsME1yjhIPH+0Y6h8tOSJbDhqXz+ldKEq327WsquQsKEelNC1XICdQfEIISyAUO8myLPzGeKIgnCkZUKgLZJ16LJJEYsA4DJLgkNwFdpHgzW3cz+2vbkVETJHP+UhLcz4KbgA4H8QXp7b75jfLSo9ACioIgQS25qlVip1ZKVFq+IMQFcdz+4tDb70cnZmjLoiWWNciI8OCPMfbWb34WvPMlxyb4x4YElwTXkgWJN3/w3vxQLnA9doZnK7awQvIWv6DiZSE9NRwEitcMTVKN8BTIoCG8oXTTfqWEgWpjo8YlmTavAKsg0joYWfzpv0NO65dzZ/DOnRyb0BobElwSXNMWIt78wXvzw4MFWS6U1I3OLJJJc7tUQQJoxiJmtuf291oSYTqkg78JTTLr67ghjACKGM2nPpKZWw6pAhfw8uqGNKCwx7RVOw0TXBT1mHfyAec3rnHEgEMxQILr0IEnGQ1eMmrW2IDUQnM2JrdUJlY0Sc6C9Uqeq+f2d4osgIiYUdnLV+LD4+xNbD3HF/jqe/CjoDxy04kHgsIS05/fq8JgEmbUCuJ4sekaCu8oIoKwCM/zD/V+4Yf/kIodx4Y8/1DX5/f2nys5xvYcYxJcElwuADbDAIooxJfUqBK1RWtelZoDl6Trxp8NE4ShCAS/dxZhNWO8EcuLinP1796UspcPS07fBqVROzZzqio44S2Gd3zeTOm8/j+G8YuNHBLMSF7sSV44rhzXoTBAgmszcjPUgPN7e04KIyPjlKd2StcqKdt6SOrfvSVdN76xvDytGaSH53A2Ue57+JPUH7ktqM6WMrdLwmP/q86ApxD4DMTYKE5QFCKuaA4JLtc4YsChGCDBdejAk+jag+hGTEgRCODP2nlClbXtvPYVY2kNqCAMVeYXj9hRXABxylAR6Lj2pbRf+YP6rOfOD6qkrk55Y6NkzUnHL7j/N6k79IFMW7lDyZJB/1an/5A3C49JJrnhGkcMOBQDJLgOHXgS3NAkuCMjYwV/MXkzVfWwlrMfK08t4g1B1nSIQCj9ZtHH/yvoK8r76miieva1+9a3gjCO5Oo2SWvsk9T6XkmqnK9KC2e0LJHMtmVqAzGle7VSmpjSvUoy5y+RrM4Vkr1gnfpscvtzKss/ZW6nKpAwpWul5PY/L4XLtyuvJAjarB3HpGrPGRUDXb3/gjQevydtF58oogzNWR0PpWdf7PQeseEYYxSgQBlno32DTYvXvSZQDOFcF5pzHceN4+YvBkhwSXC5AAQ5BlSy2IRUiUzNVeRq3smHavHv/+gX2yaJ4bE1YjUhP1V76LrUvnVVag5ekep956Vy10lVcQteVaPEx/34/o/+IdNW7xRorMLGCPPA34hw4+VqlfRaRIxASzgsOlFQFQ4JfqMTMwVJUpGpeTI2o1CpWIyIiJHISVMktnCWxBXNlviSakmYUSdJlS2SWtejkrCye9ZI/pLNSj0AISc1By+pksfz3nskLWc/UbZRHuSHPwv6sehj4wUQ3G1ht/+xechsXca5LcjnNn8JDH9PEjwYBkhwOQFwEQhSDIwcM16iM6cqj2LR2t3K4xfqRAaP8/HYH3/9/4mrbD3/e+XdnLnlbSlcvk0RPJSKTW1YoEifKiSQUajIIyYzyEYhQWnB/R+1CS7sOPu1UzIue3rQ4B/EGklW0CYOG5ekZLUi4tNVEYW4aZWSWN6gPMWKBLctU57n8u1HZfbrp6XunRvSe/cHbXvYjeDWHf5A4qfPDZqxHWwR5nckacSANRggwQ1SckPAWwP4ULFrTH6ZZHWskMrd76lHtKEYfgAyi+z3+ec+Ud5HJL7hMT1CAvDoP66oSkbFJD8lcgnpytsJBQh4OAcaJ3haM5oXa2XVu5M4eEFBgHC+ga4Vip+jmlhkSo7ETZstk9ueU9XGQOShc+zef7v/X77tsHriEYpjyDY7e+7n+Js3/iS4JLi2WuBDfXLAI+u8RZuk+sBFWfjo7yFJSpDcU/rCAUWusjpXSmpdt4zPLxN4pP0dH3hcWy98LqhQpUvSENeJylgIR/C3PcH6e1T/gqcbG4ZxOaUy980rjko+nLZ6l0RMSLPt+AYr7tgu88gZbem/LUlwSXC5CAwzBvBoGuVySzcfVPqgeHyvS96C4Xelmw/I6KQppif4gKzN2nncL6LW9/BnFduKOFknLSAI+YAaRDDgIxBtwBMPFJhAKEtydbuKiXbSeLOv/pMj2jD0bUiCO8zkhjdR6N9EumMIYhudVSxlWw8LkoegDhCIxd/Ka4BYICFM1yaD/Q6qBf7GIFftPatiXAe7jh2/Q9IbkvP8wRg2Xm0XvlDhIVCzsBJHZpwbWMRTEITJoBLa1JU7JbGs0afqaXbEAPvk3LXGqWNPgkuCawkZceoN5Uu/QWyj0vJVLGrbpScCxQAzFnQzzgF5JlSAajx2VxWLMHpO5Tm79qWqSuWLLXw5Bo/bIdivU83Kvf3IrIe8mi/XtOMxccVVArzplmeGbBeSAFHyuXzbO2oj03IGMnV/FnjGg5n0unCNksGQbYMkHJQtBov3tiMG2CeSXCdhgASXBNexC36gb3TEoI5JypLc/k2KaPQ9CA5iC2KCx7lIRspf8qKkz1ukyqem1vdoxQGDIE+saDIFV5DfgjxazYHL2psAkG60KXP+UlPaFGjcmHm9aat2Kok5d+Jv5P+SjXt/VbOADNqE4iqVDAkFDJTf9cdDbKQd/hwLvKPKGcIXkOwYk1uqpN2omUvyZ+a9xnMNP55IcElwHb/oWz0RgdhCDzW1rlfmvf+hKlAA0uXPIq37W3iyIM+FR/3QmZ2+cY8kV3dIbEGFkiSDPJXLHuNypkvLmceG2wmRfRAp13n8ecWj9YJlW5TWq26fsZGY/vx/iZk/7Qn130KTt/HYPcNj6rI9NgpQaBiMDEIdAwoOM7e8parrdd/6LmiLkKBq2pw3TiuSHpM7Q8XqDta3UB9/tn/4SRfHIHBjQIJLgmsKEeFN+9ubFo/WkRiFuD/olUKQ30UUAvkKjxWqQXVe/0qa3/9Qpq3apTxvYeMSBbJS0F71Nn4gQ/DMGW0rqnKhIMNA5/V2LW+fQeUgaXar8i4bbYPreNgcqg7wAnu7htM+wyN5JJzpJjKielzlq+8phYaBbAfcj4yKU4UuoicXS8LMekUgEWsOvV5/C3S4xtbs15azn8rUFdtlDBIkB5GqG6jf/Py3cyBtQpsMJwZIcElwufBbgAGQs/F5M6Vw2cvSev5zwyTR38UbnlqQWsRI1hy4JEWrd6o4VlTa8nXCwbGoqKWT2AUvIciNr9fydhzkrVDWVtcWsAH0bifVdPjVDm9tC+XPsOlCcQgdu7rCPVCEw4gNcD9EpedLwoxaQdljhAdg44FQgZ473w/b5s+bDeDxx8YuKi3PUB+N2IPHkvgRA9ZjgATXAnJD4FoP3GC28eiJWZLWuFCRs0Br2cJjCdIwa+cJKVy+XXlA/dEDBZHpvvmtYTIErdq0poXaBAHlc5HQ5E9MJ5LSUO7WX09yMGNNp20ImUksb9KWDYOHvu7wDVV2WOf6+A0KbERlFCo94qkrd6hNGJLV/Blvb2TVn8+QODfnjTMqHl23n/yds9cCjv/wjj8JLgmuNgnhzfvszfu7iPEqlrVo9S6VRObP4mr0t6hUhUQskELE1Eam5Ara4+8YodoXKpAZbQ8egU9btUPrUS8eD6fWL5D5535v+LqudqKMr6pmlZLjtw38tWEw/h4lgFFRDtXmXDYz8opiGfDum1UJDsoiEQkZktWxXKs9Rtpu5Nin1fi+Uh5vVRwkKp544ppJDIQIBkhwQ2SggnGRZJv+S3DhJUyt65Gqveek9+5fArZIzz/3mRSve01SartVSARK35o5LlB9KN9+REtaataOYyqe0Wh7YqdWKjvqhEa4yAt0TxNm1JlqC6P9CPbjYwtnybyTD7WwivAPSMmNzSg0zcZIcJzStUqrPa5xt+IVYRl4EuNSXoBCSHjMf5Mxg32c2b7/ztO0hbNsQYJLgmvaAuXUyQOeJ8hrNZ9+rO0R83VhBunDgtt08qEiA8j8hjfudyaUwR1o/PAIWUfSrOHILYEHeKDzevt89MRMKdm4R8UP+2oTz+PaLz9RcZ5hY+lt82Zj12dIMszp26AdFtB98xulcGFWCAjKMM/ZcyboCK4LX7jvcB80Hr+n1EeQPEeMOYswue4dvobGuJPgkuAaIiC8sZ+9sUEwIRyP+MHFn/7bssUZIvuuMAQoC0CDFElggZA0mtz+nLRf+YPhvnXf+lbSmvoFj599xU1GyxJpPa8fmoCiGfBoQwHC12s6+TiUiJ578Iq2jBc85WYUz4DyAp5ChEo5YcTnou+5CzcK5oCRkd6VSJyMLfb92bWC9gi8PUhwSXBJBDQxkDCzTlVzQrwnvDsuT4+Zr6o86qUnqnLUhOJqQTZ6oCdKaOSilLBOv6BhG+5j2ER0VolKzNONC0X7qvacETx6B2EKtJ1C8Xrwvmb3rFWbJ53x7bnzgxQs2+o3wQuPS1ExwTptwKYGxBihQYGupgalEihSpNb3qk0V5cUCT2JC8b5jmwODExJcTXJDgAYGoMFq56TZ86X51EeCjHKdRXmo3yDmDxJfkCtCzN9wPgodGTlBZbnrkAcQzujMqT6RzZINbwgI01C2Geh7VGNDHPRwbAKCFae+tCt6cpFSC9DdpKGCWXxJtU9jPFB7UDyi5qBetTp4UlGRLG/RJhUXbNU9ORDu8DnCNUo3H5QJRXMEoR+BeLIykC35ubPXJo7/f8efBJcE16+FyYk3E0rYgkwh0WawRU/3OxRjmPHim0riy4hurZVjkbfoBem9a5x8wrOGcq5DeVQRdtF67jO/wjxAcKDxaqUd7HruyR0rpOPal1p4hscd6h26mzBgA15kFCIxes9g04Xywa5xx+YmrmiOTN+0T1XqM3o+f4/vuPIn5dFGsQi7YoX9+i+Boi2C2xYkuCS4nIh9xAC8MsjMR3lPfxdCb79H6dyZWw8pYouM8hFhY4NmbKBsgDhjb+0e6jPE1Q5G1MOiE6X27et+JeghjhSeSHrO9BYcV/EHHS89xh+KCvHTa7Twinjy2a+d0sIWSLk3vWWECkSm5Aiwh3PDwzoUTs36HoQfFduSKufzaYKPcyuJot59S7sNbjcSXN6AWouS024sLJggt4i5M2shdJ0HCSuVu05KytwupQUarLaFTJJOIl3FK8fUY9uB+oXKVv7YFTGYGBuzsvkHaqeRz0G0UWADpDu2oFywQUBsMBKSUOAAxUBGxSYrAhQspBxkEE8mXLg0+pq/dKvoyNSh0lzLmcda10UhhoGS3GBXeJUjU/NUNbvSTfsEsnr9FoUVedoLMcGlL+z3OUTHCL547ODEhvahfYABElwSXBLcITCAggmIEWy7+IXWIuy58LneQ/Kr6cQDSZ+3SMb6GKc6nBM3Ygx14jQRphCRkO4VZ/CyoWiAznlddkQiW1h0gtfzW20vPF53EVTIXMGbWPjcyyp2unrfeZl78LLUHLyilApQMrl63zmZteuElL5wQPKXblEFLfC7YElOqj5wUZsAQv0CCYlGbI5CESCBOhsceJtzFqyXUT5o0mLzA6wlV7dLyYbXlccZGyMXhqx6RWVBeLexeUAinRHb8FiSNGLAPwyQ4A5Bbggw/wAW6vYD8YD3rePKH01dDKGOULz+NYnOKpaRUYFXRjA6LiAiIAc6cccgIqiu5nlNyIehiIQ/5ALkQTf207M9Rt4j1hPeSpDTKd1rZPbuU4LSwChr3HPnewF58pW0993/UZpO3Jfpz+99mo2fmmtIWs1Iu4c6NqF0rl9SXdNW7TRE5FBxr+Xsx1oYgLcZ9+ZQffL8HputpMoWpbcM/GC8Fn/yL602+IJdJL1hkwcPMpRCzKr+5tkvvnf2WsXx/+34k+CS4BpeIJxyI4GAxeSWqqpavixkvhwDr23L2U9UnG2oeXTwWF0nlhGPhCt2HHsGZ7AtHt3rxnzC1lCaSCyrf+a8VmMT5AQJRCBITx95f6KIrD9V11y46f/oF6UiUXf4A1U4JA7JeQY0hM3oO66HmFVdqbbuG39WnlJf2zKla6UimC4bGHkt3/6uCvXw9Vqex2GTgrjhorW7pfHYPWV7nQ2cr21GkiY85EmVzcOyKfPsP9//lhDRJvayCQkuCW5ACUKoTCB47AzvUvHa3aZ4duAhQkweytei8tlICyuPWWVjeL7Kt71j2B7wZLZe+PzXTHfYFiWAq/ddMHwuF5nAo18QMVd4gFV9dp0X1wHBR/WqmVsOSdvFJ9ptd/VhoFeQS2wk4NXN7dsgsVNnBTThcHzeTG1dXPSpaPWuQZMKXTZF6M/cN69qS+2ZKQmHON38JS+pMCRga6Cx8fdzjC0qoSG0YnRiZsDw67I5X+1F4Dieg48nCS4JLgmuFwwgqxyLEOJD/V7UPvqH0rSd0rU6pG0NJYSM5iU+P3p3txsUGDLnL1X9D49Nlpy+9dp2hZet9fznEj25OCD2RPwmHoVPXfGKzDv5ULvd7vbw5X/0s/PaV0ofFmQOMaSBWNCw+QKJ96WN3o5Bxb3wuKHl2hDeoesphqSYIogmK41g45Xbv1G6bnythXNv9vD2GcIrUHFvXHZJ0MRfBwJbvMbghIz2Mdc+JLheyA1BZi7IQs2eeEwLiR8kgHlbnIx8hlhbPJZMKK0NCDmx2tboR9cHxuXCYAeUNEZJUxQF8KccL7yb+Ys3B8SeSGCaNLdTVUjruf2d33gwgh3XsQjjQFGRaat2yLic6ZZ7/+GtRnEOEFVXG4y8or0o2jEYFhHbjtAAI+d1PxaJaYOd39/vwmMnyZTuVdJx7SvLiG7fg5+k4pWj6n4IliRDf+3G3zt77Qy28SfBJcG1dKEINsD70p6o9ALlwfK3IhKqciFOENJQvlw3FI6BxBXiad3Jhq//Nxy9IwkzalUWu6+/8TwOHr/qA5cE2qlW2gsaxAjJgIQZyhT3P7busbVnH729hzcXXsWKV44oQmR1Yh1UKaAG4a0tQ32GkJSOq1/K6MQMr2MEAh2Zmittl/TCPCCrp6u5awQzLuWFqSt3SPct6zY3UNlILGsIKpk7I3bisSS1wYoBElwSXK+LULAC1up2IfEkt/956bz+tdbi7lr8kTU9feMe22lgYtHPXfi8lm1AaOa8cVpbaxXECWQTVc+sxkHkpGwpWLpFm4S5cGD2K9QZ5uw5q54wWCmNBvkzhGWg+IhOH9DOgby4IOcIV9E5L7zD2CihfLTVGMD5QcYRroQnF2UvH9aSMxuqn8A1NKaB68EKogSiv7wGyaqdMECCS4IbkIUiVG4aZPbXvn1Na/F1LWSorjR1xfaAxUwG2rapdd0qaczVX19fQU50Yy5xDWilIunPanID7yK8djqlY321hT/HwYMJfV3ItmFDZtX4I8YVShE6bUVBEJScRqELz/ZFpeVrK5P03PpOshes+805Pa9h9nuELUVlFCg92+r9F/zCsTd7guQiBCa1YYGgsp/Z7ef5SFydiAESXBJcTqZuGChcvk1LCsu1aMFzi0e78ADadUKBlmfV3nNaxMdlJ6OvIMeIZY4rmm2pXaGcgfFrv6znuTTaL93jQXJrDlyUxPJGy5KUEBcKryIUMHTaiQTN/CUvPjNeeAKAmGaE7xg9J8I0oEAAxYPhurfQ/riiOVKyYY/S7wUujfZjsOMX3PurZPesCQlt7OEaA16XZN1XDJDgupEbX43G4+x5gyH2tv7dW1rFDLBoYXEqWvOqbT237rhHghBI1mCLtZnfIbwho3mxpcQGcb3ZvWuVTrHZxMVMW7jOteD+35RUGqrsuY+Nmf9D8xcV7FzXNPIKbeC5B688E6YTlZYnM158U+t88OCXbNxjWV99tZsKW4hPl4zmRYJqdfAqG7HLUMei8ERu/yZKiHFtHnas+3pPBOtxJLi8iXgT/QcDIDeQsxpqAfL2PR69I6EsKj3fEfZMre/1SwnBmw0H+mzhh39X8ZxWy2ThkX/D0dumP34eqF9mfI7H2iB9II5WLDLw4kKiTNeLi/sJWr6utqGiXdsFvZLXzaceq7AM17mG+xVyauNySqV43W4Vq+1P+I0nFqBgUbjs5V/tNtx95fXt6dSx+7iS4JLgchL9DwZUbJ2myDs8v/CkOUXuBxnySPbxXJiteF//7k1BVS8rJ+PYwgrljVv44fCqJejYD0UnsjpXqtLBVtgI4TYo8KHj1YYXt3L3e4K4W3jIof2qd57/lfLtR5WyhRV99Oeco2KTJa2xT+reuaGeaiCeVmccPX+DRNfsnrWW4t6ffvO3JL3BjgESXBJcTqBhUUo0HguKzuLUe++vMqmm09KEn2CcSMq2HhZky3suzGa+R/W3zLZlEjbOusQbnBux14ifNrPtgTxX3eEbKjbUCpygPHFWxwpB8qROn9ov/0ERQJSobTx2V+scKHgBEm9F/8w6JzSKobSA+GKdecSbbeHttjo0x6z+8zwkvMGGARJcEtygXjQCdcOk1HZrP5ou23rIkbXl0xv7/ErI87age35W+Sq8f9Y8fndhC4lULWceC8ope14/VN7D81yy8Q3LkhsRejPnjTNaZXWhJ417BEUNEKeuY9PK3e+rcADXmAXrKzZL2AyA1Ov00/M3rqp9k9uXO24DHaxjzHaFDpEnwSXBdTzBhQQQ4ug8Fxdf3i989HeJzix0pA0Rgzjv/Q8tZy3q3QAAIABJREFUI4aoWDaxoklVP7NqUUFWfOnmA9rEyxeMBOoYVDubWNFsWcEAxKjr6kN3Xv8fLeUE2A4Vv6Z0rwkpghdfUiO1b13V3jS7YwZhHg1H7qhiEFbdBzxv6JA2jpXvY0WCS4LrSHLmPkmgHGvNgcuGCS5iCRFf6H4up/0PXdr+x/80bDv3BXyg/0tfOCBh45IstS9ktkC+zHqkPFBfAvE5vH3Tn9+rwm2swCFURmoOXjaFtBmxx9y3rkrs1FmW4sASe2UUSvm2w6Zsnvo/+odSzBifPzPk7GCFbXlO30mek21FgkuC6/gJE0k0EKU3sujiWMgWpc9b5Gj7QZPUqN18OR7xnuOySyyVSoLcU/H6NyQUE8sGsiG8uFYmO8KLC33bga5vxedTulZbvtGxggQAX2OSsqRo9S7puvGN3zaDLBzONXpipqPnHCvGiue0J2EmwSXBdfxkGZ1VLC2nHxtegBBn561Sk5MmS1Rdqn37umHbDUaEEAtbsGyL5bgcnZAhrec+s4X31mVPPFXIW/yCWFXGF1Xe5p18aFlYiqsfrteWs5/I+PwySzc6Vt6vrlK/2T2rtUtUu2yBV1TXy2xdamnSpZX24LntSSSDdVxJcElwLScSwQp+V7tiC2epWvDuC4kv/zeduB9ScYGu/pr5ilKxmfOXmkZwEW84770PBQUGzGyn57kQd53W0Gdau33BS6COQXEFK1Unpq3aKYg9D0R/UDI5PHaSpVjwxIYV79EHPO2BKgJCSfyxHeT5MGcBw1a0leckCbULBkhwSXAdP0kmzKiT1vPGy5HOffOq420HDxU8bGZJbCHsI3/JZsvtCgI4fdM+v4iGPyTFyt+iwtwEC3WD8dQC42113HL3re8kenKxbYgcvOoguS1nPtbSAnZhBvG4KO4RkZBu+X1iF6LDfjiTtJPgkuA6fpJMrmpXlYhcC4ivr1V7zjjeg4uFAzHMFa8c8Zss4vE6dFLxGNzqBQltrj1kbmiFr7ix+jhU1Mrtf94yG8JziMIPVvejctdJ2xVOCRsbr54ctF30z5PbdeNrSapssUwxw+r7j+d3JuEM9LiT4JLgWrYQBhrMutdLroIO6seGF+zqA5dkbIYzJcLcbQ25MIjR93/0i2EbupMkiPlP6V5tOR5HhI2V2IIK7cIF7m0Oxv/h4SvffsQyO4Lgxk+vkb77P/o13oPZDsocoaic4H5fDPQ/pOlQtMJf9Y6qveckIiFDgOeBrsXPSSSdjAESXBJcx0+OCTPrtcrONh6/J5CZcvIE4uo7Suk2Hr+vTXhcMkiBeOwKgpHasEBwzcFIVqh+hzhmjAVK47rGx+xXnBsEywobwZMPDVlsnMxud7CcD7HrBUtflN67P2jbEJ56PH1iLC5JbLDgOtjaQYJLgmvbRcTXmw0lNnV0cLtu/FklWPl6HTsfF5NbKnPeOK29WEPFIrW+JyBYhLZubv8m7bZaQerMPuf8c59K7NRKy+w5MmqCKr9rhcRa981vBZUF7Xy/oG/AYfH617Vl6hADXX3gIsMUuIbb/l7RnQtIcHlzOP7mgNQV4v2MZjfD06SE9alLqchO6/nfa5PG6v0XlO6t7kRm5HfwEoNYmE0qg+l8GItJNR2W3tvRWSVS/+4tU+2I0ISag1ccEdvu0smt2nde4HXXwU/PnR9kYnmTpeNs5N7isfQmBxMGSHBJcDk5hkVJ6aZ90vfAeEwhPGVQYQimmzrQbUHCFpKO8MhUZ5HGb2DHSXM7A2JHSJCVbT2k3VbdPgbyd22XnkhGyxJL7TkqJlklsy0ysZJdx9U/yeSO5Za2O9D3x2DXGxERIxNKqqVZQ4cbeMI9h1CR30XYN5xjMPvxOxLqwTBAgkuC65jFZLAb4WnSx9eGSQ8WmIJlWyViQopj7Qg9WZ0kPXfCh3hYVGkKhB2h0jBr5wnDY+3e3mD/H0QRmB4M82Z8h82dTpEUb/bDI/eaA5ckPCb0dW+N2BZPkLLal0vfg5+0MNl28YmMTS+wfKyN9InHkngGAwZIcElwOTGGRUl05lSZf+4TLW1PkLv4kmrbSRr5MkGFx6VI5e73TUnYgkTYhOJqy/EIglu196wWmfBGzILxs87rX8uUrlWW2xJZ/AjTMRre481m8DpndaxwpCoA5p/qfedk8afGi0BgrLM6V1g+1r7MBzyGxDaYMECCS4LLifE/GECSlM5jdsTilm4+KBETUh1ny9T6Xmm9YLxIhjeCgwIFkAmDR8vKSRKkDMk53tpgl8+6b34jk9ues9SOrjFKa1ooKFvtj+1Qnrlix3EZk5QdkDa72h4srwhVQGIdxs2oHZHoB9sh8S9Y+sN2kOgGAwZIcElwOSn+BwPpTQul76HeY8KeW9/K5PbnHJEc4z5xwXtrZtlWEM+xmVMtxSQIdPW+C9qJPUYJyHAcD4WPtMY+S+3owgE84rNfO2WYmLnbBQTZ6phhV3uD9RV2RGy4ToW4usMfBCxJM1jtx3aRVHtigASXBDcgi6An8ILxPR63q1rxn/6f1mLdeu4zJU4/YpQzasSjQIa/YvXuJAf/L7j3V5X9PzIy1lJcztpxXBY+sqcOLuzYfuWPqtJVoO6z/KUvCeS9PMfTl/cIb6h45ahEZxVbOuaBsoU/14HXvefO94btOO+9R5JUOd/x9vPH9vyt/QgyCS4JLifF/2BgRHiM5C950a868fBkRWc6o7oZ+qoT0jEU6QHZsTrco2TDG7Lg/t8ME4mh2h4s3yMrP27a7IDc2yhaABUNXU3c3nt/UYU3SDCiJH76XGk4Ylx6rePKH1U1QdrQfiSNY6o/piS4JLgBWQRD4SaFLiWSPVrOfqJNfCCZVLb1bYF0Vij0WbeNMbkztbO+hyKBPbe+k9jCCksrNOUsWG9rgjv3zasKy7rja+R3KNDRdvEL7XsGChoIT0CFOSPXteOx4bHJgqcLQ90jnt8jTCi7Z63j7WdHTLBPJLi8sUnUTcEAqgvlLd7sl2cSyVLF63ZLIMrODsfkh4SYileOGV6EPRflwd6jEIOVJUiTKpsF4zRYG0L5O8RyBgJ/uF9QVtdfLdzy7UckMiXHlHt4OO4JM685fdM+WfjIODazF6wTPIUysy08lz65ou2G33b04JIYckJ0wwDiZ2NyZwgkq/whOL13/6JqzYfHJNvKviPCxkpEfLqKlfXHPoP9Fkk2SDqykvBExKcJ9EMHa0cof5ezcKOEjY23HHuQItOJGfW0bc/t79V9R1IQpXS1u28Zj2fOX7pFkEdAGw4/seIYBMcYkOC6kRuCMjhAOdzjALmdtMaFgthAz4XYyPuuD75WslejYpJss+iAsBc+t9Uvu/hiQ3iwcvuft8xuKm50+xHL++FLX80+Bt5UxHJa6QHHPQrvLRIrzdDAhQ2ye9cFhJQP9/wy1PUnty9XyZtGcYH8ARJcrmFD4ctJ35PgkuBaRiJC+UaKTM1Tkj3QuDW60LgfD13LgmVbbKFRiRjlcTnT/a5a5m6fgf6H3RuO3rHsMTs2MVkdK/0a24HaPpyfw/uNjPpAeG8RN+vv/eFuq6aTDyVsnLUayKEwJ+X0rZee298ZxmZ2zxq16QiFPrKNJOKBwAAJLgkuCe4AGEgsb1QJZzq6lO4LN8IVSjbskbCxCSFta5CPrI7lhhded1sY+R8e8IyWxZbYTCUUZhXLvPceBqw/RvqueywSthC/bOXiAduNnpgp8899arrtxqbnW9p2K+1i1rmhIqKjSJHZujQgGxuz+snzkORajQES3AHIjdWG5/mD/+ZGVjceF+pUF/IkKHjkDiml0UlTQnYBjy2cJbWHrptOajxt5XqPRX7266ctkwwDSSt94UDA+uPql5Wv8PwlV7dbijF4h/OXbDbdbvAGz9xyyNK2B/u8iwROeLJR2c0oTlLmdsnIMeMdbb9gH1+2L7DrPgkuCS4nxEEwgIQqaKbqeFS8LVA1B68ETJ/UzMkUZD+zbZmlyWXe7NV26YmkNy60BKMoJjGppkNaz//eMJnw1tbh/gxSUagsNyp2kiX2Ap5AwGKnVvpdmtebrfCkpPX8545+zB6TU6pVyQz2RHIsvOtm3vc8V2AJGe1trr1JcAchNwSbuWALVXtGpedL1d6zppAgeKma3/9QMpoXSVh06IQsYPHULccK4rXg/o9aXikUkoCEFPRBrcBPVEahqqLljXCF2mcdV/8kmfOXWkpyxiRNkRkvHjTlXvBmX1RDQ4KnFWMd7OdE4mPJhte1bIsKgMHeP7aP62mgMUCCS4LLidEHDCSU1si8kw+0Fh/PhRwkF6VUobc7OjEz6O0P6bTJHSuk49qXWv1vPH5fkeOuG3/W+j2qcsHTaoV3CudMrmqXljOPtdrmObbD9R4bCKUlm5prGZ7CohNVQQZIelnVz/6PflFYCfRCONzXg+IFNpE6yWWYT+oO37Bs3IfbNrw+ibEuBkhwfSA3usbl7+x1YyZXtSpZJDMW98Wf/luQRFWx47jEl1QLHpcHK16gGatTXQl2gmTV9Of3SmJZvVTtPaf1+BULOGJlrSrfG5mSKyUb90jPnR8sI25mYGawc2ATkFLbbak0WNy0yoDEYGNDFJ1VFLT3g9n3KTZZqHw4c8vbWviD93bqilccYy+z7c/z2Wuddh9PElwSXE6MPmIAVYLS5/ULHgUPRjaMfNf38CdFGpDMBiLpfnMGy/+Tqtul+dRHWn1uvfC5TKrpVP0qfO5lbW1hSF8lVbYIvMlm2wXes4SZ9aoiF0IijIxfMByLjVLh8m2qAIfZtnGdD9jE+CHcxOo+4+kG4r1d17b7K/SEJ7c9px3n337lT+ophN3txP7Zl4haNbYkuD6SG6sGgOcNrZsW+qlTulcrkmuWwP2ij/8lIILF61+T8fllgoSuYMEFPMszXnxTFtz/mxaxKd18UCL/89g8rmi2qhCnI7sG4jlt1U7LvLgYV5AMjIPVBM7M8yuliddOSWxBuSUhHC4cQpmh+f1HAbEN7geoKSAm1XV9u74Cd0mz50vTCb3wJzzdqH37qoyemGV7W9kVA+yXdRyABJcElxOjQQygMllqfa90Xv9K65H7QASn7+HPShYLXmJ4zKyIOTU6maKwAx5/D9TmwT5HrGZKLaSL/kvYp63aJdAFHux3A33XfOqxxJfUWGYX2ByPenVjhQdqt1WfI/wDsm0JpbWW2QR4iUovkPLt7wg0dq3qi+d5qw9cVEVFjOI1lI4HgU+YUSfoq2f/fX3fef1/JG/RJs7hBufwUMIJ26pPgElweWNwctTAALRAk6s7lMfPLE+ua1FDMlfBsq0SW1gx7MLteYtfEN2kojl7TktU2rPC/TF5M6TVjwIBOSjnapH6BDYUUMwo3bRfeu8GdzwuyG3jsbuS2rDA0upf2JygZHLnta+0SZgL10ZeEQaU3tRv27kJ4U5x0+aohDqMpRHbuB87982rMi57um3tRHKnT+5ouyghwdUgNwQObzpg4HcR45UnF0kxOo/d3Rcqb/+jVG1600KBNBPiRAONO5B4kCg8BvXWvsE+w6KtKit5IaPl2/UqNeF60Kwdl1NqmS0Q44vzl287LD13vrdkXAezmy/fIVwDMcmIUw2PS7HMFsBbXHGV1L97U8zexA3VT2CucPl2GRVjjTxcoO8l9+tBSxhPIip3nVTyeUPZYqDv8SQENnJ/QuJ+Hf7PdcrpGCDBJcG1dIG0+w2Gx4xIfqp965phEjjQwuX5efWBSxKdWaRE9gNpT6g79D34SatfLWc/lciUHK+PzkGadMMUYJuszpWC2EWrbOGSbCrbekgpXQSa3HmOv/t7xNw2Hr8nWe3LLSe3wDbUK3rv6YWUoN3YpMEbq2PDuQcvy/i8mZaNs1X4Gey8qDSG+QJhCQhJch9bI/9jA1C973xIFo0ZzD78jqTcTAyQ4JLg2moBMfPm8PVc8Mgglg5lZa3KMocUUMUrxxRp9LVd/h6H5DJdz3TR6l2DEnJotup4hkEC2i4+sZzcwXbw5KKKHRLPkPhkhIBYcSwwUPvWVUlr7LM0LMGFm/R5iwSV5HQxgBLXiCcve/mwVpIiNGETyxpsMz/B04qQkvp3b2krJrhwhYpvGc2LZWSU/RPxXHjkK8mvUQyQ4JLg2mYBMQp+M49HTN247BIp3/aulli7a+Ea6hUkp3jdazJmonUFIpQuZ2qe8l4O1R5v38PrO1QYQXRWsV+EcUr3Kq/eYTPHFOdCglV2zxpVfa7vwY/aZM+bnYx8hoRGbAoSy5sCoi6AhLuGI7eVjrGRdrofi6pcoxMzJLWuR5AM5f6dL//D64sEqnAbhCnAG57VsVLhyF8pOoT/FK9/XWnnmo13no8k0k4YIMElwSXBNQkDihim5Ejx2t1PPV+f/Nvwou7Lwg8v8fxzn8rUFdsFRNHsCQmxt1mdq7TajsW3ev/FIduEa+gK28NG3be+DRjxeZpQ2C6Vr76nFBb8JSi+jLHrGOgkN524L0j2i84qCVgsNjZRuLarHUZf4WGMyZsp2PhFJKRLy5mPtcIUUBwEMehmYzyQ50MRh6I1r6o5Qfephbv9kVgWN212wLAQSFvxWiTYZmKABNckcmPmoPBcoX2TQ0YMjw9RHMEqaSV4t5AE1XD0thL5NzNWEbGzNQcuaZGbnlvfqsS7oTCMONe4ojnacYgg+SD4Q13HrO+xeYnOnCrZveuk/p2bqt06caXuRGWo/yHPhjCRiRVNASPzsBc0dRFeoBuagH7BTu5x0tjMoAzvUH32/B6x2sD2cCRZmoEdVPCr3ndOVckzAy8IGUHhFHfbmtFOniO01xyOn/fxI8ElwQ0YSXDSTfhUBmi2VO+/IAsf/ewXWfBc9N3fIzYUZGTuwSuSv3SLqsjlT+Y54oknljdqla1FW6C64GtJXXj2Zrx40DDpcfW//fIfZGzG1IDiF+MKr3lO3wape+eGdttdffB8hQ0h+g9im1Q5X6LS8gLbv1FjBR5Cz3YZeY+NnScG4qfXSL+mHFZm67JB47mDdV6BvBrit83a5CLBEBsHf+7vYLUV2+WdoNEu/tmFBJcEN6ALqNNu2DFJWcrDChJqhCQYPRbeIWS7g3RBQxdJbxHx6YY9XyCd8IwavT6O77nzgxSt3e0znuCVQxJR142vta634P6PUrJxj8/XMxt7YWMTlBby9Of3Sv2R2ypswle7YbzwuBpeUpBaKA3Mfu2U5PZvktjCWU8VKAIsDYckqMlty/wiZAjfmFjZ8psxQTna9it/0BpnbBLNHjurzgcbRqbmSd2hDwTx8v54wT2xhEqHwVIAxir78bz+ETra71n7keCS4IbM4hGqNy8WPUgDwbvpuWhZ8X7hh39XXsDCZS8LpL5AWuGZ9cV+sVMrVelPnXbNe++hJMyo9ek6rrYgvlLXiwvyAG8h+ug6X6BfQdJReAJhHeh7zoL1qlDE7N2npPbta0rSC21sOfuJtJ77TNoufKFiMRFDXXPgsiLomfOXKFI7OjFTRsUmy4iwsQHvj9L/zS7VSgZzYQWeSiTCIaHKcxxgo5lb3zaMf4xx5/WvA6Ka4dlmI++Bg4iEDMnpXas2mmaEI7jsitfSzQckctKUgCRWGuk3j32WUNEewWUPElwS3N8sRrxJrblJQTQhzB6oUrDwECJmD1qmCaVzh6yKBhI8ue05Q55I1yIMcgM5qLBxiYbwhGum1HZL+5U/GiY/uDZicRHfOTLSOl1cX+8H9AWPj5FUhOpSE4qrJamyWSbVdKg+4hUea8SUwhPnOi9+N9wxpthoVLxyVBZ/qp8YCS909OSiX/vl6h9eR0bGqrLNOlW7UFUOG0T38wXL/08TS3MlYWaD1B+5pYVh1z000Cs2QqMtVE0JFluyHdasO062KwkuCW5QLhx2vSnxWBskByLt8LQOtKiZ/Tky4qG/Obl9uZJu8mZfeCHLt72j1ab2y09kcvtzWlgCIUTMqQ75UV7c9x8FLQHyZudg+wwJSyiL6486RNcHX0t279pBifq4nOlqw2UU25BnG85QFG/jhQ0JPO4g3hU7jlmif40NKgpC4L701gZ+RkJIDAyOARJcElxOngHGAEIWoK+KRCWUXPWHWBglC08f+X4ls3Yck+TqdgmPnfTr+CfNblWSVEbPieMh5zQ+v+zXcxmZeJG4lVrfo6TPdK4N7zG8uPRyDT7ZexsTELWEmfXatsd4Ab8gYkPp1Uam5iovsdExRoxy3eEbv0lc89Yfqz+DxxYJdLh3EHut++RhKBtgswe1jqi0fK17ymo78PzG7zXaLPA2I8ENMLkhyAMP8mC1eXhciiSU1qqYzc5rX2nphA61UHr7HiQXGdkoHoA40cLl25RkF8TjkSjm7TeDfQaCk7/0pSFDIAYbBzyyn/HSW9oJTshWR0GBwa7B756990DWoEKBzQEwMdgYD/TdUw/6R5Jc1Tqk7RGHi6IZOhs6xC8Pd5gCNoMIpyndtF/p+g5kE38+hz3xtAXSYkhQxRgRt8/ilvagPXzFAAkuCS4n0GHGAKSgsjpXKi8Y4g11yYbOworHoFB4gJ4uYih1kmOQMGUG+YAHGdqvOv2ABFX59nclKqOQePYRz1A2yFv0gsr217E5fgOd2mmrdvpscxBhHa8nyvZCHcTXhc3M46BGktG8SOGr5ezHWqE0vtgXnmpsOlEUAt5wklsSOTNx7MRzkeD6uBg4ERzsc+AmWIQtoDpR0epdSm3hqcSQfsKPLwuqWceUbT0sUen+P0pFgha8uIi51GkbysEilhQJTcTu4NhFWAgeszcev69la4wPNkeQNkOJal/tjTAWhDMYHV9cSyeJ0dd2eTtu9MQsmdK9RmlMI1lTp1CFr/2EV7vl9GOZ3LHSZ1t6azM/Gxz3tI+z7EOCS4LLCTWIMACJJWjYQhYInlGEEvi6SA7XcenzFplWWQlFJrDQ63iSF3/yL6nac9aS8sV2WxhRlW3266f9whakz1LrFxiaP7CJKdm4V5Fjo3itPnBJYnJnGLqekXFDPDK8pijkoTaax++ppxsg10bbauT4Bff/poprQGXDSHt5rLPIGsfb+HiT4AYRuSGAjQPYzjaD2gKStyArZvUia2RBdj+25cxj5cEz63Fq2Nh4Kd18UFDEwf06vv4Pz3dW5wrDcmV2xpFn38JjkwVFAxAO46tdPY8DKYPOMuLIPc8/1HtU+Oq59Z3ha2PDZzYJhP4vQjVGJ2YoHePKXSek++a3ShUBIQOe/TbzPTZxHde+VJvZcTmlhu04lJ35PdcTp2OABJcElxNrkGMgrmi2VO+7oCpembnAmnEuPG6G5quZOq6xU2epJB54ZHXaiIIa0VkljGH0gmuEJmTOX6pKyOrYFr/BuFS++p7E5OqRMsRro/iF0ev3PfhJpnSvlt9FjPd7zkIYC2Lf40tqJHfhRmk4ekf6Hv6s2hSIGHiE4QCnU7pWaW0SnE5c2H+Sd18wQILrZRHwxXA8hjdYoDEwNj1fxTzqxqgaJRS+HI/ywIjjnLXzhOQs3CBIFEM8LrRV/bHP1JU7tLVFIbGUv3SLhEUbKzrhT3tD5bfYjIBY6W4egAkoVoCkokCFTr9R8KTm4BWtMJTida+pynw618VvoCk7saJJsjpWSMX2oyqxMtBPR1CyGLHmCEXy9z7RtQN/x/XLCRggwSXB1VqknHBzBGMfIbU0Pr9cZVp3XPuTYS+YL6RV5xiQBCR5NZ24r7ROC5ZukeTqDoktqFCC+EYXcpBkePl0K2shUz+2sMJUz3Iw4sFIm6DfCkkwhBfojDF+AwmrnL71fnsdZ2499KvH1EhbQIxB0o30G4oEiO3OW7xZlRJufv9DrWsbaae3Y6H0UXvougqhQeU4I33gsSSkxIBxDJDgkuByog0xDOAxM3Rj40uqlXSSKhbxUXAlo+ExLwgvxOqL1+2WtIY+gdA/CLovEzViejPblvkVewzZMKPE2pe2heoxIKaQ9fJGvnz9rHr/eVWK2F8bZHUsVwlcvl7XdRzi0eOK5gwZfoJYbpSnhuRW1Z4zqqBK772/anmNXdf257X98h+keO1u1Xa0zV/78ffGyQ5t5jybkeCGGLnhTeq8m3SgMUeCDDQ6UYkKeqZz37oqnde/9ovA+LOID/VbeHnrj9yRqStfkfR5/RI3rXLAhX5E2FjVt4Yjt7X7g0Q1SGENZD8nfY64ZiQ0+RNfCp3khBm12qEJ7vaGUgE0X4fCjLfvU+t7BWojrvNhE4ONExLeUmq7ZMZLbyo9ZZBKhND4E47h7fpGPsP1S184oAph4F41KxnT1Xe+cj0gBgbGAAkuCe6vCwVvlIFvlGC3DRb5uOIqye3boKSy2i5+EdQSY5A/67n1rZIEg1wVigWAnCChDnGSsDe0gZE1D5JghFS4jlWE+t1bKkM+2MfPyvaNTsxUMlT+kFvotAJbI8f4n+Dl6mvzKT05OMSvQnsXSW4xeTNlcttzKga8+9a3qhIeSjf701cXfvx9rTlwSSbVdArCEXTjlV224mvozs0cu+EbOxJcElwSXBthAGoGWFAzW5dK5e73VUKQKhqhqUjg7yI/1O9BREBIem5/L6gSVXf4AxXDi3jJ9KaFktbYJ3Xv3NAiuLg2yDFkqRDW4cSFBpsEPBofahwG+x5jVHPgsoyMMvfR+vTn92mFDMAzi6IPSJaDlz4YyCzsh3YgwRGbS4TXYKMG+zsRd+zz8JE62v6/tifBtRG5IbD/C2zaIko9xkXlqMLl29Qj20Bniw9Gmob6DhqkKM8K7VN4+oY6fqDvoTXacuZjicmd6TiiAa8+QkF67ujr3cJ+GAM8HTDznsJGDGV7Bxq3UPscG6n2y39UJbcRY0tiy7nYzPuF59LDEwkuCa6pCxdvRL0b0Wq7IUYRskTl296R7pt/tg2x8IUIQVYNWfsQ9LfazsFy/t+NGS8TSqpVcpUvNhroGCSlZXWuMt1uILjYdMDjOdC1Q+HzrhvfqCcPSOAw/BQ3AAAgAElEQVQbNS7ZdDsFC57YjuCc1zkug48LCS4JLidlB2EAMZRjMwqk8LmXlQZoKJAIM9qIx8YoKQzvGuIh7Z7sE5VRKHPeOOOXCgXkxMq2HhLIi/mzkMLW0CSG9BtirBPLGyWpcr4KHem4+mXIEVwkrbVd+EJQ5CRn4UYZk5jpl338sS1/OzjBoX2cbR8SXAeRG97szr7ZXeMPwgGh+85relnsZhDOQJ8D4RkNR++qfqfM7ZSJFY0qScmOMmKIwS5avUtp1uraGZ7V+ndvCUJcXLjxfIXSBTyxnvHNILMTSqpU/HTOgvWCoh1QEqjYcUzqDt+Q9it/UnHXum0brt/BJs2nHyuVhrSmfr+Jv6c9+Z7zMzFgLgZIcElwB1zAeLOZe7MFkz2nP7835B8P+0t0Fj76u9JiRWUuFKiAmkPR2t2St/gFVRI2ta5HaQ0jUz96cpFKGkIVrlExSUEbY4kwjKzOldJ1wz+5OMTdIsHPVRYXGwHoGEdnFqpCCzH5ZWqDEDdtjmS0LJHi9a9L5a6TquQtfjv/3GfSdvGJkq0Lpsp7OphBcQtI8IGoo1JfeIxzQl2Cac5iW+y7Hlk1tiS4JLgkuA7DwJikbPV4VWext/NvUGkKyULdN7+Rrg++VslVUHWo3ndelUiGB7Js62EpfWG/InTZPWtlYkWz8lZC0ze2oFxi8mYoCavozKnqkTwy6UdPzFLlZaHTCgLqSkLy9HwameThhcfvPUMtQMBQ+MOfcYK3G4S/YNkWlaAICTcQf1RBm7XjmNS+dfU3Xlgko8HDieRAf64dLL9FP6AbjPFGaAsq8o2KYYytEYzyWBLS4cYACa7DyM1wA47XH/5JD4UhUAbXKJnQLZtr9Dqhcjzs0ffwZ6Xni9LALWc/UcQQ5VhR8avy1feUnBW85dNW75T8JS9Kdu9aJeGWWt+jvMRTV7wi+UtfVBqzU7pWqe/SmhYqTWAQK8hNpTYsUGWPQV4TyxoltnCWItMYx4kVTar4QtLs+ZK3aJPUvXNToFnrjw0hdwVpORRiwKtdSOtgNlEE/eP/VTHLUN2ALVHqOXJStoyMpNQX5+3hn7c5BsbHgASXBJceXIdhILtnjVbFs44rf1AkrXjda4pIhfqj58EIT6C+A3lEqAQ8x8jIR9IVEphazjxWeqood4yYVXw+kL2hI4zf4w//B6rtoX4dbFAWfvh36bn1ndqcwEONSm3w1EJ1BJUCSSqMkwrajDYLFgyQ4DqM3AQL8NiO4ZsEIZLf9+Anw0QIMapRafkyMipOIhIyJCZ3hmR1rlCPrhuP3xNUknKCty/UiZ3T249NAMIPGo/dUxXQ0hoXSnjs0/ADz5APzlPDN0/R9rS9vxggwSXBpZfCYRhou/REq/pTTu86CRuX+Axe8D4yNU8SSudK5vylKja1au85aX7/Q/Xo3t/H5U4nY+z//xneiHmzGUpDt19+IiifO+PFN9XGLDqrOGiTBf1d2Pl7kkNiIEpIcB1Gbgh6Z09843JKBfqm3kjAYJ8hLhOJVEMlRo0alyTRWSWSXN2mEpTm7Dkrze9/JHjUjnhVxDoOdh1+Zw6hox3/T8Uizz/3e5m187jkL9ks8NQC/3gCwXnQ2fMgx98Z40+CS4LLyd5BGEiZ26VFMlHuVVczFrqosVNnSd6i55UUF+JJmbBGImsWCcfmyxUaA08tQg8gWwaZN1RzQ9ELKFeQ1DiD1HCcOc4uDJDgOojcuAadr86cAEaOiVVyT0aJBQgEpKHMwg3aMToxQ+mnQl2g8tWT0vz+IyXNZbRtPN7ZRBkqD1CwgJTblO41Anm20YmZqggDqvaZhVmex5lzJsc9tMedBJcEl4uAQzAQEZ8ujcfvGw4RQJZ/3uLNpuMEXrWI+DSJyiiQ+Ok1klrfq1Qayre/K9X7L8j8c58otQeEVEBjlWTW2WTW2/gjnhY6wyAiSht41FjTcUqSE9okh+Pn3PEjwXUIueFN7tyb3DX2qMbVfePPhokiZJRSarsCQhwgzQTCggQgEN7c/k0y48W3pPbta0qXte/+j1ohFt7IET8LfcJcvv2I2iS5MM5XznPEADHgwgAJLgluQIiLC3B8HZ7JB96t+OlztdQTWs//XqLSC4YdJyMiYmRseoEqbpDTt15KNx+QOW+cVhqmqDxGwhpahBUV0/B0AHGzumPXcPSOoEIc55XhmVdod9o9mDFAgkuCy8XBARiImJAqBcu2GiYSUD2A9zTYJjHEV0KQf0zSFInJmylJlfOV/FP/R/5V8dIlWvzd0OQahSzaLn6hqug1nXigcDV9037JaFksk9uf09p89dz6VpDEGGz4ZHtI/IiB4ccACa4DyA1vtOG/0YZ7DMZmFEj5tsOGCS6SeEo2vhH0BALyZSitOvfNq4b7SHI6NDkdzEZIQnT/HpsiVL2rP3JbqWaUbT0sRWteldy+jZLRvFjips1WlcLc7wmQVPdz+Po/vMBILHM/F//nfEcMEAPAAAkuCS4XBwdgAKRCh/x1XP2TZPesDQmMIGkto3mRoM2+EiRvx/Xc+V5qD12XppMPVMnc1gufq8pX3Te/+bUcriep83Yeu3yGviKMoPvmt0rPGPZF0QRoG3fd+Fpq37ompS/sl+wF62RSTafEFVdJfEm1IrLQnR2T9DQJbDDSgQRI6CUbtVnfw58E0neDnZvfkewQA87EAAmuA8gNb25n3tzu4w7i0XL6sWEC0Xjsrop5dT9XMP8fOSlbSjbu0SpF7CJXPbe/U4RtUk2HSq5La1ooma1LZUrXKslb/IIKhag7fENgGzxqR9U22Hb+uU+l9fzngkpxIIFPCeCfBefrvfsXWXD/R1n46GdBqViXbqvrmla/ukhq772/KJKOV5BDd3UKtA39ALGf/dr7Ur79HSndfFCK172mPLD5S15Um520xj4ZnzdTIhLSfyWWkH6DTjJedfAxemKmzH7tlGF84gkD2qVzTf6G8yIxYG8MkOCS4HJxcAAGsnvWKMkto0QKpCN6cnHIYGREeLTyHta+fVWbROIRO4oFJMyoG7TfIyNjVYJTZEqujMuerjyWiWUNAmKc3tQvWR0rJXfhRil87mVFEiFpVb79qHpsP/fgFWk4clvwitCRspcPScWOY4pYVu87JzUHLykCDWJsdMw8j0ci17z3HknZy4elZMMbMm3VTkGSXlbnCkmYUauKcECXGAURUIVufH6ZUrGISs+XiIQMbdJqhDwgUaxw+XbDfUXfKl45Nug4GWkHj7U34eH4Omt8SXAdQG54UzvrpvY23qUvHJB+DS3Z0k37lHC+t3MG62dh0QkyuX25eozuSfZ8fQ/iNGvHMcvVI+D1DI9NVkQyMjVXoidPVUlzyVWtivj23v3BMOlz7yM8tFAawPkGGi8obAz0XaA+hx2yOlYY7uviT/4lNQevDHv7A2UnXodzOTHgOwZIcElwuTjYHANIwJr9+mkN8vBvyWxbFpL4iEzJVo/X+x78aLjfLoLYdePP6vF3eExyQG0wKiZJJnesUCEPrrbovjaffizp8xYFxAvr78KL0AcdyTDEllNJwfdF399x4u9p61DBAAmuzclNqACR7bRu0sSjZ50KZng8PpjnL9jHDCEGde/cFGTa6xLEeScfStLsVvldgMq+IoY1tX6BNJ24rx1i4eorYoGR+BU2LimgBF0XFym13dJx9UvDY1V3+AMZl10SEn3UtQ1/Z938SNva17YkuCS4XBhsjoHYqbMExRpcxMfX15YzjyW2oCJk8QGymN27ViV8+aN6ULn7fYnJnSHwhFu9GCZXt0v9uzdVIpqv4+TtOHifEdPqKmNrdbvNOD82JAin8NafwT5DfHEob8TMsB3PYV+SxrHVH1sSXJuTG94c+jeHXWyHIgg6lb7mvnVVotLyLSd1VtoZyVPQYe178JNh4uQiVf2Pf5GSjXsFCg0jwqyLVwXBw+N2ncf0rrbiFeoI05/fZ3n8sNnjhk1E9YGLhscJ6hWpdT0hjVOzbcnzcd4nBqiDy0mRBN/2GIC0lQ7BQ9a/HcqgQtIKnkF/QhWggZs5f6lAa9eKhWNCcZXMffOKKl3rTlZ1/i/ffkSgPwtFCSvaatU5oUZRtfecYYLbef0rgZSbVe3ieUkWiYHQxAA9uCR4XBhsjoGpK3c8o3fqK2kqXL5NaZvaYXJHAhO0af0JVWi7+ERJkJlNHOElr953Xmnk+jo2Ax0HRYG4oioZEWF9OIXZuIBddZIhYQsoMJjdHp4vNEkNx43j5sIACa7NyY1roPnqzJt+xKho5RkciBAN9vnEiiYJBgkps7BbsuF1LU+2u43qDn0gkPMyq03I/ldhCY/+bthz6d4u/I8iDYnljTIyMs609pnVT1/PM2vXCUFIiGffhnqPantWedd9bTuPc+Ycy3EP3nEnwSXBDdnFkBPL0BMLMuhRbWsoguD5PaptTSipthU2YIvaQ9cE2qme/TXyHpW9zCBTo8YlS/X+C37H3KLt8E4nV7WHvMcdxSgQQ2xkPHBs/pLNEh47yVZ45fw29PxGG9FGg2GABJcEl4uCjTEwJmmKNJ8yXqIX5WVDPcHM28QH76sZ1cGmdK8SeMe9XcOXz+BlRfIbNhJGyZzn8YivTmvqN4V0+9J2K4/JW/SC1vgUrdklERNStcfDyj7x3CRhxMDwYIAE18bkhjfV8NxUwWR3ZKb33P7eMIlqvfC5LckCYlNRSteTJBp9D2IK2+qMNcISUALZn3hg9/Zmda60BbmFLad0rZIF9/9meHxmvPSWRExI0RoPnTHkbzi3EgPBjwESXBJcLgo2xkBiWYNhsgDyhLAGu07gqBRWvP51Lbu4iCXIKbSFoycX+2wnxDNDtmzqim1+XdvVBsSqTlv1/7d3Hu5SFOnb/ntcEJBDRpCcRKJkCSIZJOdowJyzrjliwoSoKCYUMwqK2VVXXeMadt3VX67veprvHev06Z6ZnnDOTM3d13VOz/R0qH7r7qqnqt9664a69rmNMya/781vZ/dHluvJ0a0841w87XyvfcFDHjVWHiFwAxY3PMyN9TAn5fegBesyiymF05pz596ihVvSdWt9W9PQsU4DxkwslrKWnRY88LJr36VPQVtJ3MpdZMqld5Z1TUvnpoM/u+nXPViX0RLysXFM32El2WfxIweCs0U+O/EbZTsMFGYAgYvALVg58yAVfpBq1UbDVp6RWTBsOPC9m3jBzUFzIcGp3u01+7/MbB8TmVrrdbomVWjXlB4fVzOgdR40OppZzD+21M8ahCUXh3qZgjfLs9Gh16CS8kOTY2S5DvvWb5lG3pF3xTKAwEXgUjEEyoBE3Kgtl2QWDOte+dqN3nZ58Fyo51XxUzWJQ6liU64KmiUuihncuXcLm0ncdh0+wU26+PaKDCjbfOgXN2fHc65pyLgW1yq20K/l/dTLvfrFzzPnx/pXvw7SHrWcV6QNoVnrDCBwAxU3tQ4e6at+4di+W183+eLbM4sFCbbj150XvGDQtLudB57gplx6V0mxV00Ub3vvN7fyuU+cYrH6MWg1cUHXYRMit4RSYrva+W29+dDP0VS2XUcU7/dbb89Z09BxbtmT72ZmVmHSjuk3Inhm6y0/SW/1y3lsnG5jBC4Cl0ohUAa6DBvnTrn9qcxiYc2Lf3VDl53WEFyoh1XREEqdQcvEp/xxFz/yhjtu+pLIbnbeKZffXVLYKzuvrSNxe9czruf4mUHnS/dRU9yS3dnjNq985mPXc9yMoG2DkEkXMtgG2yQxgMANVNwkZTbbGqsQUE/f/HtfyCxwV+371A2cv65hxMKfjukRhQ5b+vjbmW1lAlRrDfyafdse13viKa73hFPczOt3lRTyyj9ndN63fowmhJDPcOjPcLeRk6J7jdug0PelT7zjeow5KXj7hJ7/3F9j1VHVzm8ELgKXSiFQBtQbpl7FQuIg/vvKZz9x/WYtbSguOnTvH7llyNUgbo8s3zce+MHNvXtf1LCQ4M1ybNK+Gjwln9s+Uxc0RH5IpGp2tyRb5NumuM2DFm5oCBtVWxRwfkRmKAwgcAMVN6EAyn2UXthKLCzdk30Ws+V7Pwxumt5iOOrUd1g0GKzcmc62vvvvsqcDlpjTZBLz7nnB9Zu13P2pY4+GEG/dTphSkruIOB84b01D2KgYltmn9HIT24VjOwQuApdKIVAG5K+p3th8PV9Jvy176j3XffS0huQiEli3PBG5GyTZprW2yad3/n0vur7TlzRUfNemIWPcrBsfzcysJibpN2tZQzKLIAtHkJGXlc1LBG6g4oYHpbIPSj3aU4OnFBEhqyhb+sRh1zRkbMOKhb7TF7vFuw64rYd/zWy7rLZO21/iVoKtfZf0+Lr1yGShNCuKgvyY0+yStn3N/sYZGFnIhvxO2Q8DRxhA4CJwG1bINEIhsP61bzOLhVMfO+Q69hnSsFy0O6anG7bijGgqXrkbpImqam3X7GhHxG3LuLqhM9t1xITIhzmrbTUwEh9chF3ozwf3l41xBC4Ct2GFTCMUFqXEX128682G6zmMs6B4tqM2X+wUMk1xbrMKrlL3n3PX0+646Ysb1v56c7Bg58uZ7X1kYORyyjLqMxiAgRwDCFxgyMEQr+T5nq21WGv2kkgrRWhJ4NbavbRFeto19Y4mytj01o8l2TGr7Rc++Ko7dtIcpx7ktrjfWrim7l092Fltt+LpD92xk+c1rN1qIe9IQ33XFyHmHwIXgUulECgDHfsMdVlfsW97/ze3fO/7MPH/meg8cJSbu+P5smY6K0asLXjgVddr4imu3TGNES0hX2W6ZPfBzAJXAyN7jJkOt4GWZfl44TeEdRoDCFwKBCqFQBnQiPQ1+7MPMluz/wuY8JjQwCeN0q+Wq8LcHftct5GT3VFHd8Xu7Zvcymc/zixwNx38KZqRLq2iYzsiCAYajwEErleR8QA03gMQcp5rVqhlT76bWSyoNyxku2S9t6M6dHW9TpxdkSl3/d7cbe//Hk3E0em4EdjbK4fXvfK3zMzKrk2DR2NHz45ZOWd/6r/QGEDgUiBQKQTKQM9xM0sSuEt2v+Xad+sHF+2bol7VjscOiUbor37hs5KEly9q7bNcRzTLXOdBY7Bz7PnbfOiXkuzcodcAbBmzZWiChftBhGdhAIFLgUClECgDPcfPchq4ZKKq2LVex3cfPbXhuTiqQ/coHvD4s693mjK3WPsVs59eqU+5bIc7moZEM86O6ti9ZDvj4oH4ySJ+2Dd8XhC4gYobHt7wH95Cedxz7HQ3Z8ezmQWDehZ7nTirmfAodK3QflcEhV4TZrupl98TTZlbjGjNuo+iM0y/9gHXvkufhra1z07HYwdn5lV23/TWT9iQugwGYKAZAwhcgGgGhF/Z8Lm+RbJ8cE++9YnMgkEzmQ2Yu7phuejQs78bOH9tNOFAKXGEswjd9a9/5yZecItr19RYM5allS1dh43PzKvsrRn70s7J9voux8g/8q9UBhC4CFwqhkAZ6DxolJt5w6OZBYPChA1auL4huZDNRm25xJ36WPZQVVmEre2rgWaabW7ypXe6Tn2HNaTN/cqr5/iZmXmVLVfs/aDhbefbkc+IQhhocgjcQMUNcFPAdeje3828/pHMgkGj2DVVbSMx9KeOPVzPsTPclEvvcgqTZgK0NdYSuete/dpNPP9md0y/4xvK7nHG+k5fnNn26mU/5Y69DW23uB35TvkPAwhcCkUEftAMzPjzw04CKotQ23r4V3f8unOdwmM1QiHZvmsfN2jRRjd3x3NOLgNZbFWpfZVHa1/+KnJXaNRwVx16DXRjTr8ys/03HPjeTbro9oZgtRGeR+4RcV4pBujBReBRMQTMwInn3lhS/NYxp13hOnQPP1RYxz5D3Ngzro5ecW95p7KREkoRvxK5ky++3XUdPqHhnstOxw1zky6+LbPAXf/6t278WX9uOHtVSgRwHgRlqAwgcAMWN6FCy30VXyCP3HBBNAAnq9iactldwb8ul7/nrBt3u/WvfeM0RXFWG1Vr/3WvfO2mXnlvNDNXo/Si65nuPHCkm3bVfZnzQS41o7dehsClLoMBGGjGAAIXIJoBgXgsXjzWg60GL95cksCdf98Lrmno2ODYOOroLlFYrpHrL3BLH3+74vFtKyV69dr9pGt2OoV6a3dMz+DyIenZ6TFmmptz59OZBa6moz5+7bkNYaMku7EtrDKb/KxcfiJwEbhUDAEz0GXYhJIErsIuKcyYBGEoBW67Y3q4zgNPcDNv2BVFLtBsYpUSpDrP8r0fuqlX3BMJ50qEF9t44Ac34/pdrvfEOa5d517B5EMaT/1mLXOLd72ZOU8W7zrgjpuxNHj7pNmN7ZUTRNgyLFsicAMWNzysYT2spebnqn2fZh5oJsF23PTFTjNLlXrdWjpOA5gGLVjvlu/9wG19918l2SOfGF76xDtuyKlb3TH9RkQD1pbtORxdJ98xxfy25fCvbvZtT7o+UxcEL3JHrNruVj73SWaBO++efQ0/MUktPWukhXqnVhhA4CJwgxAwtfJA1WI6FEIpayQFia+xp19Z9wJXERK6jpjopl5xt9P0uMWIyqz7zLnraXfcjCWufZcjkzXIpWDE6u3RwLVK9RLPv+9F13f6EqcZ1mqRsUqk6cRzbnQaMJbV/jNv3B3lcSXSwDkQZzAQDgMIXARusBUmBVVTJFAVESGraJAgXvjgq3UtcJuGjI3i+Wriim3vVWcQ2eRLbj/iyhHr6ZZLwfFrz4l6jLe9VxlXiJXPfOz6z1nlJNpDZHvWzY+X5BM99oyrXMfeg4K0SYj5zD2FIyBrPS8RuAhcKoaAGTiqQ3fXe8LszAJXgnjjm3933U6YXHd8KLxZ/1NWRP6rmw79XNK9F2oQbHzzR3fCxgudwozl81Mevmq7W/H0hxUT2JsP/eJGrD4rSJGrQX+lvGnQpCShiv5aFxCkD7FaywwgcAMWN7UMHmlrvYKxy7DxTqGUCom2+O+b3vrRjdt+XV4BV0v5KH9h+apOOO8mJ7/j+P1U4rtcDja88b3rPWlu0e4CQ5dtc6v2/aWi6Zl08e1BRVdQyLa1L3+Z2UYSxPXYCKul54a0tF5ZjK1b19YIXARu3fXQUUhkKyQ6DxgZ9WZmFXh6rb9k9yHXoVdtv/5VrNimwWPcmNOvcoseft1VIoJB3FYSUhL88+99wWkK5CzxaSW8By1c79bs/2tJPZTxtOi70nPq7kNRVIgQnocRa8526p1Outd82xROrdNxIyjDqMdgAAZaMIDABYoWUIRQYXIPf4hgDUzSa+18QiHtN4myoctOq1lGFB1h5IbzI+G5/rXsA5TS7tvfrl7b1S9+7iZeeKtr36202d0kcntPnufWvCiRWxl/YDVAVjz9kRuydGvN5k+xz+H06x4syS4LH3qt6J70YtPCfn+UHdgCW9QzAwhcBG7dV471/AC2Vtrlk6rYtr5wK+azxN2cu55x7bv2rSlOJDQHLdro5t29z63Z/0Xm+yrm3qNe24M/OcVZlZ9nuXnVrnPPKF7r8qfeq1h6JXJ1/xLfHY8dXHYay73HUo5X9InVL3yW2Sa6d7nQlHJNjkG4wUD4DCBwEbhUEA3AgCZtmH3rnswiQkJw7ctfuVFbLmlTTjSQS24BEkMD5qx28+/fHwn2rYd/LemeCglcCXsJx+nXPhAN0qtUZahBfz3HzXSLH3mjYumWEFd4LUUh6DN1fpvmU1Y7RT3bE2aXNAhv08Gf3ZAlm+vqfrPah/3DF2HkcfXyGIHbAOKGB6h6D1C92FYCUeHCSvVPXfDAy20STF/plouF/IglZuRju+mtn1y1hK2E7+a3/+GW7D7oRm251HXqO7QqAkqxeU+546mKilwJvoUPvuKGLT/dte9WWz3uac+JwntNvPCWkuygBkjX4ROrkj9p6WU7ZSkM1A8DCFwELhVEgzDQ7+QVTjNuFeq9TPpdwnjypXdGYbFao4D/U8cerlPfYa7n2Blu2IrT3aKHXovSrd7KpPRVatu6V76KpvKVrTRhQ7XuVcK9+6ipbtaNj7ot7/yjYvekmc8UluzEc25w3UdPc7Jjte6hEufVm4VSerPVwFmw86WavrdK2Idz1I+YIq9qL68QuA0ibnj4au/ha+086dBzgNNgHk1VW4ogVBSBE8+9MRKe1Ur70d37R8Jv4Px1bvIld7pVz1c2vFbafcsm6rUdvfUS13XY+FYRTnJXUA/k5EvucOtf/66kPEm7H51v1k2PRdMTd+xTnV7ochnQZBhDlmwpaXDZ+te+cePP/nOr5FO598nxlL0w0DYMIHARuFQSDcKAeg01WKoc0Sj3gJk37HKKW1qp3kEF6Vdv5tCl29yEc290mlpYfr9p4q3S2yWW5Gvbd/piJ4HdmpWRRG7nQaPduDOucav2ZR9olc8W6s1d9uS7TjN9dRs5ueaiDXQ7YUrkN5zvHtJ+W/bkYade9tbMK67VNiIFu2P3UhlA4DaIuCkVEI4Lq3A5uns/N/v2p0r2xZXg2HTwJ3fqY4eiHrRjJ88tyt9T4tpnSb3JmmFN09medPX9bt49L7jV+z6tqm9tklhasvstd/y6c13T4NGZYtv691LuZ9lG7hhKh1xISu1hT7o/bVOs2Nm3PekGzFsTTWl71NFdm+VFuekv5XgNLhu+6ky38cAPmRsyclNRI6hTv+Pb/D5KuXeOCatMJT9rNz8RuAhcKokGY2DA3NVlz/SlEE3rXvnaLX7kgJt+3UNuzGmXR/FyB8xd43qOmxH5zmqGKU3A0Om4YZGA1HXHnnF19Op8yaNvueV734/iy1bSBzVN5MW3bzjwg9NsYL0mzC45tm2lKzbF9B28ZHM0UEwD3eJpLve7YhrLN1cuGJXqfS/VBvIPPrnEqB6aQnr82ddTbjVYuVUqaxxXuwK02nmDwKWQoKJoMAbkEnDyLU9E0QLKFU12vHriJKDk/qDZvuTPqtfjmojAxNq29/4dfZaglUC2Y0aj9xEAACAASURBVFtrbQPUlD6FGuvYZ4iTi0C1C9ks51e84eNmLInyp5TezWJsqXwZvvKMNhP2CvU2euulJbuhLN71Ju4JDVZmZXmG2LdxBW087xG4FBQ1VcHHAeV7dQor9VzKj1HxXosRRfW+j0T2qn2fuuPXnRP1KLc7poc7qn1zt4laYk0+zlOvuMete+VvFZveN56HcocYvnp7q04QoVjG/eescurBj6enmO9y35h08W1VC99WSwyQluqUfdi1ceyKwEXgInAbkIEjPpDbI//MYoRFve6j3uI1+790U6+423UZOj7ys61lYetXvor9K5eClc99UnG/XMvPzYd+ceoRPWHD+a0SAq7riEluzo5nS76f1S987gbMW0uZ1YBllv9s8LlxRGo5eY3ApaCgsmhQBjTQS72E9ureRE8Ia/X0SRjKFUPREaoZ07acArjQse0693Yj1pwdidBq+SrLVutf/dotfPBVN/6s61yPMdOdphUulLasv3cZOs7NvOFRp3BzpTI28/pHXNfhEyqetqz3wv4ILBiofQYQuA0qbng4a//hrHYeafS+ZtSau+PZkgVHqUKlmsfJD3j2bXvcoEUbnXqqq23H1jh/rxNPjiJNaIBVtRok8pGW0NUEChMvvNUNWrj+SHixMie8kDtIrxNnReJW6S8175U2DVSs18ZKa3DCNSjXYeAPBhC4CNwgBAAP9R8PdRZbSAD2mTLPLXro1ZKFR6mCpZLHSfSt3vdZFFdVU9V2PHZwcFxrAJom2tjwxvdVzyu5LshHe9ZNj7uRGy6IesEVfUGRHjRILB72LY05NaCGrzzTaarncnugFav4GEKDBcd1GjtsL61Mx25/2A2Bi8ClwGxwBjSjVL9Zy9z8+/eX7BtZSbGa5Vzb3v8tGo2vGdoGL94cTZoQegGvBokGzFWrJzfJ/ubuoTBvmjq584DjE3tS23fpE70VUO+5JpiYfeueKJxcuVEz1r/2res3a2niNUPPb+7vD8GCLbBFFgYQuA0ubrLAwr7hFi567dt74hw3d8fzJQXfTxJF1dym6A8SXRPOuykKGdU0ZExDNdTU864pfjWzXDXtXOjcmgVOvrsrn/04mvxDnxc9/JpbsfcDt+nN0n1t49eddvX9TuHtKIPCLYPIW/K20gwgcBG4VBowEDGgEE7dRk5yJ12z061/9Run3tG40Gjr71sP/xrN9jVyw/lOkwV07DO0YfmV4FOv5vz79rdpPlV65rU4Y0v3HI64rJfoF5WupDkfwg8GSmMAgYu4aViBQKGRXGgoPNW47de6lc98XLbfZFysZP0u8bTxzR+jeLAaDDdw/toonJX8Ucm/puiVvfxcx5/952iSjaz2rfX9NSht0IL15DX1FAzAQGYGELhAkxkahEWyMAzJLprKVZMNaBreas2olSau5H6w/vXv3IpnPor8gkdtudQpfqrsW2szj9VCnqvnXT3ZijBwyh1PlRWGKy1P2mL75kM/uymX3unkI14LdiYN4Zd75HFYeYzAReBSecBAKgPyze05bqabeOEtbuWzn1TtVfiWw/90a/Z/4RY9/HoUu3b8WX92vSaegrjJwKaEYPcxJ7nR2y5zCx96zSkSQlsI00pcUzPPnXLHXtc0uLF8qxFYYQks8rNt8xOBm6ECAda2hRX7t5391XOqEE2KVDDtqvsiIbr25b+VFXVh7ctfufn3veimX7vTSdAOX7XdHTtprtMEFOR16Xndvltf13f6Ejflsh1u+d73nBoPlRCdrXUOpVdhxXqOnwUH1E8wAAMlM4DABZ6S4UGElC5C6tF2in3arqm363TciGiAV79Zy93wVWdGs18pTNecO5+OXAoWP/KGW/bUu1GUA/XKSsgu3/tBFKFh6pX3Rj2Mgxasc32mznc9x86IQnsptmo92qSW06xYwENO3eJOvnVPlBflxqFtDYFr4rbPlPnwQN0EAzBQFgMIXAAqC6BaruBJW+sIcIle9e52HTYuioHafdQU12PMSa77qKnNemPbNfVy7bv1i/6Yjap18kbPQMfegyKhO3fHc9FgPUWiaA2xmvUaCnmmqZU1a1soM9BRBrUe59gaW8cZQOAicBG4MAADDcCAXBcGzFnl5tz1TJvHz42LXw1klOuLIkJo0Fy8ouI74gUGYCArAwjcBqjYskLB/hQkMBA2A4qQMeXyHW71i5+3eW+uZmUbc/qVrvPAE9xRRyNuefbCfvbI39bLXwQuApfeEhiAgQZkoN0xPVznQaOiqXdn37bHaVayeM9qtb4fiW/8dzfrpsfcsZPmRLOUycebyr/1Kn9sja1DZwCB24AVW+hQc38U3DBQHAMSle279InCcfWZttCNO/OayIVh1fOfuC3vVD76wqaDP7m1L33p5t79vBs4f53r0L0/LgnUQTRsYKAqDCBwAasqYCEwihMY2Ak71RIDGpDWc9yMaFDa+LOvjyIwLNl90MmNYMOB753i02adwln+tYqhfOrug9E00H2mLXBEzYD7WuKetITJIwIXgYvAhQEYgIFEBjRtc9+TFrlhK89wky++3c1WyLFnP06cLW2DhOxznzgJ4gU7X3In3/J4JGgllIecutV1HT7BtevcM/E6CIwwBQb5Sr62JQMIXCo2KhwYgAEYyMyA3Bs0KUfnQaOjuMiaea7PlHnRn/xquw4bH4WEY+AYIqctRQ7Xblz+ELhUbJkrNgqMxi0wyHvyHgZgAAZgoB4YQOAicBG4MAADMAADMAADMBAUAwhcgA4K6HpoVZJGej9gAAZgAAZgoLoMIHARuAhcGIABGIABGIABGAiKAQQuQAcFNC3i6raIsS/2hQEYgAEYqAcGELgIXAQuDMAADMAADMAADATFAAIXoIMCuh5alaSR3g8YgAEYgAEYqC4DCFwELgIXBmAABmAABmAABoJiAIEL0EEBTYu4ui1i7It9YQAGYAAG6oEBBC4CF4ELAzAAAzAAAzAAA0ExgMAF6KCArodWJWmk9wMGYAAGYAAGqssAAheBi8CFARiAARiAARiAgaAYQOACdFBA0yKubosY+2JfGIABGICBemAAgYvAReDCAAzAAAzAAAzAQFAMIHABOiig66FVSRrp/YABGIABGICB6jKAwEXgInBhAAZgAAZgAAZgICgGELgAHRTQtIir2yLGvtgXBmAABmCgHhhA4CJwEbgwAAMwAAMwAAMwEBQDCFyADgroemhVkkZ6P2AABmAABmCgugwgcBG4CFwYgAEYgAEYgAEYCIoBBC5ABwU0LeLqtoixL/aFARiAARioBwYQuAhcBC4MwAAMwAAMwAAMBMUAAheggwK6HlqVpJHeDxiAARiAARioLgMIXAQuAhcGYAAGYAAGYAAGgmIAgQvQQQFNi7i6LWLsi31hAAZgAAbqgQEELgIXgQsDMAADMAADMAADQTGAwAXooICuh1YlaaT3AwZgAAZgAAaqywACF4GLwIUBGIABGIABGICBoBhA4AJ0UEDTIq5uixj7Yl8YgAEYgIF6YACBi8BF4MIADMAADMAADMBAUAwgcAE6KKDroVVJGun9gAEYgAEYgIHqMoDAReAicGEABmAABmAABmAgKAYQuAAdFNC0iKvbIsa+2BcGYAAGYKAeGEDgInARuDAAAzAAAzAAAzAQFAMIXIAOCuh6aFWSRno/YAAGYAAGYKC6DCBwEbgIXBiAARiAARiAARgIigEELkAHBTQt4uq2iLEv9oUBGIABGKgHBhC4CFwELgzAAAzAAAzAAAwExQACF6CDAroeWpWkkd4PGIABGIABGKguAwhcBC4CFwZgAAZgAAZgAAaCYgCBC9BBAU2LuLotYuyLfWEABmAABuqBAQQuAheBCwMwAAMwAAMwAANBMYDABeiggK6HViVppPcDBmAABmAABqrLAAIXgYvAhQEYgAEYgAEYgIGgGEDgAnRQQNMirm6LGPtiXxiAARiAgXpgAIGLwEXgwgAMwAAMwAAMwEBQDCBwAToooOuhVUka6f2AARiAARiAgeoygMBF4CJwYQAGYAAGYAAGYCAoBhC4AB0U0LSIq9sixr7YFwZgAAZgoB4YQOAicBG4MAADMAADMAADMBAUAwhcgA4K6HpoVZJGej9gAAZgAAZgoLoMIHARuAhcGIABGIABGIABGAiKAQQuQAcFNC3i6raIsS/2hQEYgAEYqAcGELgIXAQuDMAADMAADMAADATFAAIXoIMCuh5alaSR3g8YgAEYgAEYqC4DCFwELgIXBmAABmAABmAABoJiAIEL0EEBTYu4ui1i7It9YQAGYAAG6oEBBC4CF4ELAzAAAzAAAzAAA0ExgMAF6KCArodWJWmk9wMGYAAGYAAGqssAAheBi8CFARiAARiAARiAgaAYQOACdFBA0yKubosY+2JfGIABGICBemAAgYvAReDCAAzAAAzAAAzAQFAMIHABOiig66FVSRrp/YABGIABGICB6jKAwEXgInBhAAZgAAZgAAZgICgGELgAHRTQtIir2yLGvtgXBmAABmCgHhhA4CJwEbgwAAMwAAMwAAMwEBQDCFyADgroemhVkkZ6P2AABmAABmCgugwgcBG4CFwYgAEYgAEYgAEYCIoBBC5ABwU0LeLqtoixL/aFARiAARioBwYQuAhcBC4MwAAMwAAMwAAMBMUAAheggwK6HlqVpJHeDxiAARiAARioLgMIXAQuAhcGYAAGYAAGYAAGgmIAgQvQQQFNi7i6LWLsi31hAAZgAAbqgQEELgIXgQsDMAADMAADMAADQTGAwAXooICuh1YlaaT3AwZgAAZgAAaqywACF4GLwIUBGIABGIABGICBoBhA4AJ0UEDTIq5uixj7Yl8YgAEYgIF6YACBi8BF4MIADMAADMAADMBAUAwgcAE6KKDroVVJGun9gAEYgAEYgIHqMoDAReAicGGgIRi47Iqr3SuvvOaefW5fQ9wvlWd1K0/si31hoLYZQOAGKG6auh3rjh91Yqa/Dp17Zq70ex83OLrG0OGjWxx7TJfern2nri22UyBkKxB69O7vPv74E/f555+7m26+raA9p0ybFe2r/fV32hlnFTymUfLksSeedFr+9a9/Y5M85V6+57pRWOE+m9ygYSdE5ftxA4bV1fMCv9nqmJBZR+DmKejrNeOXr1gbVeRZ/k2YdFLmQmzHPfdHl/jmm2+bHTvj5Lnun7/+6r7//gfXf+CIZr/Vq03bKt1XX3t9LhsnTZlR0Ja33HpHbn99eO31Nwoe01b31trXReAWV/GlPdetnV9cr7j8qpadPvzwo6gsefyJJ+uqDIHftuWmWjyWcl4ELgI3KsQqKXCvv/HmnMhat2FLs8LxT0d3ce07dY/+SgG2kY5RL/iPP/0U2VKv1ou59798+lm0/3/+539G6//+7/923Xr2K+rYYs5fz/ts2LTN3XHn3e7Gm27FHnnKPQRCdoFgZZrKt3p+Rvy0I3Czc+Dbj89tbz8Ebp6Cvl4B9XtwV63Z4IaNGFPw7+hjemQumNMqQl3vtdcPuGeefd7JXcK341nnnJ8Tv5279m72m78fn5vcueddlLPV3PlLCtpq+Mixuf1vu+3O3Of1G7cWPBZ7t31hXCt5kPZc10r6ai0dI0dPyD1rS5evDuZZQ+BSJtTas5Y1PQjcwAWu3AWyQlHs/qVUhAjc4gpN+S//7W9fRxXnu++9X1QeXnLpFdH+//d//+fkN/fdd99H3/c8ubeo44vNd/YrLg/r1U6lPNf1eq+VSDcCt7aeB/itrfyoxDNW6jkQuAjcksVPKQVJpQTuCaMnuEd2PeY++ugT949//tP913/9l/v222/doUPvuD/fcJM7ceK0gvd16rJVTv5l+uvbf2i0v3q/5bf6008/O73m/+tfv3A77r7PDRw6Mu/5Jk6eHu336muvR77Hv//+H9EgryefetoV0/saf4D1Ot2W1Ws35r22HXvgzbeiQz766ONof9lHi+yjV6i2X3ytgWxmhxWr1kX7XnHVtU73ogFZcnvQuabPmpN6Dp3z9jt2ROe58urrov10D08//WzkZqG8eeaZ59zGzaflPUc8baV+l3uH3VN8/eBDj2RKw/yFS92+F/a7zz//q/v999/dv//9b/flV1+5l156xZ1/wcVuwKDjM52v1HtqreNKea5bK221eB0Ebm0JKvitrfxoy2cWgYvAzVs5Lz51pZMgkNhRT6CET89jB0THpBUko8dNcjffcnv016vPwGhfiUltkyiw5bbb74q2XXrZlXnTEH9A9Or+f/7nf+w0ievPPvu84DkVNsqWESeMc6efcbZ9bbHe/dgTieeTcLzu+hsLpqeYCAj+fUq4a5GoKsavT3liNrn1tjujtMr/2ZZ5C05NTL+uKYFmyw033hK5lth3fy3Bn8/d4Ysvv4p2f/2NN93FlxzpTfaPt8937binqHvy7ZH1c5cex9nlWqyzRFHY8+RTLY6Pb9j5wEOpti2UbrkQqQH1wov73XPPv+Cuue4Gp2clrUFy9bU3RM/MpKkzo2sqWsr2s893T+x5MhLhesbU2Cp03VKe60LnbNehq9Mrej0Pz+97MbofNXoKNYx0XkX/0ADJvXufdS+//KqTi434tfLDv/ZFF18e2WDb6fkjhOic8XLIP49soLzT9fbvf9ndc99ON3P2/IK2s3OMGT85Ov/OBx7OIaH02zWTfN/lCrZpy2nukUd2R2WqGk7K/2JsZNe1td7O6VqXXn5VjgU1LtVAX7ZiTYv7yHq/xbgozJm3KLLbi/tfikLwPfTwLqcGeTERdFTuiOfdj++J0nz/zgfdmdvPdSqL7R7T1tXgN+1abK9fwYzAReAmFiYqoFToJy2//PJLVAmnCdwVK9flDpNfqAoI2zf3g/fhq6/+lpiGpIJFFbsGTmn5+ptvoh60GSfPcxokt3L1eqeoA1988aXLKnDXrNvk/uM//jPqnVOv61XX/Nnplb/E/c8//+LSBK78jG354Ye/RwJFvcAnz1nozjn3QqeR+//7v/8b3X/S/SRtU+Ftiwr8pH3i27ZsPcMOcXPmLY6O8UWv7B8/xr77AvfXX/8VnefVV193OqcqMDVqbLvcH7TNjvXXJnAlILWo9/u88y92s05Z4M4+94KoJ9gSee2fb0g8h3++cj5LIEoA+X+H3j4cXb5YgXv+hZdYct3Bg2879UhLNE096eSoJ1pC/R//+EckkrKmVc/Fe+9/kDt//IN82NWzHj+vrqdF97Vl25kRW/Fj1dC5/IprWhyrc5XzXMfT4n9XWv3GazxNEuBJor1TU6+o4SyukhZFaBk/YWqze7GyRPmYL7yhNU7U2+6nVb37Bw8eSrpctE09/v7+aZ9V3uRb4m99hgwfFZVZacc8tfcZp0ZC2vXi2y+86LLoVF9//U1U/lm5qI1i1/Yv9X7zCVzZXQNf0xaVv336Dc6lwdJi68uvvNbpLVfSonI4PjjZjqsWv3Z+1vUrZpPyDoGLwE0shNSrYMvf//5j1OOg3gG9BlcFqte0EkFa4mHCkgTuoiXLnUSNeixsUW+htuk1bxKcSdv8CA1pLX31eE6bfkrBc/o9uHqN//4HHzgT5P61u/fq7xYsWtrifIuXrLBbieySVqBLgMs1wz9nvs/maqAwa/kqcP8ccgXQonzxBwy+c/jdaLv8ef39/c++wNXOEu3xHpjJ02ZGr+f1u3q8/OPtswlc7aNGhrl92O+9+w6KGh76XY2k+ABE269a66xhwt5864jLhxpgafmggZLFuMP496Te5U8/OxLtQs/S4Xffc3oWFOFB17JF+8R7703garIKHav9H3jw4agxpt4zi54hwSju/OvqcznPdfxc/nfdgxaJFt2LehDVwJPoVQNPS1IjS713tqhBdO/9O6NePfmdm+iVkFVPtV1P4fJskUuNbffXEs56FrTIZcl+kz2tUSr7qQxTY0BptmdFxxTzxkVuUiq/THDrOIljbdOf34Mr9vU2Rouu+9ZbB6P71LGKV21LlrcBJnBVTihW9m+//RaJTvWEqmzSPZdzv2kCV+eUGLflk798GrGrnns1InV/WtSAa+reJ2d7y4MzzjzHDo1cwdQQUVmsDhW5mmlR3qtBacfYulr82vlZI3BbQAcUtQWFH0XhzrvuiVrzatGn/anH0M9D9Q7ZoldP8UpWPVhWkWq/YgSunb9cH1xV7FpUecVFmF2j2LUvcHU/Cmxe7LHqaVGFrEWFcpZj811DryptUfry7Wu/SdBaZa4GhG3X2m8QxHvCbL+4wJVPof3mr9WLrUWVT9K5fIGr1+b+sfZZE0/Y4vcy2e/VXGcVuBLhWtIEfalp9Z+BpIaP796hhoV/HRO4li6/MaP95J5gPXnx0HLlPtd+OvzPippiy5KlzcsS7WciVsLHFzy+72rSQMiTZszJ3Yu9hrfrSlRpkTiybf5arh9axOrw48fk9pFblBalJcm33X7XPkkCy7+GffbvIymKgvLIGgAqK5IaHnI1sEVvoezc+dYmcHWcBpSqhzi+v91PKfebJnB33H2vJTXnHuFfV/WJiVw1IPzf9FlvurSoZz0eSUcuKeqR1qK6xz+2Wvz61+BzbWmZcvODHtzAe3CjkqLAPw3+8UGy13fq9Ut6Tap9/Uq6NQWuXAZsSaqg/Pso9NkXuOr1KLS//7sqTVvUc+b/Vs5n+WFq0UQZ6ukr5lx+T7JcAvxj5Kdni/zd/N/ssy9w38sTscG/TpIwM4Grys3vvbLraC2BYwIsSdT4+1b6c1aBaw0YpbeSszldcNGlkX+qeiuT7lGNJw1m02ID9mw/E7jiIy4ObB8TlOrZs21al/tc++fyP/vCI+kthp4Vca0/+efbsfIL1zaVP5p9yrb7a3sNHhfr6nXVooademv9Y/RZbkZa5Fpiv0k8mfBSD6ttj691jBalLf5b0vdCAtd/o5X03Oic6kQwFw/1WCfdU/zavsBdt35zi7SWe79JAlc90WbDtMaF0ilubfEFvd7qGAunzF3YIs3+sUc6Mf4YHFstfuN25Xs4IheBG7jA1StM9Xbk+1Mvrz3UKmitN1Cv7Wx7fK399EpMS2sKXL2StEXXv2/nA9Hr0DQhHk+3/90XuJu3nJ56r/4x9tn3k02rtGzfYteq/O11rnp0ij1O4tyWuIuFxJLcL7SkiVdf4OartOQSYkvSZAkmcOPCKn4fFr7MFx/xfarxPavA9V+Hfvfdd9HgKfkTp7krVDLNJq7lfuCf1wRuXPD5+xjX6r00oVSJ59q/hv9ZPt+2aKBWJe1jDVq93vevqRkSTWjJF9b/TcLfyib/TcLW07ZbMp0GiPnH+J810E+LIn/429M+FxK41uBQQynJD9nOq3EAtiQNErP9bO0L3AGDW0byKPd+kwSuPxDXfP0tPf5a4toWv37x90n7rEgrtljDspr8pqWD7fUvdBG4gQvcrHFw/cJ67bqWvQL+Q28+a60pcHV9X9BZQajKXH6fd9+70xUzpa3OY0JA58gyelrH+pWL/It9u5T6edejR8J6aZBF3H813zklvrRIYCbtZ/65slHS1Mm+wNXrx6RzaJt6X21RpR3fzwSuKsb4b/73Dz74MDpNnBt/n2p8zipw1QttjNt9ay2hIv9CCaEke2ZJuypw+XdLOMg1QX6MGrymHlotaQJXr57TruP7ONpbgEo812nXUyPKt9Pff/zRKZKHngvfJSHteG1XOlVWaeCcXFf0tkH3aDPzxQWujrHe3fibAJVbWvQcyX/eriu/Wi3KPzXe0/58/9KkHmk7n6192ya5KNjgRvnJ2jFJa/kZ2yIWkvbxt/llkASg/5s+l3u/SQLXd6WwaDrx69p3NXS1KKKGbfPXct2Q/7oGlCkyjgazKpKG5auONYHr27jUesm/Np/rX7wWk4cIXARus8JHr7ps8V8nJsH08COPRrvGhYr/Si7eo+i7NqS9Yk26Vnzb/IVLowgFinAQX9SzU4x/py9w0wasxa9r362XR9f2X8HZ71nXGnGtildLloEmiiphiwYDKtxU/M8Gt2i/pN5mX+Dm6zlW75MtSa9vTeCqQs93/1bhqzcy336V/i2rwNX1Jd4kPve/9HLiqG/xp4gZWdMqIWSh4MymSes0gZvUg25pSBK4lXiu7fxJa7kYWEPKvw8xrVfvSa/QdZ5xE6ZGA0/V+Mq3JAlchdvSojdOihRg6bJ0KGSXbdNaobmyLvnC69m5ffGVJHDla6olLsTteFtLpNrYBoVJs+1p60ICt9z7TRK4dk750aaly7YrtKQW+R/bNq3Fit6O2L1GO6X8M4FbbX799PE5HPGLwEXgNit85BdlS6GKWy1zLW0hcP1CSBWMfE9tIIfSJJE79sQpze7NP0afyxG4igdriyra+LmzfreBG0q3Pyim0Hn8QWSWnnxrCbX4OX2Bqwos/rt99/fTq2jbbmsTuPGwTPa7rW2/jz/5S4tz2D7VWJcicP10SOArOocaN9ZrLlvLV91cAfz90z77Id0k7OQ6oggK8ltUT5Ze0VrvV6UEbiWe67T78beLXZskxFydjEcJT39fNaD9fWRHvZ2RfeWnrN5cE0lJAlcNZDve/PEVmcP8l+NiUz7PWuTjqggPxfwVM3i0kMBVz60Wxaf17z/+Wb3NJvRlg/jv8e+FBG6595skcPWGTIt6x9X4i6fJ/64JZ47c94Hcfsozs4d+k/uUQsipHFNYRjUmfdcgE7itxa+ffj7Xv9BF4CJwc4WPHmi9KjQ/0ELhu2y0a1sLXL8gUkggWwqNRi5H4PqhivINWPHTlvZZ/mpWUWtwTNp+SdutEtLx8kdO+1MeaVHFFA/P5QvXJAFs19WIflvio9q1jwlXpcWOSVpLYGiJj5KO76teLPkE+3/+K+f4/oW+lytw/fPLz9TC5Oleiu3FV+QPy2s1yJJ8J3Ud+X9qqZTArcRz7d9/MZ91r3qdbC4puh/5mdqxik6hRdEq0sL6WZ4lCVydx9x65Fag7za5yY8/kIW2sAAAFulJREFU/dQiyorcHmzRYClLR7nrQgLXXrkrTfmupQ4FW4qJf11I4JZ7v1a2+HGB/cFj+d7wKe+th9Y/Xo0fLRLyiqiSFAnHfwNhArct+M2XV/xWH+IXgYvAbVHo2gCXfAOO9ErdehtqSeBKvNlS6FV/OQJX17ECXEI/Hq4pSwEogWxLMbNQ2bnVu2RLmp+b7St/Q1sUQsm2a+0LXImvNL9JNRhsSYo/agJX+6RNBiEhaEtSXFQ/XeZ/aftr3W/A8GZp9/cv9NnEkgR2oX2L+V09hLakBaaPn0cTktgiV5747/outx5bKiVwdd5yn+uktGqb4sGqwadwYUn7KM9sQJj8i20fGzCXz+/bhH6awBVnWjSoTG4KFuNWvYB2HVv7g+E0W5xtj6/ViNIgNP0V6qXUsYUEriaNsSXf2xmLDKF9i3GZKiRwy73fJIHrR2WREI3bzr4rlKQt2886L7efXJu06Ny2b3xtz6n2M4GrfarFb/z6fK8P8VpMPiFwEbgtCppHdz9uZVNirEi9qjU/Su2YReDqtaMt+XoA0uAtFC3BFxB6zZl2Hm0vR+DqePlB2pI2c5T2k29d2r3qld3PP/8cnSbfyPik+1APuy16tZ20j23zK6b4rGy+wNX5ks6lHksTsHp9niTo7XedI+7/aOmwEeVqHMn/0rYnrdtS4CrPCvUWa8pYW5LiAifdk2/rtCgl6oW3pZICt9znOul+tM1eWys6RlKPnFixXnt/8JTxokkPks5tg8VkizSBq3zSjIZaFK7MZsdKGmgqsWquH3KPSSpLlFZzddLEL0npim9TY9+WpGdHwt8Evs6dFGVC/FjkBw3Yi18j6XshgVvu/SYJXKXD8k0NlCTBrt5Wm8hE7iL+YDQbtyEekuyvxpJFfZFNfYFbKX7FTJI92RaOsLW8ROAGLnAl8jRKu9CfCiWDQoMAzP1APXoSUkOHj45C3GjQhU22oEFNWrIIXOtx0XHy99Qo9CwFztvvHI4C76sH0X/Vrs8KMm/+XapQCs0wVa7AlTi1Hibdj+ak96MfqLJUsHqlOa23UoPhbMkXdsfyxl/7r8iTKhp/X1V21mMmQe33TPmiS2nRwCD5GNs+cqGwGJ36/dLLrsyx4l/DKj67n9vv2JGL1SofVb8XWQPh/GOTPrelwFV6VTk/susxp8k3/PBOqnTVUDPRpucgSdgl3ZO22cxVqsg1KYs40nb1BOqVu9i1YPiVFLjlPtdp9+O7rigmtD/gS3Y0wa5GjT99rZ4XW9RYsIgFsq/8MWUHc61JE7hKkzU0bcCpQiKmpVXPo/noqpG+cPGyyP7KX5VNapjZUmyvvJ4TE7CagU1iNV6mye/a3nhpMhaVxxK6yhOFKLTyViyl9YTH76mQwNX+5dxvmsBVw9SifGhKXtlJIlb5rjJY00xrkU3iftD+2AUJVglapVNvjfRGQ2WT5bnO4QvcSvCrukzPnXqJ4/bkOwIXKOpAEPszmVlhXWitnk//AVchZr6CdqxVDPr++htvRoNJ9DmLwFUhaL0oOlaFvip8/9r5PqsCsUXHqtdIBbFFILDf8vWo2vnLFbg6j3wH48JOYZJU8FulpzQlCVyJIut9Us+OpauYtUJY2bSWun4xx/jhjxTP1Y7xBa7cUqxHWfmv14JWMes+NOjHBJkdb2uzg/LIesGUL7KFpVXnUGUuMWfHpa3bWuAaS1orL3V/uhffHrq/rCHmNCDKt4f8on/66Ugvvq4lsWd+m5UUuLJzOc91Wj5pu6JvmF3Ui6oIEWpsWo+q7Bd/JkeNmRg9v2Zn+f77g/f0Otte7+cTuL6LgM4Vv0483Yox6z+bykO/rFM6FK7KGnjx45O+26t3uxedP+5OI791f1G+23gHbf/113+5eDmcdC3bVozA1b6l3m+awNU5VX4o/bbofs1lS9vEgnxsLa22VkeETUVux6o+sPzQQEO5j9jiC1ydo1x+dX5bkmZ+s3SyDkPs0oNbB4I168NWCYGra8pfUq8P/UUVgQZySahagZ1F4B4579xo4IkVahJRxd6jWuDqEbVj/bTps16NFTvFZiUErtItwScB61eSli6lU8IyqeLyR9PH/WIL2cMG0+g66iErtL9+96fJ1ah9O8YXuPIH1utdE97+fWiEu9+Tacfb2gSuGj/q0RE7Jnp0Hn1W5eb3ctuxSeu2FLhqfGgUuvW2mh38tQZJqYcsKe2Fts2dvyQSgT7HEnHW41Utgat0lfpcF7onlTt6re8LHzWK9bym+WSrR1eNJr/xrDcN6sEVazaoKZ/AVbp0DS2yp3gulFbZ2Y6xPFUa1KtbSlxrXVMi1xd5cYGrNGnwmBpJ/iKRu3//y05+q4XS7f9erMDVMaXcbz6Bq3MqsoF6a/1nXPel6AnqqfXT6n9Wz7V6+q0hrWPU4NOYCb0t8qcrjwtcnaccfhVnWowUimjhp5fP9St2EbgBCtxKP5AacazCV4HIs/RqFEqHXuGrYkgb1JTvePVgqiBUb5hCy6hSUk9O/NVgvnNU4ze5cqgy0Sts9XLkG62tV6laVHm3ZbrjAtfsolelaiyoh7KYMFi+wLVzqMKSO4lmftNn294Wa3v9rN7SLNeXG40EmmyhfFXFnhb9IMt5ta8aR3q27PV81uPL2b9az7UaBwrRJ7/zYssLHaNGoFxtWvNZEJNq0Cm9xaY1n82VdomyQqxrH739kTuD7x6W79yV+K3S96s0yVddeVcKx8pv2SBfwzntvkvltzXtnZZ2treOaEbgInAzVfY8mJV5MCWCbck3Grk17J0mcLNeO0ngZj1HNfc/dOidyORpUxZX89qcuzLPDXbEjjAAA8UygMBF4CJw24ABDdSS64KiCqgnu9gHthr7NYLA1atwcwdQYPlq2JFzUvHCAAzAQO0wgMBtA3HDA1A7DwB50TwObjmTVtRKD65cChQ03/62nrY9F0NTXbhpkwrAAs8lDMAADITDAAIXgUtvVoMzEFoPrmKRpi2K2UoFFk4FRl6SlzAAA2kMIHAbXNykgcH2xik0NNpbESD0d/mV15YsADV6WucoNAVvtdnSSHW7H60Vq1hTEOcb2V3tNHH+xnmeyGvyGgZqgwEELgK3ZEHDQ1wbDzH5QD7AAAzAAAzAQHMGELgIXAQuDMAADMAADMAADATFAAIXoIMCmhZs8xYs9sAeMAADMAADjcgAAheBi8CFARiAARiAARiAgaAYQOACdFBAN2IrlXumdwYGYAAGYAAGmjOAwEXgInBhAAZgAAZgAAZgICgGELgAHRTQtGCbt2CxB/aAARiAARhoRAYQuAhcBC4MwAAMwAAMwAAMBMUAAheggwK6EVup3DO9MzAAAzAAAzDQnAEELgIXgQsDMAADMAADMAADQTGAwAXooICmBdu8BYs9sAcMwAAMwEAjMoDAReAicGEABmAABmAABmAgKAYQuAAdFNCN2ErlnumdgQEYgAEYgIHmDCBwEbgIXBiAARiAARiAARgIigEELkAHBTQt2OYtWOyBPWAABmAABhqRAQQuAheBCwMwAAMwAAMwAANBMYDABeiggG7EVir3TO8MDMAADMAADDRnAIGLwEXgwgAMwAAMwAAMwEBQDCBwAToooGnBNm/BYg/sAQMwAAMw0IgMIHARuAhcGIABGIABGIABGAiKAQQuQAcFdCO2UrlnemdgAAZgAAZgoDkDCFwELgIXBmAABmAABmAABoJiAIEL0EEBTQu2eQsWe2APGIABGICBRmQAgYvAReDCAAzAAAzAAAzAQFAMIHABOiigG7GVyj3TOwMDMAADMAADzRlA4CJwEbgwAAMwAAMwAAMwEBQDCFyADgpoWrDNW7DYA3vAAAzAAAw0IgMIXAQuAhcGYAAGYAAGYAAGgmIAgQvQQQHdiK1U7pneGRiAARiAARhozgACF4GLwIUBGIABGIABGICBoBhA4AJ0UEDTgm3egsUe2AMGYAAGYKARGUDgInARuDAAAzAAAzAAAzAQFAMIXIAOCuhGbKVyz/TOwAAMwAAMwEBzBhC4CFwELgzAAAzAAAzAAAwExQACF6CDApoWbPMWLPbAHjAAAzAAA43IAAIXgYvAhQEYgAEYgAEYgIGgGEDgAnRQQDdiK7VW7rlj70Guaeg41zRkDEwVKFeOOrrLEVvJXgl/nQeMxIYFbFgr3JMOekdhoDYZQOBSiFKRwkBFGJh8yZ3utA9+d1ve+WdFzhdypdG+a5/IVrJX2t+GN75zc+/e58aecbXT/iHbg3urTYFAvpAv9cwAAhdxQ8UJAxVhAIFbfGVYjMD1he+S3Qddh54DKpJPbV1hHdWhqzuqY3d31NFdg7iftrYn1y/+ucNWjWUrBC7ihkoGBirCAAK3+MrDF7gTL7jZdeo7rNlf12HjXf85q9zcHc/neniX733fHd29X0Xyqi0r+rUvfxXd06SLb6/7e2lLO3Lt4p83bNWYtkLgIm6oZGCgIgwgcIuvRHyBKxeEfBXwxAtuyYncQYs25t0333lq5TcEbvGc1EqekQ7yrB4ZQOAibuq+wqzHBy/ENCNwi68Eswhcvc7feOCHSOROu/r+un9eEbjFcxJiOcE9kf+txQACF4Fb9xVmaz0sXCd/wVwpgdtv1nInITf/3heiQVZTr7jHHTtpTkFO23Xu5UauP8+ddM1ON//+/W7mDbvcqM0Xu14nnpx4bMc+Q9yE82+O/o7u3t916DXQjVi93c3Z8awbd+Y10THxfRT9oNeJs9yY066I9jv5lsejQWAdjx2SeI00ZrIIXJ1j8SNvRAJ3xdMfpl6ntezm31O7Y3q6octOc9OveyiyudbDV57p5GLRbL/OvXK23nTw5+he5Fds9u8x5qRm+/vH8jn/c4d9sA8MJDOAwEXgUrHAQEUYKFfgSqCakPMHWNnnWTfuTk2nxJ31DNr+/lr+nhKnfkXQfdTU3Kv/riMmuVX7Ps19P+WOp6J9/X06Dxrlpl/7QG4f//zrX//W9Zu1tNn5/WvFP2cWuLsORNdd8cxHLa7R2naze2kaPNqt2f9loj1km4kX3ppLq3yHfXvFP0sk23lZJ1fW2AW7wEA2BhC4iBsqFhioCAPlCFyJT4lKCZ+t7/4r6g1UL+mEc290Sx59KyeOJpx3U4u0SoRuPnSkV3DzoV+int8xp1/hZly/y2048H3u2PjrfV+8zrtnn9v23m/u1McORr3HJ2y8MLqOv8/Jt+6JzqV95Bc75vQr3Zy7ns2df/1r3xY9CCyLwJWANRcFDTrzK7m2sJuur5jHK5/7JLp32U0NE/kSq+d70cOv52wy68ZHo/Sqp3fc9uuiv01v/RT9rmNsW/dRU5rdl3+PfM5WqWMv7AUDRxhA4CJuqFhgoCIMlCNwJ110ayR6tr77bzdowfoW6bHfJYAHL9nc7He5CUTC+PCvrtsJk5v9Jv9VE84SiX5oKl+8bj38q+s3a1mzY1VJ+PvoGuO2X9tin5Hrz88JurFnXNXi96TKJovANbtG9754U7Pzm11a024Sq3IviGz+7r9cn6kLmqVJ9zvpottyNukzZX6z362nnSgKCLGkZ4NtcFEpBhC4iJtmlU+lwOI8jVdImRDLOtGDfF/Va3tEQF6XyqO5L8y565lm+8jnds6dT0f+t0nc9ZowOye29Nn28cXrtKvuy22337X295Ffr/+bfVYv6uoXP4+uMevmxxP3sX1t7Qtc+RjLB9X/k8/xsBWnuwUPvJJLu3qOfYHeVnYbOG9NLk3ycbZ78tftuxzr1r50xH1Bfrn+bwjcxisb/PznM/nfWgwgcBG4zSqf1gKP64RXyJUqcIctPz0nmOQLm8aGek8lgtfs/yJ1n6RjO/Udmju/3/vri9c0H1B/n3y9s5pxTGlTz2ZSGuLbfIGr4wr9nfrYoRYTPbSV3TR4T+lVo0S9ufF7s++agrjPtAXRoDzbpjUCN7xn389fPpO/tcIAAheBm1pB1QqkpKM+CsxSBa78aiPBdPhXd+I5N6T+mQ+s9u147OAW3KontWnIGDdg7mo3Ys3ZbvS2yyIfXn9gWJrA7Tt9cYvziTtf4PY7eUXiPtpPvqZK19I9h1P38TkuVuDK9UBp1r35x+tzW9lt8f8f8KaJJ+JpKuY7Arc+nudi8pJ9yMtaZgCBi8AtqZKqZahJW9sUuqUKXL3CljjM8tf3pEU5buVnO2rTRW79q98UPEc5AjdNBIu3cgSuBlppIJn/p8FaZo+03uW2stuqfX+J0ibf51KeNQRu2zyfpeQVx5BX9cwAAheBW1IlVc/Qk/bqFNqlClz5oErMbXrrR3f8unOL+us8YGSO2+nXPZgTg1sO/zOKoqDeTUVhUE+u/kws1qLATZrJrF1T79yrfIXikviNc9tWdlv21HuRPRfsfKlFmuJpTPqOwK3O85dka7Zh60ZmAIGLwC2pkmrkh4Z7T640ShW4fm+lBk5lsa8mcTDxqjBg7bv2bXG84rXaPvUicGWDEavPyqU7SQS3ld002E72VOzfLHll+yJwk58fsw9r7AMDlWEAgYvALamS4gGszAMYkh1LFbgaiGQCNJ+fqyYL0CA0/Vk0AY3i17Hb3v89NQbt8FVn5s5fTwL3qA5d3YqnP4rSrtix8dnS2spuvrDWQLI0hqM4wXc+3WzCB+2LwKXsSGOG7bBRSQYQuAjc1AqqkqBxrvALrlIFrsSqiR4NXNK0uXFe5GdrsVeXPvFO7vehS7flxGufaQtz2+14DeZSeC0T0PUkcHUPfkiuk67e2ez+2spuTUPGRpNiyKZLnzic6D6h6Yy3vf9bZHe5ilh+aG0zxs2+bU+z7f4+fA6/vCCPyeNqM4DAReBSycBARRgwgatJE/pOX1Lwr/voabnrytVAs5BJNGmU/nEzljj5oUrYaiIBiaGcSPUmO+jYZ0jUe6vfJGR7T5wT9e6q91Mia+njb0fiWdEItE+9CVxVABb/V/cQD6PWFnZTmkas3p7Lj/n3vhBNkqGQYZ36DnPHrz0nN8uZfKLjES8WPfRqdOzGN//uNHBPQj0pSkS1Kz/Oj8CCgbAZQOAibnIig4c97Ie92vlrAteEaKF1fMKG/nNWOROiOlZCedPBI1Pw6rt6BCdecHPOPcHux581S/tteOP73NS9mnRCInDLO/+oW4GrSR/MlppS2O7b1q1tN7uu76qg9MnGchWxtMpHNz6LmY5VxAvbR2tN9Tvk1C0t7suuw5pyCQZgoBQGELgIXCoWGKgIA+UKXBVg/U9Z4ZY8+mYzAaSeXfXq9pu1NDWd8sVd/cJnueMkhjUYyno861ngyi5qDJgoTApX1pp28yuakevPy/XWWvrkbqLpkTsPPCExv9Qrr2l6FTXDjkHgImB8rvgMD5VgAIGLuEmshCoBF+egkCqVAUVT0NS13UZObtFjm++cHXsPcj3HzXTyvc23X6i/tZXd5JqgnvLOA47PZHelV4PnbNBgqPnCfVEWwkDrM4DAReBmqpB4SFv/IcXm2BwGYAAGYAAGsjGAwEXgInBhoCwG/AFg9sqZ9R++qNiiOFsQVSFb5Y3YwV4wkJ8BBC7ipixxwwOW/wFrBPsgcIsTcAjd/HZC4FKWNEJ5yT22HucIXAQuAhcGYAAGYAAGYAAGgmIAgQvQQQFN67j1WsfYGlvDAAzAAAzUKgMIXAQuAhcGYAAGYAAGYAAGgmIAgQvQQQFdqy1J0kUvBwzAAAzAAAy0HgMIXAQuAhcGYAAGYAAGYAAGgmIAgQvQQQFN67j1WsfYGlvDAAzAAAzUKgMIXAQuAhcGYAAGYAAGYAAGgmIAgQvQQQFdqy1J0kUvBwzAAAzAAAy0HgMIXAQuAhcGYAAGYAAGYAAGgmLg/wFSorVkF/xx5gAAAABJRU5ErkJggg==&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;免費的雲端服務是獨立開發者最好的朋友，&lt;br /&gt;今天分享 Heroku，價格可以看&lt;a href=&quot;https://www.heroku.com/pricing&quot;&gt;這邊&lt;/a&gt;，&lt;div&gt;首先可以先建立 react app&lt;br /&gt;&lt;pre style=&quot;text-align: left;&quot;&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;background-color: black;&quot;&gt; npm i create-react-app my-app &lt;/font&gt;&lt;/pre&gt;再自行加工 my-app 內容..&lt;br /&gt;&lt;br /&gt;預設會產生 /build 資料夾。&lt;/div&gt;&lt;div&gt;然後開一個 node server 把預設路徑改到 /build&lt;br /&gt;&lt;pre&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;background-color: black;&quot;&gt; npm i express &lt;/font&gt;&lt;/pre&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;// index.js of node env&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;line-height: 18px;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;express&lt;/span&gt; = &lt;span style=&quot;color: #dcdcaa;&quot;&gt;require&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;express&#39;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;app&lt;/span&gt; = &lt;span style=&quot;color: #dcdcaa;&quot;&gt;express&lt;/span&gt;()&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #4fc1ff;&quot;&gt;Path&lt;/span&gt; = &lt;span style=&quot;color: #dcdcaa;&quot;&gt;require&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;path&#39;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #4fc1ff;&quot;&gt;PORT&lt;/span&gt; = &lt;span style=&quot;color: #9cdcfe;&quot;&gt;process&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;env&lt;/span&gt;.&lt;span style=&quot;color: #4fc1ff;&quot;&gt;PORT&lt;/span&gt; || &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;8080&#39;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;app&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;use&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;express&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;static&lt;/span&gt;(&lt;span style=&quot;color: #4fc1ff;&quot;&gt;Path&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;join&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;__dirname&lt;/span&gt;, &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;build&#39;&lt;/span&gt;)));&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;app&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;get&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;/*&#39;&lt;/span&gt;, (&lt;span style=&quot;color: #9cdcfe;&quot;&gt;req&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;res&lt;/span&gt;) &lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt; {&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;res&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;sendFile&lt;/span&gt;(&lt;span style=&quot;color: #4fc1ff;&quot;&gt;Path&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;join&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;__dirname&lt;/span&gt;, &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;build&#39;&lt;/span&gt;, &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;index.html&#39;&lt;/span&gt;));&lt;/div&gt;&lt;div&gt;});&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;app&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;listen&lt;/span&gt;(&lt;span style=&quot;color: #4fc1ff;&quot;&gt;PORT&lt;/span&gt;)&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;丟 heroku&lt;/div&gt;&lt;div&gt;mac 安裝 heroku-cli&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;a href=&quot;https://devcenter.heroku.com/articles/heroku-cli#download-and-install&quot;&gt;https://devcenter.heroku.com/articles/heroku-cli#download-and-install&lt;/a&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style=&quot;font-family: &amp;quot;PingFang TC&amp;quot;; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style=&quot;font-family: &amp;quot;PingFang TC&amp;quot;; white-space: normal;&quot;&gt;產生一個 heroku 專案&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;background-color: black;&quot;&gt; heroku create my-app &lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;a href=&quot;https://devcenter.heroku.com/articles/creating-apps&quot;&gt;https://devcenter.heroku.com/articles/creating-apps&lt;/a&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style=&quot;font-family: &amp;quot;PingFang TC&amp;quot;; white-space: normal;&quot;&gt;透過 git 推一專案&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;background-color: black;&quot;&gt; git init // 初始&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;background-color: black;&quot;&gt; git add . // 將全部 stage &lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;span style=&quot;background-color: black;&quot;&gt; git commit -am &quot;first commit&quot; // 寫 commit message &lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;span style=&quot;background-color: black;&quot;&gt; heroku git:remote -a &quot;my-app&quot; // 將 git remote repository 設定成 heroku 專案 &lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font color=&quot;#ffffff&quot;&gt;&lt;span style=&quot;background-color: black;&quot;&gt; git push heroku master // 推到 master branch &lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/3357959753937406063/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/07/heroku-react-deploy-with-nodejs.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3357959753937406063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3357959753937406063'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/07/heroku-react-deploy-with-nodejs.html' title='heroku react deploy with node.js'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-8987355017421138917</id><published>2020-06-16T21:30:00.003-07:00</published><updated>2020-07-12T03:05:18.246-07:00</updated><title type='text'>zoomBlur shader</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;ref&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: menlo, monaco, &amp;quot;courier new&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;&lt;font color=&quot;#d4d4d4&quot;&gt;&amp;lt;!-- html --&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;x-shader/x-vertex&quot;&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;vertexShaderZoom&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;  varying vec2 vUv;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;      void main() {&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;      vUv = uv;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;      gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;  }&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;font color=&quot;#d4d4d4&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;  &lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;x-shader/x-fragment&quot;&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;fragmentShaderZoom&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;uniform sampler2D tDiffuse;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;uniform vec2 center;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;uniform float strength;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;uniform vec2 resolution;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;varying vec2 vUv;&lt;/div&gt;&lt;font color=&quot;#d4d4d4&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;float random(vec3 scale,float seed){return fract(sin(dot(gl_FragCoord.xyz+seed,scale))*43758.5453+seed);}&lt;/div&gt;&lt;font color=&quot;#d4d4d4&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;void main(){&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;vec4 color=vec4(0.0);&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;float total=0.0;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;vec2 toCenter=center-vUv*resolution;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;float offset=random(vec3(12.9898,78.233,151.7182),0.0);&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;for(float t=0.0;t&amp;lt;=40.0;t++){&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;  float percent=(t+offset)/40.0;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;  float weight=4.0*(percent-percent*percent);&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;  vec4 sample=texture2D(tDiffuse,vUv+toCenter*percent*strength/resolution);&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;  sample.rgb*=sample.a;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;  color+=sample*weight;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;  total+=weight;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;gl_FragColor=color/total;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;gl_FragColor.rgb/=gl_FragColor.a+0.00001;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;


&lt;/span&gt;&lt;div style=&quot;line-height: 18px;&quot;&gt;&lt;font color=&quot;#d4d4d4&quot;&gt;/// within js&lt;br /&gt;&lt;/font&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;shader&lt;/span&gt; = &lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;THREE&lt;/span&gt;.&lt;span style=&quot;color: #4ec9b0;&quot;&gt;ShaderMaterial&lt;/span&gt;({&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;      &lt;span style=&quot;color: #9cdcfe;&quot;&gt;uniforms&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; {&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;        &lt;span style=&quot;color: #9cdcfe;&quot;&gt;tDiffuse&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; { &lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;null&lt;/span&gt; },&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;        &lt;span style=&quot;color: #9cdcfe;&quot;&gt;strength&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; { &lt;span style=&quot;color: #9cdcfe;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;f&#39;&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;.1&lt;/span&gt; },&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;        &lt;span style=&quot;color: #9cdcfe;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; { &lt;span style=&quot;color: #9cdcfe;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;v2&#39;&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;THREE&lt;/span&gt;.&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Vector2&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;width&lt;/span&gt; * &lt;span style=&quot;color: #b5cea8;&quot;&gt;0.5&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;height&lt;/span&gt; * &lt;span style=&quot;color: #b5cea8;&quot;&gt;0.5&lt;/span&gt;) },&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;        &lt;span style=&quot;color: #9cdcfe;&quot;&gt;resolution&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; { &lt;span style=&quot;color: #9cdcfe;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;v2&#39;&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;THREE&lt;/span&gt;.&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Vector2&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;width&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;height&lt;/span&gt;) },&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;      },&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;      &lt;span style=&quot;color: #9cdcfe;&quot;&gt;vertexShader&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;document&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;getElementById&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;vertexShaderZoom&#39;&lt;/span&gt;).&lt;span style=&quot;color: #9cdcfe;&quot;&gt;textContent&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;      &lt;span style=&quot;color: #9cdcfe;&quot;&gt;fragmentShader&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;document&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;getElementById&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;fragmentShaderZoom&#39;&lt;/span&gt;).&lt;span style=&quot;color: #9cdcfe;&quot;&gt;textContent&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;    });&lt;/div&gt;&lt;font color=&quot;#d4d4d4&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;div style=&quot;color: #d4d4d4;&quot;&gt;    &lt;span style=&quot;color: #9cdcfe;&quot;&gt;zBlurPass&lt;/span&gt; = &lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;ShaderPass&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;shader&lt;/span&gt;);&lt;/div&gt;&lt;font color=&quot;#d4d4d4&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;div&gt;&lt;font color=&quot;#d4d4d4&quot;&gt;    &lt;/font&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;composer&lt;/span&gt;&lt;font color=&quot;#d4d4d4&quot;&gt;.&lt;/font&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;addPass&lt;/span&gt;&lt;font color=&quot;#d4d4d4&quot;&gt;(&lt;/font&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;zBlurPass&lt;/span&gt;&lt;font color=&quot;#d4d4d4&quot;&gt;);
&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font color=&quot;#d4d4d4&quot;&gt;// reference
/&lt;/font&gt;&lt;font color=&quot;#ffffff&quot;&gt;/ &lt;a href=&quot;https://gist.github.com/fatlinesofcode/3a02af88ac44a9adea0ca9021536095d&quot;&gt;https://gist.github.com/fatlinesofcode/3a02af88ac44a9adea0ca9021536095d&lt;/a&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style=&quot;color: grey;&quot;&gt;
&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/8987355017421138917/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/06/zoomblur-shader.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/8987355017421138917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/8987355017421138917'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/06/zoomblur-shader.html' title='zoomBlur shader'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-8350787338565786094</id><published>2020-05-24T08:26:00.000-07:00</published><updated>2020-05-24T08:26:58.651-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="react.js"/><title type='text'>react.js functional vs class based components</title><content type='html'>&lt;div&gt;&lt;a href=&quot;https://linyencheng.github.io/2020/02/02/react-component-class-based-vs-functional/&quot;&gt;https://linyencheng.github.io/2020/02/02/react-component-class-based-vs-functional/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;font size=&quot;4&quot;&gt;&lt;table border=&quot;1&quot; bordercolor=&quot;#888&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse: collapse; border-color: rgb(136, 136, 136); border-width: 1px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;min-width: 60px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;min-width: 60px;&quot;&gt;&amp;nbsp;Class Based&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 60px;&quot;&gt;&amp;nbsp;Functional&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;min-width: 60px;&quot;&gt;&amp;nbsp;產生組件&lt;/td&gt;&lt;td style=&quot;min-width: 60px;&quot;&gt;&amp;nbsp;O, 倚賴 extends Component&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 60px;&quot;&gt;&amp;nbsp;X, 用 ES6閉包, const ABC = props =&amp;gt; { ... }&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;存取 state&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;this.state, this.setState({ abc: 123 })&lt;/td&gt;&lt;td&gt;&amp;nbsp;const [abcState, setAbcState] = useSate(123)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;LifeCycle Hook&lt;/td&gt;&lt;td&gt;&amp;nbsp;O, ex: update hooks&lt;br /&gt;&lt;a href=&quot;http://t.ly/G5RL&quot; target=&quot;_blank&quot;&gt;http://t.ly/G5RL&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;存取 props&lt;/td&gt;&lt;td&gt;&amp;nbsp;this.props&lt;/td&gt;&lt;td&gt;&amp;nbsp;props&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;* 自動 merge&lt;span&gt;&amp;nbsp;state&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;this.setState({ name: &#39;leo&#39; })&lt;br /&gt;&amp;nbsp;this.setState({ age: 38 })&lt;br /&gt;state =&amp;gt;&lt;br /&gt;{ name: &#39;leo&#39;, age: 38 }&lt;/td&gt;&lt;td&gt;const [nameState, setNameState] = useSate(&#39;leo&#39;) &lt;br /&gt;=&amp;gt; { name: &#39;leo&#39; }&lt;br /&gt;const [ageState, setAgeState] = useSate(38) &lt;br /&gt;=&amp;gt; { age: 38 }&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;使用時機&lt;/td&gt;&lt;td&gt;要 mergeState&lt;br /&gt;要 Lifesyscle Hooks&lt;br /&gt;不用 ReactHooks (ex:useState)&lt;/td&gt;&lt;td&gt;沒什麼限制&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;若有寫錯還請大大通知，感激～&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/8350787338565786094/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/05/reactjs-functional-vs-class-based.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/8350787338565786094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/8350787338565786094'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/05/reactjs-functional-vs-class-based.html' title='react.js functional vs class based components'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-3059282429953026684</id><published>2020-05-24T00:36:00.001-07:00</published><updated>2020-05-24T00:39:41.976-07:00</updated><title type='text'>React.js 更新畫面的流程 Lifecycle - Update</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;React 提供有這些 Updating 階段的方法：&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;componentWillReceiveProps()：&lt;br /&gt;React 17 開始被拿掉&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;static getDerivedStateFromProps()：&lt;br /&gt;要使用 props 改變 state 用，傳回新的 state or null，用 this.setState&lt;br /&gt;不要再這邊用 http request&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;shouldComponentUpdate()：&lt;br /&gt;優化效能，回傳 boolean 詳細判斷，react.js 依 state, props re-render 的更新方式，不一定每次都要更新～&lt;/div&gt;&lt;div&gt;&lt;br /&gt;componentWillUpdate()：&lt;br /&gt;React 17 開始被拿掉&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;render()：&lt;br /&gt;React 開始組資料 jsx&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;getSnapshotBeforeUpdate()：&lt;br /&gt;React 渲染前面判斷有沒有有沒有 props 被改變，可return 給 componentDidUpdate 第三的參數使用使用&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;componentDidUpdate()：&lt;br /&gt;渲染完成，要使用 http request 可以在這邊&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;參考資料&lt;br /&gt;React Life Cycle&lt;br /&gt;&lt;a href=&quot;https://iandays.com/2018/07/27/reactlife/&quot;&gt;https://iandays.com/2018/07/27/reactlife/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;React 元件生命週期 (Component Lifecycle)&lt;br /&gt;&lt;a href=&quot;https://www.fooish.com/reactjs/component-lifecycle.html#static-getderivedstatefromprops-props-state&quot;&gt;https://www.fooish.com/reactjs/component-lifecycle.html#static-getderivedstatefromprops-props-state&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/3059282429953026684/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/05/reactjs-lifecycle-update.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3059282429953026684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3059282429953026684'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/05/reactjs-lifecycle-update.html' title='React.js 更新畫面的流程 Lifecycle - Update'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-3201637404190593340</id><published>2020-05-17T09:12:00.001-07:00</published><updated>2020-05-17T09:12:42.540-07:00</updated><title type='text'>react.js css module</title><content type='html'>css module&lt;br /&gt;css 中的變數要怎麼讓 js 使用？&lt;br /&gt;css 如果命名不好很容易污染別人，結果名稱越來越長。&lt;br /&gt;為何要使用 css-module ，我參考了這篇。&lt;br /&gt;&lt;a href=&quot;https://www.itread01.com/content/1545772525.html&quot;&gt;https://www.itread01.com/content/1545772525.html&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;以下是簡易的使用方式&lt;/div&gt;&lt;div&gt;將共用 css 寫在 module，並命名 XXX.module.s[c|a]ss，如果寫css就用scss吧～&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;/* btn.module.sass */
.btn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;  &lt;span style=&quot;color: #9cdcfe;&quot;&gt;background-color&lt;/span&gt;: &lt;span style=&quot;color: #ce9178;&quot;&gt;lightblue&lt;/span&gt;&lt;/div&gt;&lt;div&gt;  &lt;span style=&quot;color: #d7ba7d;&quot;&gt;&amp;amp;:hover&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #9cdcfe;&quot;&gt;background-color&lt;/span&gt;: &lt;span style=&quot;color: #ce9178;&quot;&gt;lightgreen&lt;/span&gt;&lt;/div&gt;&lt;div&gt;  &lt;span style=&quot;color: #d7ba7d;&quot;&gt;&amp;amp;.red&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #9cdcfe;&quot;&gt;background-color&lt;/span&gt;: &lt;span style=&quot;color: #ce9178;&quot;&gt;red&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;/* App.js */
import&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;classes&lt;/span&gt; &lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;./sass/btn.module.sass&#39; // 全部樣式都載近來當 css&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;line-height: 18px;&quot;&gt;
// ...&lt;br /&gt;&lt;div&gt;  &lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #51b6c4;&quot;&gt;btnClasses&lt;/span&gt; = [&lt;span style=&quot;color: #9cdcfe;&quot;&gt;classes&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;btn&lt;/span&gt;].&lt;span style=&quot;color: #dcdcaa;&quot;&gt;join&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;&lt;/span&gt;); // 加入 .btn 樣式&lt;/div&gt;&lt;div&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;// ...&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;line-height: 18px;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;className&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #51b6c4;&quot;&gt;btnClasses&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;click!&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;.btn 樣式&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5cnhjrDZsajIe0cC9tr94B99lNa1fZTqsaHxtoKFp0K6s7gl0DJjekJKRioRnTKhypbkOKxQr9zWzk8HuCXqT-ouSHWW2M-1MDYxDWw4DboU4I5Vhe0zXoJ2tQIItrM2cWTSBpvqAkRDB/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;36&quot; data-original-width=&quot;204&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5cnhjrDZsajIe0cC9tr94B99lNa1fZTqsaHxtoKFp0K6s7gl0DJjekJKRioRnTKhypbkOKxQr9zWzk8HuCXqT-ouSHWW2M-1MDYxDWw4DboU4I5Vhe0zXoJ2tQIItrM2cWTSBpvqAkRDB/&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;.btn:hover 樣式&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs380jA_u9V68eB37M8GJp409CnqXIbkC3IF7X5Sszs3IRuHpdqyLp7Zq0rG7P5PmWfko2evMdS4P_ILffu1OmFIW4P-7ABGEui4WYZC612Y3BtZ9haTE9C2eZ6ZjzTkpq3Y9I-m1fEBBH/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;37&quot; data-original-width=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs380jA_u9V68eB37M8GJp409CnqXIbkC3IF7X5Sszs3IRuHpdqyLp7Zq0rG7P5PmWfko2evMdS4P_ILffu1OmFIW4P-7ABGEui4WYZC612Y3BtZ9haTE9C2eZ6ZjzTkpq3Y9I-m1fEBBH/&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/3201637404190593340/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/05/reactjs-css-module.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3201637404190593340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3201637404190593340'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/05/reactjs-css-module.html' title='react.js css module'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5cnhjrDZsajIe0cC9tr94B99lNa1fZTqsaHxtoKFp0K6s7gl0DJjekJKRioRnTKhypbkOKxQr9zWzk8HuCXqT-ouSHWW2M-1MDYxDWw4DboU4I5Vhe0zXoJ2tQIItrM2cWTSBpvqAkRDB/s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-7628965693387763587</id><published>2020-05-08T03:23:00.001-07:00</published><updated>2020-05-08T03:23:29.713-07:00</updated><title type='text'>Left Join, Full Join 找出誰沒有</title><content type='html'>&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;Customers&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhazMh2HFf8QoJwmwuHI__ncZGw3JBV4WU7Uvof4qW0dL3nQm9BaF3i3mBlqII6vCD2Nwbt83ZmtZefnu2eSNc_CaC__l0kW9wfDAwH1fMjFgSyrGe5Wb8cpFwfFCsbSpj1w-97OhKLIRrK/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;95&quot; data-original-width=&quot;285&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhazMh2HFf8QoJwmwuHI__ncZGw3JBV4WU7Uvof4qW0dL3nQm9BaF3i3mBlqII6vCD2Nwbt83ZmtZefnu2eSNc_CaC__l0kW9wfDAwH1fMjFgSyrGe5Wb8cpFwfFCsbSpj1w-97OhKLIRrK/&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;Orders&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgch2XE-sMym5EjpoysFwLzIhxfbgrwnuxT5rtvVBnO3NYwgza_6DT9-1lh9Qalr_kr73ATSu0ZuhPQc_0l1mze1TN97ag7e_glFLMvvfmB03FH4AHFPniFKbamw-7i8FcSD9-2dl2HM4OE/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;197&quot; data-original-width=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgch2XE-sMym5EjpoysFwLzIhxfbgrwnuxT5rtvVBnO3NYwgza_6DT9-1lh9Qalr_kr73ATSu0ZuhPQc_0l1mze1TN97ag7e_glFLMvvfmB03FH4AHFPniFKbamw-7i8FcSD9-2dl2HM4OE/&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;Customers.C_id Left Join Orders.Cid， 顧客的購物紀錄 (概念把 Orders 塞入 Customers，Customers 會變多，會發現沒有購物的客戶)&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWhLZwkNzhjGdjpwJGhFnvoCfM2hk7tIjw0X1HJfHeeZcpmNE_MXTOSzusGK3bqwhbCr-iPp8hRmeghHaVkAZv8q6HHNycdUwETJ6h2N6aEU159ttSIos1VcRfzKOe1aDPNvcH6sttizmF/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;153&quot; data-original-width=&quot;415&quot; height=&quot;237&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWhLZwkNzhjGdjpwJGhFnvoCfM2hk7tIjw0X1HJfHeeZcpmNE_MXTOSzusGK3bqwhbCr-iPp8hRmeghHaVkAZv8q6HHNycdUwETJ6h2N6aEU159ttSIos1VcRfzKOe1aDPNvcH6sttizmF/w640-h237/CO_LEFT.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;Orders.Cid Left Join Customers.C_id 購物的人是誰(概念把 Customers 塞入 Orders&amp;nbsp;，Orders&amp;nbsp;會變多，會發現交易的商品)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0npmC46BKM8zb_ml62orkYmy17wTdPCLmVQGcZDfX0S47eSPOm4sue1kSYhBOYabzV8ohNripvIE4oeXEJ7aEiTIyl0MdolylpCPh__jYo13y4zkPjBZ54QBDlvz3DM-8Tq1cLdchX-z/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;170&quot; data-original-width=&quot;443&quot; height=&quot;246&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0npmC46BKM8zb_ml62orkYmy17wTdPCLmVQGcZDfX0S47eSPOm4sue1kSYhBOYabzV8ohNripvIE4oeXEJ7aEiTIyl0MdolylpCPh__jYo13y4zkPjBZ54QBDlvz3DM-8Tq1cLdchX-z/w640-h246/OC_LEFT.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;Orders.Cid Full Join Customers.C_id 顧客的購物紀錄 (包含沒有購物的客戶與沒有被買的商品)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Og224TF0sDVUfF643pDmXksgw2X6oJTyHZswltC9Wrb0vHrjHM99vbtK9yrp-vuldMM0pIKb0a48ZlI2SR3v2iPoH6v8kwsEoQxxy2O9GuNWbaf3e1sSVhOEAcfkdYzJssubSc68UqYR/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;156&quot; data-original-width=&quot;434&quot; height=&quot;230&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Og224TF0sDVUfF643pDmXksgw2X6oJTyHZswltC9Wrb0vHrjHM99vbtK9yrp-vuldMM0pIKb0a48ZlI2SR3v2iPoH6v8kwsEoQxxy2O9GuNWbaf3e1sSVhOEAcfkdYzJssubSc68UqYR/w640-h230/CO_FULL.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Orders.Cid Full Join Customers.C_id 商品銷售紀錄 (包含沒有購物的客戶與沒有被買的商品)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7Msg3Mj0m31UxaigC3YdNCcTCpb9PznEuuXgArljm28c-C5ao88SJT0Z05yGb4Q96xrS0w67pfWFfKnOb66pkasiWclyYXRmmGBoJTRgVEYrs7beme0ATdT4K-LxRc58o9A9VQkgW-Wea/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;165&quot; data-original-width=&quot;406&quot; height=&quot;260&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7Msg3Mj0m31UxaigC3YdNCcTCpb9PznEuuXgArljm28c-C5ao88SJT0Z05yGb4Q96xrS0w67pfWFfKnOb66pkasiWclyYXRmmGBoJTRgVEYrs7beme0ATdT4K-LxRc58o9A9VQkgW-Wea/w640-h260/OC_FULL.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/7628965693387763587/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/05/left-join-full-join.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/7628965693387763587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/7628965693387763587'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/05/left-join-full-join.html' title='Left Join, Full Join 找出誰沒有'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhazMh2HFf8QoJwmwuHI__ncZGw3JBV4WU7Uvof4qW0dL3nQm9BaF3i3mBlqII6vCD2Nwbt83ZmtZefnu2eSNc_CaC__l0kW9wfDAwH1fMjFgSyrGe5Wb8cpFwfFCsbSpj1w-97OhKLIRrK/s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-6109306968172577348</id><published>2020-04-26T07:19:00.003-07:00</published><updated>2020-04-26T07:21:06.296-07:00</updated><title type='text'>vue-jest unit-testing 安裝篇</title><content type='html'>&lt;h2&gt;
裝 vue-jest&amp;nbsp;&lt;/h2&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;git url&lt;/li&gt;
&lt;li&gt;jest 套件&lt;/li&gt;
&lt;li&gt;設定&lt;/li&gt;
&lt;li&gt;撰寫&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
git url&lt;/h2&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/LeoYeh/vue-jest-setup&quot;&gt;https://github.com/LeoYeh/vue-jest-setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2&gt;
jest 套件&lt;/h2&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;裝 jest, &lt;span style=&quot;background-color: black; color: #f3f3f3;&quot;&gt;npm install --save-dev jest&lt;/span&gt; =&amp;gt; 可以 執行 .jest, .test 檔案&lt;/li&gt;
&lt;li&gt;裝 vue-jest, &lt;span style=&quot;background-color: black; color: #f3f3f3;&quot;&gt;npm install --save-dev vue-jest&lt;/span&gt; =&amp;gt; 可以 驗證 .vue 檔案&lt;/li&gt;
&lt;li&gt;裝 test-utils, &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #f3f3f3;&quot;&gt;npm install --save-dev @vue/test-utils&lt;/span&gt;&lt;/span&gt;&amp;nbsp;=&amp;gt; 可用像是，測試組件不包含子組件的功能 (ShallowMount)&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjryfuiUArdJbXqOIPrUgtyuK0T3tMZCZmyDVuSCmkEa08J35dNnm_Ks3csrpGZpDr43kkcMn4ljGbHeHM8tudtFpzLKeBp_uuujRsmPflwIDMcRuEBe8f1iXsFeI3T3DjccjV5dORM6REF/s1600/%25E6%2588%25AA%25E5%259C%2596+2020-04-26+%25E4%25B8%258B%25E5%258D%25889.17.21.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjryfuiUArdJbXqOIPrUgtyuK0T3tMZCZmyDVuSCmkEa08J35dNnm_Ks3csrpGZpDr43kkcMn4ljGbHeHM8tudtFpzLKeBp_uuujRsmPflwIDMcRuEBe8f1iXsFeI3T3DjccjV5dORM6REF/s400/%25E6%2588%25AA%25E5%259C%2596+2020-04-26+%25E4%25B8%258B%25E5%258D%25889.17.21.png&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;h2&gt;
設定&lt;/h2&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;jest 25.4.0 需要 Babel 7module. &lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #f3f3f3;&quot;&gt;npm install --save-dev &quot;babel-core@^7.0.0-bridge.0&quot;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;加入 babel.config.js (注意 array 結構)&lt;br /&gt;&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #cfe2f3;&quot;&gt;exports&lt;span style=&quot;font-family: &amp;quot;menlo&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;courier new&amp;quot; , monospace; font-size: 12px; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4; font-family: &amp;quot;menlo&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;courier new&amp;quot; , monospace; font-size: 12px; white-space: pre;&quot;&gt;= {   &lt;/span&gt;&lt;/span&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;color: #9cdcfe;&quot;&gt;presets&lt;/span&gt;: [     &lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;@vue/cli-plugin-babel/preset&#39;&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
[       &lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;@babel/preset-env&#39;&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
{  &lt;span style=&quot;color: #9cdcfe;&quot;&gt;targets&lt;/span&gt;: {           &lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #9cdcfe;&quot;&gt;node&lt;/span&gt;: &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;current&#39;&lt;/span&gt;,         &lt;/div&gt;
&lt;div&gt;
},       &lt;/div&gt;
&lt;div&gt;
},     &lt;/div&gt;
&lt;div&gt;
],   &lt;/div&gt;
&lt;div&gt;
], &lt;/div&gt;
&lt;div&gt;
};&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;jest.config.js&lt;br /&gt;&lt;span style=&quot;background-color: black; color: #cfe2f3;&quot;&gt;module&lt;/span&gt;&lt;span style=&quot;background-color: black;&quot;&gt;&lt;span style=&quot;color: #cfe2f3;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #4ec9b0; font-family: &amp;quot;menlo&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;courier new&amp;quot; , monospace; font-size: 12px; white-space: pre;&quot;&gt;exports&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4; font-family: &amp;quot;menlo&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;courier new&amp;quot; , monospace; font-size: 12px; white-space: pre;&quot;&gt; = {&lt;/span&gt;&lt;/span&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;
&lt;span style=&quot;color: #6a9955;&quot;&gt;// 檢查以下附檔案名的檔案&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: #9cdcfe;&quot;&gt;moduleFileExtensions&lt;/span&gt;: [&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;js&#39;&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;json&#39;&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;vue&#39;&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
],&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #6a9955;&quot;&gt;// 在這個資料夾底下搜尋&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #9cdcfe;&quot;&gt;moduleNameMapper&lt;/span&gt;: {&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;@/(.*)$&#39;&lt;/span&gt;: &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;&amp;lt;rootDir&amp;gt;/src/$1&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
},&lt;/div&gt;
&lt;span style=&quot;color: #6a9955;&quot;&gt;// 忽略找這個資料夾&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: #9cdcfe;&quot;&gt;transformIgnorePatterns&lt;/span&gt;: [&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;/node_modules/(?!MODULE_NAME_HERE).+&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;.js$&#39;&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
],&lt;/div&gt;
&lt;span style=&quot;color: #6a9955;&quot;&gt;// 鄉對應檔案要用到的資源&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: #9cdcfe;&quot;&gt;transform&lt;/span&gt;: {&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;^.+\\.(js|jsx)$&#39;&lt;/span&gt;: &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;&amp;lt;rootDir&amp;gt;/node_modules/babel-jest&#39;&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;^.+\\.vue$&#39;&lt;/span&gt;: &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;&amp;lt;rootDir&amp;gt;/node_modules/vue-jest&#39;&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
},&lt;/div&gt;
&lt;div&gt;
};&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;
寫測試&lt;span style=&quot;font-size: small;&quot;&gt;(ref =&amp;gt;&amp;nbsp;&lt;a href=&quot;https://dwatow.github.io/2019/07-03-vuejs/jest-for-vue-x/&quot;&gt;https://dwatow.github.io/2019/07-03-vuejs/jest-for-vue-x/&lt;/a&gt;)&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;增加 src/actions.vue&lt;br /&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;text-align-center&quot;&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;input&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;text&quot;&lt;/span&gt; @&lt;span style=&quot;color: #9cdcfe;&quot;&gt;input&lt;/span&gt;=&quot;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;actionInputIfTrue&lt;/span&gt;&quot; /&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt; @&lt;span style=&quot;color: #9cdcfe;&quot;&gt;click&lt;/span&gt;=&quot;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;actionClick&lt;/span&gt;()&quot;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;Click&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;{{&lt;span style=&quot;color: #9cdcfe;&quot;&gt;$store&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;getters&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;text&lt;/span&gt;}}&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;Vue&lt;/span&gt; &lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;vue&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; { &lt;span style=&quot;color: #9cdcfe;&quot;&gt;mapGetters&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;mapActions&lt;/span&gt; } &lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;vuex&#39;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: #c586c0;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #c586c0;&quot;&gt;default&lt;/span&gt; {&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;name&lt;/span&gt;: &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;action&#39;&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;methods&lt;/span&gt;:{&lt;/div&gt;
&lt;div&gt;
...&lt;span style=&quot;color: #dcdcaa;&quot;&gt;mapActions&lt;/span&gt;([&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;actionClick&#39;&lt;/span&gt;]),&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;actionInputIfTrue&lt;/span&gt;: &lt;span style=&quot;color: #569cd6;&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;actionInputIfTrue&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;event&lt;/span&gt;) {&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;inputValue&lt;/span&gt; =&lt;span style=&quot;color: #9cdcfe;&quot;&gt; event&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;target&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;value&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color: #9cdcfe;&quot;&gt;inputValue&lt;/span&gt; === &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;input&#39;&lt;/span&gt;) {&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #569cd6;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;$store&lt;/span&gt;.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;dispatch&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;actionInput&#39;&lt;/span&gt;, { &lt;span style=&quot;color: #9cdcfe;&quot;&gt;inputValue&lt;/span&gt; })&lt;/div&gt;
&lt;div&gt;
}&lt;/div&gt;
&lt;div&gt;
}&lt;/div&gt;
&lt;div&gt;
},&lt;/div&gt;
&lt;div&gt;
}&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: grey;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color: grey;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;增加 ~/__test__/actions.test.js&lt;br /&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; { &lt;span style=&quot;color: #9cdcfe;&quot;&gt;shallowMount&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;createLocalVue&lt;/span&gt; } &lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;@vue/test-utils&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;store&lt;/span&gt; &lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;@/store&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;Action&lt;/span&gt; &lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;@/Actions.vue&#39;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: #dcdcaa;&quot;&gt;describe&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;Actions.vue&#39;&lt;/span&gt;, () &lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt; {&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;localVue&lt;/span&gt; = &lt;span style=&quot;color: #dcdcaa;&quot;&gt;createLocalVue&lt;/span&gt;()&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;wrapper&lt;/span&gt; = &lt;span style=&quot;color: #dcdcaa;&quot;&gt;shallowMount&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Action&lt;/span&gt;, { &lt;span style=&quot;color: #9cdcfe;&quot;&gt;store&lt;/span&gt;, &lt;span style=&quot;color: #4ec9b0;&quot;&gt;localVue&lt;/span&gt; })&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: #dcdcaa;&quot;&gt;it&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;for test&#39;&lt;/span&gt;, () &lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt; {&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #dcdcaa;&quot;&gt;expect&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;).&lt;span style=&quot;color: #dcdcaa;&quot;&gt;toBe&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;
&lt;div&gt;
})&lt;/div&gt;
&lt;div&gt;
})&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;調整 main.js&lt;br /&gt;&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;Vue&lt;/span&gt; &lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;vue&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;App&lt;/span&gt; &lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;./Actions.vue&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;router&lt;/span&gt; &lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;./router&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;store&lt;/span&gt; &lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;./store&#39;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: #9cdcfe;&quot;&gt;Vue&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;config&lt;/span&gt;.&lt;span style=&quot;color: #9cdcfe;&quot;&gt;productionTip&lt;/span&gt; = &lt;span style=&quot;color: #569cd6;&quot;&gt;false&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;Vue&lt;/span&gt;({&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #9cdcfe;&quot;&gt;router&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #9cdcfe;&quot;&gt;store&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #dcdcaa;&quot;&gt;render&lt;/span&gt;: &lt;span style=&quot;color: #9cdcfe;&quot;&gt;h&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;h&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;App&lt;/span&gt;)&lt;/div&gt;
&lt;div&gt;
}).&lt;span style=&quot;color: #dcdcaa;&quot;&gt;$mount&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;#app&#39;&lt;/span&gt;)&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;執行 jest or 在 package.json 的 scripts 中，加入 &lt;span style=&quot;background-color: black; color: #f3f3f3;&quot;&gt;&quot;test&quot;&lt;span style=&quot;font-family: &amp;quot;menlo&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;courier new&amp;quot; , monospace; font-size: 12px; white-space: pre;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;menlo&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;courier new&amp;quot; , monospace; font-size: 12px; white-space: pre;&quot;&gt;&quot;jest&quot;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaIDURMpo1YNm4ygxAiF0YDGsW6CM9F40Y2yGIU1gWVALzpbzYsCgkb-Uo5fimB-JtFKC-sAn703Cbd1BPwj4zc05BxOaCI7zPxpzEGnR31rbbNQXbjmYTbTeLmQMWxfirIqqyyf2I-JLt/s1600/%25E6%2588%25AA%25E5%259C%2596+2020-04-26+%25E4%25B8%258B%25E5%258D%25889.42.03.png&quot; style=&quot;text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;224&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaIDURMpo1YNm4ygxAiF0YDGsW6CM9F40Y2yGIU1gWVALzpbzYsCgkb-Uo5fimB-JtFKC-sAn703Cbd1BPwj4zc05BxOaCI7zPxpzEGnR31rbbNQXbjmYTbTeLmQMWxfirIqqyyf2I-JLt/s640/%25E6%2588%25AA%25E5%259C%2596+2020-04-26+%25E4%25B8%258B%25E5%258D%25889.42.03.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;如果你看到這畫面，代表你 jest 架好了&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;補充&lt;br /&gt; 不讓 jest 檢查 css，可以透過 identity-obj-proxy 把 sass 弄掉npm install identity-obj-proxy --save -dev&quot;jest&quot;: { &quot;moduleNameMapper&quot;: { &quot;\\.(css|scss|sass|less)$&quot;: &quot;identity-obj-proxy&quot; }}加在 jest.config.js 上面&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;參考&lt;/b&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;https://vue-test-utils.vuejs.org/guides/#testing-single-file-components-with-jest&quot;&gt;https://vue-test-utils.vuejs.org/guides/#testing-single-file-components-with-jest&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://medium.com/@milkmidi/jest-test-component-vue%E7%AF%87-testing-library-%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95-542db03a670b&quot;&gt;https://medium.com/@milkmidi/jest-test-component-vue%E7%AF%87-testing-library-%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95-542db03a670b&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;https://dwatow.github.io/2019/07-03-vuejs/jest-for-vue-x/&quot;&gt;https://dwatow.github.io/2019/07-03-vuejs/jest-for-vue-x/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://wcc723.github.io/development/2020/02/02/jest-intro/&quot;&gt;https://wcc723.github.io/development/2020/02/02/jest-intro/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/6109306968172577348/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/04/vue-jest-unit-testing.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/6109306968172577348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/6109306968172577348'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/04/vue-jest-unit-testing.html' title='vue-jest unit-testing 安裝篇'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjryfuiUArdJbXqOIPrUgtyuK0T3tMZCZmyDVuSCmkEa08J35dNnm_Ks3csrpGZpDr43kkcMn4ljGbHeHM8tudtFpzLKeBp_uuujRsmPflwIDMcRuEBe8f1iXsFeI3T3DjccjV5dORM6REF/s72-c/%25E6%2588%25AA%25E5%259C%2596+2020-04-26+%25E4%25B8%258B%25E5%258D%25889.17.21.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-7064438120187931967</id><published>2020-02-27T07:33:00.003-08:00</published><updated>2020-02-27T07:54:55.100-08:00</updated><title type='text'>c# lambda count too slow 的眉角</title><content type='html'>1. select count(*) table &amp;lt; 1ms&lt;br /&gt;
但&lt;br /&gt;
2. table.Count() &amp;gt; 5s&lt;br /&gt;
&lt;br /&gt;
這是今天驚人的發現，後來上網查了一下才發現..&lt;br /&gt;
原來 2. 的 lambda，因為不是單純的處理 db 資料，他也是可以處理 c# 裡的類別，&lt;br /&gt;
所以 1 不等於 2 的寫法&lt;br /&gt;
&lt;br /&gt;
以下提供兩種解法&lt;br /&gt;
a. 改用 sqlCommamd 來處理&lt;br /&gt;
b. 加一個 sql 欄位做判斷，讓 lambda 的 count 跑出來是 sql 語法，XD， table.Count(x =&amp;gt; x.age &amp;gt; 0)&lt;br /&gt;
&lt;br /&gt;
雖然 lambda 寫起來比較簡潔，但這個時候一點都不簡潔，為什麼沒有先 sql 判斷，再 C# 的判斷 .zZ。&lt;br /&gt;
&lt;br /&gt;補充：&lt;br /&gt;改掉 count(*) 這個耗資源</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/7064438120187931967/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/02/c-lambda-count-too-slow.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/7064438120187931967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/7064438120187931967'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/02/c-lambda-count-too-slow.html' title='c# lambda count too slow 的眉角'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-3476140089431453492</id><published>2020-02-21T01:04:00.000-08:00</published><updated>2020-02-24T19:32:55.074-08:00</updated><title type='text'>Join(交集) groupJoin(聯集)</title><content type='html'>理解一下 聯集 交集&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://dotnetfiddle.net/Tma5uE&quot;&gt;線上測試&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
using System;&lt;br /&gt;
using System.Globalization;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text.RegularExpressions;&lt;br /&gt;
using System.Xml.Linq;&lt;br /&gt;
using Newtonsoft.Json;&lt;br /&gt;
&lt;br /&gt;
namespace Rextester&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; public class Program&lt;br /&gt;
&amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public static void Main(string[] args)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var playerList = new List&amp;lt;Player&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new Player { Id = 1, Name = &quot;A Player&quot;, TypeId = 0 },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new Player { Id = 2, Name = &quot;B Player&quot;, TypeId = 1 },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new Player { Id = 4, Name = &quot;C Player&quot;, TypeId = 2 },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var typeList = new List&amp;lt;TypeData&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new TypeData { Id = 1, Name = &quot;Type 1&quot; },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new TypeData { Id = 2, Name = &quot;Type 2&quot; },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new TypeData { Id = 3, Name = &quot;Type 3&quot; },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new TypeData { Id = 4, Name = &quot;Type 4&quot; },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var list = playerList.Join(&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; typeList,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; person =&amp;gt; person.TypeId,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; phone =&amp;gt; phone.Id,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (left, right) =&amp;gt; left);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.Write(&quot;左側取交集。\r\n&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.Write(JsonConvert.SerializeObject(list) + &quot;\r\n&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var list1 = playerList.Join(&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; typeList,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; person =&amp;gt; person.TypeId,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; phone =&amp;gt; phone.Id,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (left, right) =&amp;gt; right);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.Write(&quot;右側取交集。\r\n&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.Write(JsonConvert.SerializeObject(list1) + &quot;\r\n&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var glist = playerList.GroupJoin(&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; typeList,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; person =&amp;gt; person.TypeId,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; phone =&amp;gt; phone.Id,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (left, right) =&amp;gt; left);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.Write(&quot;左側聯集。留左砍右。\r\n&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.Write(JsonConvert.SerializeObject(glist) + &quot;\r\n&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var glist1 = playerList.GroupJoin(&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; typeList,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; person =&amp;gt; person.TypeId,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; phone =&amp;gt; phone.Id,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (left, right) =&amp;gt; right);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.Write(&quot;右側聯集。留右砍左。\r\n&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.Write(JsonConvert.SerializeObject(glist1) + &quot;\r\n&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public class TypeData&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public int Id { get; set; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public string Name { get; set; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public class Player&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public int Id { get; set; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public string Name { get; set; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public int TypeId { get; set; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdbT0euRUT1ejfvkL_vNyUt4_0tvxu_ty0H4cEipnL7QxbRE0lZ4N3L3cmWirXhC8Y2M90CLT02xeYE6x-uJBMH_4lNW_T0JUkZN3otQroQJKPKlFxyoxxw5g6iIk252g2TjF3xL7BfmDo/s1600/%25E8%25A8%25BB%25E8%25A7%25A3+2020-02-21+170314.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;801&quot; data-original-width=&quot;1120&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdbT0euRUT1ejfvkL_vNyUt4_0tvxu_ty0H4cEipnL7QxbRE0lZ4N3L3cmWirXhC8Y2M90CLT02xeYE6x-uJBMH_4lNW_T0JUkZN3otQroQJKPKlFxyoxxw5g6iIk252g2TjF3xL7BfmDo/s1600/%25E8%25A8%25BB%25E8%25A7%25A3+2020-02-21+170314.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/3476140089431453492/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/02/join-groupjoin.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3476140089431453492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3476140089431453492'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/02/join-groupjoin.html' title='Join(交集) groupJoin(聯集)'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdbT0euRUT1ejfvkL_vNyUt4_0tvxu_ty0H4cEipnL7QxbRE0lZ4N3L3cmWirXhC8Y2M90CLT02xeYE6x-uJBMH_4lNW_T0JUkZN3otQroQJKPKlFxyoxxw5g6iIk252g2TjF3xL7BfmDo/s72-c/%25E8%25A8%25BB%25E8%25A7%25A3+2020-02-21+170314.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-5508399477763098768</id><published>2020-01-05T21:23:00.001-08:00</published><updated>2020-01-05T21:46:48.652-08:00</updated><title type='text'>windows 安裝服務</title><content type='html'>&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;新增專案&lt;/li&gt;
&lt;li&gt;在ProjectInstaller 中，填入服務名稱 &amp;amp; 服務敘述&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlC26ApAlLRu7w5ur2e4ZfyNkGqlHEdeLMq3r71Kp3NG8A-NM5-ZhYADDzLUXJcCfUCE1eLgVjw0c8lU23yAeIt-2knDldSwdyvO4YLOAW5vL5suJ6gzE22MjuVFAyEALiDoBbJIjvQEQc/s1600/%25E8%25A8%25BB%25E8%25A7%25A3+2020-01-06+130736.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlC26ApAlLRu7w5ur2e4ZfyNkGqlHEdeLMq3r71Kp3NG8A-NM5-ZhYADDzLUXJcCfUCE1eLgVjw0c8lU23yAeIt-2knDldSwdyvO4YLOAW5vL5suJ6gzE22MjuVFAyEALiDoBbJIjvQEQc/s400/%25E8%25A8%25BB%25E8%25A7%25A3+2020-01-06+130736.png&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPNbD6kCj35ji381JY-SDnd4ufh_Sy0lJ1ZWeHV6gdK_cCdmuRw9CvOvF5i145ZW2rFDWYJXdt0qR8z_XadEAxFabS2YLHQO95J-e4YFT-wqu3szwgb7GRma_1aC_OltMQqFZSE6-Mrkmh/s1600/%25E8%25A8%25BB%25E8%25A7%25A3+2020-01-06+130757.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;83&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPNbD6kCj35ji381JY-SDnd4ufh_Sy0lJ1ZWeHV6gdK_cCdmuRw9CvOvF5i145ZW2rFDWYJXdt0qR8z_XadEAxFabS2YLHQO95J-e4YFT-wqu3szwgb7GRma_1aC_OltMQqFZSE6-Mrkmh/s320/%25E8%25A8%25BB%25E8%25A7%25A3+2020-01-06+130757.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5zLvKTlO-XxJ4xVP3SxFr32Ki6MnA9i2par_enZDZqEt3xfpIvWN5jsnSkIH7DFP0To9xX_xd3G2Du5X6OnqlUpdAz_HnXJDpSR3vqXrKqX0HPTejrTqFbOHNVLoGypK1EDwzMYx54Psn/s1600/%25E8%25A8%25BB%25E8%25A7%25A3+2020-01-06+130827.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;134&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5zLvKTlO-XxJ4xVP3SxFr32Ki6MnA9i2par_enZDZqEt3xfpIvWN5jsnSkIH7DFP0To9xX_xd3G2Du5X6OnqlUpdAz_HnXJDpSR3vqXrKqX0HPTejrTqFbOHNVLoGypK1EDwzMYx54Psn/s320/%25E8%25A8%25BB%25E8%25A7%25A3+2020-01-06+130827.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;專案屬性中，(Debug 用，可以本機 Console.Write) 修改輸出類型 &quot;主控台應用程式&quot;&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilG9Bwg1_nAsouC7CXGMDlnpmvfKLI5ZX4xA48Y1J0XdIh8EqNk699lxqOjlt8Kz9HUIIEByN5U51h709F7m3YnVw13bQknfzoKT8Rcvr-_HHF7G0PEGoghxT_ZN8TN8EqNb6FRwZ3Deai/s1600/%25E8%25A8%25BB%25E8%25A7%25A3+2020-01-06+132258.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilG9Bwg1_nAsouC7CXGMDlnpmvfKLI5ZX4xA48Y1J0XdIh8EqNk699lxqOjlt8Kz9HUIIEByN5U51h709F7m3YnVw13bQknfzoKT8Rcvr-_HHF7G0PEGoghxT_ZN8TN8EqNb6FRwZ3Deai/s400/%25E8%25A8%25BB%25E8%25A7%25A3+2020-01-06+132258.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;在 program.cs 中，加入 指令碼 &lt;pre&gt;static void onInstall(string[] args)
{
    if (args.Length &amp;gt; 0)
    {
        switch (args[0])
        {
            case &quot;-install&quot;:
            case &quot;-i&quot;:
                {
                    ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
                    break;
                }
            case &quot;-uninstall&quot;:
            case &quot;-u&quot;:
                {
                    ManagedInstallerClass.InstallHelper(new string[] { &quot;/u&quot;, Assembly.GetExecutingAssembly().Location });
                    break;
                }
        }
    }
}&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;重建專案(預設路徑~/bin/Debug)，並複製到遠端&lt;/li&gt;
&lt;li&gt;遠端放置檔案資料夾中，shift + 右鍵 開啟檔案總綰&lt;/li&gt;
&lt;li&gt;鍵入 service -i&amp;nbsp; ，成功會看到服務備安裝在服務清單中&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLcpBYqV-1bnPkTxroVN2ACOKA77nVuHa2i47k3NdOFwnjvsnUxsUxrFMVSpj-1juPPRzIWxS9YTcKHCPOe6x_RW9-f5NEWqY5kkU5AinbI6pXZLweFiKq7dS3Zx9ct_-Rj9tgtbk5BDCt/s1600/%25E8%25A8%25BB%25E8%25A7%25A3+2020-01-06+130638.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;318&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLcpBYqV-1bnPkTxroVN2ACOKA77nVuHa2i47k3NdOFwnjvsnUxsUxrFMVSpj-1juPPRzIWxS9YTcKHCPOe6x_RW9-f5NEWqY5kkU5AinbI6pXZLweFiKq7dS3Zx9ct_-Rj9tgtbk5BDCt/s400/%25E8%25A8%25BB%25E8%25A7%25A3+2020-01-06+130638.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div&gt;
ref: 刪除 service 方法&lt;br /&gt;&lt;a href=&quot;https://shazi.info/%E5%A6%82%E4%BD%95%E5%88%AA%E9%99%A4-windows-%E6%9C%8D%E5%8B%99%E7%9A%84%E6%96%B9%E6%B3%95-%EF%BC%8Dsc-delete/&quot;&gt;https://shazi.info/%E5%A6%82%E4%BD%95%E5%88%AA%E9%99%A4-windows-%E6%9C%8D%E5%8B%99%E7%9A%84%E6%96%B9%E6%B3%95-%EF%BC%8Dsc-delete/&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/5508399477763098768/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2020/01/windows.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/5508399477763098768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/5508399477763098768'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2020/01/windows.html' title='windows 安裝服務'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlC26ApAlLRu7w5ur2e4ZfyNkGqlHEdeLMq3r71Kp3NG8A-NM5-ZhYADDzLUXJcCfUCE1eLgVjw0c8lU23yAeIt-2knDldSwdyvO4YLOAW5vL5suJ6gzE22MjuVFAyEALiDoBbJIjvQEQc/s72-c/%25E8%25A8%25BB%25E8%25A7%25A3+2020-01-06+130736.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-2610402829652687357</id><published>2019-12-31T09:53:00.002-08:00</published><updated>2020-01-05T17:18:12.579-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c#"/><category scheme="http://www.blogger.com/atom/ns#" term="不是目前內容的模型的一部分"/><category scheme="http://www.blogger.com/atom/ns#" term="新手錯誤"/><title type='text'>c# 不是目前內容的模型的一部分</title><content type='html'>&lt;div class=&quot;tr_bq&quot;&gt;
動機：想用 Entity FrameWork 在正式機與測試機中，切換。&lt;br /&gt;&lt;br /&gt;發生原因：因為正式機的 Entity edmx 沒有引用測試機的 table，導致正式機與測試機的模型不同，而 Entity 的 Dabe Frist 又是透過 模型來控制資料庫的，就會發生 Connect String 雖然正確，但 model 不對。&lt;br /&gt;
&lt;br /&gt;
處理方式1：&lt;br /&gt;
將正式的 edmx 引入 測試站需要用到的 table&lt;br /&gt;&lt;/div&gt;
處理方式2：&lt;br /&gt;
改用 SqlConnection 直接處理，DataSet，不透過 Entity 的 Model&lt;br /&gt;
&lt;blockquote&gt;
var mySqlConnection = new SqlConnection(&quot;server=192.168.O.O;UID=XX;PWD=OO;DATABASE=CECDB&quot;);&lt;br /&gt;
var mySqlCommand = new SqlCommand(&quot;SELECT * FROM SMS_Bill WHERE Acpd_ID = &#39;sylin&#39;&quot;, mySqlConnection);&lt;br /&gt;
mySqlConnection.Open();&lt;br /&gt;
var myDataReader = mySqlCommand.ExecuteReader(CommandBehavior.CloseConnection);&lt;br /&gt;
if (myDataReader.Read())&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; string temp = myDataReader[&quot;Account&quot;].ToString();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; myDataReader.Close();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; mySqlCommand.Dispose();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; rep.Message = temp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; rep.Success = true;&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/2610402829652687357/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2019/12/c.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/2610402829652687357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/2610402829652687357'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2019/12/c.html' title='c# 不是目前內容的模型的一部分'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-7139231681816983986</id><published>2019-12-23T00:10:00.000-08:00</published><updated>2019-12-23T00:10:21.479-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="insert"/><category scheme="http://www.blogger.com/atom/ns#" term="lambda"/><category scheme="http://www.blogger.com/atom/ns#" term="linq"/><category scheme="http://www.blogger.com/atom/ns#" term="not in"/><category scheme="http://www.blogger.com/atom/ns#" term="SqlMethods"/><title type='text'>c# 操作兩張表，將 bill 與 employee 不同的資料寫入 employee。</title><content type='html'>&lt;br /&gt;
最近比較 lambda ，linq ，sql 哪個好？&lt;br /&gt;
同樣是要操作兩張表，&lt;br /&gt;目的要將 bill 與 employee 不同的資料寫入 employee，&lt;br /&gt;
結果發現一向好操作的 lambda 居然要寫這麼大坨。&lt;br /&gt;看來 sql 還是有它方便的地方。&lt;br /&gt;
&lt;br /&gt;
Lambda:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; using (var smsDb = new smsEntities())&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var billAcpdIdList = smsDb.SMS_Bill&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Select(item =&amp;gt; item.ACPD_ID)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .ToList();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; using (var cecDb = new Entities())&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var employeeList = cecDb.EMPLOYEE&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Where(item =&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; !item.EMP_ID.Contains(&quot;emp&quot;))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Where(item =&amp;gt; !billAcpdIdList.Contains(item.EMP_ID))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Select(item =&amp;gt; new SMS_Bill&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ACPD_ID = item.EMP_ID&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; })&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .ToList();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
LinQ:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; using (var smsDb = new smsEntities())&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; using (var cecDb = new Entities())&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var list =&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (from employee in cecDb.EMPLOYEE&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; where !SqlMethods.Like(employee.EMP_ID, &quot;%[_]_&quot;)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp;&amp;amp; !(from bill in smsDb.SMS_Bill&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;select bill.ACPD_ID).Contains(employee.EMP_ID)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; select new SMS_Bill&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ACPD_ID = employee.EMP_ID,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Account = 0,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }).ToList();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; smsDb.SMS_Bill.AddRange(list);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; smsDb.SaveChanges();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;SQL&lt;br /&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; INSERT SMS_BILL(ACPD_ID)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; SELECT EMP_ID FROM EMPLOYEE&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; WHERE (EMP_ID NOT LIKE &#39;%[_]_&#39;)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; AND EMP_ID NOT IN (SELECT ACPD_ID FROM SMS_BILL)</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/7139231681816983986/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2019/12/c-bill-employee-employee.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/7139231681816983986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/7139231681816983986'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2019/12/c-bill-employee-employee.html' title='c# 操作兩張表，將 bill 與 employee 不同的資料寫入 employee。'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-3282510891367363297</id><published>2019-12-12T04:59:00.000-08:00</published><updated>2019-12-12T04:59:02.993-08:00</updated><title type='text'>c# 碰到的 http status code</title><content type='html'>開始寫後端之後，對 http status code 還蠻依賴的，以下記錄一下碰到的幾種錯誤，&lt;br /&gt;&lt;br /&gt;&lt;b&gt;500&lt;/b&gt;&amp;nbsp;=&amp;gt; 這個開頭的都是 server 端的問題。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;500.19&lt;/b&gt; =&amp;gt; IIS server 沒有裝 .net 引擎，所以不能跑 .net 的發佈檔案。&lt;br /&gt;&lt;a href=&quot;https://support.microsoft.com/zh-tw/help/942055/http-error-500-19-error-when-you-open-an-iis-7-0-webpage&quot;&gt;https://support.microsoft.com/zh-tw/help/942055/http-error-500-19-error-when-you-open-an-iis-7-0-webpage&lt;/a&gt;&lt;div&gt;
&lt;b&gt;&lt;br /&gt;405&lt;/b&gt;&amp;nbsp;=&amp;gt; 該路徑沒有合適的服務，就是可能路徑打錯了。&lt;br /&gt;&lt;a href=&quot;https://support.microsoft.com/zh-tw/help/942051/error-message-when-a-user-visits-a-website-that-is-hosted-on-a-server&quot;&gt;https://support.microsoft.com/zh-tw/help/942051/error-message-when-a-user-visits-a-website-that-is-hosted-on-a-server&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;404 &lt;/b&gt;=&amp;gt; 該位置沒有檔案。&lt;br /&gt;&lt;br /&gt;持續更新&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/3282510891367363297/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2019/12/c-http-status-code.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3282510891367363297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3282510891367363297'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2019/12/c-http-status-code.html' title='c# 碰到的 http status code'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-3444025879963767542</id><published>2019-10-19T08:56:00.002-07:00</published><updated>2019-10-19T08:56:41.882-07:00</updated><title type='text'>vue-cli3 css 重複問題</title><content type='html'>vue-cli3 基本上已經有處理 components 身上重複 css 的問題，&lt;br /&gt;
但如果配置 css 不對的話，重複 css 還是會發生。&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;主要是把 variables, mixin 寫在 vue.config.js 設定中，&lt;/li&gt;
&lt;li&gt;而應用的部份要注入在 main.js 中&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;/div&gt;
以下提供設定 code&lt;br /&gt;
&lt;br /&gt;
vue.config.js&lt;br /&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;color: #ce9178;&quot;&gt;css&lt;/span&gt;:&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;loaderOptions&lt;/span&gt;:&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;sass&lt;/span&gt;:&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;data&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;@import&amp;nbsp;&quot;@/assets/sass/global.sass&quot;;&#39;&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;css&lt;/span&gt;:&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;data&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;&quot;swiper/dist/css/swiper.css&quot;;&#39;&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp;},&lt;/div&gt;
&lt;/div&gt;
main.js&lt;br /&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;
&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&#39;@/assets/sass/app.sass&#39;&lt;/span&gt;;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/3444025879963767542/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2019/10/vue-cli3-css.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3444025879963767542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3444025879963767542'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2019/10/vue-cli3-css.html' title='vue-cli3 css 重複問題'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-7362417721323668800</id><published>2019-08-05T08:56:00.003-07:00</published><updated>2019-08-05T08:58:02.059-07:00</updated><title type='text'>docker reset </title><content type='html'>查看目前有的 container&lt;br /&gt;
&lt;br /&gt;
1. docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://stackoverflow.com/questions/16840409/how-to-list-containers-in-docker&quot;&gt;https://stackoverflow.com/questions/16840409/how-to-list-containers-in-docker&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
2. docker container reset &amp;lt;container_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. docker-compose build --pull; docker-compose up -d;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;color: #6a9955;&quot;&gt;# 砍 image &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
docker rmi&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #6a9955;&quot;&gt;# 砍 暫存&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
docker volume prune&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #6a9955;&quot;&gt;# 重抓&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
docker-compose build --pull; docker-compose up -d&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/7362417721323668800/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2019/08/docker-reset.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/7362417721323668800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/7362417721323668800'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2019/08/docker-reset.html' title='docker reset '/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-7485441884740968348</id><published>2019-07-19T00:09:00.001-07:00</published><updated>2019-07-19T00:09:07.562-07:00</updated><title type='text'>ie text-justify</title><content type='html'>&lt;a href=&quot;https://developer.mozilla.org/zh-CN/docs/Web/CSS/text-justify&quot;&gt;https://developer.mozilla.org/zh-CN/docs/Web/CSS/text-justify&lt;/a&gt;&lt;br /&gt;雖然明文規定 text-justify: distribute 已廢除&lt;br /&gt;但 ie 11 就是偏偏只能用這個語法，特別記錄一下</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/7485441884740968348/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2019/07/ie-text-justify.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/7485441884740968348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/7485441884740968348'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2019/07/ie-text-justify.html' title='ie text-justify'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-3104507283447853822</id><published>2019-07-12T04:26:00.003-07:00</published><updated>2019-07-12T04:26:49.532-07:00</updated><title type='text'>關於 Noto Sans 的字粗</title><content type='html'>一直以為 Noto Sans 有字粗 100 ~ 900&lt;br /&gt;但其實少數的幾個字粗是沒有的&lt;br /&gt;200, 600, 800 沒有&lt;br /&gt;測試結果是以下這幾種粗度才有提供喔～&lt;br /&gt;&lt;a href=&quot;https://fonts.googleapis.com/css?family=Noto+Sans+TC:100,300,400,500,700,900&quot;&gt;https://fonts.googleapis.com/css?family=Noto+Sans+TC:100,300,400,500,700,900&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
像我最近就是用了 600 才發現 原來不支援阿&lt;br /&gt;當沒載到時 chrome browser 會選擇最接近的 字粗&lt;br /&gt;&lt;a href=&quot;https://fonts.googleapis.com/css?family=Noto+Sans+TC:100,300,400,500,700,900&quot;&gt;https://fonts.googleapis.com/css?family=Noto+Sans+TC:100,300,400,700,900&lt;/a&gt;&lt;br /&gt;font-weight: 500&lt;br /&gt;這時候就會是 font-weight: 400 的樣式&lt;br /&gt;
font-weight: 600&lt;br /&gt;就變成 font-weight: 700 了&lt;br /&gt;&lt;br /&gt;總之要小心～&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/3104507283447853822/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2019/07/noto-sans.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3104507283447853822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/3104507283447853822'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2019/07/noto-sans.html' title='關於 Noto Sans 的字粗'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-8416705464483063464</id><published>2019-07-10T09:08:00.000-07:00</published><updated>2019-07-10T09:08:13.607-07:00</updated><title type='text'>vue.js input 在 ios 上面 event hook 跟 android 不同</title><content type='html'>最近流行搜尋不用點 enter 或 確定&lt;br /&gt;
只要改變 input 就會自動搜尋&lt;br /&gt;
但 input 改變的時間點很重要，&lt;br /&gt;尤其在中文拼字的時候，&lt;br /&gt;
不然就會撈到空值，&lt;br /&gt;&lt;br /&gt;
input(&lt;br /&gt;&amp;nbsp; &amp;nbsp;@keydown=&quot;onShowMsg(&#39;down&#39;)&quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;@keyup=&quot;onShowMsg(&#39;keyup&#39;)&quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;@change=&quot;onShowMsg(&#39;change&#39;)&quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp;@input=&quot;onShowMsg(&#39;input&#39;)&quot;&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;輸入&quot;ㄒ&quot; &quot;一&quot; &quot;ㄠ&quot; 在點 &quot;小&quot; &lt;br /&gt;在 ios12 iPhone8 上測試，會得到&lt;br /&gt;&lt;br /&gt;
[Log] down&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ㄒ&quot;&lt;br /&gt;
[Log] input&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ㄒ&quot;&lt;br /&gt;
[Log] keyup&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ㄒ&quot;&lt;br /&gt;
[Log] down&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;一&quot;&lt;br /&gt;
[Log] input&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;一&quot;&lt;br /&gt;
[Log] keyup&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;一&quot;&lt;br /&gt;
[Log] down&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ㄠ&quot;&lt;br /&gt;
[Log] input&amp;nbsp; &amp;nbsp; &amp;nbsp;字拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ㄠ&quot;&lt;br /&gt;
[Log] keyup&amp;nbsp; &amp;nbsp; &amp;nbsp;字拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ㄠ&quot;&lt;br /&gt;
[Log] input (x3)&amp;nbsp; &amp;nbsp; &amp;nbsp;字拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;小&quot;&lt;br /&gt;
[Log] input&amp;nbsp; &amp;nbsp; &amp;nbsp;字拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;小&quot;&lt;br /&gt;&lt;br /&gt;雖然最終值是對的，但卻沒有明確得完成觸發點&lt;br /&gt;
後來改用 watch 來偵聽&lt;br /&gt;input 的 data 結果就相當滿意&lt;br /&gt;&lt;br /&gt;
[Log] down&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ㄒ&quot;&lt;br /&gt;
[Log] input&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ㄒ&quot;&lt;br /&gt;
[Log] keyup&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ㄒ&quot;&lt;br /&gt;
[Log] down&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;一&quot;&lt;br /&gt;
[Log] input&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;一&quot;&lt;br /&gt;
[Log] keyup&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;一&quot;&lt;br /&gt;
[Log] down&amp;nbsp; &amp;nbsp; &amp;nbsp;字未拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ㄠ&quot;&lt;br /&gt;
[Log] input&amp;nbsp; &amp;nbsp; &amp;nbsp;字拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ㄠ&quot;&lt;br /&gt;
[Log] keyup&amp;nbsp; &amp;nbsp; &amp;nbsp;字拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ㄠ&quot;&lt;br /&gt;
[Log] input (x3)&amp;nbsp; &amp;nbsp; &amp;nbsp;字拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;小&quot;&lt;br /&gt;
[Log] input&amp;nbsp; &amp;nbsp; &amp;nbsp;字拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;小&quot;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;[Log] change&amp;nbsp; &amp;nbsp; &amp;nbsp;字拼完&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;小&quot;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/8416705464483063464/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2019/07/vuejs-input-ios-event-hook-android.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/8416705464483063464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/8416705464483063464'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2019/07/vuejs-input-ios-event-hook-android.html' title='vue.js input 在 ios 上面 event hook 跟 android 不同'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-1425530999410736813</id><published>2019-07-09T01:01:00.003-07:00</published><updated>2019-07-11T09:56:29.649-07:00</updated><title type='text'>... ellipsis 的飄移</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
notoSans 應該是大家蠻常用的一種字型&lt;br /&gt;
最近發現他有個小問題&lt;br /&gt;
就是 ... ellipsis 會往上飄移&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq7FzIXGlChSj38DybJW3YguHvnDKHD3N0FHlFBUYGd9niR7KP1ZcbOvGdeEELtcBm8cdJnW87Q-_aVBMAoEzdau96DnjHsxO1GmaDlHjViW_oVgpBXOecvUAYsVR2fc99oS0JB9BFFXiG/s1600/%25E8%259E%25A2%25E5%25B9%2595%25E5%25BF%25AB%25E7%2585%25A7+2019-07-09+%25E4%25B8%258B%25E5%258D%25883.57.59.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;189&quot; data-original-width=&quot;319&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq7FzIXGlChSj38DybJW3YguHvnDKHD3N0FHlFBUYGd9niR7KP1ZcbOvGdeEELtcBm8cdJnW87Q-_aVBMAoEzdau96DnjHsxO1GmaDlHjViW_oVgpBXOecvUAYsVR2fc99oS0JB9BFFXiG/s1600/%25E8%259E%25A2%25E5%25B9%2595%25E5%25BF%25AB%25E7%2585%25A7+2019-07-09+%25E4%25B8%258B%25E5%258D%25883.57.59.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
而且 earlyaccess 跟 release 都有這個問題&lt;br /&gt;
以下是測試網址&lt;br /&gt;
&lt;a href=&quot;https://codepen.io/LeoYeh/pen/wLQRLJ&quot;&gt;https://codepen.io/LeoYeh/pen/wLQRLJ&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
目前只有換成其他字型..來處理</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/1425530999410736813/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2019/07/ellipsis.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/1425530999410736813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/1425530999410736813'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2019/07/ellipsis.html' title='... ellipsis 的飄移'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq7FzIXGlChSj38DybJW3YguHvnDKHD3N0FHlFBUYGd9niR7KP1ZcbOvGdeEELtcBm8cdJnW87Q-_aVBMAoEzdau96DnjHsxO1GmaDlHjViW_oVgpBXOecvUAYsVR2fc99oS0JB9BFFXiG/s72-c/%25E8%259E%25A2%25E5%25B9%2595%25E5%25BF%25AB%25E7%2585%25A7+2019-07-09+%25E4%25B8%258B%25E5%258D%25883.57.59.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581670382435927721.post-7947794919001300041</id><published>2019-07-04T21:56:00.001-07:00</published><updated>2019-07-04T21:56:33.444-07:00</updated><title type='text'>css selector 的奧祕</title><content type='html'>正常 selector 其實蠻夠用的&lt;br /&gt;但比如說做個多語系 可能就會需要用 zh-TW&lt;br /&gt;div(class=&quot;zh-TW&quot;)&lt;br /&gt;&lt;br /&gt;以下做了些測試&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://codepen.io/LeoYeh/pen/QXBzbO&quot;&gt;https://codepen.io/LeoYeh/pen/QXBzbO&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoyehsblog.blogspot.com/feeds/7947794919001300041/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://leoyehsblog.blogspot.com/2019/07/css-selector.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/7947794919001300041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581670382435927721/posts/default/7947794919001300041'/><link rel='alternate' type='text/html' href='http://leoyehsblog.blogspot.com/2019/07/css-selector.html' title='css selector 的奧祕'/><author><name>Flash &amp;gt; JS 老靈魂</name><uri>http://www.blogger.com/profile/02072332743104492381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaZJ1GCeBgaFG8GTxYhzt-vRBkz1T6rGWMj6Zu3R4Eg_ko6IujLyzgB9KdDZ_Z-L1oTlO0y-IQgGU0v7KTfGhwAmf-pel3wL1M0ry9XOfpc6DwIzlB1N4Q0pJ-zvstV5g/s110/%E8%A8%BB%E8%A7%A3+2019-10-28+101643.jpg'/></author><thr:total>0</thr:total></entry></feed>