diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index c8c22fb24..18da733fc 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -3,9 +3,12 @@ name: Build and test on: [pull_request] jobs: - build: + build-and-test: runs-on: ubuntu-latest + env: + CI: true + strategy: matrix: node-version: [8.x, 10.x, 13.x] @@ -27,18 +30,25 @@ jobs: ${{ runner.os }}-npm-${{ matrix.node-version }}- ${{ runner.os }}-npm- - - name: npm install, build, and test + - name: install run: | npm ci npm i --no-save eslint ts-node typescript npm run plugins:ci + + - name: static checks + run: | npm run lint + + - name: build + run: | npm run build npm run plugins:build + + - name: test + run: | npm run test:smoke npm run testb npm run test:perf npm run test:types # npm run test:stress - env: - CI: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100755 index 000000000..7f2e14a74 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,66 @@ +name: Release + +on: + release: + types: [created] + +jobs: + release: + runs-on: ubuntu-latest + + env: + CI: true + + # Note that these steps are *identical* to build-and-test (with the caveat + # that build-and-test uses several versions of Node, and Release only uses + # 10.x) at least until the actual publishing happens. Ideally, we could + # delegate to the build- and-test workflow, but I haven't found a way to do + # that yet. + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v1 + with: + node-version: 10.x + + - name: cache dependencies + uses: actions/cache@v1 + with: + path: ~/.npm + key: ${{ runner.os }}-npm-10.x-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-npm-10.x- + ${{ runner.os }}-npm- + + - name: install + run: | + npm ci + npm i --no-save eslint ts-node typescript + npm run plugins:ci + + - name: static checks + run: | + npm run lint + + - name: build + run: | + npm run build + npm run plugins:build + + - name: test + run: | + npm run test:smoke + npm run testb + npm run test:perf + npm run test:types + # npm run test:stress + + # And finally... publish it! Note that we create the .npmrc file + # "just in time" so that `npm publish` can get the auth token from the + # environment + - name: publish + run: | + echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' > .npmrc + npm publish --dry-run + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/README.md b/README.md index 20cab72ac..e4d108fe9 100644 --- a/README.md +++ b/README.md @@ -716,9 +716,10 @@ doc.world.hello = "Hello again!" - **[Geocoding Social Conversations with NLP and JavaScript](http://compromise.cool)** - by Microsoft - **[Microservice Recipe](https://eventn.com/recipes/text-parsing-with-nlp-compromise)** - by Eventn +- **[Adventure Game Sentence Parsing with Compromise](https://killalldefects.com/2020/02/20/adventure-game-sentence-parsing-with-compromise/) - **[Building Text-Based Games](https://killalldefects.com/2019/09/24/building-text-based-games-with-compromise-nlp/)** - by Matt Eland - **[Fun with javascript in BigQuery](https://medium.com/@hoffa/new-in-bigquery-persistent-udfs-c9ea4100fd83#6e09)** - by Felipe Hoffa -- - **[Natural Language Processing... in the Browser???](https://dev.to/charlesdlandau/natural-language-processing-in-the-browser-52hj)** - by Charles Landau +- **[Natural Language Processing... in the Browser???](https://dev.to/charlesdlandau/natural-language-processing-in-the-browser-52hj)** - by Charles Landau ##### Talks: diff --git a/builds/compromise-tokenize.js b/builds/compromise-tokenize.js index 71aef40d8..26d1fa17e 100644 --- a/builds/compromise-tokenize.js +++ b/builds/compromise-tokenize.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).nlp=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var r=0;rn[e].lineage.length?1:n[t].isA.length>n[e].isA.length?-1:0:0:1}))},M={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},W={json:function(t,e){t=t||{};var r={};return(t=Object.assign({},M,t)).text&&(r.text=this.text),t.normal&&(r.normal=this.normal),t.tags&&(r.tags=Object.keys(this.tags)),t.clean&&(r.clean=this.clean),(t.id||t.offset)&&(r.id=this.id),t.implicit&&null!==this.implicit&&(r.implicit=this.implicit),t.whitespace&&(r.pre=this.pre,r.post=this.post),t.bestTag&&(r.bestTag=L(this,e)[0]),r}},G=Object.assign({},_,T,z,q,W);function H(){return"undefined"!=typeof window&&window.document}var U=function(t,e){for(t=t.toString();t.length0&&void 0!==arguments[0]?arguments[0]:"";e(this,t),r=String(r);var n=E(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(t,[{key:"set",value:function(t){var e=E(t);return this.text=e.text,this.clean=e.clean,this}}]),t}();rt.prototype.clone=function(){var t=new rt(this.text);return t.pre=this.pre,t.post=this.post,t.tags=Object.assign({},this.tags),t},Object.assign(rt.prototype,G),Object.assign(rt.prototype,et);var nt=rt,it={terms:function(t){if(0===this.length)return[];if(this.cache.terms)return void 0!==t?this.cache.terms[t]:this.cache.terms;for(var e=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof t&&(t="normal"===t?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===t?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),i=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(i=!0);var o=n.reduce((function(o,s,a){t.last=r&&a===n.length-1;var u=!0,c=!0;return!1===i&&(0===a&&e&&(u=!1),a===n.length-1&&r&&(c=!1)),o+s.textOut(t,u,c)}),"");return!0===i&&r&&(o=ot(o)),!0===t.trim&&(o=o.trim()),o}},at={trim:function(){var t=this.terms();if(t.length>0){t[0].pre=t[0].pre.replace(/^\s+/,"");var e=t[t.length-1];e.post=e.post.replace(/\s+$/,"")}return this}},ut=/[.?!]\s*$/,ct=function(t,e){e[0].pre=t[0].pre;var r,n,i=t[t.length-1],o=e[e.length-1];o.post=(r=i.post,n=o.post,ut.test(n)?n+r.match(/\s*$/):r),i.post="",""===i.post&&(i.post+=" ")},lt=function(t,e,r){var n=t.terms(),i=e.terms();ct(n,i),function(t,e,r){var n=t[t.length-1],i=e[e.length-1],o=n.next;(n.next=e[0].id,i.next=o,o)&&(r.get(o).prev=i.id);var s=t[0].id;s&&(e[0].prev=s)}(n,i,t.pool);var o,s=[t],a=t.start,u=[r];return(u=u.concat(r.parents())).forEach((function(t){var e=t.list.filter((function(t){return t.hasId(a)}));s=s.concat(e)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length})),t.cache={},t},ht=/ /,ft=function(t,e,r){var n=t.start,i=e.terms();!function(t){var e=t[t.length-1];!1===ht.test(e.post)&&(e.post+=" ")}(i),function(t,e,r){var n=r[r.length-1];n.next=t.start;var i=t.pool,o=i.get(t.start);o.prev&&(i.get(o.prev).next=e.start);r[0].prev=t.terms(0).prev,t.terms(0).prev=n.id}(t,e,i);var o,s=[t],a=[r];return(a=a.concat(r.parents())).forEach((function(t){var r=t.list.filter((function(t){return t.hasId(n)||t.hasId(e.start)}));s=s.concat(r)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length,t.start===n&&(t.start=e.start),t.cache={}})),t},pt=function(t,e){var r=e.pool(),n=t.terms(),i=r.get(n[0].prev)||{},o=r.get(n[n.length-1].next)||{};n[0].implicit&&i.implicit&&(i.set(i.implicit),i.post+=" "),function(t,e,r,n){var i=t.parents();i.push(t),i.forEach((function(t){var i=t.list.find((function(t){return t.hasId(e)}));i&&(i.length-=r,i.start===e&&(i.start=n.id),i.cache={})})),t.list=t.list.filter((function(t){return!(!t.start||!t.length)}))}(e,t.start,t.length,o),i&&(i.next=o.id),o&&(o.prev=i.id)},dt={append:function(t,e){return lt(this,t,e),this},prepend:function(t,e){return ft(this,t,e),this},delete:function(t){return pt(this,t),this},replace:function(t,e){var r=this.length;lt(this,t,e);var n=this.buildFrom(this.start,this.length);n.length=r,pt(n,e)},splitOn:function(t){var e=this.terms(),r={before:null,match:null,after:null},n=e.findIndex((function(e){return e.id===t.start}));if(-1===n)return r;var i=e.slice(0,n);i.length>0&&(r.before=this.buildFrom(i[0].id,i.length));var o=e.slice(n,n+t.length);o.length>0&&(r.match=this.buildFrom(o[0].id,o.length));var s=e.slice(n+t.length,e.length);return s.length>0&&(r.after=this.buildFrom(s[0].id,s.length,this.pool)),r}},gt={json:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r={};return t.text&&(r.text=this.text()),t.normal&&(r.normal=this.text("normal")),t.clean&&(r.clean=this.text("clean")),t.reduced&&(r.reduced=this.text("reduced")),t.root&&(r.root=this.text("root")),t.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),t.terms&&(!0===t.terms&&(t.terms={}),r.terms=this.terms().map((function(r){return r.json(t.terms,e)}))),r}},vt={lookAhead:function(t){t||(t=".*");var e=this.pool,r=[],n=this.terms();return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(t)},lookBehind:function(t){t||(t=".*");var e=this.pool,r=[];return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.prev))}(e.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(t)}},mt=Object.assign({},it,st,at,dt,gt,vt),bt=function(t,e){if(0===e.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},yt=function(t,e,r,n,i,o){for(var s=e;e1&&u.greedy?d.length+=s-p:d.length++}}else if(!0!==u.optional){if(!(t[s].isImplicit()&&e[a-1]&&t[s+1]&&t[s+1].doesMatch(u,r+s,n)))return[!1,null];s+=2}}else{var g=$t(t,s,e[a+1],u,r);if(void 0!==u.min&&g-su.max){s+=u.max;continue}if(null===g)return[!1,null];c&&(wt(i,h,t,s,u.named).length=g-s),s=g}}return[t.slice(0,s),i]},Pt=function(t,e,r){if(!r||0===r.length)return r;if(e.some((function(t){return t.end}))){var n=t[t.length-1];r=r.filter((function(t){return-1!==t.match.indexOf(n)}))}return r},xt=/\{([0-9]+,?[0-9]*)\}/,kt=/&&/,jt=new RegExp(/^<(\S+)>/),Ot=function(t){return t[t.length-1]},Et=function(t){return t[0]},Ct=function(t){return t.substr(1)},_t=function(t){return t.substr(0,t.length-1)},Tt=function(t){return t=Ct(t),t=_t(t)},Ft=function t(e){for(var r,n={},i=0;i<2;i+=1){if("$"===Ot(e)&&(n.end=!0,e=_t(e)),"^"===Et(e)&&(n.start=!0,e=Ct(e)),("["===Et(e)||"]"===Ot(e))&&(n.named=!0,"["===Et(e)?n.groupType="]"===Ot(e)?"single":"start":n.groupType="end",e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===Et(e))){var o=jt.exec(e);o.length>=2&&(n.named=o[1],e=e.replace(o[0],""))}if("+"===Ot(e)&&(n.greedy=!0,e=_t(e)),"*"!==e&&"*"===Ot(e)&&"\\*"!==e&&(n.greedy=!0,e=_t(e)),"?"===Ot(e)&&(n.optional=!0,e=_t(e)),"!"===Et(e)&&(n.negative=!0,e=Ct(e)),"("===Et(e)&&")"===Ot(e)){kt.test(e)?(n.choices=e.split(kt),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=Ct(n.choices[0]);var s=n.choices.length-1;n.choices[s]=_t(n.choices[s]),n.choices=n.choices.map((function(t){return t.trim()})),n.choices=n.choices.filter((function(t){return t})),n.choices=n.choices.map(t),e=""}if("/"===Et(e)&&"/"===Ot(e))return e=Tt(e),n.regex=new RegExp(e),n;if("~"===Et(e)&&"~"===Ot(e))return e=Tt(e),n.soft=!0,n.word=e,n}return!0===xt.test(e)&&(e=e.replace(xt,(function(t,e){var r=e.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===Et(e)?(n.tag=Ct(e),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===Et(e)?(n.method=Ct(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),n.word=e.toLowerCase()),n)},Nt=function(t){return t.filter((function(t){return t.groupType})).length>0&&(t=function(t){for(var e,r,n=!1,i=-1,o=0;o)?\(.*?\)[?+*]*\]?\$?)/);return e=e.map((function(t){return t.trim()}))}(e);return r=(r=function(t){var e=[];return t.forEach((function(t){if(/^[[^_/]?\(/.test(t[0]))e.push(t);else{var r=t.split(" ");r=r.filter((function(t){return t})),e=e.concat(r)}})),e}(r)).map(Ft),r=Nt(r)},St=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e&&(e=Vt(e)),!0===bt(t,e))return[];var n=e.filter((function(t){return!0!==t.optional})).length,i=t.terms(),o=[];if(!0===e[0].start){var s=At(i,e,0,i.length),a=u(s,2),c=a[0],l=a[1];return!1!==c&&c.length>0&&(c=c.filter((function(t){return t})),o.push({match:c,groups:l})),Pt(i,e,o)}for(var h=0;hi.length);h+=1){var f=At(i.slice(h),e,h,i.length),p=u(f,2),d=p[0],g=p[1];if(!1!==d&&d.length>0&&(h+=d.length-1,d=d.filter((function(t){return t})),o.push({match:d,groups:g}),!0===r))return Pt(i,e,o)}return Pt(i,e,o)},zt=function(t,e){var r={};St(t,e).forEach((function(t){t.match.forEach((function(t){r[t.id]=!0}))}));var n=t.terms(),i=[],o=[];return n.forEach((function(t){!0!==r[t.id]?o.push(t):o.length>0&&(i.push(o),o=[])})),o.length>0&&i.push(o),i},Bt={match:function(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=St(this,t,r);return n=n.map((function(t){var r=t.match,n=t.groups,i=e.buildFrom(r[0].id,r.length,n);return i.cache.terms=r,i}))},has:function(t){return St(this,t,!0).length>0},not:function(t){var e=this,r=zt(this,t);return r=r.map((function(t){return e.buildFrom(t[0].id,t.length)}))},canBe:function(t,e){for(var r=this,n=[],i=this.terms(),o=!1,s=0;s0})).map((function(t){return r.buildFrom(t[0].id,t.length)}))}},It=function t(r,n,i){e(this,t),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:i}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};It.prototype.buildFrom=function(t,e,r){var n=new It(t,e,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(It.prototype,Bt),Object.assign(It.prototype,mt);var qt={term:"terms"};Object.keys(qt).forEach((function(t){return It.prototype[t]=It.prototype[qt[t]]}));var Dt=It,Lt=function(){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,t),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(t,[{key:"add",value:function(t){return this.words[t.id]=t,this}},{key:"get",value:function(t){return this.words[t]}},{key:"remove",value:function(t){delete this.words[t]}},{key:"merge",value:function(t){return Object.assign(this.words,t.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),t}();Lt.prototype.clone=function(){var t=this,e=Object.keys(this.words).reduce((function(e,r){var n=t.words[r].clone();return e[n.id]=n,e}),{});return new Lt(e)};for(var Mt=Lt,Wt=function(t){t.forEach((function(e,r){r>0&&(e.prev=t[r-1].id),t[r+1]&&(e.next=t[r+1].id)}))},Gt=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Ht=/\S/,Ut=/[ .][A-Z]\.? *$/i,Qt=/(?:\u2026|\.{2,}) *$/,Rt=/((?:\r?\n|\r)+)/,Zt=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Jt=/^\s+/,Yt=function(t,e){if(!0===Ut.test(t))return!1;if(!0===Qt.test(t))return!1;if(!1===Zt.test(t))return!1;var r=t.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!e.hasOwnProperty(n)},Kt=function(t,e){var r=e.cache.abbreviations;t=t||"";var n=[],i=[];if(!(t=String(t))||"string"!=typeof t||!1===Ht.test(t))return n;for(var o=function(t){for(var e=[],r=t.split(Rt),n=0;n0&&(n.push(c),i[u]="")}if(0===n.length)return[t];for(var l=1;l0?(e[e.length-1]+=o,e.push(a)):e.push(o+a),o=""):o+=a}return o&&(0===e.length&&(e[0]=""),e[e.length-1]+=o),e=(e=function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof t&&"number"==typeof t&&(t=String(t));var n=Kt(t,e);n=n.map((function(t){return se(t)})),r=r||new Mt;var i=n.map((function(t){t=t.map((function(t){var e=new nt(t);return r.add(e),e})),Wt(t);var e=new Dt(t[0].id,t.length,r);return e.cache.terms=t,e}));return i},ue=function(t,e){var r=new Mt;return t.map((function(t,n){var i=t.terms.map((function(i,o){var s=new nt(i.text);return s.pre=void 0!==i.pre?i.pre:"",void 0===i.post&&(i.post=" ",o>=t.terms.length-1&&(i.post=". ",n>=t.terms.length-1&&(i.post="."))),s.post=void 0!==i.post?i.post:" ",i.tags&&i.tags.forEach((function(t){return s.tag(t,"",e)})),r.add(s),s}));return Wt(i),new Dt(i[0].id,i.length,r)}))},ce={},le=["Person","Place","Organization"],he={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:le},Actor:{isA:"Noun",notA:le},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:le},Demonym:{isA:["Noun","ProperNoun"],notA:le},Possessive:{isA:"Noun"}},fe={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},pe={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},de=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ge={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:de},Conjunction:{notA:de},Preposition:{notA:de},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},ve={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},me=function(t){return Object.keys(t).forEach((function(e){ve[e]?t[e].color=ve[e]:t[e].isA.some((function(r){return!!ve[r]&&(t[e].color=ve[r],!0)}))})),t},be=function(t){return Object.keys(t).forEach((function(e){for(var r=t[e],n=r.isA.length,i=0;i1&&(r.hasCompound[o[0]]=!0),"Singular"===e){var s=i.toPlural(t,r);n[s]=n[s]||"Plural"}if("Infinitive"===e)for(var a=i.conjugate(t,r),u=Object.keys(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:"",e=t[t.length-1];if(!0===Se.hasOwnProperty(e))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r={};return e&&e.irregulars&&!0===e.irregulars.verbs.hasOwnProperty(t)&&(r=Object.assign({},e.irregulars.verbs[t])),void 0===(r=Object.assign({},Ie(t),r)).Gerund&&(r.Gerund=De.Gerund(t)),void 0===r.PastTense&&(r.PastTense=De.PastTense(t)),void 0===r.PresentTense&&(r.PresentTense=De.PresentTense(t)),r},Me=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],We=[/ary$/],Ge={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},He=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Ue=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qe=[/ary$/,/ous$/],Re={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Ze=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Je={toSuperlative:function(t){if(Ge.hasOwnProperty(t))return Ge[t];for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=e.irregulars.nouns;if(r.hasOwnProperty(t))return r[t];var n=tr(t);return null!==n?n:Xe.test(t)?t+"es":t+"s"},rr=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],nr=function(t,e){var r,n=e.irregulars.nouns,i=(r=n,Object.keys(r).reduce((function(t,e){return t[r[e]]=e,t}),{}));if(i.hasOwnProperty(t))return i[t];for(var o=0;o1?i[o]&&"."!==i[o]&&r.tag(i[o],n,e.world):r.tag(t,n,e.world)}))}))}),mr={tag:function(t,e){return t?(vr(t,this,!1,e),this):this},tagSafe:function(t,e){return t?(vr(t,this,!0,e),this):this},unTag:function(t,e){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(t,e,r.world)}))})),this},canBe:function(t){if(!t)return this;var e=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(t,e))}),[]);return this.buildFrom(r)}},br={map:function(e){var r=this;if(!e)return this;var n=this.list.map((function(t,n){var i=r.buildFrom([t]);i.from=null;var o=e(i,n);return o&&o.list&&o.list[0]?o.list[0]:o}));return 0===(n=n.filter((function(t){return t}))).length?this.buildFrom(n):"object"!==t(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(t,e){var r=this;return t?(this.list.forEach((function(n,i){var o=r.buildFrom([n]);!0===e&&(o.from=null),t(o,i)})),this):this},filter:function(t){var e=this;if(!t)return this;var r=this.list.filter((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return this.buildFrom(r)},find:function(t){var e=this;if(!t)return this;var r=this.list.find((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return r?this.buildFrom([r]):void 0},some:function(t){var e=this;return t?this.list.some((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)})):this},random:function(t){if(!this.found)return this;var e=Math.floor(Math.random()*this.list.length);if(void 0===t){var r=[this.list[e]];return this.buildFrom(r)}return e+t>this.length&&(e=(e=this.length-t)<0?0:e),this.slice(e,e+t)}},yr=function(t){return t.split(/[ -]/g)},$r=function(t,e,r){for(var n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return t.forEach((function(t,n){var i=!0;void 0!==e[n]&&(i=e[n]),t=(t=(t||"").toLowerCase()).replace(/[,;.!?]+$/,"");var o=yr(t).map((function(t){return t.trim()}));r[o[0]]=r[o[0]]||{},1===o.length?r[o[0]].value=i:(r[o[0]].more=r[o[0]].more||[],r[o[0]].more.push({rest:o.slice(1),value:i}))})),r}(t,e),i=[],o=function(t){for(var e=r.list[t],o=e.terms().map((function(t){return t.reduced})),s=function(t){void 0!==n[o[t]]&&(void 0!==n[o[t]].more&&n[o[t]].more.forEach((function(r){void 0!==o[t+r.rest.length]&&(!0===r.rest.every((function(e,r){return e===o[t+r+1]}))&&i.push({id:e.terms()[t].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[o[t]].value&&i.push({id:e.terms()[t].id,value:n[o[t]].value,length:1}))},a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(i){var o,s=e;if("function"==typeof e&&(s=e(i)),s&&"object"===t(s)&&"Doc"===s.isA)o=s.list,r.pool().merge(s.pool());else{if("string"!=typeof s)return;!1!==n.keepCase&&i.terms(0).isTitleCase()&&(s=Pr(s)),o=ae(s,r.world,r.pool()),r.buildFrom(o).tagger()}if(!0===n.keepTags){var a=i.json({terms:{tags:!0}}).terms;o[0].terms().forEach((function(t,e){a[e]&&t.tagSafe(a[e].tags,"keptTag",r.world)}))}i.replace(o[0],r)})),this):this.delete()},replace:function(t,e,r){return void 0===e?this.replaceWith(t,r):(this.match(t).replaceWith(e,r),this)}},kr=C((function(t,e){e.append=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ae(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.append(n,e)})),this):this},e.insertAfter=e.append,e.insertAt=e.append,e.prepend=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ae(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.prepend(n,e)})),this):this},e.insertBefore=e.prepend,e.concat=function(){this.uncache();for(var t=this.list.slice(0),e=0;e0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof e&&this.list[e])return this.list[e].json(r);!0===(e=n(e)).root&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))}));var i=this.list.map((function(r){return r.json(e,t.world)}));if((e.terms.offset||e.offset||e.terms.index||e.index)&&Er(this,i,e),e.frequency||e.freq||e.count){var o={};this.list.forEach((function(t){var e=t.text("reduced");o[e]=o[e]||0,o[e]+=1})),this.list.forEach((function(t,e){i[e].count=o[t.text("reduced")]}))}if(e.unique){var s={};i=i.filter((function(t){return!0!==s[t.reduced]&&(s[t.reduced]=!0,!0)}))}return i},e.data=e.json})),_r=(Cr.json,Cr.data,C((function(t){var e=function(t,e){for(t=t.toString();t.lengthe.count?-1:t.countn?1:0},length:function(t,e){var r=t.text().trim().length,n=e.text().trim().length;return rn?-1:0},wordCount:function(t,e){var r=t.wordCount(),n=e.wordCount();return rn?-1:0}};Nr.alphabetical=Nr.alpha,Nr.wordcount=Nr.wordCount;var Vr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Sr={sort:function(t){return"freq"===(t=t||"alpha")||"frequency"===t||"topk"===t?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(e=this).list.forEach((function(t){var e=t.text(n);r[e]=r[e]||0,r[e]+=1})),e.list.sort((function(t,e){var i=r[t.text(n)],o=r[e.text(n)];return io?-1:0})),e):Vr.hasOwnProperty(t)?function(t){var e={};return t.json({terms:{offset:!0}}).forEach((function(t){e[t.terms[0].id]=t.terms[0].offset.start})),t.list=t.list.sort((function(t,r){return e[t.start]>e[r.start]?1:e[t.start]0){i+=s;continue}}if(void 0===r[o]||!0!==r.hasOwnProperty(o))if(o===t[i].reduced||!0!==r.hasOwnProperty(t[i].reduced)){if(!0===Xr.test(o)){var a=o.replace(Xr,"");!0===r.hasOwnProperty(a)&&t[i].tag(r[a],"noprefix-lexicon",e)}}else t[i].tag(r[t[i].reduced],"lexicon",e);else t[i].tag(r[o],"lexicon",e)}return t},rn=function(t){var e=t.termList();return en(e,t.world),t},nn=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){!0===t.tags.Abbreviation&&t.next&&(t.post=t.post.replace(/^\./,""));var e=t.text.replace(/\./,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){t.post=t.post.replace(/^\./,""),t.post="."+t.post})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,t.prototype.abbreviations=function(t){var e=this.match("#Abbreviation");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},on=/\./,sn=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");e=e.split("").join("."),!1===on.test(t.post)&&(e+="."),t.set(e)})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,r.prototype.strip=r.prototype.stripPeriods,t.prototype.acronyms=function(t){var e=this.match("#Acronym");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},an=function(t){return t.prototype.clauses=function(e){var r=this.if("@hasComma").notIf("@hasComma @hasComma").notIf("@hasComma . .? (and|or) .").notIf("(#City && @hasComma) #Country").notIf("(#Date && @hasComma) #Year").notIf("@hasComma (too|also)$").match("@hasComma"),n=this.splitAfter(r),i=n.quotations(),o=(n=n.splitOn(i)).parentheses(),s=(n=n.splitOn(o)).if("#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb").match("#Conjunction"),a=(n=n.splitBefore(s)).if("if .{2,9} then .").match("then"),u=(n=(n=(n=(n=(n=(n=n.splitBefore(a)).splitBefore("as well as .")).splitBefore("such as .")).splitBefore("in addition to .")).splitAfter("@hasSemicolon")).splitAfter("@hasDash")).filter((function(t){return t.wordCount()>5&&t.match("#Verb+").length>=2}));if(u.found){var c=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(c.eq(0))}return"number"==typeof e&&(n=n.get(e)),new t(n.list,this,this.world)},t},un=function(t){var r=function(t){function r(t,n,i){var s;return e(this,r),(s=a(this,o(r).call(this,t,n,i))).contracted=null,s}return i(r,t),n(r,[{key:"expand",value:function(){return this.list.forEach((function(t){var e=t.terms(),r=e[0].isTitleCase();e.forEach((function(t,r){t.set(t.implicit||t.text),t.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return o.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(t,[{key:"tagger",value:function(){return rn(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),t}();qn.prototype.buildFrom=function(t){return t=t.map((function(t){return t.clone(!0)})),new qn(t,this,this.world)},qn.prototype.fromText=function(t){var e=ae(t,this.world,this.pool());return this.buildFrom(e)},Object.assign(qn.prototype,In.misc),Object.assign(qn.prototype,In.selections),Bn(qn);var Dn={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(Dn).forEach((function(t){return qn.prototype[t]=qn.prototype[Dn[t]]}));var Ln=qn;return function t(e){var r=e,n=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;e&&r.addWords(e);var n=ae(t,r),i=new Ln(n,null,r);return i.tagger(),i};return n.tokenize=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=r;e&&((n=n.clone()).words={},n.addWords(e));var i=ae(t,n),o=new Ln(i,null,n);return e&&rn(o),o},n.extend=function(t){return t(Ln,r,this,Dt,nt,Mt),this},n.fromJSON=function(t){var e=ue(t,r);return new Ln(e,null,r)},n.clone=function(){return t(r.clone())},n.verbose=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(t),this},n.version="13.1.0",n.import=n.load,n}(new fr)})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).nlp=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var r=0;rn[e].lineage.length?1:n[t].isA.length>n[e].isA.length?-1:0:0:1}))},M={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},W={json:function(t,e){t=t||{};var r={};return(t=Object.assign({},M,t)).text&&(r.text=this.text),t.normal&&(r.normal=this.normal),t.tags&&(r.tags=Object.keys(this.tags)),t.clean&&(r.clean=this.clean),(t.id||t.offset)&&(r.id=this.id),t.implicit&&null!==this.implicit&&(r.implicit=this.implicit),t.whitespace&&(r.pre=this.pre,r.post=this.post),t.bestTag&&(r.bestTag=L(this,e)[0]),r}},G=Object.assign({},_,T,z,q,W);function H(){return"undefined"!=typeof window&&window.document}var U=function(t,e){for(t=t.toString();t.length0&&void 0!==arguments[0]?arguments[0]:"";e(this,t),r=String(r);var n=E(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(t,[{key:"set",value:function(t){var e=E(t);return this.text=e.text,this.clean=e.clean,this}}]),t}();rt.prototype.clone=function(){var t=new rt(this.text);return t.pre=this.pre,t.post=this.post,t.tags=Object.assign({},this.tags),t},Object.assign(rt.prototype,G),Object.assign(rt.prototype,et);var nt=rt,it={terms:function(t){if(0===this.length)return[];if(this.cache.terms)return void 0!==t?this.cache.terms[t]:this.cache.terms;for(var e=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof t&&(t="normal"===t?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===t?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),i=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(i=!0);var o=n.reduce((function(o,s,a){t.last=r&&a===n.length-1;var u=!0,c=!0;return!1===i&&(0===a&&e&&(u=!1),a===n.length-1&&r&&(c=!1)),o+s.textOut(t,u,c)}),"");return!0===i&&r&&(o=ot(o)),!0===t.trim&&(o=o.trim()),o}},at={trim:function(){var t=this.terms();if(t.length>0){t[0].pre=t[0].pre.replace(/^\s+/,"");var e=t[t.length-1];e.post=e.post.replace(/\s+$/,"")}return this}},ut=/[.?!]\s*$/,ct=function(t,e){e[0].pre=t[0].pre;var r,n,i=t[t.length-1],o=e[e.length-1];o.post=(r=i.post,n=o.post,ut.test(n)?n+r.match(/\s*$/):r),i.post="",""===i.post&&(i.post+=" ")},lt=function(t,e,r){var n=t.terms(),i=e.terms();ct(n,i),function(t,e,r){var n=t[t.length-1],i=e[e.length-1],o=n.next;(n.next=e[0].id,i.next=o,o)&&(r.get(o).prev=i.id);var s=t[0].id;s&&(e[0].prev=s)}(n,i,t.pool);var o,s=[t],a=t.start,u=[r];return(u=u.concat(r.parents())).forEach((function(t){var e=t.list.filter((function(t){return t.hasId(a)}));s=s.concat(e)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length})),t.cache={},t},ht=/ /,ft=function(t,e,r){var n=t.start,i=e.terms();!function(t){var e=t[t.length-1];!1===ht.test(e.post)&&(e.post+=" ")}(i),function(t,e,r){var n=r[r.length-1];n.next=t.start;var i=t.pool,o=i.get(t.start);o.prev&&(i.get(o.prev).next=e.start);r[0].prev=t.terms(0).prev,t.terms(0).prev=n.id}(t,e,i);var o,s=[t],a=[r];return(a=a.concat(r.parents())).forEach((function(t){var r=t.list.filter((function(t){return t.hasId(n)||t.hasId(e.start)}));s=s.concat(r)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length,t.start===n&&(t.start=e.start),t.cache={}})),t},pt=function(t,e){var r=e.pool(),n=t.terms(),i=r.get(n[0].prev)||{},o=r.get(n[n.length-1].next)||{};n[0].implicit&&i.implicit&&(i.set(i.implicit),i.post+=" "),function(t,e,r,n){var i=t.parents();i.push(t),i.forEach((function(t){var i=t.list.find((function(t){return t.hasId(e)}));i&&(i.length-=r,i.start===e&&(i.start=n.id),i.cache={})})),t.list=t.list.filter((function(t){return!(!t.start||!t.length)}))}(e,t.start,t.length,o),i&&(i.next=o.id),o&&(o.prev=i.id)},dt={append:function(t,e){return lt(this,t,e),this},prepend:function(t,e){return ft(this,t,e),this},delete:function(t){return pt(this,t),this},replace:function(t,e){var r=this.length;lt(this,t,e);var n=this.buildFrom(this.start,this.length);n.length=r,pt(n,e)},splitOn:function(t){var e=this.terms(),r={before:null,match:null,after:null},n=e.findIndex((function(e){return e.id===t.start}));if(-1===n)return r;var i=e.slice(0,n);i.length>0&&(r.before=this.buildFrom(i[0].id,i.length));var o=e.slice(n,n+t.length);o.length>0&&(r.match=this.buildFrom(o[0].id,o.length));var s=e.slice(n+t.length,e.length);return s.length>0&&(r.after=this.buildFrom(s[0].id,s.length,this.pool)),r}},gt={json:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r={};return t.text&&(r.text=this.text()),t.normal&&(r.normal=this.text("normal")),t.clean&&(r.clean=this.text("clean")),t.reduced&&(r.reduced=this.text("reduced")),t.root&&(r.root=this.text("root")),t.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),t.terms&&(!0===t.terms&&(t.terms={}),r.terms=this.terms().map((function(r){return r.json(t.terms,e)}))),r}},vt={lookAhead:function(t){t||(t=".*");var e=this.pool,r=[],n=this.terms();return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(t)},lookBehind:function(t){t||(t=".*");var e=this.pool,r=[];return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.prev))}(e.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(t)}},mt=Object.assign({},it,st,at,dt,gt,vt),bt=function(t,e){if(0===e.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},yt=function(t,e,r,n,i,o){for(var s=e;e1&&u.greedy?d.length+=s-p:d.length++}}else if(!0!==u.optional){if(!(t[s].isImplicit()&&e[a-1]&&t[s+1]&&t[s+1].doesMatch(u,r+s,n)))return[!1,null];s+=2}}else{var g=$t(t,s,e[a+1],u,r);if(void 0!==u.min&&g-su.max){s+=u.max;continue}if(null===g)return[!1,null];c&&(wt(i,h,t,s,u.named).length=g-s),s=g}}return[t.slice(0,s),i]},Pt=function(t,e,r){if(!r||0===r.length)return r;if(e.some((function(t){return t.end}))){var n=t[t.length-1];r=r.filter((function(t){return-1!==t.match.indexOf(n)}))}return r},xt=/\{([0-9]+,?[0-9]*)\}/,kt=/&&/,jt=new RegExp(/^<(\S+)>/),Ot=function(t){return t[t.length-1]},Et=function(t){return t[0]},Ct=function(t){return t.substr(1)},_t=function(t){return t.substr(0,t.length-1)},Tt=function(t){return t=Ct(t),t=_t(t)},Ft=function t(e){for(var r,n={},i=0;i<2;i+=1){if("$"===Ot(e)&&(n.end=!0,e=_t(e)),"^"===Et(e)&&(n.start=!0,e=Ct(e)),("["===Et(e)||"]"===Ot(e))&&(n.named=!0,"["===Et(e)?n.groupType="]"===Ot(e)?"single":"start":n.groupType="end",e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===Et(e))){var o=jt.exec(e);o.length>=2&&(n.named=o[1],e=e.replace(o[0],""))}if("+"===Ot(e)&&(n.greedy=!0,e=_t(e)),"*"!==e&&"*"===Ot(e)&&"\\*"!==e&&(n.greedy=!0,e=_t(e)),"?"===Ot(e)&&(n.optional=!0,e=_t(e)),"!"===Et(e)&&(n.negative=!0,e=Ct(e)),"("===Et(e)&&")"===Ot(e)){kt.test(e)?(n.choices=e.split(kt),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=Ct(n.choices[0]);var s=n.choices.length-1;n.choices[s]=_t(n.choices[s]),n.choices=n.choices.map((function(t){return t.trim()})),n.choices=n.choices.filter((function(t){return t})),n.choices=n.choices.map(t),e=""}if("/"===Et(e)&&"/"===Ot(e))return e=Tt(e),n.regex=new RegExp(e),n;if("~"===Et(e)&&"~"===Ot(e))return e=Tt(e),n.soft=!0,n.word=e,n}return!0===xt.test(e)&&(e=e.replace(xt,(function(t,e){var r=e.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===Et(e)?(n.tag=Ct(e),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===Et(e)?(n.method=Ct(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),n.word=e.toLowerCase()),n)},Nt=function(t){return t.filter((function(t){return t.groupType})).length>0&&(t=function(t){for(var e,r,n=!1,i=-1,o=0;o)?\(.*?\)[?+*]*\]?\$?)/);return e=e.map((function(t){return t.trim()}))}(e);return r=(r=function(t){var e=[];return t.forEach((function(t){if(/^[[^_/]?\(/.test(t[0]))e.push(t);else{var r=t.split(" ");r=r.filter((function(t){return t})),e=e.concat(r)}})),e}(r)).map(Ft),r=Nt(r)},St=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e&&(e=Vt(e)),!0===bt(t,e))return[];var n=e.filter((function(t){return!0!==t.optional})).length,i=t.terms(),o=[];if(!0===e[0].start){var s=At(i,e,0,i.length),a=u(s,2),c=a[0],l=a[1];return!1!==c&&c.length>0&&(c=c.filter((function(t){return t})),o.push({match:c,groups:l})),Pt(i,e,o)}for(var h=0;hi.length);h+=1){var f=At(i.slice(h),e,h,i.length),p=u(f,2),d=p[0],g=p[1];if(!1!==d&&d.length>0&&(h+=d.length-1,d=d.filter((function(t){return t})),o.push({match:d,groups:g}),!0===r))return Pt(i,e,o)}return Pt(i,e,o)},zt=function(t,e){var r={};St(t,e).forEach((function(t){t.match.forEach((function(t){r[t.id]=!0}))}));var n=t.terms(),i=[],o=[];return n.forEach((function(t){!0!==r[t.id]?o.push(t):o.length>0&&(i.push(o),o=[])})),o.length>0&&i.push(o),i},Bt={match:function(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=St(this,t,r);return n=n.map((function(t){var r=t.match,n=t.groups,i=e.buildFrom(r[0].id,r.length,n);return i.cache.terms=r,i}))},has:function(t){return St(this,t,!0).length>0},not:function(t){var e=this,r=zt(this,t);return r=r.map((function(t){return e.buildFrom(t[0].id,t.length)}))},canBe:function(t,e){for(var r=this,n=[],i=this.terms(),o=!1,s=0;s0})).map((function(t){return r.buildFrom(t[0].id,t.length)}))}},Dt=function t(r,n,i){e(this,t),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:i}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};Dt.prototype.buildFrom=function(t,e,r){var n=new Dt(t,e,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(Dt.prototype,Bt),Object.assign(Dt.prototype,mt);var qt={term:"terms"};Object.keys(qt).forEach((function(t){return Dt.prototype[t]=Dt.prototype[qt[t]]}));var It=Dt,Lt=function(){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,t),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(t,[{key:"add",value:function(t){return this.words[t.id]=t,this}},{key:"get",value:function(t){return this.words[t]}},{key:"remove",value:function(t){delete this.words[t]}},{key:"merge",value:function(t){return Object.assign(this.words,t.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),t}();Lt.prototype.clone=function(){var t=this,e=Object.keys(this.words).reduce((function(e,r){var n=t.words[r].clone();return e[n.id]=n,e}),{});return new Lt(e)};for(var Mt=Lt,Wt=function(t){t.forEach((function(e,r){r>0&&(e.prev=t[r-1].id),t[r+1]&&(e.next=t[r+1].id)}))},Gt=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Ht=/\S/,Ut=/[ .][A-Z]\.? *$/i,Qt=/(?:\u2026|\.{2,}) *$/,Rt=/((?:\r?\n|\r)+)/,Zt=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Jt=/^\s+/,Yt=function(t,e){if(!0===Ut.test(t))return!1;if(!0===Qt.test(t))return!1;if(!1===Zt.test(t))return!1;var r=t.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!e.hasOwnProperty(n)},Kt=function(t,e){var r=e.cache.abbreviations;t=t||"";var n=[],i=[];if(!(t=String(t))||"string"!=typeof t||!1===Ht.test(t))return n;for(var o=function(t){for(var e=[],r=t.split(Rt),n=0;n0&&(n.push(c),i[u]="")}if(0===n.length)return[t];for(var l=1;l0?(e[e.length-1]+=o,e.push(a)):e.push(o+a),o=""):o+=a}return o&&(0===e.length&&(e[0]=""),e[e.length-1]+=o),e=(e=function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof t&&"number"==typeof t&&(t=String(t));var n=Kt(t,e);n=n.map((function(t){return se(t)})),r=r||new Mt;var i=n.map((function(t){t=t.map((function(t){var e=new nt(t);return r.add(e),e})),Wt(t);var e=new It(t[0].id,t.length,r);return e.cache.terms=t,e}));return i},ue=function(t,e){var r=new Mt;return t.map((function(t,n){var i=t.terms.map((function(i,o){var s=new nt(i.text);return s.pre=void 0!==i.pre?i.pre:"",void 0===i.post&&(i.post=" ",o>=t.terms.length-1&&(i.post=". ",n>=t.terms.length-1&&(i.post="."))),s.post=void 0!==i.post?i.post:" ",i.tags&&i.tags.forEach((function(t){return s.tag(t,"",e)})),r.add(s),s}));return Wt(i),new It(i[0].id,i.length,r)}))},ce={},le=["Person","Place","Organization"],he={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:le},Actor:{isA:"Noun",notA:le},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:le},Demonym:{isA:["Noun","ProperNoun"],notA:le},Possessive:{isA:"Noun"}},fe={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},pe={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},de=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ge={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:de},Conjunction:{notA:de},Preposition:{notA:de},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},ve={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},me=function(t){return Object.keys(t).forEach((function(e){t[e].color?t[e].color=t[e].color:ve[e]?t[e].color=ve[e]:t[e].isA.some((function(r){return!!ve[r]&&(t[e].color=ve[r],!0)}))})),t},be=function(t){return Object.keys(t).forEach((function(e){for(var r=t[e],n=r.isA.length,i=0;i1&&(r.hasCompound[o[0]]=!0),"Singular"===e){var s=i.toPlural(t,r);n[s]=n[s]||"Plural"}if("Infinitive"===e)for(var a=i.conjugate(t,r),u=Object.keys(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:"",e=t[t.length-1];if(!0===Se.hasOwnProperty(e))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r={};return e&&e.irregulars&&!0===e.irregulars.verbs.hasOwnProperty(t)&&(r=Object.assign({},e.irregulars.verbs[t])),void 0===(r=Object.assign({},De(t),r)).Gerund&&(r.Gerund=Ie.Gerund(t)),void 0===r.PastTense&&(r.PastTense=Ie.PastTense(t)),void 0===r.PresentTense&&(r.PresentTense=Ie.PresentTense(t)),r},Me=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],We=[/ary$/],Ge={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},He=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Ue=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qe=[/ary$/,/ous$/],Re={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Ze=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Je={toSuperlative:function(t){if(Ge.hasOwnProperty(t))return Ge[t];for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=e.irregulars.nouns;if(r.hasOwnProperty(t))return r[t];var n=tr(t);return null!==n?n:Xe.test(t)?t+"es":t+"s"},rr=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],nr=function(t,e){var r,n=e.irregulars.nouns,i=(r=n,Object.keys(r).reduce((function(t,e){return t[r[e]]=e,t}),{}));if(i.hasOwnProperty(t))return i[t];for(var o=0;o1?i[o]&&"."!==i[o]&&r.tag(i[o],n,e.world):r.tag(t,n,e.world)}))}))}),br={tag:function(t,e){return t?(mr(t,this,!1,e),this):this},tagSafe:function(t,e){return t?(mr(t,this,!0,e),this):this},unTag:function(t,e){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(t,e,r.world)}))})),this},canBe:function(t){if(!t)return this;var e=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(t,e))}),[]);return this.buildFrom(r)}},yr={map:function(e){var r=this;if(!e)return this;var n=this.list.map((function(t,n){var i=r.buildFrom([t]);i.from=null;var o=e(i,n);return o&&o.list&&o.list[0]?o.list[0]:o}));return 0===(n=n.filter((function(t){return t}))).length?this.buildFrom(n):"object"!==t(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(t,e){var r=this;return t?(this.list.forEach((function(n,i){var o=r.buildFrom([n]);!0===e&&(o.from=null),t(o,i)})),this):this},filter:function(t){var e=this;if(!t)return this;var r=this.list.filter((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return this.buildFrom(r)},find:function(t){var e=this;if(!t)return this;var r=this.list.find((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return r?this.buildFrom([r]):void 0},some:function(t){var e=this;return t?this.list.some((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)})):this},random:function(t){if(!this.found)return this;var e=Math.floor(Math.random()*this.list.length);if(void 0===t){var r=[this.list[e]];return this.buildFrom(r)}return e+t>this.length&&(e=(e=this.length-t)<0?0:e),this.slice(e,e+t)}},$r=function(t){return t.split(/[ -]/g)},wr=function(t,e,r){for(var n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return t.forEach((function(t,n){var i=!0;void 0!==e[n]&&(i=e[n]),t=(t=(t||"").toLowerCase()).replace(/[,;.!?]+$/,"");var o=$r(t).map((function(t){return t.trim()}));r[o[0]]=r[o[0]]||{},1===o.length?r[o[0]].value=i:(r[o[0]].more=r[o[0]].more||[],r[o[0]].more.push({rest:o.slice(1),value:i}))})),r}(t,e),i=[],o=function(t){for(var e=r.list[t],o=e.terms().map((function(t){return t.reduced})),s=function(t){void 0!==n[o[t]]&&(void 0!==n[o[t]].more&&n[o[t]].more.forEach((function(r){void 0!==o[t+r.rest.length]&&(!0===r.rest.every((function(e,r){return e===o[t+r+1]}))&&i.push({id:e.terms()[t].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[o[t]].value&&i.push({id:e.terms()[t].id,value:n[o[t]].value,length:1}))},a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(i){var o,s=e;if("function"==typeof e&&(s=e(i)),s&&"object"===t(s)&&"Doc"===s.isA)o=s.list,r.pool().merge(s.pool());else{if("string"!=typeof s)return;!1!==n.keepCase&&i.terms(0).isTitleCase()&&(s=xr(s)),o=ae(s,r.world,r.pool()),r.buildFrom(o).tagger()}if(!0===n.keepTags){var a=i.json({terms:{tags:!0}}).terms;o[0].terms().forEach((function(t,e){a[e]&&t.tagSafe(a[e].tags,"keptTag",r.world)}))}i.replace(o[0],r)})),this):this.delete()},replace:function(t,e,r){return void 0===e?this.replaceWith(t,r):(this.match(t).replaceWith(e,r),this)}},jr=C((function(t,e){e.append=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ae(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.append(n,e)})),this):this},e.insertAfter=e.append,e.insertAt=e.append,e.prepend=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ae(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.prepend(n,e)})),this):this},e.insertBefore=e.prepend,e.concat=function(){this.uncache();for(var t=this.list.slice(0),e=0;e0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof e&&this.list[e])return this.list[e].json(r);!0===(e=n(e)).root&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))}));var i=this.list.map((function(r){return r.json(e,t.world)}));if((e.terms.offset||e.offset||e.terms.index||e.index)&&Cr(this,i,e),e.frequency||e.freq||e.count){var o={};this.list.forEach((function(t){var e=t.text("reduced");o[e]=o[e]||0,o[e]+=1})),this.list.forEach((function(t,e){i[e].count=o[t.text("reduced")]}))}if(e.unique){var s={};i=i.filter((function(t){return!0!==s[t.reduced]&&(s[t.reduced]=!0,!0)}))}return i},e.data=e.json})),Tr=(_r.json,_r.data,C((function(t){var e=function(t,e){for(t=t.toString();t.lengthe.count?-1:t.countn?1:0},length:function(t,e){var r=t.text().trim().length,n=e.text().trim().length;return rn?-1:0},wordCount:function(t,e){var r=t.wordCount(),n=e.wordCount();return rn?-1:0}};Vr.alphabetical=Vr.alpha,Vr.wordcount=Vr.wordCount;var Sr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},zr={sort:function(t){return"freq"===(t=t||"alpha")||"frequency"===t||"topk"===t?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(e=this).list.forEach((function(t){var e=t.text(n);r[e]=r[e]||0,r[e]+=1})),e.list.sort((function(t,e){var i=r[t.text(n)],o=r[e.text(n)];return io?-1:0})),e):Sr.hasOwnProperty(t)?function(t){var e={};return t.json({terms:{offset:!0}}).forEach((function(t){e[t.terms[0].id]=t.terms[0].offset.start})),t.list=t.list.sort((function(t,r){return e[t.start]>e[r.start]?1:e[t.start]0){i+=s;continue}}if(void 0===r[o]||!0!==r.hasOwnProperty(o))if(o===t[i].reduced||!0!==r.hasOwnProperty(t[i].reduced)){if(!0===tn.test(o)){var a=o.replace(tn,"");!0===r.hasOwnProperty(a)&&t[i].tag(r[a],"noprefix-lexicon",e)}}else t[i].tag(r[t[i].reduced],"lexicon",e);else t[i].tag(r[o],"lexicon",e)}return t},nn=function(t){var e=t.termList();return rn(e,t.world),t},on=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){!0===t.tags.Abbreviation&&t.next&&(t.post=t.post.replace(/^\./,""));var e=t.text.replace(/\./,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){t.post=t.post.replace(/^\./,""),t.post="."+t.post})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,t.prototype.abbreviations=function(t){var e=this.match("#Abbreviation");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},sn=/\./,an=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");e=e.split("").join("."),!1===sn.test(t.post)&&(e+="."),t.set(e)})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,r.prototype.strip=r.prototype.stripPeriods,t.prototype.acronyms=function(t){var e=this.match("#Acronym");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},un=function(t){return t.prototype.clauses=function(e){var r=this.if("@hasComma").notIf("@hasComma @hasComma").notIf("@hasComma . .? (and|or) .").notIf("(#City && @hasComma) #Country").notIf("(#Date && @hasComma) #Year").notIf("@hasComma (too|also)$").match("@hasComma"),n=this.splitAfter(r),i=n.quotations(),o=(n=n.splitOn(i)).parentheses(),s=(n=n.splitOn(o)).if("#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb").match("#Conjunction"),a=(n=n.splitBefore(s)).if("if .{2,9} then .").match("then"),u=(n=(n=(n=(n=(n=(n=n.splitBefore(a)).splitBefore("as well as .")).splitBefore("such as .")).splitBefore("in addition to .")).splitAfter("@hasSemicolon")).splitAfter("@hasDash")).filter((function(t){return t.wordCount()>5&&t.match("#Verb+").length>=2}));if(u.found){var c=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(c.eq(0))}return"number"==typeof e&&(n=n.get(e)),new t(n.list,this,this.world)},t},cn=function(t){var r=function(t){function r(t,n,i){var s;return e(this,r),(s=a(this,o(r).call(this,t,n,i))).contracted=null,s}return i(r,t),n(r,[{key:"expand",value:function(){return this.list.forEach((function(t){var e=t.terms(),r=e[0].isTitleCase();e.forEach((function(t,r){t.set(t.implicit||t.text),t.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return o.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(t,[{key:"tagger",value:function(){return nn(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),t}();In.prototype.buildFrom=function(t){return t=t.map((function(t){return t.clone(!0)})),new In(t,this,this.world)},In.prototype.fromText=function(t){var e=ae(t,this.world,this.pool());return this.buildFrom(e)},Object.assign(In.prototype,qn.misc),Object.assign(In.prototype,qn.selections),Dn(In);var Ln={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(Ln).forEach((function(t){return In.prototype[t]=In.prototype[Ln[t]]}));var Mn=In;return function t(e){var r=e,n=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;e&&r.addWords(e);var n=ae(t,r),i=new Mn(n,null,r);return i.tagger(),i};return n.tokenize=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=r;e&&((n=n.clone()).words={},n.addWords(e));var i=ae(t,n),o=new Mn(i,null,n);return e&&nn(o),o},n.extend=function(t){return t(Mn,r,this,It,nt,Mt),this},n.fromJSON=function(t){var e=ue(t,r);return new Mn(e,null,r)},n.clone=function(){return t(r.clone())},n.verbose=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(t),this},n.version="13.1.0",n.import=n.load,n}(new fr)})); diff --git a/builds/compromise.js b/builds/compromise.js index 7c130100b..95e4dd70e 100644 --- a/builds/compromise.js +++ b/builds/compromise.js @@ -310,8 +310,8 @@ //all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation //we have slightly different rules for start/end - like #hashtags. - var startings = /^[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·\&*\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201C|\u2018|\u201F|\u201B|\u201E|\u2E42|\u201A|\u00AB|\u2039|\u2035|\u2036|\u2037|\u301D|\u0060|\u301F]+/; - var endings = /[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·\&*@\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201D|\u2019|\u201D|\u2019|\u201D|\u201D|\u2019|\u00BB|\u203A|\u2032|\u2033|\u2034|\u301E|\u00B4|\u301E]+$/; //money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥ + var startings = /^[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·&*•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201C|\u2018|\u201F|\u201B|\u201E|\u2E42|\u201A|\u00AB|\u2039|\u2035|\u2036|\u2037|\u301D|\u0060|\u301F]+/; + var endings = /[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·&*@•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201D|\u2019|\u201D|\u2019|\u201D|\u201D|\u2019|\u00BB|\u203A|\u2032|\u2033|\u2034|\u301E|\u00B4|\u301E]+$/; //money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥ var hasSlash$1 = /\//; var hasApostrophe = /['’]/; @@ -3394,7 +3394,7 @@ "Honorific": "true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al", "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", - "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", + "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", @@ -3752,6 +3752,13 @@ var addColors = function addColors(tags) { Object.keys(tags).forEach(function (k) { + // assigned from plugin, for example + if (tags[k].color) { + tags[k].color = tags[k].color; + return; + } // defined above + + if (colorMap[k]) { tags[k].color = colorMap[k]; return; @@ -6327,6 +6334,55 @@ var _02Accessors_13 = _02Accessors.sentences; var _02Accessors_14 = _02Accessors.sentence; + // cache the easier conditions up-front + var cacheRequired = function cacheRequired(reg) { + var needTags = []; + var needWords = []; + reg.forEach(function (obj) { + if (obj.optional === true || obj.negative === true) { + return; + } + + if (obj.tag !== undefined) { + needTags.push(obj.tag); + } + + if (obj.word !== undefined) { + needWords.push(obj.word); + } + }); + return { + tags: needTags, + words: needWords + }; + }; + + var failFast$1 = function failFast(doc, regs) { + if (doc._cache && doc._cache.set === true) { + var _cacheRequired = cacheRequired(regs), + words = _cacheRequired.words, + tags = _cacheRequired.tags; //check required words + + + for (var i = 0; i < words.length; i++) { + if (doc._cache.words[words[i]] === undefined) { + return false; + } + } //check required tags + + + for (var _i = 0; _i < tags.length; _i++) { + if (doc._cache.tags[tags[_i]] === undefined) { + return false; + } + } + } + + return true; + }; + + var checkCache = failFast$1; + var _03Match = createCommonjsModule(function (module, exports) { /** return a new Doc, with this one as a parent */ exports.match = function (reg, name) { @@ -6335,6 +6391,11 @@ if (regs.length === 0) { return this.buildFrom([]); + } //check our cache, if it exists + + + if (checkCache(this, regs) === false) { + return this.buildFrom([]); } //try expression on each phrase @@ -6355,7 +6416,7 @@ //parse-up the input expression var regs = syntax_1(reg); //if it's empty, return them all! - if (regs.length === 0) { + if (regs.length === 0 || checkCache(this, regs) === false) { return this; } //try expression on each phrase @@ -6369,7 +6430,11 @@ exports.matchOne = function (reg) { - var regs = syntax_1(reg); + var regs = syntax_1(reg); //check our cache, if it exists + + if (checkCache(this, regs) === false) { + return this.buildFrom([]); + } for (var i = 0; i < this.list.length; i++) { var match = this.list[i].match(regs, true); @@ -6382,7 +6447,12 @@ exports["if"] = function (reg) { - var regs = syntax_1(reg); + var regs = syntax_1(reg); //consult our cache, if it exists + + if (checkCache(this, regs) === false) { + return this.buildFrom([]); + } + var found = this.list.filter(function (p) { return p.has(regs) === true; }); @@ -6402,7 +6472,12 @@ exports.has = function (reg) { - var regs = syntax_1(reg); + var regs = syntax_1(reg); //consult our cache, if it exists + + if (checkCache(this, regs) === false) { + return false; + } + return this.list.some(function (p) { return p.has(regs) === true; }); @@ -6948,7 +7023,8 @@ this._cache.tags = tags; this._cache.set = true; this.list.forEach(function (p, i) { - p.cache = p.cache || {}; + p.cache = p.cache || {}; //p.terms get cached automatically + var terms = p.terms(); // cache all the terms terms.forEach(function (t) { @@ -6961,26 +7037,12 @@ Object.keys(t.tags).forEach(function (tag) { tags[tag] = tags[tag] || []; tags[tag].push(i); - }); // Object.assign(this._cache.tags, t.tags) - // words[t.clean] = true - // words[t.text.toLowerCase()] = true - // if (t.implicit) { - // words[t.implicit] = true - // } - // if (t.root) { - // words[t.root] = true - // } - // if (t.alias !== undefined) { - // words = Object.assign(words, t.alias) - // } + }); // cache root-form on Term, too if (options.root) { t.setRoot(_this.world); words[t.root] = true; - } // }) - // delete words[''] - // p.cache.words = words - + } }); }); return this; @@ -7439,11 +7501,12 @@ }; var logClientSide = function logClientSide(doc) { + var tagset = doc.world.tags; doc.list.forEach(function (p) { console.log('\n%c"' + p.text() + '"', 'color: #e6d7b3;'); var terms = p.terms(); terms.forEach(function (t) { - var tags$1 = Object.keys(t.tags); + var tags = Object.keys(t.tags); var text = t.text || '-'; if (t.implicit) { @@ -7452,17 +7515,17 @@ var word = "'" + text + "'"; word = padEnd(word, 8); - var found = tags$1.find(function (tag) { - return tags[tag] && tags[tag].color; + var found = tags.find(function (tag) { + return tagset[tag] && tagset[tag].color; }); var color = 'steelblue'; - if (tags[found]) { - color = tags[found].color; + if (tagset[found]) { + color = tagset[found].color; color = css[color]; } - console.log(" ".concat(word, " - %c").concat(tags$1.join(', ')), "color: ".concat(color || 'steelblue', ";")); + console.log(" ".concat(word, " - %c").concat(tags.join(', ')), "color: ".concat(color || 'steelblue', ";")); }); }); }; //cheaper than requiring chalk @@ -7492,16 +7555,16 @@ } }; - var tagString = function tagString(tags$1) { - tags$1 = tags$1.map(function (tag) { - if (!tags.hasOwnProperty(tag)) { + var tagString = function tagString(tags, world) { + tags = tags.map(function (tag) { + if (!world.tags.hasOwnProperty(tag)) { return tag; } - var c = tags[tag].color || 'blue'; + var c = world.tags[tag].color || 'blue'; return cli[c](tag); }); - return tags$1.join(', '); + return tags.join(', '); }; //output some helpful stuff to the console @@ -7529,7 +7592,7 @@ var word = "'" + text + "'"; word = padEnd(word, 18); - var str = cli.blue(' | ') + word + ' - ' + tagString(tags); + var str = cli.blue(' | ') + word + ' - ' + tagString(tags, doc.world); console.log(str); }); }); @@ -11594,7 +11657,7 @@ matches = matches.concat(_09Org); matches = matches.concat(_10People); // cache the easier conditions up-front - var cacheRequired = function cacheRequired(reg) { + var cacheRequired$1 = function cacheRequired(reg) { var needTags = []; var needWords = []; reg.forEach(function (obj) { @@ -11654,7 +11717,7 @@ } }); all.forEach(function (m) { - m.required = cacheRequired(m.reg); + m.required = cacheRequired$1(m.reg); return m; }); var matches_1 = all; @@ -11742,7 +11805,9 @@ doc.cache(); // wiggle-around the results, so they make more sense - doc = _04Correction(doc); // run any user-given tagger functions + doc = _04Correction(doc); // remove our cache, as it's invalidated now + + doc.uncache(); // run any user-given tagger functions doc.world.taggers.forEach(function (fn) { fn(doc); @@ -12010,7 +12075,7 @@ var addMethod$4 = function addMethod(Doc) { //pull it apart.. var parse = function parse(doc) { - var things = doc.splitAfter('@hasComma').not('(and|or) not?'); + var things = doc.splitAfter('@hasComma').splitOn('(and|or) not?').not('(and|or) not?'); var beforeLast = doc.match('[.] (and|or)', 0); return { things: things, @@ -12045,14 +12110,14 @@ }, { key: "parts", value: function parts() { - return this.splitAfter('(@hasComma|#Conjunction)'); + return this.splitAfter('@hasComma').splitOn('(and|or) not?'); } /** remove the conjunction */ }, { key: "items", value: function items() { - return this.parts().notIf('#Conjunction'); + return parse(this).things; } /** add a new unit to the list */ @@ -12071,8 +12136,8 @@ }, { key: "remove", - value: function remove() { - return this; + value: function remove(match) { + return this.items()["if"](match).remove(); } /** return only lists that use a serial comma */ @@ -12086,11 +12151,25 @@ }, { key: "addOxfordComma", value: function addOxfordComma() { + var items = this.items(); + var needsComma = items.eq(items.length - 2); + + if (needsComma.found && needsComma.has('@hasComma') === false) { + needsComma.post(', '); + } + return this; } }, { key: "removeOxfordComma", value: function removeOxfordComma() { + var items = this.items(); + var needsComma = items.eq(items.length - 2); + + if (needsComma.found && needsComma.has('@hasComma') === true) { + needsComma.post(' '); + } + return this; } }]); @@ -12104,7 +12183,7 @@ Doc.prototype.lists = function (n) { var m = this["if"]('@hasComma+ .? (and|or) not? .'); // person-list - var nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+'); + var nounList = m.match('(#Noun|#Adjective|#Determiner|#Article)+ #Conjunction not? (#Article|#Determiner)? #Adjective? #Noun+')["if"]('#Noun'); var adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+'); var verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+'); var result = nounList.concat(adjList); @@ -13048,7 +13127,11 @@ var parsed = parse$2(p); json.parts = {}; Object.keys(parsed).forEach(function (k) { - json.parts[k] = parsed[k].text('normal'); + if (parsed[k] && parsed[k].isA === 'Doc') { + json.parts[k] = parsed[k].text('normal'); + } else { + json.parts[k] = parsed[k]; + } }); json.isNegative = p.has('#Negative'); json.conjugations = conjugate_1$1(parsed, _this.world); diff --git a/builds/compromise.js.map b/builds/compromise.js.map index 22df104d7..86c7e8663 100644 --- a/builds/compromise.js.map +++ b/builds/compromise.js.map @@ -1 +1 @@ -{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/postProcess.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/_linkTerms.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/01-tokenizer/fromJSON.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/_lookup.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/07-cache.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/_offset.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/06-acronyms.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/07-french.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/_unique.js","../src/02-tagger/04-correction/matches/01-misc.js","../src/02-tagger/04-correction/matches/02-dates.js","../src/02-tagger/04-correction/matches/03-noun.js","../src/02-tagger/04-correction/matches/04-adjective.js","../src/02-tagger/04-correction/matches/05-adverb.js","../src/02-tagger/04-correction/matches/06-value.js","../src/02-tagger/04-correction/matches/07-verbs.js","../src/02-tagger/04-correction/matches/08-place.js","../src/02-tagger/04-correction/matches/09-org.js","../src/02-tagger/04-correction/matches/10-people.js","../src/02-tagger/04-correction/matches/index.js","../src/02-tagger/04-correction/runner.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/02-tagger/tiny.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*\\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·\\&*@\\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n // support optimized (one|two)\n if (reg.oneOf !== undefined) {\n return reg.oneOf.hasOwnProperty(t.reduced) || reg.oneOf.hasOwnProperty(t.text)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n whitespace: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n if (n === undefined) {\n this.cache.terms = terms\n }\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n let p = this.buildFrom(this.start, this.length)\n p.cache = this.cache\n return p\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n\n/** get the full-sentence this phrase belongs to */\nexports.fullSentence = function() {\n let t = this.terms(0)\n //find first term in sentence\n while (t.prev) {\n t = this.pool.get(t.prev)\n }\n let start = t.id\n let len = 1\n //go to end of sentence\n while (t.next) {\n t = this.pool.get(t.next)\n len += 1\n }\n return this.buildFrom(start, len)\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.terms()\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n before.cache = {}\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n p.cache = {}\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n phrase.cache = {}\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","const makeId = require('../../Term/_id')\n// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n// get or create named group\nconst getOrCreateGroup = function(namedGroups, namedGroupId, terms, startIndex, group) {\n const g = namedGroups[namedGroupId]\n\n if (g) {\n return g\n }\n\n const { id } = terms[startIndex]\n\n namedGroups[namedGroupId] = {\n group: String(group),\n start: id,\n length: 0,\n }\n\n return namedGroups[namedGroupId]\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n const namedGroups = {}\n let previousGroupId = null\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n // Check if this reg has a named capture group\n const isNamedGroup = typeof reg.named === 'string' || typeof reg.named === 'number'\n let namedGroupId = null\n\n // Reuse previous capture group if same\n if (isNamedGroup) {\n const prev = regs[r - 1]\n if (prev && prev.named === reg.named && previousGroupId) {\n namedGroupId = previousGroupId\n } else {\n namedGroupId = makeId(reg.named)\n previousGroupId = namedGroupId\n }\n }\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return [false, null]\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return [false, null]\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n\n if (skipto === null) {\n return [false, null] //couldn't find it\n }\n\n // is it really this easy?....\n if (isNamedGroup) {\n const g = getOrCreateGroup(namedGroups, namedGroupId, terms, t, reg.named)\n\n // Update group\n g.length = skipto - t\n }\n\n t = skipto\n\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (\n reg.anything === true ||\n (reg.end === true &&\n reg.greedy === true &&\n index + t < length - 1 &&\n terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) ||\n terms[t].doesMatch(reg, index + t, length) === true\n ) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return [false, null]\n }\n }\n\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return [false, null] //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return [false, null] //greedy didn't reach the end\n }\n }\n if (isNamedGroup) {\n // Get or create capture group\n const g = getOrCreateGroup(namedGroups, namedGroupId, terms, startAt, reg.named)\n\n // Update group - add greedy or increment length\n if (t > 1 && reg.greedy) {\n g.length += t - startAt\n } else {\n g.length++\n }\n }\n\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return [false, null]\n }\n\n //return our result\n return [terms.slice(0, t), namedGroups]\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(({ match: arr }) => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n named:'',\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\nconst captureName = new RegExp(/^<(\\S+)>/)\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //end-flag\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flag\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.named = true\n\n if (start(w) === '[') {\n obj.groupType = end(w) === ']' ? 'single' : 'start'\n } else {\n obj.groupType = 'end'\n }\n\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n\n // Use capture group name\n if (start(w) === '<') {\n const res = captureName.exec(w)\n\n if (res.length >= 2) {\n obj.named = res[1]\n w = w.replace(res[0], '')\n }\n }\n }\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const isNamed = function(capture) {\n return typeof capture === 'string' || typeof capture === 'number'\n}\n\nconst fillGroups = function(tokens) {\n let convert = false\n let index = -1\n let current\n\n //'fill in' capture groups between start-end\n for (let i = 0; i < tokens.length; i++) {\n const n = tokens[i]\n\n // Give name to un-named single tokens\n if (n.groupType === 'single' && n.named === true) {\n index += 1\n n.named = index\n continue\n }\n\n // Start converting tokens\n if (n.groupType === 'start') {\n convert = true\n if (isNamed(n.named)) {\n current = n.named\n } else {\n index += 1\n current = index\n }\n }\n\n // Ensure this token has the right name\n if (convert) {\n n.named = current\n }\n\n // Stop converting tokens\n if (n.groupType === 'end') {\n convert = false\n }\n }\n return tokens\n}\n\nconst useOneOf = function(tokens) {\n return tokens.map(token => {\n if (token.choices !== undefined) {\n // are they all straight non-optional words?\n let shouldPack = token.choices.every(c => c.optional !== true && c.negative !== true && c.word !== undefined)\n if (shouldPack === true) {\n let oneOf = {}\n token.choices.forEach(c => (oneOf[c.word] = true))\n token.oneOf = oneOf\n delete token.choices\n }\n }\n return token\n })\n}\n\nconst postProcess = function(tokens) {\n // ensure all capture groups are filled between start and end\n // give all capture groups names\n let count = tokens.filter(t => t.groupType).length\n if (count > 0) {\n tokens = fillGroups(tokens)\n }\n // convert 'choices' format to 'oneOf' format\n tokens = useOneOf(tokens)\n // console.log(tokens)\n\n return tokens\n}\nmodule.exports = postProcess\n","const parseToken = require('./parseToken')\nconst postProcess = require('./postProcess')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*(?:<\\S+>)?\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\n\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let [match, groups] = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n match = match.filter(m => m)\n matches.push({ match, groups })\n }\n\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let [match, groups] = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push({ match, groups })\n\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(({ match: ts }) => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(regs, justOne = false) {\n let matches = matchAll(this, regs, justOne)\n //make them phrase objects\n matches = matches.map(({ match, groups }) => {\n let p = this.buildFrom(match[0].id, match.length, groups)\n p.cache.terms = match\n return p\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(regs) {\n let matches = matchAll(this, regs, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(regs) {\n let matches = notMatch(this, regs)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n Object.defineProperty(this, 'groups', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length, groups) {\n let p = new Phrase(id, length, this.pool)\n //copy-over or replace capture-groups too\n if (groups && Object.keys(groups).length > 0) {\n p.groups = groups\n } else {\n p.groups = this.groups\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//add forward/backward 'linked-list' prev/next ids\nconst linkTerms = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\nmodule.exports = linkTerms\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of strings (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\nconst linkTerms = require('./_linkTerms')\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n linkTerms(terms)\n\n //return phrase objects\n let p = new Phrase(terms[0].id, terms.length, pool)\n p.cache.terms = terms\n return p\n })\n //return them ready for a Document object\n return phrases\n}\n\nmodule.exports = fromText\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\nconst linkTerms = require('./_linkTerms')\n\nconst fromJSON = function(json, world) {\n let pool = new Pool()\n let phrases = json.map((p, k) => {\n let terms = p.terms.map((o, i) => {\n let term = new Term(o.text)\n term.pre = o.pre !== undefined ? o.pre : ''\n if (o.post === undefined) {\n o.post = ' '\n //no given space for very last term\n if (i >= p.terms.length - 1) {\n o.post = '. '\n if (k >= p.terms.length - 1) {\n o.post = '.'\n }\n }\n }\n term.post = o.post !== undefined ? o.post : ' '\n\n if (o.tags) {\n o.tags.forEach(tag => term.tag(tag, '', world))\n }\n pool.add(term)\n return term\n })\n //add prev/next links\n linkTerms(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\nmodule.exports = fromJSON\n","module.exports = '13.1.0'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"Date\": \"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n NickName: {\n isA: 'Person',\n notA: ['FirstName', 'LastName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName', 'Value'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value', 'QuestionWord']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n ache: {\n pst: 'ached',\n g: 'aching',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n g: 'coming',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n name: {\n g: 'naming',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n //shake\n reg: /(t|sh?)(ake)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ook',\n gr: '$1aking',\n ar: '$1$2r',\n },\n },\n {\n //awake\n reg: /w(ake)$/i,\n repl: {\n pr: 'w$1s',\n pa: 'woke',\n gr: 'waking',\n ar: 'w$1r',\n },\n },\n {\n //make\n reg: /m(ake)$/i,\n repl: {\n pr: 'm$1s',\n pa: 'made',\n gr: 'making',\n ar: 'm$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n // prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(inf = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(inf) === true) {\n found = Object.assign({}, world.irregulars.verbs[inf])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(inf), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(inf)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(inf)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(inf)\n }\n return found\n}\nmodule.exports = conjugate\n\n// console.log(conjugate('bake'))\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n //popping -> pop\n reg: /(..)(p|d|t|g){2}ing$/i,\n to: '$1$2',\n },\n {\n //fuzzing -> fuzz\n reg: /(ll|ss|zz)ing$/i,\n to: '$1',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n //eating, reading\n reg: /(ea[dklnrtv])ing$/i,\n to: '$1',\n },\n {\n //washing -> wash\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n //soft-e forms:\n {\n //z : hazing (not buzzing)\n reg: /(z)ing$/i,\n to: '$1e',\n },\n {\n //a : baking, undulating\n reg: /(a[gdkvtc])ing$/i,\n to: '$1e',\n },\n {\n //u : conjuring, tubing\n reg: /(u[rtcbn])ing$/i,\n to: '$1e',\n },\n {\n //o : forboding, poking, hoping, boring (not hooping)\n reg: /([^o]o[bdknprv])ing$/i,\n to: '$1e',\n },\n {\n //ling : tingling, wrinkling, circling, scrambling, bustling\n reg: /([tbckg]l)ing$/i, //dp\n to: '$1e',\n },\n {\n //cing : bouncing, denouncing\n reg: /(c)ing$/i, //dp\n to: '$1e',\n },\n\n // {\n // //soft-e :\n // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i,\n // to: '$1e',\n // },\n {\n //fallback\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n //owed, aced\n reg: /([aeiou][^aeiou])ed$/i,\n to: '$1e',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerms = function() {\n return this.match('^.')\n}\nexports.firstTerm = exports.firstTerms\n\n/** grab the last term for every match */\nexports.lastTerms = function() {\n return this.match('.$')\n}\nexports.lastTerm = exports.lastTerms\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n\n/* grab named capture group terms as object */\nconst getGroups = function(doc) {\n let res = {}\n const allGroups = {}\n for (let i = 0; i < doc.list.length; i++) {\n const phrase = doc.list[i]\n const groups = Object.keys(phrase.groups).map(k => phrase.groups[k])\n for (let j = 0; j < groups.length; j++) {\n const { group, start, length } = groups[j]\n\n if (!allGroups[group]) {\n allGroups[group] = []\n }\n allGroups[group].push(phrase.buildFrom(start, length))\n }\n }\n const keys = Object.keys(allGroups)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n res[key] = doc.buildFrom(allGroups[key])\n }\n return res\n}\n\nconst getOneName = function(doc, name) {\n const arr = []\n for (let i = 0; i < doc.list.length; i++) {\n const phrase = doc.list[i]\n let keys = Object.keys(phrase.groups)\n keys = keys.filter(id => phrase.groups[id].group === name)\n keys.forEach(id => {\n arr.push(phrase.buildFrom(phrase.groups[id].start, phrase.groups[id].length))\n })\n }\n return doc.buildFrom(arr)\n}\n\n/** grab named capture group results */\nexports.groups = function(target) {\n if (target === undefined) {\n return getGroups(this)\n }\n if (typeof target === 'number') {\n target = String(target)\n }\n return getOneName(this, target) || this.buildFrom([])\n}\nexports.group = exports.groups\n\n/** get the full-sentence each phrase belongs to */\nexports.sentences = function(n) {\n let arr = []\n this.list.forEach(p => {\n arr.push(p.fullSentence())\n })\n if (typeof n === 'number') {\n return this.buildFrom([arr[n]])\n }\n return this.buildFrom(arr)\n}\nexports.sentence = exports.sentences\n","const parseSyntax = require('../match/syntax')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg, name) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n\n if (name !== undefined && name !== null && name !== '') {\n return this.buildFrom(matches).groups(name)\n }\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n // if its a doc, return one result\n if (res && res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n //remove nulls\n list = list.filter(x => x)\n // return an empty response\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","// const tokenize = require('../../01-tokenizer/02-words')\nconst tokenize = function(str) {\n return str.split(/[ -]/g)\n}\n// take a list of strings\n// look them up in the document\nconst buildTree = function(termList, values = []) {\n let root = {}\n // parse our input\n termList.forEach((str, i) => {\n let val = true\n if (values[i] !== undefined) {\n val = values[i]\n }\n // some rough normalization\n str = (str || '').toLowerCase()\n str = str.replace(/[,;.!?]+$/, '')\n let arr = tokenize(str).map(s => s.trim())\n root[arr[0]] = root[arr[0]] || {}\n if (arr.length === 1) {\n root[arr[0]].value = val\n } else {\n root[arr[0]].more = root[arr[0]].more || []\n root[arr[0]].more.push({\n rest: arr.slice(1),\n value: val,\n })\n }\n })\n // sort by longest-first?\n // console.log(JSON.stringify(root, null, 2))\n return root\n}\n\nconst fastLookup = function(termList, values, doc) {\n let root = buildTree(termList, values)\n let found = []\n // each phrase\n for (let i = 0; i < doc.list.length; i++) {\n const p = doc.list[i]\n let terms = p.terms()\n\n let words = terms.map(t => t.reduced)\n // each word\n for (let w = 0; w < words.length; w++) {\n if (root[words[w]] !== undefined) {\n // is it a multi-word match?\n if (root[words[w]].more !== undefined) {\n root[words[w]].more.forEach(more => {\n // is it too-long?\n if (words[w + more.rest.length] === undefined) {\n return\n }\n // compare each subsequent term\n let everyTerm = more.rest.every((word, r) => {\n return word === words[w + r + 1]\n })\n if (everyTerm === true) {\n found.push({ id: p.terms()[w].id, value: more.value, length: more.rest.length + 1 })\n }\n })\n }\n // is it a single-word match?\n if (root[words[w]].value !== undefined) {\n found.push({ id: p.terms()[w].id, value: root[words[w]].value, length: 1 })\n }\n }\n }\n }\n return found\n}\nmodule.exports = fastLookup\n","const lookup = require('./_lookup')\n\n// compare one term and one match\n// const doesMatch = function(term, str) {\n// if (str === '') {\n// return false\n// }\n// return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n// }\n\nconst isObject = function(obj) {\n return obj && Object.prototype.toString.call(obj) === '[object Object]'\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n let values = []\n //is it a {key:val} object?\n let isObj = isObject(arr)\n if (isObj === true) {\n arr = Object.keys(arr).map(k => {\n values.push(arr[k])\n return k\n })\n }\n // support .lookup('foo')\n if (typeof arr === 'string') {\n arr = [arr]\n }\n\n //make sure we go fast.\n if (this._cache.set !== true) {\n this.cache()\n }\n\n let found = lookup(arr, values, this)\n let p = this.list[0]\n // make object response\n if (isObj === true) {\n let byVal = {}\n found.forEach(o => {\n byVal[o.value] = byVal[o.value] || []\n byVal[o.value].push(p.buildFrom(o.id, o.length))\n })\n Object.keys(byVal).forEach(k => {\n byVal[k] = this.buildFrom(byVal[k])\n })\n return byVal\n }\n // otherwise, make array response:\n found = found.map(o => p.buildFrom(o.id, o.length))\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n let words = {}\n let tags = {}\n this._cache.words = words\n this._cache.tags = tags\n this._cache.set = true\n this.list.forEach((p, i) => {\n p.cache = p.cache || {}\n let terms = p.terms()\n // cache all the terms\n terms.forEach(t => {\n if (words[t.reduced] && !words.hasOwnProperty(t.reduced)) {\n return //skip prototype words\n }\n words[t.reduced] = words[t.reduced] || []\n words[t.reduced].push(i)\n\n Object.keys(t.tags).forEach(tag => {\n tags[tag] = tags[tag] || []\n tags[tag].push(i)\n })\n // Object.assign(this._cache.tags, t.tags)\n\n // words[t.clean] = true\n // words[t.text.toLowerCase()] = true\n // if (t.implicit) {\n // words[t.implicit] = true\n // }\n // if (t.root) {\n // words[t.root] = true\n // }\n // if (t.alias !== undefined) {\n // words = Object.assign(words, t.alias)\n // }\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n // })\n // delete words['']\n // p.cache.words = words\n })\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this._cache = {}\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc._cache = {}\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\nconst calcOffset = function(doc, result, options) {\n // calculate offsets for each term\n let offsets = termOffsets(doc.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n // let len = o.terms.reduce((n, t, i) => {\n // n += t.offset.length || 0\n // //add whitespace, too\n // console.log(t.post)\n // return n\n // }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = o.text.length\n })\n }\n}\nmodule.exports = calcOffset\n","const offsets = require('./_offset')\nconst jsonDefaults = { text: true, terms: true, trim: true }\n\n//some options have dependents\nconst setOptions = function(options) {\n options = Object.assign({}, jsonDefaults, options)\n\n if (options.unique) {\n options.reduced = true\n }\n //offset calculation requires these options to be on\n if (options.offset) {\n options.text = true\n if (!options.terms || options.terms === true) {\n options.terms = {}\n }\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n return options\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n\n options = setOptions(options)\n\n // cache root strings beforehand, if necessary\n if (options.root === true) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n offsets(this, result, options)\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","const tagset = require('../../../World/tags')\n\n// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags) {\n tags = tags.map(tag => {\n if (!tagset.hasOwnProperty(tag)) {\n return tag\n }\n const c = tagset[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n main.cache = {}\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n p.cache = {}\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n require('./07-cache'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\nmodule.exports = methods\n","const underOver = /^(under|over)-?/\n\n/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n continue\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n continue\n }\n // prefix strip: try to match 'take' for 'undertake'\n if (underOver.test(str) === true) {\n let noPrefix = str.replace(underOver, '')\n if (lex.hasOwnProperty(noPrefix) === true) {\n terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world)\n }\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n // support 'head-over'\n // if (term.hasHyphen() === true) {\n // console.log(term.tags)\n // }\n // console.log(term.hasHyphen(), term.text)\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n // if (term.tags.Noun === true && isAcronym(term, world)) {\n // term.tag('Acronym', 'acronym-step', world)\n // term.tag('Noun', 'acronym-infer', world)\n // } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n // term.tag('Acronym', 'one-letter-acronym', world)\n // term.tag('Noun', 'one-letter-infer', world)\n // }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^woo+a*?h?$/, 'Expression'], //whoaa, wooo\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n // [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'prefix #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou][ns]?c?ked$/, Past], //hooked, masked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [\n [/.[gl]ial$/, Adj],\n [/.[^aeiou]ful$/, Adj],\n [/.[nrtumcd]al$/, Adj],\n [/.[^aeiou][ei]al$/, Adj],\n ],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [\n [/.[di]est$/, 'Superlative'],\n [/.[icldtgrv]ent$/, Adj],\n [/[aeiou].*ist$/, Adj],\n [/^[a-z]et$/, Verb],\n ],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/.[aeiou]sks$/, Pres], //masks\n [/.[aeiou]kes$/, Pres], //bakes\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Adj,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //dont double-up on ending periods\n raw = raw.replace(/[.!?,]$/, '')\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const oneLetterAcronym = /^[A-Z]('s|,)?$/\nconst periodSeperated = /([A-Z]\\.){2}[A-Z]?/i\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // known-words, like 'PIZZA' is not an acronym.\n if (world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n// F.B.I., NBC, - but not 'NO COLLUSION'\nconst checkAcronym = function(terms, world) {\n terms.forEach(term => {\n //these are not acronyms\n if (term.tags.RomanNumeral === true) {\n return\n }\n //period-ones F.D.B.\n if (periodSeperated.test(term.text) === true) {\n term.tag('Acronym', 'period-acronym', world)\n }\n //non-period ones are harder\n if (term.isUpperCase() && isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n //if it's a organization,\n if (term.tags.Organization && term.text.length <= 3) {\n term.tag('Acronym', 'acronym-org', world)\n }\n if (term.tags.Organization && term.isUpperCase() && term.text.length <= 6) {\n term.tag('Acronym', 'acronym-org-case', world)\n }\n })\n}\nmodule.exports = checkAcronym\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n acronyms: require('./06-acronyms'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //turn 'FBD' into an acronym\n step.acronyms(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const contraction = /^(l|c|d|j|m|n|qu|s|t)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z\\u00C0-\\u00FF]+)$/i\n// basic support for ungendered french contractions\n// not perfect, but better than nothing, to support matching on french text.\n\nconst french = {\n l: 'le', // l'amour\n c: 'ce', // c'est\n d: 'de', // d'amerique\n j: 'je', // j'aime\n m: 'me', // m'appelle\n n: 'ne', // n'est\n qu: 'que', // qu'il\n s: 'se', // s'appelle\n t: 'tu', // t'aime\n}\n\nconst checkFrench = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null || french.hasOwnProperty(parts[1]) === false) {\n return null\n }\n let arr = [french[parts[1]], parts[2]]\n if (arr[0] && arr[1]) {\n return arr\n }\n return null\n}\nmodule.exports = checkFrench\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst checkFrench = require('./07-french')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n found = found || checkFrench(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n // keep tag NumberRange, if we had it\n if (p.has('#NumberRange') === true) {\n doc.buildFrom([newPhrase]).tag('NumberRange')\n }\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","const hasWord = function(doc, word) {\n let arr = doc._cache.words[word] || []\n arr = arr.map(i => doc.list[i])\n return doc.buildFrom(arr)\n}\nconst hasTag = function(doc, tag) {\n let arr = doc._cache.tags[tag] || []\n arr = arr.map(i => doc.list[i])\n return doc.buildFrom(arr)\n}\n\n//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //exactly like\n let m = hasWord(doc, 'like')\n m.match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n\n //the orange.\n m = hasTag(doc, 'Adjective')\n m.match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n\n // Firstname x (dangerous)\n m = hasTag(doc, 'FirstName')\n m.match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#Pronoun')\n .lastTerm()\n .tag('#LastName', 'firstname-noun')\n\n //three trains / one train\n m = hasTag(doc, 'Value')\n m = m.match('#Value #PresentTense')\n if (m.found) {\n if (m.has('(one|1)') === true) {\n m.terms(1).tag('Singular', 'one-presentTense')\n } else {\n m.terms(1).tag('Plural', 'value-presentTense')\n }\n }\n\n // well i've been...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n //been walking\n m = hasTag(doc, 'Gerund')\n m.match(`(be|been) (#Adverb|not)+? #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n doc\n .match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n\n //possessives\n //'her match' vs 'let her match'\n m = hasTag(doc, 'Possessive')\n m = m.match('#Possessive [#Infinitive]', 0)\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","const unique = function(arr) {\n let obj = {}\n for (let i = 0; i < arr.length; i++) {\n obj[arr[i]] = true\n }\n return Object.keys(obj)\n}\nmodule.exports = unique\n","// order matters\nconst list = [\n // ==== Mutliple tags ====\n { match: 'too much', tag: 'Adverb Adjective', reason: 'bit-4' },\n // u r cool\n { match: 'u r', tag: 'Pronoun Copula', reason: 'u r' },\n //sometimes adverbs - 'pretty good','well above'\n {\n match: '#Copula (pretty|dead|full|well) (#Adjective|#Noun)',\n tag: '#Copula #Adverb #Adjective',\n reason: 'sometimes-adverb',\n },\n\n //walking is cool\n { match: '[#Gerund] #Adverb? not? #Copula', group: 0, tag: 'Activity', reason: 'gerund-copula' },\n //walking should be fun\n { match: '[#Gerund] #Modal', group: 0, tag: 'Activity', reason: 'gerund-modal' },\n\n //swear-words as non-expression POS\n { match: 'holy (shit|fuck|hell)', tag: 'Expression', reason: 'swears-expression' },\n //Aircraft designer\n { match: '#Noun #Actor', tag: 'Actor', reason: 'thing-doer' },\n { match: '#Conjunction [u]', group: 0, tag: 'Pronoun', reason: 'u-pronoun-2' },\n //'u' as pronoun\n { match: '[u] #Verb', group: 0, tag: 'Pronoun', reason: 'u-pronoun-1' },\n\n // ==== Determiners ====\n { match: '#Noun [(who|whom)]', group: 0, tag: 'Determiner', reason: 'captain-who' },\n //that car goes\n { match: 'that #Noun [#Verb]', group: 0, tag: 'Determiner', reason: 'that-determiner' },\n { match: 'a bit much', tag: 'Determiner Adverb Adjective', reason: 'bit-3' },\n\n // ==== Propositions ====\n //all students\n { match: '#Verb #Adverb? #Noun [(that|which)]', group: 0, tag: 'Preposition', reason: 'that-prep' },\n //work, which has been done.\n { match: '@hasComma [which] (#Pronoun|#Verb)', group: 0, tag: 'Preposition', reason: 'which-copula' },\n { match: 'just [like]', group: 0, tag: 'Preposition', reason: 'like-preposition' },\n //folks like her\n { match: '#Noun [like] #Noun', group: 0, tag: 'Preposition', reason: 'noun-like' },\n //fix for busted-up phrasalVerbs\n { match: '#Noun [#Particle]', group: 0, tag: 'Preposition', reason: 'repair-noPhrasal' },\n\n // ==== Conditions ====\n // had he survived,\n { match: '[had] #Noun+ #PastTense', group: 0, tag: 'Condition', reason: 'had-he' },\n // were he to survive\n { match: '[were] #Noun+ to #Infinitive', group: 0, tag: 'Condition', reason: 'were-he' },\n\n // ==== Questions ====\n //the word 'how'\n { match: '^how', tag: 'QuestionWord', reason: 'how-question' },\n { match: '[how] (#Determiner|#Copula|#Modal|#PastTense)', group: 0, tag: 'QuestionWord', reason: 'how-is' },\n // //the word 'which'\n { match: '^which', tag: 'QuestionWord', reason: 'which-question' },\n { match: '[which] . (#Noun)+ #Pronoun', group: 0, tag: 'QuestionWord', reason: 'which-question2' },\n { match: 'which', tag: 'QuestionWord', reason: 'which-question3' },\n\n // ==== Conjunctions ====\n { match: '[so] #Noun', group: 0, tag: 'Conjunction', reason: 'so-conj' },\n //how he is driving\n {\n match: '[(who|what|where|why|how|when)] #Noun #Copula #Adverb? (#Verb|#Adjective)',\n group: 0,\n tag: 'Conjunction',\n reason: 'how-he-is-x',\n },\n {\n match: '[(who|what|where|why|how|when)] #Noun #Adverb? #Infinitive not? #Gerund',\n group: 0,\n tag: 'Conjunction',\n reason: 'when i go fishing',\n },\n]\n\nmodule.exports = list\n","//Dates: 'june' or 'may'\nconst dates = '(april|june|may|jan|august|eve)'\n\nlet list = [\n // ==== Holiday ====\n { match: '#Holiday (day|eve)', tag: 'Holiday', reason: 'holiday-day' }, // the captain who\n\n // ==== WeekDay ====\n // sun the 5th\n { match: '[sun] the #Ordinal', tag: 'WeekDay', reason: 'sun-the-5th' },\n //sun feb 2\n { match: '[sun] #Date', group: 0, tag: 'WeekDay', reason: 'sun-feb' },\n //1pm next sun\n { match: '#Date (on|this|next|last|during)? [sun]', group: 0, tag: 'WeekDay', reason: '1pm-sun' },\n //this sat\n { match: `(in|by|before|during|on|until|after|of|within|all) [sat]`, group: 0, tag: 'WeekDay', reason: 'sat' },\n //sat november\n { match: '[sat] #Date', group: 0, tag: 'WeekDay', reason: 'sat-feb' },\n\n // ==== Month ====\n //all march\n { match: `#Preposition [(march|may)]`, group: 0, tag: 'Month', reason: 'in-month' },\n //this march\n { match: `this [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n { match: `next [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n { match: `last [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n // march 5th\n { match: `[(march|may)] the? #Value`, group: 0, tag: 'Month', reason: 'march-5th' },\n // 5th of march\n { match: `#Value of? [(march|may)]`, group: 0, tag: 'Month', reason: '5th-of-march' },\n // march and feb\n { match: `[(march|may)] .? #Date`, group: 0, tag: 'Month', reason: 'march-and-feb' },\n // feb to march\n { match: `#Date .? [(march|may)]`, group: 0, tag: 'Month', reason: 'feb-and-march' },\n //quickly march\n { match: `#Adverb [(march|may)]`, group: 0, tag: 'Infinitive', reason: 'quickly-march' },\n //march quickly\n { match: `(march|may) [#Adverb]`, group: 0, tag: 'Infinitive', reason: 'march-quickly' },\n\n //5th of March\n { match: '#Value of #Month', tag: 'Date', reason: 'value-of-month' },\n //5 March\n { match: '#Cardinal #Month', tag: 'Date', reason: 'cardinal-month' },\n //march 5 to 7\n { match: '#Month #Value to #Value', tag: 'Date', reason: 'value-to-value' },\n //march the 12th\n { match: '#Month the #Value', tag: 'Date', reason: 'month-the-value' },\n //june 7\n { match: '(#WeekDay|#Month) #Value', tag: 'Date', reason: 'date-value' },\n //7 june\n { match: '#Value (#WeekDay|#Month)', tag: 'Date', reason: 'value-date' },\n //may twenty five\n { match: '(#TextValue && #Date) #TextValue', tag: 'Date', reason: 'textvalue-date' },\n\n // in june\n { match: `in [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `during [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `on [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `by [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `before [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `#Date [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n // june 1992\n { match: `${dates} #Value`, tag: 'Date', reason: 'june-5th' },\n { match: `${dates} #Date`, tag: 'Date', reason: 'june-5th' },\n // June Smith\n { match: `${dates} #ProperNoun`, tag: 'Person', reason: 'june-smith', safe: true },\n // june m. Cooper\n { match: `${dates} #Acronym? (#ProperNoun && !#Month)`, tag: 'Person', reason: 'june-smith-jr' },\n]\n\nmodule.exports = list\n","module.exports = [\n // ==== Plural ====\n //there are reasons\n { match: 'there (are|were) #Adjective? [#PresentTense]', group: 0, tag: 'Plural', reason: 'there-are' },\n\n // ==== Singular ====\n //the sun\n { match: '#Determiner [sun]', group: 0, tag: 'Singular', reason: 'the-sun' },\n //did a 900, paid a 20\n { match: '#Verb (a|an) [#Value]', group: 0, tag: 'Singular', reason: 'did-a-value' },\n //'the can'\n { match: '#Determiner [(can|will|may)]', group: 0, tag: 'Singular', reason: 'the can' },\n // ==== Possessive ====\n //spencer kelly's\n { match: '#FirstName #Acronym? (#Possessive && #LastName)', tag: 'Possessive', reason: 'name-poss' },\n //Super Corp's fundraiser\n { match: '#Organization+ #Possessive', tag: 'Possessive', reason: 'org-possessive' },\n //Los Angeles's fundraiser\n { match: '#Place+ #Possessive', tag: 'Possessive', reason: 'place-possessive' },\n\n //big dreams, critical thinking\n { match: '#Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'adj-presentTense' },\n //his fine\n { match: '(his|her|its) [#Adjective]', group: 0, tag: 'Noun', reason: 'his-fine' },\n //some pressing issues\n { match: 'some [#Verb] #Plural', group: 0, tag: 'Noun', reason: 'determiner6' },\n //'more' is not always an adverb\n { match: 'more #Noun', tag: 'Noun', reason: 'more-noun' },\n { match: '(#Noun && @hasComma) #Noun (and|or) [#PresentTense]', group: 0, tag: 'Noun', reason: 'noun-list' }, //3 feet\n { match: '(right|rights) of .', tag: 'Noun', reason: 'right-of' }, // a bit\n { match: 'a [bit]', group: 0, tag: 'Noun', reason: 'bit-2' },\n\n //running-a-show\n { match: '#Gerund #Determiner [#Infinitive]', group: 0, tag: 'Noun', reason: 'running-a-show' },\n //the nice swim\n { match: '(the|this|those|these) #Adjective [#Verb]', group: 0, tag: 'Noun', reason: 'the-adj-verb' },\n // the truly nice swim\n { match: '(the|this|those|these) #Adverb #Adjective [#Verb]', group: 0, tag: 'Noun', reason: 'determiner4' },\n //the orange is\n { match: '#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)', group: 0, tag: 'Noun', reason: 'the-adj-2' },\n // a stream runs\n { match: '(the|this|a|an) [#Infinitive] #Adverb? #Verb', group: 0, tag: 'Noun', reason: 'determiner5' },\n //the test string\n { match: '#Determiner [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'determiner7' },\n //by a bear.\n { match: '#Determiner #Adjective [#Infinitive]$', group: 0, tag: 'Noun', reason: 'a-inf' },\n //the wait to vote\n { match: '(the|this) [#Verb] #Preposition .', group: 0, tag: 'Noun', reason: 'determiner1' },\n //a sense of\n { match: '#Determiner [#Verb] of', group: 0, tag: 'Noun', reason: 'the-verb-of' },\n //the threat of force\n { match: '#Determiner #Noun of [#Verb]', group: 0, tag: 'Noun', reason: 'noun-of-noun' },\n //the western line\n {\n match: '#Determiner [(western|eastern|northern|southern|central)] #Noun',\n group: 0,\n tag: 'Noun',\n reason: 'western-line',\n },\n\n //her polling\n { match: '#Possessive [#Gerund]', group: 0, tag: 'Noun', reason: 'her-polling' },\n //her fines\n { match: '(his|her|its) [#PresentTense]', group: 0, tag: 'Noun', reason: 'its-polling' },\n\n //linear algebra\n {\n match: '(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun',\n group: 0,\n tag: 'Noun',\n reason: 'technical-noun',\n },\n // walk the walk\n { match: '(the|those|these) #Adjective? [#Infinitive]', group: 0, tag: 'Noun', reason: 'det-inf' },\n { match: '(the|those|these) #Adjective? [#PresentTense]', group: 0, tag: 'Noun', reason: 'det-pres' },\n { match: '(the|those|these) #Adjective? [#PastTense]', group: 0, tag: 'Noun', reason: 'det-past' },\n\n //air-flow\n { match: '(#Noun && @hasHyphen) #Verb', tag: 'Noun', reason: 'hyphen-verb' },\n //is no walk\n { match: 'is no [#Verb]', group: 0, tag: 'Noun', reason: 'is-no-verb' },\n //different views than\n { match: '[#Verb] than', group: 0, tag: 'Noun', reason: 'correction' },\n // goes to sleep\n { match: '(go|goes|went) to [#Infinitive]', group: 0, tag: 'Noun', reason: 'goes-to-verb' },\n //a great run\n { match: '(a|an) #Adjective [(#Infinitive|#PresentTense)]', tag: 'Noun', reason: 'a|an2' },\n //a tv show\n { match: '(a|an) #Noun [#Infinitive]', group: 0, tag: 'Noun', reason: 'a-noun-inf' },\n //do so\n { match: 'do [so]', group: 0, tag: 'Noun', reason: 'so-noun' },\n //is mark hughes\n { match: '#Copula [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'is-pres-noun' },\n //\n { match: '[#Infinitive] #Copula', group: 0, tag: 'Noun', reason: 'inf-copula' },\n //a close\n { match: '#Determiner #Adverb? [close]', group: 0, tag: 'Adjective', reason: 'a-close' },\n // what the hell\n { match: '#Determiner [(shit|damn|hell)]', group: 0, tag: 'Noun', reason: 'swears-noun' },\n]\n","const adjectives = '(misty|rusty|dusty|rich|randy)'\nlet list = [\n // all fell apart\n { match: '[all] #Determiner? #Noun', group: 0, tag: 'Adjective', reason: 'all-noun' },\n // very rusty\n { match: `#Adverb [${adjectives}]`, group: 0, tag: 'Adjective', reason: 'really-rich' },\n // rusty smith\n { match: `${adjectives} #Person`, tag: 'Person', reason: 'randy-smith' },\n // rusty a. smith\n { match: `${adjectives} #Acronym? #ProperNoun`, tag: 'Person', reason: 'rusty-smith' },\n //sometimes not-adverbs\n { match: '#Copula [(just|alone)]$', group: 0, tag: 'Adjective', reason: 'not-adverb' },\n //jack is guarded\n { match: '#Singular is #Adverb? [#PastTense$]', group: 0, tag: 'Adjective', reason: 'is-filled' },\n // smoked poutine is\n { match: '[#PastTense] #Singular is', group: 0, tag: 'Adjective', reason: 'smoked-poutine' },\n // baked onions are\n { match: '[#PastTense] #Plural are', group: 0, tag: 'Adjective', reason: 'baked-onions' },\n //a staggering cost\n { match: '(a|an) [#Gerund]', group: 0, tag: 'Adjective', reason: 'a|an' },\n // is f*ed up\n { match: '#Copula [fucked up?]', tag: 'Adjective', reason: 'swears-adjective' },\n //jack seems guarded\n { match: '#Singular (seems|appears) #Adverb? [#PastTense$]', group: 0, tag: 'Adjective', reason: 'seems-filled' },\n]\n\nmodule.exports = list\n","module.exports = [\n //still good\n { match: '[still] #Adjective', group: 0, tag: 'Adverb', reason: 'still-advb' },\n //still make\n { match: '[still] #Verb', group: 0, tag: 'Adverb', reason: 'still-verb' },\n // so hot\n { match: '[so] #Adjective', group: 0, tag: 'Adverb', reason: 'so-adv' },\n // all singing\n { match: '[all] #Verb', group: 0, tag: 'Adverb', reason: 'all-verb' },\n // sing like an angel\n { match: '#Verb [like]', group: 0, tag: 'Adverb', reason: 'verb-like' },\n //barely even walk\n { match: '(barely|hardly) even', tag: 'Adverb', reason: 'barely-even' },\n //cheering hard - dropped -ly's\n { match: '#PresentTense [(hard|quick|long|bright|slow)]', group: 0, tag: 'Adverb', reason: 'lazy-ly' },\n // much appreciated\n { match: '[much] #Adjective', group: 0, tag: 'Adverb', reason: 'bit-1' },\n]\n","module.exports = [\n // ==== PhoneNumber ====\n //1 800 ...\n { match: '1 #Value #PhoneNumber', tag: 'PhoneNumber', reason: '1-800-Value' },\n //(454) 232-9873\n { match: '#NumericValue #PhoneNumber', tag: 'PhoneNumber', reason: '(800) PhoneNumber' },\n\n // ==== Currency ====\n { match: '#Demonym #Currency', tag: 'Currency', reason: 'demonym-currency' },\n // ==== Ordinal ====\n { match: '[second] #Noun', group: 0, tag: 'Ordinal', reason: 'second-noun' },\n // ==== Money ====\n { match: '#Value+ #Currency', tag: 'Money', reason: '15 usd' },\n // ==== Unit ====\n //5 yan\n { match: '#Value+ [#Currency]', group: 0, tag: 'Unit', reason: '5-yan' },\n { match: '#Value [(foot|feet)]', group: 0, tag: 'Unit', reason: 'foot-unit' },\n\n //minus 7\n { match: '(minus|negative) #Value', tag: 'Value', reason: 'minus-value' },\n //5 kg.\n { match: '#Value #Abbreviation', tag: 'Value', reason: 'value-abbr' },\n //seven point five\n { match: '#Value (point|decimal) #Value', tag: 'Value', reason: 'value-point-value' },\n // ten grand\n { match: '#Value grand', tag: 'Value', reason: 'value-grand' },\n //quarter million\n { match: '#Determiner [(half|quarter)] #Ordinal', group: 0, tag: 'Value', reason: 'half-ordinal' },\n { match: 'a #Value', tag: 'Value', reason: 'a-value' },\n\n // thousand and two\n {\n match: `(hundred|thousand|million|billion|trillion|quadrillion)+ and #Value`,\n tag: 'Value',\n reason: 'magnitude-and-value',\n },\n //'a/an' can mean 1 - \"a hour\"\n {\n match: '[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)',\n group: 0,\n tag: 'Value',\n reason: 'a-is-one',\n },\n]\n","const verbs = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\n\nlet list = [\n // ==== Tense ====\n //he left\n { match: '#Noun #Adverb? [left]', group: 0, tag: 'PastTense', reason: 'left-verb' },\n //this rocks\n { match: '(this|that) [#Plural]', group: 0, tag: 'PresentTense', reason: 'this-verbs' },\n\n // ==== Auxiliary ====\n //was walking\n { match: `[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)`, group: 0, tag: 'Auxiliary', reason: 'copula-walking' },\n //support a splattering of auxillaries before a verb\n { match: `[(has|had) (#Adverb|not)+?] #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-walked' },\n //would walk\n { match: `[(#Modal|did) (#Adverb|not)+?] #Verb`, group: 0, tag: 'Auxiliary', reason: 'modal-verb' },\n //would have had\n {\n match: `[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'would-have',\n },\n //would be walking\n { match: `#Modal (#Adverb|not)+? be (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-be' },\n //had been walking\n {\n match: `(#Modal|had|has) (#Adverb|not)+? been (#Adverb|not)+? #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'had-been',\n },\n //was walking\n { match: `[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)`, group: 0, tag: 'Auxiliary', reason: 'copula-walking' },\n //support a splattering of auxillaries before a verb\n { match: `[(has|had) (#Adverb|not)+?] #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-walked' },\n //would walk\n { match: `[(#Modal|did) (#Adverb|not)+?] #Verb`, group: 0, tag: 'Auxiliary', reason: 'modal-verb' },\n // will walk\n { match: '[(do|does|will|have|had)] (not|#Adverb)? #Verb', group: 0, tag: 'Auxiliary', reason: 'have-had' },\n // about to go\n { match: '[about to] #Adverb? #Verb', group: 0, tag: ['Auxiliary', 'Verb'], reason: 'about-to' },\n //would be walking\n { match: `#Modal (#Adverb|not)+? be (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-be' },\n //would have had\n {\n match: `[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'would-have',\n },\n //had been walking\n {\n match: `(#Modal|had|has) (#Adverb|not)+? been (#Adverb|not)+? #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'had-been',\n },\n\n // ==== Phrasal ====\n //'foo-up'\n { match: '(#Verb && @hasHyphen) up', group: 0, tag: 'PhrasalVerb', reason: 'foo-up' },\n { match: '(#Verb && @hasHyphen) off', group: 0, tag: 'PhrasalVerb', reason: 'foo-off' },\n { match: '(#Verb && @hasHyphen) over', group: 0, tag: 'PhrasalVerb', reason: 'foo-over' },\n { match: '(#Verb && @hasHyphen) out', group: 0, tag: 'PhrasalVerb', reason: 'foo-out' },\n //fall over\n { match: '#PhrasalVerb [#PhrasalVerb]', group: 0, tag: 'Particle', reason: 'phrasal-particle' },\n\n // ==== Copula ====\n //will be running (not copula)\n { match: '[will #Adverb? not? #Adverb? be] #Gerund', group: 0, tag: 'Copula', reason: 'will-be-copula' },\n //for more complex forms, just tag 'be'\n { match: 'will #Adverb? not? #Adverb? [be] #Adjective', group: 0, tag: 'Copula', reason: 'be-copula' },\n\n // ==== Infinitive ====\n //march to\n { match: '[march] (up|down|back|to|toward)', group: 0, tag: 'Infinitive', reason: 'march-to' },\n //must march\n { match: '#Modal [march]', group: 0, tag: 'Infinitive', reason: 'must-march' },\n //let him glue\n {\n match: '(let|make|made) (him|her|it|#Person|#Place|#Organization)+ [#Singular] (a|an|the|it)',\n group: 0,\n tag: 'Infinitive',\n reason: 'let-him-glue',\n },\n\n //he quickly foo\n { match: '#Noun #Adverb [#Noun]', group: 0, tag: 'Verb', reason: 'quickly-foo' },\n //will secure our\n { match: 'will [#Adjective]', group: 0, tag: 'Verb', reason: 'will-adj' },\n //he disguised the thing\n { match: '#Pronoun [#Adjective] #Determiner #Adjective? #Noun', group: 0, tag: 'Verb', reason: 'he-adj-the' },\n\n //is eager to go\n { match: '#Copula [#Adjective to] #Verb', group: 0, tag: 'Verb', reason: 'adj-to' },\n\n // would wade\n { match: `#Modal [${verbs}]`, group: 0, tag: 'Verb', reason: 'would-mark' },\n { match: `#Adverb [${verbs}]`, group: 0, tag: 'Verb', reason: 'really-mark' },\n // wade smith\n { match: `${verbs} #Person`, tag: 'Person', reason: 'rob-smith' },\n // wade m. Cooper\n { match: `${verbs} #Acronym? #ProperNoun`, tag: 'Person', reason: 'rob-a-smith' },\n\n // damn them\n { match: '[shit] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear1-verb' },\n { match: '[damn] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear2-verb' },\n { match: '[fuck] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear3-verb' },\n]\n\nmodule.exports = list\n","const places = '(paris|alexandria|houston|kobe|salvador|sydney)'\nlet list = [\n // ==== Region ====\n //West Norforlk\n {\n match: '(west|north|south|east|western|northern|southern|eastern)+ #Place',\n\n tag: 'Region',\n reason: 'west-norfolk',\n },\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n {\n match: '#City [(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)]',\n group: 0,\n tag: 'Region',\n reason: 'us-state',\n },\n //Foo District\n {\n match: '#ProperNoun+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)',\n tag: 'Region',\n reason: 'foo-district',\n },\n //District of Foo\n {\n match: '(district|region|province|municipality|territory|burough|state) of #ProperNoun',\n tag: 'Region',\n reason: 'district-of-Foo',\n },\n\n // ==== Address ====\n {\n match: '#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)',\n tag: 'Address',\n reason: 'address-st',\n },\n\n // in houston\n { match: `in [${places}]`, group: 0, tag: 'Place', reason: 'in-paris' },\n { match: `near [${places}]`, group: 0, tag: 'Place', reason: 'near-paris' },\n { match: `at [${places}]`, group: 0, tag: 'Place', reason: 'at-paris' },\n { match: `from [${places}]`, group: 0, tag: 'Place', reason: 'from-paris' },\n { match: `to [${places}]`, group: 0, tag: 'Place', reason: 'to-paris' },\n { match: `#Place [${places}]`, group: 0, tag: 'Place', reason: 'tokyo-paris' },\n // houston texas\n { match: `[${places}] #Place`, group: 0, tag: 'Place', reason: 'paris-france' },\n]\nmodule.exports = list\n","module.exports = [\n //John & Joe's\n { match: '#Noun (&|n) #Noun', tag: 'Organization', reason: 'Noun-&-Noun' },\n // teachers union of Ontario\n { match: '#Organization of the? #ProperNoun', tag: 'Organization', reason: 'org-of-place', safe: true },\n //walmart USA\n { match: '#Organization #Country', tag: 'Organization', reason: 'org-country' },\n //organization\n { match: '#ProperNoun #Organization', tag: 'Organization', reason: 'titlecase-org' },\n //FitBit Inc\n { match: '#ProperNoun (ltd|co|inc|dept|assn|bros)', tag: 'Organization', reason: 'org-abbrv' },\n // the OCED\n { match: 'the [#Acronym]', group: 0, tag: 'Organization', reason: 'the-acronym', safe: true },\n // global trade union\n {\n match: '(world|global|international|national|#Demonym) #Organization',\n\n tag: 'Organization',\n reason: 'global-org',\n },\n // schools\n { match: '#Noun+ (public|private) school', tag: 'School', reason: 'noun-public-school' },\n]\n","const nouns =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\n\nconst months = '(january|april|may|june|jan|sep)' //summer|autumn\n\nlet list = [\n // ==== Honorific ====\n { match: '[(1st|2nd|first|second)] #Honorific', group: 0, tag: 'Honorific', reason: 'ordinal-honorific' },\n {\n match: '[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person',\n group: 0,\n tag: 'Honorific',\n reason: 'ambg-honorifics',\n },\n\n // ==== FirstNames ====\n //is foo Smith\n { match: '#Copula [(#Noun|#PresentTense)] #LastName', group: 0, tag: 'FirstName', reason: 'copula-noun-lastname' },\n //pope francis\n { match: '(lady|queen|sister) #ProperNoun', tag: 'FemaleName', reason: 'lady-titlecase', safe: true },\n { match: '(king|pope|father) #ProperNoun', tag: 'MaleName', reason: 'pope-titlecase', safe: true },\n //ambiguous-but-common firstnames\n {\n match: '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName',\n group: 0,\n tag: 'FirstName',\n reason: 'maybe-lastname',\n },\n\n // ==== Nickname ====\n // Dwayne 'the rock' Johnson\n { match: '#FirstName [#Determiner #Noun] #LastName', group: 0, tag: 'NickName', reason: 'first-noun-last' },\n\n //my buddy\n { match: '#Possessive [#FirstName]', group: 0, tag: 'Person', reason: 'possessive-name' },\n { match: '#Acronym #ProperNoun', tag: 'Person', reason: 'acronym-titlecase', safe: true }, //ludwig van beethovan\n { match: '#Person (jr|sr|md)', tag: 'Person', reason: 'person-honorific' }, //peter II\n { match: '#Person #Person the? #RomanNumeral', tag: 'Person', reason: 'roman-numeral' }, //'Professor Fink', 'General McCarthy'\n { match: '#FirstName [/^[^aiurck]$/]', group: 0, tag: ['Acronym', 'Person'], reason: 'john-e' }, //Doctor john smith jr\n //general pearson\n { match: '#Honorific #Person', tag: 'Person', reason: 'honorific-person' },\n //remove single 'mr'\n { match: '#Honorific #Acronym', tag: 'Person', reason: 'Honorific-TitleCase' },\n //j.k Rowling\n { match: '#Noun van der? #Noun', tag: 'Person', reason: 'von der noun', safe: true },\n //king of spain\n { match: '(king|queen|prince|saint|lady) of? #Noun', tag: 'Person', reason: 'king-of-noun', safe: true },\n //Foo U Ford\n { match: '[#ProperNoun] #Person', group: 0, tag: 'Person', reason: 'proper-person', safe: true },\n // al sharpton\n { match: 'al (#Person|#ProperNoun)', tag: 'Person', reason: 'al-borlen', safe: true },\n //ferdinand de almar\n { match: '#FirstName de #Noun', tag: 'Person', reason: 'bill-de-noun' },\n //Osama bin Laden\n { match: '#FirstName (bin|al) #Noun', tag: 'Person', reason: 'bill-al-noun' },\n //John L. Foo\n { match: '#FirstName #Acronym #ProperNoun', tag: 'Person', reason: 'bill-acronym-title' },\n //Andrew Lloyd Webber\n { match: '#FirstName #FirstName #ProperNoun', tag: 'Person', reason: 'bill-firstname-title' },\n //Mr Foo\n { match: '#Honorific #FirstName? #ProperNoun', tag: 'Person', reason: 'dr-john-Title' },\n //peter the great\n { match: '#FirstName the #Adjective', tag: 'Person', reason: 'name-the-great' },\n //very common-but-ambiguous lastnames\n {\n match: '#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)',\n\n tag: 'Person',\n reason: 'bill-green',\n },\n // faith smith\n { match: `${nouns} #Person`, tag: 'Person', reason: 'ray-smith', safe: true },\n // faith m. Smith\n { match: `${nouns} #Acronym? #ProperNoun`, tag: 'Person', reason: 'ray-a-smith', safe: true },\n //give to april\n {\n match: `#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${months}]`,\n group: 0,\n tag: 'Person',\n reason: 'ambig-person',\n },\n // remind june\n { match: `#Infinitive [${months}]`, group: 0, tag: 'Person', reason: 'infinitive-person' },\n // may waits for\n { match: `[${months}] #PresentTense for`, group: 0, tag: 'Person', reason: 'ambig-active-for' },\n // may waits for\n { match: `[${months}] #PresentTense to`, group: 0, tag: 'Person', reason: 'ambig-active-to' },\n // april will\n { match: `[${months}] #Modal`, group: 0, tag: 'Person', reason: 'ambig-modal' },\n // would april\n { match: `#Modal [${months}]`, group: 0, tag: 'Person', reason: 'modal-ambig' },\n // it is may\n { match: `#Copula [${months}]`, group: 0, tag: 'Person', reason: 'is-may' },\n // may is\n { match: `[${months}] #Copula`, group: 0, tag: 'Person', reason: 'may-is' },\n // with april\n { match: `that [${months}]`, group: 0, tag: 'Person', reason: 'that-month' },\n // with april\n { match: `with [${months}]`, group: 0, tag: 'Person', reason: 'with-month' },\n // for april\n { match: `for [${months}]`, group: 0, tag: 'Person', reason: 'for-month' },\n // this april\n { match: `this [${months}]`, group: 0, tag: 'Month', reason: 'this-may' }, //maybe not 'this'\n // next april\n { match: `next [${months}]`, group: 0, tag: 'Month', reason: 'next-may' },\n // last april\n { match: `last [${months}]`, group: 0, tag: 'Month', reason: 'last-may' },\n // wednesday april\n { match: `#Date [${months}]`, group: 0, tag: 'Month', reason: 'date-may' },\n // may 5th\n { match: `[${months}] the? #Value`, group: 0, tag: 'Month', reason: 'may-5th' },\n // 5th of may\n { match: `#Value of [${months}]`, group: 0, tag: 'Month', reason: '5th-of-may' },\n // dick van dyke\n { match: '#ProperNoun (van|al|bin) #ProperNoun', tag: 'Person', reason: 'title-van-title', safe: true },\n //jose de Sucre\n { match: '#ProperNoun (de|du) la? #ProperNoun', tag: 'Person', reason: 'title-de-title', safe: true },\n //Jani K. Smith\n { match: '#Singular #Acronym #LastName', tag: '#Person', reason: 'title-acro-noun', safe: true },\n //John Foo\n { match: '#FirstName (#Noun && #ProperNoun) #ProperNoun?', tag: 'Person', reason: 'firstname-titlecase' },\n //Joe K. Sombrero\n { match: '#FirstName #Acronym #Noun', tag: 'Person', reason: 'n-acro-noun', safe: true },\n]\nmodule.exports = list\n","const parseSyntax = require('../../../Doc/match/syntax')\nconst unique = require('../_unique')\nlet matches = []\nmatches = matches.concat(require('./01-misc'))\nmatches = matches.concat(require('./02-dates'))\nmatches = matches.concat(require('./03-noun'))\nmatches = matches.concat(require('./04-adjective'))\nmatches = matches.concat(require('./05-adverb'))\nmatches = matches.concat(require('./06-value'))\nmatches = matches.concat(require('./07-verbs'))\nmatches = matches.concat(require('./08-place'))\nmatches = matches.concat(require('./09-org'))\nmatches = matches.concat(require('./10-people'))\n\n// cache the easier conditions up-front\nconst cacheRequired = function(reg) {\n let needTags = []\n let needWords = []\n reg.forEach(obj => {\n if (obj.optional === true || obj.negative === true) {\n return\n }\n if (obj.tag !== undefined) {\n needTags.push(obj.tag)\n }\n if (obj.word !== undefined) {\n needWords.push(obj.word)\n }\n })\n return { tags: unique(needTags), words: unique(needWords) }\n}\n\nconst allLists = function(m) {\n let more = []\n let lists = m.reg.filter(r => r.oneOf !== undefined)\n if (lists.length === 1) {\n let i = m.reg.findIndex(r => r.oneOf !== undefined)\n Object.keys(m.reg[i].oneOf).forEach(w => {\n let newM = Object.assign({}, m)\n newM.reg = newM.reg.slice(0)\n newM.reg[i] = Object.assign({}, newM.reg[i])\n newM.reg[i].word = w\n delete newM.reg[i].operator\n delete newM.reg[i].oneOf\n newM.reason += '-' + w\n more.push(newM)\n })\n }\n return more\n}\n\n// parse them\nlet all = []\nmatches.forEach(m => {\n m.reg = parseSyntax(m.match)\n let enumerated = allLists(m)\n if (enumerated.length > 0) {\n all = all.concat(enumerated)\n } else {\n all.push(m)\n }\n})\n\nall.forEach(m => {\n m.required = cacheRequired(m.reg)\n return m\n})\n\nmodule.exports = all\n","const matches = require('./matches')\nconst unique = require('./_unique')\n\n// return intersection of array-of-arrays\nconst hasEvery = function(chances) {\n if (chances.length === 0) {\n return []\n }\n let obj = {}\n chances.forEach(arr => {\n arr = unique(arr)\n for (let i = 0; i < arr.length; i++) {\n obj[arr[i]] = obj[arr[i]] || 0\n obj[arr[i]] += 1\n }\n })\n let res = Object.keys(obj)\n res = res.filter(k => obj[k] === chances.length)\n res = res.map(num => Number(num))\n return res\n}\n\nconst runner = function(doc) {\n //find phrases to try for each match\n matches.forEach(m => {\n let allChances = []\n m.required.words.forEach(w => {\n allChances.push(doc._cache.words[w] || [])\n })\n m.required.tags.forEach(tag => {\n allChances.push(doc._cache.tags[tag] || [])\n })\n\n let worthIt = hasEvery(allChances)\n if (worthIt.length === 0) {\n return\n }\n\n let phrases = worthIt.map(index => doc.list[index])\n let tryDoc = doc.buildFrom(phrases)\n // phrases getting tagged\n let match = tryDoc.match(m.reg, m.group)\n if (match.found) {\n if (m.safe === true) {\n match.tagSafe(m.tag, m.reason)\n } else {\n match.tag(m.tag, m.reason)\n }\n }\n })\n}\nmodule.exports = runner\n\n// console.log(hasEvery([[1, 2, 2, 3], [2, 3], []]))\n","const fixMisc = require('./fixMisc')\nconst runner = require('./runner')\n\n// runner: 250ms\n// misc: 40ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n runner(doc)\n fixMisc(doc)\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc.splitAfter('@hasComma').not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)', 0)\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('(@hasComma|#Conjunction)')\n }\n /** remove the conjunction */\n items() {\n return this.parts().notIf('#Conjunction')\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove() {\n return this\n }\n\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n return this\n }\n removeOxfordComma() {\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]', 0)\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let hasHyphen = parsed.verb.termList(0).hasHyphen()\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n let space = hasHyphen === true ? '-' : ' '\n Object.keys(forms).forEach(k => (forms[k] += space + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n let space = hasHyphen === true ? '-' : ' '\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += space + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + space + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n json.parts[k] = parsed[k].text('normal')\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Infinitive\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n Object.defineProperty(this, '_cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const lexiconStep = require('./01-init/01-lexicon')\n\n//for the tokenize-only build, we want to keep\nconst smallTagger = function(doc) {\n let terms = doc.termList()\n lexiconStep(terms, doc.world)\n return doc\n}\nmodule.exports = smallTagger\n","const tokenize = require('./01-tokenizer')\nconst fromJSON = require('./01-tokenizer/fromJSON')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\nconst Phrase = require('./Phrase/Phrase')\nconst Term = require('./Term/Term')\nconst Pool = require('./01-tokenizer/Pool')\nconst tinyTagger = require('./02-tagger/tiny')\n\nfunction instance(worldInstance) {\n //blast-out our word-lists, just once\n let world = worldInstance\n\n /** parse and tag text into a compromise object */\n const nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n }\n\n /** parse text into a compromise object, without running POS-tagging */\n nlp.tokenize = function(text = '', lexicon) {\n let w = world\n if (lexicon) {\n w = w.clone()\n w.words = {}\n w.addWords(lexicon)\n }\n let list = tokenize(text, w)\n let doc = new Doc(list, null, w)\n if (lexicon) {\n tinyTagger(doc)\n }\n return doc\n }\n\n /** mix in a compromise-plugin */\n nlp.extend = function(fn) {\n fn(Doc, world, this, Phrase, Term, Pool)\n return this\n }\n\n /** create a compromise Doc object from .json() results */\n nlp.fromJSON = function(json) {\n let list = fromJSON(json, world)\n return new Doc(list, null, world)\n }\n\n /** make a deep-copy of the library state */\n nlp.clone = function() {\n return instance(world.clone())\n }\n\n /** log our decision-making for debugging */\n nlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n }\n\n /** current version of the library */\n nlp.version = version\n // alias\n nlp.import = nlp.load\n\n return nlp\n}\n\nmodule.exports = instance(new World())\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","a","b","c","d","e","f","g","h","I","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","oneOf","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","len","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","getGreedy","until","count","max","min","greedyTo","nextReg","getOrCreateGroup","namedGroups","namedGroupId","startIndex","group","tryHere","previousGroupId","isNamedGroup","named","hasNeeds","remain","greedy","skipto","startAt","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","captureName","RegExp","stripStart","stripEnd","stripBoth","parseToken","groupType","exec","Number","isNamed","capture","fillGroups","tokens","convert","current","useOneOf","token","shouldPack","isArray","byParentheses","byWords","words","byArray","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","groups","notMatch","ts","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","linkTerms","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","fromText","splitTerms","phrases","fromJSON","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","NickName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","ache","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","name","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","JSON","parse","stringify","w2","from","addParent","reverse","doShallow","wordCount","eq","firstTerms","lastTerms","num","getGroups","allGroups","getOneName","target","fullSentence","parseSyntax","not","has","lookAhead","lookBehind","befores","tagTerms","safe","tagList","why","setTag","detachParent","sub","tokenize","buildTree","termList","val","more","rest","fastLookup","everyTerm","isObject","isObj","_cache","lookup","byVal","setRoot","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","termOffsets","elapsed","offsets","calcOffset","jsonDefaults","setOptions","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","alpha","left","right","byFreq","counts","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","underOver","tryMultiple","checkLexicon","foundWords","noPrefix","apostrophes","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","lookups","afterThisWord","first","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","periodSeperated","oneLetterWord","A","checkAcronym","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","french","qu","checkFrench","isNumber","createPhrase","firstTerm","hasWord","hasTag","miscCorrection","notIf","ifNo","dates","months","cacheRequired","needTags","needWords","allLists","lists","newM","enumerated","required","hasEvery","chances","runner","allChances","worthIt","tryDoc","corrections","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","an","lookBefore","adj","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","verb","findNoun","vb","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","space","advb","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","untag","and","onlyIf","smallTagger","lexiconStep","instance","worldInstance","nlp","addWords","tinyTagger","verbose","version","load"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/postProcess.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/_linkTerms.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/01-tokenizer/fromJSON.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/match/checkCache.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/_lookup.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/07-cache.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/_offset.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/06-acronyms.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/07-french.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/_unique.js","../src/02-tagger/04-correction/matches/01-misc.js","../src/02-tagger/04-correction/matches/02-dates.js","../src/02-tagger/04-correction/matches/03-noun.js","../src/02-tagger/04-correction/matches/04-adjective.js","../src/02-tagger/04-correction/matches/05-adverb.js","../src/02-tagger/04-correction/matches/06-value.js","../src/02-tagger/04-correction/matches/07-verbs.js","../src/02-tagger/04-correction/matches/08-place.js","../src/02-tagger/04-correction/matches/09-org.js","../src/02-tagger/04-correction/matches/10-people.js","../src/02-tagger/04-correction/matches/index.js","../src/02-tagger/04-correction/runner.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/02-tagger/tiny.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·&*•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·&*@•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n // support optimized (one|two)\n if (reg.oneOf !== undefined) {\n return reg.oneOf.hasOwnProperty(t.reduced) || reg.oneOf.hasOwnProperty(t.text)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n whitespace: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n if (n === undefined) {\n this.cache.terms = terms\n }\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n let p = this.buildFrom(this.start, this.length)\n p.cache = this.cache\n return p\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n\n/** get the full-sentence this phrase belongs to */\nexports.fullSentence = function() {\n let t = this.terms(0)\n //find first term in sentence\n while (t.prev) {\n t = this.pool.get(t.prev)\n }\n let start = t.id\n let len = 1\n //go to end of sentence\n while (t.next) {\n t = this.pool.get(t.next)\n len += 1\n }\n return this.buildFrom(start, len)\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.terms()\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n before.cache = {}\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n p.cache = {}\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n phrase.cache = {}\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","const makeId = require('../../Term/_id')\n// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n// get or create named group\nconst getOrCreateGroup = function(namedGroups, namedGroupId, terms, startIndex, group) {\n const g = namedGroups[namedGroupId]\n\n if (g) {\n return g\n }\n\n const { id } = terms[startIndex]\n\n namedGroups[namedGroupId] = {\n group: String(group),\n start: id,\n length: 0,\n }\n\n return namedGroups[namedGroupId]\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n const namedGroups = {}\n let previousGroupId = null\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n // Check if this reg has a named capture group\n const isNamedGroup = typeof reg.named === 'string' || typeof reg.named === 'number'\n let namedGroupId = null\n\n // Reuse previous capture group if same\n if (isNamedGroup) {\n const prev = regs[r - 1]\n if (prev && prev.named === reg.named && previousGroupId) {\n namedGroupId = previousGroupId\n } else {\n namedGroupId = makeId(reg.named)\n previousGroupId = namedGroupId\n }\n }\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return [false, null]\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return [false, null]\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n\n if (skipto === null) {\n return [false, null] //couldn't find it\n }\n\n // is it really this easy?....\n if (isNamedGroup) {\n const g = getOrCreateGroup(namedGroups, namedGroupId, terms, t, reg.named)\n\n // Update group\n g.length = skipto - t\n }\n\n t = skipto\n\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (\n reg.anything === true ||\n (reg.end === true &&\n reg.greedy === true &&\n index + t < length - 1 &&\n terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) ||\n terms[t].doesMatch(reg, index + t, length) === true\n ) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return [false, null]\n }\n }\n\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return [false, null] //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return [false, null] //greedy didn't reach the end\n }\n }\n if (isNamedGroup) {\n // Get or create capture group\n const g = getOrCreateGroup(namedGroups, namedGroupId, terms, startAt, reg.named)\n\n // Update group - add greedy or increment length\n if (t > 1 && reg.greedy) {\n g.length += t - startAt\n } else {\n g.length++\n }\n }\n\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return [false, null]\n }\n\n //return our result\n return [terms.slice(0, t), namedGroups]\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(({ match: arr }) => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n named:'',\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\nconst captureName = new RegExp(/^<(\\S+)>/)\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //end-flag\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flag\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.named = true\n\n if (start(w) === '[') {\n obj.groupType = end(w) === ']' ? 'single' : 'start'\n } else {\n obj.groupType = 'end'\n }\n\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n\n // Use capture group name\n if (start(w) === '<') {\n const res = captureName.exec(w)\n\n if (res.length >= 2) {\n obj.named = res[1]\n w = w.replace(res[0], '')\n }\n }\n }\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const isNamed = function(capture) {\n return typeof capture === 'string' || typeof capture === 'number'\n}\n\nconst fillGroups = function(tokens) {\n let convert = false\n let index = -1\n let current\n\n //'fill in' capture groups between start-end\n for (let i = 0; i < tokens.length; i++) {\n const n = tokens[i]\n\n // Give name to un-named single tokens\n if (n.groupType === 'single' && n.named === true) {\n index += 1\n n.named = index\n continue\n }\n\n // Start converting tokens\n if (n.groupType === 'start') {\n convert = true\n if (isNamed(n.named)) {\n current = n.named\n } else {\n index += 1\n current = index\n }\n }\n\n // Ensure this token has the right name\n if (convert) {\n n.named = current\n }\n\n // Stop converting tokens\n if (n.groupType === 'end') {\n convert = false\n }\n }\n return tokens\n}\n\nconst useOneOf = function(tokens) {\n return tokens.map(token => {\n if (token.choices !== undefined) {\n // are they all straight non-optional words?\n let shouldPack = token.choices.every(c => c.optional !== true && c.negative !== true && c.word !== undefined)\n if (shouldPack === true) {\n let oneOf = {}\n token.choices.forEach(c => (oneOf[c.word] = true))\n token.oneOf = oneOf\n delete token.choices\n }\n }\n return token\n })\n}\n\nconst postProcess = function(tokens) {\n // ensure all capture groups are filled between start and end\n // give all capture groups names\n let count = tokens.filter(t => t.groupType).length\n if (count > 0) {\n tokens = fillGroups(tokens)\n }\n // convert 'choices' format to 'oneOf' format\n tokens = useOneOf(tokens)\n // console.log(tokens)\n\n return tokens\n}\nmodule.exports = postProcess\n","const parseToken = require('./parseToken')\nconst postProcess = require('./postProcess')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*(?:<\\S+>)?\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\n\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let [match, groups] = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n match = match.filter(m => m)\n matches.push({ match, groups })\n }\n\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let [match, groups] = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push({ match, groups })\n\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(({ match: ts }) => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(regs, justOne = false) {\n let matches = matchAll(this, regs, justOne)\n //make them phrase objects\n matches = matches.map(({ match, groups }) => {\n let p = this.buildFrom(match[0].id, match.length, groups)\n p.cache.terms = match\n return p\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(regs) {\n let matches = matchAll(this, regs, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(regs) {\n let matches = notMatch(this, regs)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n Object.defineProperty(this, 'groups', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length, groups) {\n let p = new Phrase(id, length, this.pool)\n //copy-over or replace capture-groups too\n if (groups && Object.keys(groups).length > 0) {\n p.groups = groups\n } else {\n p.groups = this.groups\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//add forward/backward 'linked-list' prev/next ids\nconst linkTerms = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\nmodule.exports = linkTerms\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of strings (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\nconst linkTerms = require('./_linkTerms')\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n linkTerms(terms)\n\n //return phrase objects\n let p = new Phrase(terms[0].id, terms.length, pool)\n p.cache.terms = terms\n return p\n })\n //return them ready for a Document object\n return phrases\n}\n\nmodule.exports = fromText\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\nconst linkTerms = require('./_linkTerms')\n\nconst fromJSON = function(json, world) {\n let pool = new Pool()\n let phrases = json.map((p, k) => {\n let terms = p.terms.map((o, i) => {\n let term = new Term(o.text)\n term.pre = o.pre !== undefined ? o.pre : ''\n if (o.post === undefined) {\n o.post = ' '\n //no given space for very last term\n if (i >= p.terms.length - 1) {\n o.post = '. '\n if (k >= p.terms.length - 1) {\n o.post = '.'\n }\n }\n }\n term.post = o.post !== undefined ? o.post : ' '\n\n if (o.tags) {\n o.tags.forEach(tag => term.tag(tag, '', world))\n }\n pool.add(term)\n return term\n })\n //add prev/next links\n linkTerms(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\nmodule.exports = fromJSON\n","module.exports = '13.1.0'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"Date\": \"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n NickName: {\n isA: 'Person',\n notA: ['FirstName', 'LastName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName', 'Value'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value', 'QuestionWord']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n // assigned from plugin, for example\n if (tags[k].color) {\n tags[k].color = tags[k].color\n return\n }\n // defined above\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n ache: {\n pst: 'ached',\n g: 'aching',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n g: 'coming',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n name: {\n g: 'naming',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n //shake\n reg: /(t|sh?)(ake)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ook',\n gr: '$1aking',\n ar: '$1$2r',\n },\n },\n {\n //awake\n reg: /w(ake)$/i,\n repl: {\n pr: 'w$1s',\n pa: 'woke',\n gr: 'waking',\n ar: 'w$1r',\n },\n },\n {\n //make\n reg: /m(ake)$/i,\n repl: {\n pr: 'm$1s',\n pa: 'made',\n gr: 'making',\n ar: 'm$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n // prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(inf = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(inf) === true) {\n found = Object.assign({}, world.irregulars.verbs[inf])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(inf), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(inf)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(inf)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(inf)\n }\n return found\n}\nmodule.exports = conjugate\n\n// console.log(conjugate('bake'))\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n //popping -> pop\n reg: /(..)(p|d|t|g){2}ing$/i,\n to: '$1$2',\n },\n {\n //fuzzing -> fuzz\n reg: /(ll|ss|zz)ing$/i,\n to: '$1',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n //eating, reading\n reg: /(ea[dklnrtv])ing$/i,\n to: '$1',\n },\n {\n //washing -> wash\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n //soft-e forms:\n {\n //z : hazing (not buzzing)\n reg: /(z)ing$/i,\n to: '$1e',\n },\n {\n //a : baking, undulating\n reg: /(a[gdkvtc])ing$/i,\n to: '$1e',\n },\n {\n //u : conjuring, tubing\n reg: /(u[rtcbn])ing$/i,\n to: '$1e',\n },\n {\n //o : forboding, poking, hoping, boring (not hooping)\n reg: /([^o]o[bdknprv])ing$/i,\n to: '$1e',\n },\n {\n //ling : tingling, wrinkling, circling, scrambling, bustling\n reg: /([tbckg]l)ing$/i, //dp\n to: '$1e',\n },\n {\n //cing : bouncing, denouncing\n reg: /(c)ing$/i, //dp\n to: '$1e',\n },\n\n // {\n // //soft-e :\n // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i,\n // to: '$1e',\n // },\n {\n //fallback\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n //owed, aced\n reg: /([aeiou][^aeiou])ed$/i,\n to: '$1e',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerms = function() {\n return this.match('^.')\n}\nexports.firstTerm = exports.firstTerms\n\n/** grab the last term for every match */\nexports.lastTerms = function() {\n return this.match('.$')\n}\nexports.lastTerm = exports.lastTerms\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n\n/* grab named capture group terms as object */\nconst getGroups = function(doc) {\n let res = {}\n const allGroups = {}\n for (let i = 0; i < doc.list.length; i++) {\n const phrase = doc.list[i]\n const groups = Object.keys(phrase.groups).map(k => phrase.groups[k])\n for (let j = 0; j < groups.length; j++) {\n const { group, start, length } = groups[j]\n\n if (!allGroups[group]) {\n allGroups[group] = []\n }\n allGroups[group].push(phrase.buildFrom(start, length))\n }\n }\n const keys = Object.keys(allGroups)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n res[key] = doc.buildFrom(allGroups[key])\n }\n return res\n}\n\nconst getOneName = function(doc, name) {\n const arr = []\n for (let i = 0; i < doc.list.length; i++) {\n const phrase = doc.list[i]\n let keys = Object.keys(phrase.groups)\n keys = keys.filter(id => phrase.groups[id].group === name)\n keys.forEach(id => {\n arr.push(phrase.buildFrom(phrase.groups[id].start, phrase.groups[id].length))\n })\n }\n return doc.buildFrom(arr)\n}\n\n/** grab named capture group results */\nexports.groups = function(target) {\n if (target === undefined) {\n return getGroups(this)\n }\n if (typeof target === 'number') {\n target = String(target)\n }\n return getOneName(this, target) || this.buildFrom([])\n}\nexports.group = exports.groups\n\n/** get the full-sentence each phrase belongs to */\nexports.sentences = function(n) {\n let arr = []\n this.list.forEach(p => {\n arr.push(p.fullSentence())\n })\n if (typeof n === 'number') {\n return this.buildFrom([arr[n]])\n }\n return this.buildFrom(arr)\n}\nexports.sentence = exports.sentences\n","// cache the easier conditions up-front\nconst cacheRequired = function(reg) {\n let needTags = []\n let needWords = []\n reg.forEach(obj => {\n if (obj.optional === true || obj.negative === true) {\n return\n }\n if (obj.tag !== undefined) {\n needTags.push(obj.tag)\n }\n if (obj.word !== undefined) {\n needWords.push(obj.word)\n }\n })\n return { tags: needTags, words: needWords }\n}\n\nconst failFast = function(doc, regs) {\n if (doc._cache && doc._cache.set === true) {\n let { words, tags } = cacheRequired(regs)\n //check required words\n for (let i = 0; i < words.length; i++) {\n if (doc._cache.words[words[i]] === undefined) {\n return false\n }\n }\n //check required tags\n for (let i = 0; i < tags.length; i++) {\n if (doc._cache.tags[tags[i]] === undefined) {\n return false\n }\n }\n }\n return true\n}\nmodule.exports = failFast\n","const parseSyntax = require('../match/syntax')\nconst checkCache = require('../match/checkCache')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg, name) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //check our cache, if it exists\n if (checkCache(this, regs) === false) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n\n if (name !== undefined && name !== null && name !== '') {\n return this.buildFrom(matches).groups(name)\n }\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0 || checkCache(this, regs) === false) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n //check our cache, if it exists\n if (checkCache(this, regs) === false) {\n return this.buildFrom([])\n }\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n //consult our cache, if it exists\n if (checkCache(this, regs) === false) {\n return this.buildFrom([])\n }\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n //consult our cache, if it exists\n if (checkCache(this, regs) === false) {\n return false\n }\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n // if its a doc, return one result\n if (res && res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n //remove nulls\n list = list.filter(x => x)\n // return an empty response\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","// const tokenize = require('../../01-tokenizer/02-words')\nconst tokenize = function(str) {\n return str.split(/[ -]/g)\n}\n// take a list of strings\n// look them up in the document\nconst buildTree = function(termList, values = []) {\n let root = {}\n // parse our input\n termList.forEach((str, i) => {\n let val = true\n if (values[i] !== undefined) {\n val = values[i]\n }\n // some rough normalization\n str = (str || '').toLowerCase()\n str = str.replace(/[,;.!?]+$/, '')\n let arr = tokenize(str).map(s => s.trim())\n root[arr[0]] = root[arr[0]] || {}\n if (arr.length === 1) {\n root[arr[0]].value = val\n } else {\n root[arr[0]].more = root[arr[0]].more || []\n root[arr[0]].more.push({\n rest: arr.slice(1),\n value: val,\n })\n }\n })\n // sort by longest-first?\n // console.log(JSON.stringify(root, null, 2))\n return root\n}\n\nconst fastLookup = function(termList, values, doc) {\n let root = buildTree(termList, values)\n let found = []\n // each phrase\n for (let i = 0; i < doc.list.length; i++) {\n const p = doc.list[i]\n let terms = p.terms()\n\n let words = terms.map(t => t.reduced)\n // each word\n for (let w = 0; w < words.length; w++) {\n if (root[words[w]] !== undefined) {\n // is it a multi-word match?\n if (root[words[w]].more !== undefined) {\n root[words[w]].more.forEach(more => {\n // is it too-long?\n if (words[w + more.rest.length] === undefined) {\n return\n }\n // compare each subsequent term\n let everyTerm = more.rest.every((word, r) => {\n return word === words[w + r + 1]\n })\n if (everyTerm === true) {\n found.push({ id: p.terms()[w].id, value: more.value, length: more.rest.length + 1 })\n }\n })\n }\n // is it a single-word match?\n if (root[words[w]].value !== undefined) {\n found.push({ id: p.terms()[w].id, value: root[words[w]].value, length: 1 })\n }\n }\n }\n }\n return found\n}\nmodule.exports = fastLookup\n","const lookup = require('./_lookup')\n\n// compare one term and one match\n// const doesMatch = function(term, str) {\n// if (str === '') {\n// return false\n// }\n// return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n// }\n\nconst isObject = function(obj) {\n return obj && Object.prototype.toString.call(obj) === '[object Object]'\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n let values = []\n //is it a {key:val} object?\n let isObj = isObject(arr)\n if (isObj === true) {\n arr = Object.keys(arr).map(k => {\n values.push(arr[k])\n return k\n })\n }\n // support .lookup('foo')\n if (typeof arr === 'string') {\n arr = [arr]\n }\n\n //make sure we go fast.\n if (this._cache.set !== true) {\n this.cache()\n }\n\n let found = lookup(arr, values, this)\n let p = this.list[0]\n // make object response\n if (isObj === true) {\n let byVal = {}\n found.forEach(o => {\n byVal[o.value] = byVal[o.value] || []\n byVal[o.value].push(p.buildFrom(o.id, o.length))\n })\n Object.keys(byVal).forEach(k => {\n byVal[k] = this.buildFrom(byVal[k])\n })\n return byVal\n }\n // otherwise, make array response:\n found = found.map(o => p.buildFrom(o.id, o.length))\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n let words = {}\n let tags = {}\n this._cache.words = words\n this._cache.tags = tags\n this._cache.set = true\n this.list.forEach((p, i) => {\n p.cache = p.cache || {}\n //p.terms get cached automatically\n let terms = p.terms()\n // cache all the terms\n terms.forEach(t => {\n if (words[t.reduced] && !words.hasOwnProperty(t.reduced)) {\n return //skip prototype words\n }\n words[t.reduced] = words[t.reduced] || []\n words[t.reduced].push(i)\n\n Object.keys(t.tags).forEach(tag => {\n tags[tag] = tags[tag] || []\n tags[tag].push(i)\n })\n\n // cache root-form on Term, too\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this._cache = {}\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc._cache = {}\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\nconst calcOffset = function(doc, result, options) {\n // calculate offsets for each term\n let offsets = termOffsets(doc.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n // let len = o.terms.reduce((n, t, i) => {\n // n += t.offset.length || 0\n // //add whitespace, too\n // console.log(t.post)\n // return n\n // }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = o.text.length\n })\n }\n}\nmodule.exports = calcOffset\n","const offsets = require('./_offset')\nconst jsonDefaults = { text: true, terms: true, trim: true }\n\n//some options have dependents\nconst setOptions = function(options) {\n options = Object.assign({}, jsonDefaults, options)\n\n if (options.unique) {\n options.reduced = true\n }\n //offset calculation requires these options to be on\n if (options.offset) {\n options.text = true\n if (!options.terms || options.terms === true) {\n options.terms = {}\n }\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n return options\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n\n options = setOptions(options)\n\n // cache root strings beforehand, if necessary\n if (options.root === true) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n offsets(this, result, options)\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n let tagset = doc.world.tags\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags, world) {\n tags = tags.map(tag => {\n if (!world.tags.hasOwnProperty(tag)) {\n return tag\n }\n const c = world.tags[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags, doc.world)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n main.cache = {}\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n p.cache = {}\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n require('./07-cache'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\nmodule.exports = methods\n","const underOver = /^(under|over)-?/\n\n/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n continue\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n continue\n }\n // prefix strip: try to match 'take' for 'undertake'\n if (underOver.test(str) === true) {\n let noPrefix = str.replace(underOver, '')\n if (lex.hasOwnProperty(noPrefix) === true) {\n terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world)\n }\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n // support 'head-over'\n // if (term.hasHyphen() === true) {\n // console.log(term.tags)\n // }\n // console.log(term.hasHyphen(), term.text)\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n // if (term.tags.Noun === true && isAcronym(term, world)) {\n // term.tag('Acronym', 'acronym-step', world)\n // term.tag('Noun', 'acronym-infer', world)\n // } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n // term.tag('Acronym', 'one-letter-acronym', world)\n // term.tag('Noun', 'one-letter-infer', world)\n // }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^woo+a*?h?$/, 'Expression'], //whoaa, wooo\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n // [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'prefix #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou][ns]?c?ked$/, Past], //hooked, masked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [\n [/.[gl]ial$/, Adj],\n [/.[^aeiou]ful$/, Adj],\n [/.[nrtumcd]al$/, Adj],\n [/.[^aeiou][ei]al$/, Adj],\n ],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [\n [/.[di]est$/, 'Superlative'],\n [/.[icldtgrv]ent$/, Adj],\n [/[aeiou].*ist$/, Adj],\n [/^[a-z]et$/, Verb],\n ],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/.[aeiou]sks$/, Pres], //masks\n [/.[aeiou]kes$/, Pres], //bakes\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Adj,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //dont double-up on ending periods\n raw = raw.replace(/[.!?,]$/, '')\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const oneLetterAcronym = /^[A-Z]('s|,)?$/\nconst periodSeperated = /([A-Z]\\.){2}[A-Z]?/i\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // known-words, like 'PIZZA' is not an acronym.\n if (world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n// F.B.I., NBC, - but not 'NO COLLUSION'\nconst checkAcronym = function(terms, world) {\n terms.forEach(term => {\n //these are not acronyms\n if (term.tags.RomanNumeral === true) {\n return\n }\n //period-ones F.D.B.\n if (periodSeperated.test(term.text) === true) {\n term.tag('Acronym', 'period-acronym', world)\n }\n //non-period ones are harder\n if (term.isUpperCase() && isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n //if it's a organization,\n if (term.tags.Organization && term.text.length <= 3) {\n term.tag('Acronym', 'acronym-org', world)\n }\n if (term.tags.Organization && term.isUpperCase() && term.text.length <= 6) {\n term.tag('Acronym', 'acronym-org-case', world)\n }\n })\n}\nmodule.exports = checkAcronym\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n acronyms: require('./06-acronyms'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //turn 'FBD' into an acronym\n step.acronyms(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const contraction = /^(l|c|d|j|m|n|qu|s|t)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z\\u00C0-\\u00FF]+)$/i\n// basic support for ungendered french contractions\n// not perfect, but better than nothing, to support matching on french text.\n\nconst french = {\n l: 'le', // l'amour\n c: 'ce', // c'est\n d: 'de', // d'amerique\n j: 'je', // j'aime\n m: 'me', // m'appelle\n n: 'ne', // n'est\n qu: 'que', // qu'il\n s: 'se', // s'appelle\n t: 'tu', // t'aime\n}\n\nconst checkFrench = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null || french.hasOwnProperty(parts[1]) === false) {\n return null\n }\n let arr = [french[parts[1]], parts[2]]\n if (arr[0] && arr[1]) {\n return arr\n }\n return null\n}\nmodule.exports = checkFrench\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst checkFrench = require('./07-french')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n found = found || checkFrench(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n // keep tag NumberRange, if we had it\n if (p.has('#NumberRange') === true) {\n doc.buildFrom([newPhrase]).tag('NumberRange')\n }\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","const hasWord = function(doc, word) {\n let arr = doc._cache.words[word] || []\n arr = arr.map(i => doc.list[i])\n return doc.buildFrom(arr)\n}\nconst hasTag = function(doc, tag) {\n let arr = doc._cache.tags[tag] || []\n arr = arr.map(i => doc.list[i])\n return doc.buildFrom(arr)\n}\n\n//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //exactly like\n let m = hasWord(doc, 'like')\n m.match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n\n //the orange.\n m = hasTag(doc, 'Adjective')\n m.match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n\n // Firstname x (dangerous)\n m = hasTag(doc, 'FirstName')\n m.match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#Pronoun')\n .lastTerm()\n .tag('#LastName', 'firstname-noun')\n\n //three trains / one train\n m = hasTag(doc, 'Value')\n m = m.match('#Value #PresentTense')\n if (m.found) {\n if (m.has('(one|1)') === true) {\n m.terms(1).tag('Singular', 'one-presentTense')\n } else {\n m.terms(1).tag('Plural', 'value-presentTense')\n }\n }\n\n // well i've been...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n //been walking\n m = hasTag(doc, 'Gerund')\n m.match(`(be|been) (#Adverb|not)+? #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n doc\n .match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n\n //possessives\n //'her match' vs 'let her match'\n m = hasTag(doc, 'Possessive')\n m = m.match('#Possessive [#Infinitive]', 0)\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","const unique = function(arr) {\n let obj = {}\n for (let i = 0; i < arr.length; i++) {\n obj[arr[i]] = true\n }\n return Object.keys(obj)\n}\nmodule.exports = unique\n","// order matters\nconst list = [\n // ==== Mutliple tags ====\n { match: 'too much', tag: 'Adverb Adjective', reason: 'bit-4' },\n // u r cool\n { match: 'u r', tag: 'Pronoun Copula', reason: 'u r' },\n //sometimes adverbs - 'pretty good','well above'\n {\n match: '#Copula (pretty|dead|full|well) (#Adjective|#Noun)',\n tag: '#Copula #Adverb #Adjective',\n reason: 'sometimes-adverb',\n },\n\n //walking is cool\n { match: '[#Gerund] #Adverb? not? #Copula', group: 0, tag: 'Activity', reason: 'gerund-copula' },\n //walking should be fun\n { match: '[#Gerund] #Modal', group: 0, tag: 'Activity', reason: 'gerund-modal' },\n\n //swear-words as non-expression POS\n { match: 'holy (shit|fuck|hell)', tag: 'Expression', reason: 'swears-expression' },\n //Aircraft designer\n { match: '#Noun #Actor', tag: 'Actor', reason: 'thing-doer' },\n { match: '#Conjunction [u]', group: 0, tag: 'Pronoun', reason: 'u-pronoun-2' },\n //'u' as pronoun\n { match: '[u] #Verb', group: 0, tag: 'Pronoun', reason: 'u-pronoun-1' },\n\n // ==== Determiners ====\n { match: '#Noun [(who|whom)]', group: 0, tag: 'Determiner', reason: 'captain-who' },\n //that car goes\n { match: 'that #Noun [#Verb]', group: 0, tag: 'Determiner', reason: 'that-determiner' },\n { match: 'a bit much', tag: 'Determiner Adverb Adjective', reason: 'bit-3' },\n\n // ==== Propositions ====\n //all students\n { match: '#Verb #Adverb? #Noun [(that|which)]', group: 0, tag: 'Preposition', reason: 'that-prep' },\n //work, which has been done.\n { match: '@hasComma [which] (#Pronoun|#Verb)', group: 0, tag: 'Preposition', reason: 'which-copula' },\n { match: 'just [like]', group: 0, tag: 'Preposition', reason: 'like-preposition' },\n //folks like her\n { match: '#Noun [like] #Noun', group: 0, tag: 'Preposition', reason: 'noun-like' },\n //fix for busted-up phrasalVerbs\n { match: '#Noun [#Particle]', group: 0, tag: 'Preposition', reason: 'repair-noPhrasal' },\n\n // ==== Conditions ====\n // had he survived,\n { match: '[had] #Noun+ #PastTense', group: 0, tag: 'Condition', reason: 'had-he' },\n // were he to survive\n { match: '[were] #Noun+ to #Infinitive', group: 0, tag: 'Condition', reason: 'were-he' },\n\n // ==== Questions ====\n //the word 'how'\n { match: '^how', tag: 'QuestionWord', reason: 'how-question' },\n { match: '[how] (#Determiner|#Copula|#Modal|#PastTense)', group: 0, tag: 'QuestionWord', reason: 'how-is' },\n // //the word 'which'\n { match: '^which', tag: 'QuestionWord', reason: 'which-question' },\n { match: '[which] . (#Noun)+ #Pronoun', group: 0, tag: 'QuestionWord', reason: 'which-question2' },\n { match: 'which', tag: 'QuestionWord', reason: 'which-question3' },\n\n // ==== Conjunctions ====\n { match: '[so] #Noun', group: 0, tag: 'Conjunction', reason: 'so-conj' },\n //how he is driving\n {\n match: '[(who|what|where|why|how|when)] #Noun #Copula #Adverb? (#Verb|#Adjective)',\n group: 0,\n tag: 'Conjunction',\n reason: 'how-he-is-x',\n },\n {\n match: '[(who|what|where|why|how|when)] #Noun #Adverb? #Infinitive not? #Gerund',\n group: 0,\n tag: 'Conjunction',\n reason: 'when i go fishing',\n },\n]\n\nmodule.exports = list\n","//Dates: 'june' or 'may'\nconst dates = '(april|june|may|jan|august|eve)'\n\nlet list = [\n // ==== Holiday ====\n { match: '#Holiday (day|eve)', tag: 'Holiday', reason: 'holiday-day' }, // the captain who\n\n // ==== WeekDay ====\n // sun the 5th\n { match: '[sun] the #Ordinal', tag: 'WeekDay', reason: 'sun-the-5th' },\n //sun feb 2\n { match: '[sun] #Date', group: 0, tag: 'WeekDay', reason: 'sun-feb' },\n //1pm next sun\n { match: '#Date (on|this|next|last|during)? [sun]', group: 0, tag: 'WeekDay', reason: '1pm-sun' },\n //this sat\n { match: `(in|by|before|during|on|until|after|of|within|all) [sat]`, group: 0, tag: 'WeekDay', reason: 'sat' },\n //sat november\n { match: '[sat] #Date', group: 0, tag: 'WeekDay', reason: 'sat-feb' },\n\n // ==== Month ====\n //all march\n { match: `#Preposition [(march|may)]`, group: 0, tag: 'Month', reason: 'in-month' },\n //this march\n { match: `this [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n { match: `next [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n { match: `last [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n // march 5th\n { match: `[(march|may)] the? #Value`, group: 0, tag: 'Month', reason: 'march-5th' },\n // 5th of march\n { match: `#Value of? [(march|may)]`, group: 0, tag: 'Month', reason: '5th-of-march' },\n // march and feb\n { match: `[(march|may)] .? #Date`, group: 0, tag: 'Month', reason: 'march-and-feb' },\n // feb to march\n { match: `#Date .? [(march|may)]`, group: 0, tag: 'Month', reason: 'feb-and-march' },\n //quickly march\n { match: `#Adverb [(march|may)]`, group: 0, tag: 'Infinitive', reason: 'quickly-march' },\n //march quickly\n { match: `(march|may) [#Adverb]`, group: 0, tag: 'Infinitive', reason: 'march-quickly' },\n\n //5th of March\n { match: '#Value of #Month', tag: 'Date', reason: 'value-of-month' },\n //5 March\n { match: '#Cardinal #Month', tag: 'Date', reason: 'cardinal-month' },\n //march 5 to 7\n { match: '#Month #Value to #Value', tag: 'Date', reason: 'value-to-value' },\n //march the 12th\n { match: '#Month the #Value', tag: 'Date', reason: 'month-the-value' },\n //june 7\n { match: '(#WeekDay|#Month) #Value', tag: 'Date', reason: 'date-value' },\n //7 june\n { match: '#Value (#WeekDay|#Month)', tag: 'Date', reason: 'value-date' },\n //may twenty five\n { match: '(#TextValue && #Date) #TextValue', tag: 'Date', reason: 'textvalue-date' },\n\n // in june\n { match: `in [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `during [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `on [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `by [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `before [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `#Date [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n // june 1992\n { match: `${dates} #Value`, tag: 'Date', reason: 'june-5th' },\n { match: `${dates} #Date`, tag: 'Date', reason: 'june-5th' },\n // June Smith\n { match: `${dates} #ProperNoun`, tag: 'Person', reason: 'june-smith', safe: true },\n // june m. Cooper\n { match: `${dates} #Acronym? (#ProperNoun && !#Month)`, tag: 'Person', reason: 'june-smith-jr' },\n]\n\nmodule.exports = list\n","module.exports = [\n // ==== Plural ====\n //there are reasons\n { match: 'there (are|were) #Adjective? [#PresentTense]', group: 0, tag: 'Plural', reason: 'there-are' },\n\n // ==== Singular ====\n //the sun\n { match: '#Determiner [sun]', group: 0, tag: 'Singular', reason: 'the-sun' },\n //did a 900, paid a 20\n { match: '#Verb (a|an) [#Value]', group: 0, tag: 'Singular', reason: 'did-a-value' },\n //'the can'\n { match: '#Determiner [(can|will|may)]', group: 0, tag: 'Singular', reason: 'the can' },\n // ==== Possessive ====\n //spencer kelly's\n { match: '#FirstName #Acronym? (#Possessive && #LastName)', tag: 'Possessive', reason: 'name-poss' },\n //Super Corp's fundraiser\n { match: '#Organization+ #Possessive', tag: 'Possessive', reason: 'org-possessive' },\n //Los Angeles's fundraiser\n { match: '#Place+ #Possessive', tag: 'Possessive', reason: 'place-possessive' },\n\n //big dreams, critical thinking\n { match: '#Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'adj-presentTense' },\n //his fine\n { match: '(his|her|its) [#Adjective]', group: 0, tag: 'Noun', reason: 'his-fine' },\n //some pressing issues\n { match: 'some [#Verb] #Plural', group: 0, tag: 'Noun', reason: 'determiner6' },\n //'more' is not always an adverb\n { match: 'more #Noun', tag: 'Noun', reason: 'more-noun' },\n { match: '(#Noun && @hasComma) #Noun (and|or) [#PresentTense]', group: 0, tag: 'Noun', reason: 'noun-list' }, //3 feet\n { match: '(right|rights) of .', tag: 'Noun', reason: 'right-of' }, // a bit\n { match: 'a [bit]', group: 0, tag: 'Noun', reason: 'bit-2' },\n\n //running-a-show\n { match: '#Gerund #Determiner [#Infinitive]', group: 0, tag: 'Noun', reason: 'running-a-show' },\n //the nice swim\n { match: '(the|this|those|these) #Adjective [#Verb]', group: 0, tag: 'Noun', reason: 'the-adj-verb' },\n // the truly nice swim\n { match: '(the|this|those|these) #Adverb #Adjective [#Verb]', group: 0, tag: 'Noun', reason: 'determiner4' },\n //the orange is\n { match: '#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)', group: 0, tag: 'Noun', reason: 'the-adj-2' },\n // a stream runs\n { match: '(the|this|a|an) [#Infinitive] #Adverb? #Verb', group: 0, tag: 'Noun', reason: 'determiner5' },\n //the test string\n { match: '#Determiner [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'determiner7' },\n //by a bear.\n { match: '#Determiner #Adjective [#Infinitive]$', group: 0, tag: 'Noun', reason: 'a-inf' },\n //the wait to vote\n { match: '(the|this) [#Verb] #Preposition .', group: 0, tag: 'Noun', reason: 'determiner1' },\n //a sense of\n { match: '#Determiner [#Verb] of', group: 0, tag: 'Noun', reason: 'the-verb-of' },\n //the threat of force\n { match: '#Determiner #Noun of [#Verb]', group: 0, tag: 'Noun', reason: 'noun-of-noun' },\n //the western line\n {\n match: '#Determiner [(western|eastern|northern|southern|central)] #Noun',\n group: 0,\n tag: 'Noun',\n reason: 'western-line',\n },\n\n //her polling\n { match: '#Possessive [#Gerund]', group: 0, tag: 'Noun', reason: 'her-polling' },\n //her fines\n { match: '(his|her|its) [#PresentTense]', group: 0, tag: 'Noun', reason: 'its-polling' },\n\n //linear algebra\n {\n match: '(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun',\n group: 0,\n tag: 'Noun',\n reason: 'technical-noun',\n },\n // walk the walk\n { match: '(the|those|these) #Adjective? [#Infinitive]', group: 0, tag: 'Noun', reason: 'det-inf' },\n { match: '(the|those|these) #Adjective? [#PresentTense]', group: 0, tag: 'Noun', reason: 'det-pres' },\n { match: '(the|those|these) #Adjective? [#PastTense]', group: 0, tag: 'Noun', reason: 'det-past' },\n\n //air-flow\n { match: '(#Noun && @hasHyphen) #Verb', tag: 'Noun', reason: 'hyphen-verb' },\n //is no walk\n { match: 'is no [#Verb]', group: 0, tag: 'Noun', reason: 'is-no-verb' },\n //different views than\n { match: '[#Verb] than', group: 0, tag: 'Noun', reason: 'correction' },\n // goes to sleep\n { match: '(go|goes|went) to [#Infinitive]', group: 0, tag: 'Noun', reason: 'goes-to-verb' },\n //a great run\n { match: '(a|an) #Adjective [(#Infinitive|#PresentTense)]', tag: 'Noun', reason: 'a|an2' },\n //a tv show\n { match: '(a|an) #Noun [#Infinitive]', group: 0, tag: 'Noun', reason: 'a-noun-inf' },\n //do so\n { match: 'do [so]', group: 0, tag: 'Noun', reason: 'so-noun' },\n //is mark hughes\n { match: '#Copula [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'is-pres-noun' },\n //\n { match: '[#Infinitive] #Copula', group: 0, tag: 'Noun', reason: 'inf-copula' },\n //a close\n { match: '#Determiner #Adverb? [close]', group: 0, tag: 'Adjective', reason: 'a-close' },\n // what the hell\n { match: '#Determiner [(shit|damn|hell)]', group: 0, tag: 'Noun', reason: 'swears-noun' },\n]\n","const adjectives = '(misty|rusty|dusty|rich|randy)'\nlet list = [\n // all fell apart\n { match: '[all] #Determiner? #Noun', group: 0, tag: 'Adjective', reason: 'all-noun' },\n // very rusty\n { match: `#Adverb [${adjectives}]`, group: 0, tag: 'Adjective', reason: 'really-rich' },\n // rusty smith\n { match: `${adjectives} #Person`, tag: 'Person', reason: 'randy-smith' },\n // rusty a. smith\n { match: `${adjectives} #Acronym? #ProperNoun`, tag: 'Person', reason: 'rusty-smith' },\n //sometimes not-adverbs\n { match: '#Copula [(just|alone)]$', group: 0, tag: 'Adjective', reason: 'not-adverb' },\n //jack is guarded\n { match: '#Singular is #Adverb? [#PastTense$]', group: 0, tag: 'Adjective', reason: 'is-filled' },\n // smoked poutine is\n { match: '[#PastTense] #Singular is', group: 0, tag: 'Adjective', reason: 'smoked-poutine' },\n // baked onions are\n { match: '[#PastTense] #Plural are', group: 0, tag: 'Adjective', reason: 'baked-onions' },\n //a staggering cost\n { match: '(a|an) [#Gerund]', group: 0, tag: 'Adjective', reason: 'a|an' },\n // is f*ed up\n { match: '#Copula [fucked up?]', tag: 'Adjective', reason: 'swears-adjective' },\n //jack seems guarded\n { match: '#Singular (seems|appears) #Adverb? [#PastTense$]', group: 0, tag: 'Adjective', reason: 'seems-filled' },\n]\n\nmodule.exports = list\n","module.exports = [\n //still good\n { match: '[still] #Adjective', group: 0, tag: 'Adverb', reason: 'still-advb' },\n //still make\n { match: '[still] #Verb', group: 0, tag: 'Adverb', reason: 'still-verb' },\n // so hot\n { match: '[so] #Adjective', group: 0, tag: 'Adverb', reason: 'so-adv' },\n // all singing\n { match: '[all] #Verb', group: 0, tag: 'Adverb', reason: 'all-verb' },\n // sing like an angel\n { match: '#Verb [like]', group: 0, tag: 'Adverb', reason: 'verb-like' },\n //barely even walk\n { match: '(barely|hardly) even', tag: 'Adverb', reason: 'barely-even' },\n //cheering hard - dropped -ly's\n { match: '#PresentTense [(hard|quick|long|bright|slow)]', group: 0, tag: 'Adverb', reason: 'lazy-ly' },\n // much appreciated\n { match: '[much] #Adjective', group: 0, tag: 'Adverb', reason: 'bit-1' },\n]\n","module.exports = [\n // ==== PhoneNumber ====\n //1 800 ...\n { match: '1 #Value #PhoneNumber', tag: 'PhoneNumber', reason: '1-800-Value' },\n //(454) 232-9873\n { match: '#NumericValue #PhoneNumber', tag: 'PhoneNumber', reason: '(800) PhoneNumber' },\n\n // ==== Currency ====\n { match: '#Demonym #Currency', tag: 'Currency', reason: 'demonym-currency' },\n // ==== Ordinal ====\n { match: '[second] #Noun', group: 0, tag: 'Ordinal', reason: 'second-noun' },\n // ==== Money ====\n { match: '#Value+ #Currency', tag: 'Money', reason: '15 usd' },\n // ==== Unit ====\n //5 yan\n { match: '#Value+ [#Currency]', group: 0, tag: 'Unit', reason: '5-yan' },\n { match: '#Value [(foot|feet)]', group: 0, tag: 'Unit', reason: 'foot-unit' },\n\n //minus 7\n { match: '(minus|negative) #Value', tag: 'Value', reason: 'minus-value' },\n //5 kg.\n { match: '#Value #Abbreviation', tag: 'Value', reason: 'value-abbr' },\n //seven point five\n { match: '#Value (point|decimal) #Value', tag: 'Value', reason: 'value-point-value' },\n // ten grand\n { match: '#Value grand', tag: 'Value', reason: 'value-grand' },\n //quarter million\n { match: '#Determiner [(half|quarter)] #Ordinal', group: 0, tag: 'Value', reason: 'half-ordinal' },\n { match: 'a #Value', tag: 'Value', reason: 'a-value' },\n\n // thousand and two\n {\n match: `(hundred|thousand|million|billion|trillion|quadrillion)+ and #Value`,\n tag: 'Value',\n reason: 'magnitude-and-value',\n },\n //'a/an' can mean 1 - \"a hour\"\n {\n match: '[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)',\n group: 0,\n tag: 'Value',\n reason: 'a-is-one',\n },\n]\n","const verbs = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\n\nlet list = [\n // ==== Tense ====\n //he left\n { match: '#Noun #Adverb? [left]', group: 0, tag: 'PastTense', reason: 'left-verb' },\n //this rocks\n { match: '(this|that) [#Plural]', group: 0, tag: 'PresentTense', reason: 'this-verbs' },\n\n // ==== Auxiliary ====\n //was walking\n { match: `[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)`, group: 0, tag: 'Auxiliary', reason: 'copula-walking' },\n //support a splattering of auxillaries before a verb\n { match: `[(has|had) (#Adverb|not)+?] #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-walked' },\n //would walk\n { match: `[(#Modal|did) (#Adverb|not)+?] #Verb`, group: 0, tag: 'Auxiliary', reason: 'modal-verb' },\n //would have had\n {\n match: `[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'would-have',\n },\n //would be walking\n { match: `#Modal (#Adverb|not)+? be (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-be' },\n //had been walking\n {\n match: `(#Modal|had|has) (#Adverb|not)+? been (#Adverb|not)+? #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'had-been',\n },\n //was walking\n { match: `[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)`, group: 0, tag: 'Auxiliary', reason: 'copula-walking' },\n //support a splattering of auxillaries before a verb\n { match: `[(has|had) (#Adverb|not)+?] #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-walked' },\n //would walk\n { match: `[(#Modal|did) (#Adverb|not)+?] #Verb`, group: 0, tag: 'Auxiliary', reason: 'modal-verb' },\n // will walk\n { match: '[(do|does|will|have|had)] (not|#Adverb)? #Verb', group: 0, tag: 'Auxiliary', reason: 'have-had' },\n // about to go\n { match: '[about to] #Adverb? #Verb', group: 0, tag: ['Auxiliary', 'Verb'], reason: 'about-to' },\n //would be walking\n { match: `#Modal (#Adverb|not)+? be (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-be' },\n //would have had\n {\n match: `[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'would-have',\n },\n //had been walking\n {\n match: `(#Modal|had|has) (#Adverb|not)+? been (#Adverb|not)+? #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'had-been',\n },\n\n // ==== Phrasal ====\n //'foo-up'\n { match: '(#Verb && @hasHyphen) up', group: 0, tag: 'PhrasalVerb', reason: 'foo-up' },\n { match: '(#Verb && @hasHyphen) off', group: 0, tag: 'PhrasalVerb', reason: 'foo-off' },\n { match: '(#Verb && @hasHyphen) over', group: 0, tag: 'PhrasalVerb', reason: 'foo-over' },\n { match: '(#Verb && @hasHyphen) out', group: 0, tag: 'PhrasalVerb', reason: 'foo-out' },\n //fall over\n { match: '#PhrasalVerb [#PhrasalVerb]', group: 0, tag: 'Particle', reason: 'phrasal-particle' },\n\n // ==== Copula ====\n //will be running (not copula)\n { match: '[will #Adverb? not? #Adverb? be] #Gerund', group: 0, tag: 'Copula', reason: 'will-be-copula' },\n //for more complex forms, just tag 'be'\n { match: 'will #Adverb? not? #Adverb? [be] #Adjective', group: 0, tag: 'Copula', reason: 'be-copula' },\n\n // ==== Infinitive ====\n //march to\n { match: '[march] (up|down|back|to|toward)', group: 0, tag: 'Infinitive', reason: 'march-to' },\n //must march\n { match: '#Modal [march]', group: 0, tag: 'Infinitive', reason: 'must-march' },\n //let him glue\n {\n match: '(let|make|made) (him|her|it|#Person|#Place|#Organization)+ [#Singular] (a|an|the|it)',\n group: 0,\n tag: 'Infinitive',\n reason: 'let-him-glue',\n },\n\n //he quickly foo\n { match: '#Noun #Adverb [#Noun]', group: 0, tag: 'Verb', reason: 'quickly-foo' },\n //will secure our\n { match: 'will [#Adjective]', group: 0, tag: 'Verb', reason: 'will-adj' },\n //he disguised the thing\n { match: '#Pronoun [#Adjective] #Determiner #Adjective? #Noun', group: 0, tag: 'Verb', reason: 'he-adj-the' },\n\n //is eager to go\n { match: '#Copula [#Adjective to] #Verb', group: 0, tag: 'Verb', reason: 'adj-to' },\n\n // would wade\n { match: `#Modal [${verbs}]`, group: 0, tag: 'Verb', reason: 'would-mark' },\n { match: `#Adverb [${verbs}]`, group: 0, tag: 'Verb', reason: 'really-mark' },\n // wade smith\n { match: `${verbs} #Person`, tag: 'Person', reason: 'rob-smith' },\n // wade m. Cooper\n { match: `${verbs} #Acronym? #ProperNoun`, tag: 'Person', reason: 'rob-a-smith' },\n\n // damn them\n { match: '[shit] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear1-verb' },\n { match: '[damn] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear2-verb' },\n { match: '[fuck] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear3-verb' },\n]\n\nmodule.exports = list\n","const places = '(paris|alexandria|houston|kobe|salvador|sydney)'\nlet list = [\n // ==== Region ====\n //West Norforlk\n {\n match: '(west|north|south|east|western|northern|southern|eastern)+ #Place',\n\n tag: 'Region',\n reason: 'west-norfolk',\n },\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n {\n match: '#City [(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)]',\n group: 0,\n tag: 'Region',\n reason: 'us-state',\n },\n //Foo District\n {\n match: '#ProperNoun+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)',\n tag: 'Region',\n reason: 'foo-district',\n },\n //District of Foo\n {\n match: '(district|region|province|municipality|territory|burough|state) of #ProperNoun',\n tag: 'Region',\n reason: 'district-of-Foo',\n },\n\n // ==== Address ====\n {\n match: '#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)',\n tag: 'Address',\n reason: 'address-st',\n },\n\n // in houston\n { match: `in [${places}]`, group: 0, tag: 'Place', reason: 'in-paris' },\n { match: `near [${places}]`, group: 0, tag: 'Place', reason: 'near-paris' },\n { match: `at [${places}]`, group: 0, tag: 'Place', reason: 'at-paris' },\n { match: `from [${places}]`, group: 0, tag: 'Place', reason: 'from-paris' },\n { match: `to [${places}]`, group: 0, tag: 'Place', reason: 'to-paris' },\n { match: `#Place [${places}]`, group: 0, tag: 'Place', reason: 'tokyo-paris' },\n // houston texas\n { match: `[${places}] #Place`, group: 0, tag: 'Place', reason: 'paris-france' },\n]\nmodule.exports = list\n","module.exports = [\n //John & Joe's\n { match: '#Noun (&|n) #Noun', tag: 'Organization', reason: 'Noun-&-Noun' },\n // teachers union of Ontario\n { match: '#Organization of the? #ProperNoun', tag: 'Organization', reason: 'org-of-place', safe: true },\n //walmart USA\n { match: '#Organization #Country', tag: 'Organization', reason: 'org-country' },\n //organization\n { match: '#ProperNoun #Organization', tag: 'Organization', reason: 'titlecase-org' },\n //FitBit Inc\n { match: '#ProperNoun (ltd|co|inc|dept|assn|bros)', tag: 'Organization', reason: 'org-abbrv' },\n // the OCED\n { match: 'the [#Acronym]', group: 0, tag: 'Organization', reason: 'the-acronym', safe: true },\n // global trade union\n {\n match: '(world|global|international|national|#Demonym) #Organization',\n\n tag: 'Organization',\n reason: 'global-org',\n },\n // schools\n { match: '#Noun+ (public|private) school', tag: 'School', reason: 'noun-public-school' },\n]\n","const nouns =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\n\nconst months = '(january|april|may|june|jan|sep)' //summer|autumn\n\nlet list = [\n // ==== Honorific ====\n { match: '[(1st|2nd|first|second)] #Honorific', group: 0, tag: 'Honorific', reason: 'ordinal-honorific' },\n {\n match: '[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person',\n group: 0,\n tag: 'Honorific',\n reason: 'ambg-honorifics',\n },\n\n // ==== FirstNames ====\n //is foo Smith\n { match: '#Copula [(#Noun|#PresentTense)] #LastName', group: 0, tag: 'FirstName', reason: 'copula-noun-lastname' },\n //pope francis\n { match: '(lady|queen|sister) #ProperNoun', tag: 'FemaleName', reason: 'lady-titlecase', safe: true },\n { match: '(king|pope|father) #ProperNoun', tag: 'MaleName', reason: 'pope-titlecase', safe: true },\n //ambiguous-but-common firstnames\n {\n match: '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName',\n group: 0,\n tag: 'FirstName',\n reason: 'maybe-lastname',\n },\n\n // ==== Nickname ====\n // Dwayne 'the rock' Johnson\n { match: '#FirstName [#Determiner #Noun] #LastName', group: 0, tag: 'NickName', reason: 'first-noun-last' },\n\n //my buddy\n { match: '#Possessive [#FirstName]', group: 0, tag: 'Person', reason: 'possessive-name' },\n { match: '#Acronym #ProperNoun', tag: 'Person', reason: 'acronym-titlecase', safe: true }, //ludwig van beethovan\n { match: '#Person (jr|sr|md)', tag: 'Person', reason: 'person-honorific' }, //peter II\n { match: '#Person #Person the? #RomanNumeral', tag: 'Person', reason: 'roman-numeral' }, //'Professor Fink', 'General McCarthy'\n { match: '#FirstName [/^[^aiurck]$/]', group: 0, tag: ['Acronym', 'Person'], reason: 'john-e' }, //Doctor john smith jr\n //general pearson\n { match: '#Honorific #Person', tag: 'Person', reason: 'honorific-person' },\n //remove single 'mr'\n { match: '#Honorific #Acronym', tag: 'Person', reason: 'Honorific-TitleCase' },\n //j.k Rowling\n { match: '#Noun van der? #Noun', tag: 'Person', reason: 'von der noun', safe: true },\n //king of spain\n { match: '(king|queen|prince|saint|lady) of? #Noun', tag: 'Person', reason: 'king-of-noun', safe: true },\n //Foo U Ford\n { match: '[#ProperNoun] #Person', group: 0, tag: 'Person', reason: 'proper-person', safe: true },\n // al sharpton\n { match: 'al (#Person|#ProperNoun)', tag: 'Person', reason: 'al-borlen', safe: true },\n //ferdinand de almar\n { match: '#FirstName de #Noun', tag: 'Person', reason: 'bill-de-noun' },\n //Osama bin Laden\n { match: '#FirstName (bin|al) #Noun', tag: 'Person', reason: 'bill-al-noun' },\n //John L. Foo\n { match: '#FirstName #Acronym #ProperNoun', tag: 'Person', reason: 'bill-acronym-title' },\n //Andrew Lloyd Webber\n { match: '#FirstName #FirstName #ProperNoun', tag: 'Person', reason: 'bill-firstname-title' },\n //Mr Foo\n { match: '#Honorific #FirstName? #ProperNoun', tag: 'Person', reason: 'dr-john-Title' },\n //peter the great\n { match: '#FirstName the #Adjective', tag: 'Person', reason: 'name-the-great' },\n //very common-but-ambiguous lastnames\n {\n match: '#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)',\n\n tag: 'Person',\n reason: 'bill-green',\n },\n // faith smith\n { match: `${nouns} #Person`, tag: 'Person', reason: 'ray-smith', safe: true },\n // faith m. Smith\n { match: `${nouns} #Acronym? #ProperNoun`, tag: 'Person', reason: 'ray-a-smith', safe: true },\n //give to april\n {\n match: `#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${months}]`,\n group: 0,\n tag: 'Person',\n reason: 'ambig-person',\n },\n // remind june\n { match: `#Infinitive [${months}]`, group: 0, tag: 'Person', reason: 'infinitive-person' },\n // may waits for\n { match: `[${months}] #PresentTense for`, group: 0, tag: 'Person', reason: 'ambig-active-for' },\n // may waits for\n { match: `[${months}] #PresentTense to`, group: 0, tag: 'Person', reason: 'ambig-active-to' },\n // april will\n { match: `[${months}] #Modal`, group: 0, tag: 'Person', reason: 'ambig-modal' },\n // would april\n { match: `#Modal [${months}]`, group: 0, tag: 'Person', reason: 'modal-ambig' },\n // it is may\n { match: `#Copula [${months}]`, group: 0, tag: 'Person', reason: 'is-may' },\n // may is\n { match: `[${months}] #Copula`, group: 0, tag: 'Person', reason: 'may-is' },\n // with april\n { match: `that [${months}]`, group: 0, tag: 'Person', reason: 'that-month' },\n // with april\n { match: `with [${months}]`, group: 0, tag: 'Person', reason: 'with-month' },\n // for april\n { match: `for [${months}]`, group: 0, tag: 'Person', reason: 'for-month' },\n // this april\n { match: `this [${months}]`, group: 0, tag: 'Month', reason: 'this-may' }, //maybe not 'this'\n // next april\n { match: `next [${months}]`, group: 0, tag: 'Month', reason: 'next-may' },\n // last april\n { match: `last [${months}]`, group: 0, tag: 'Month', reason: 'last-may' },\n // wednesday april\n { match: `#Date [${months}]`, group: 0, tag: 'Month', reason: 'date-may' },\n // may 5th\n { match: `[${months}] the? #Value`, group: 0, tag: 'Month', reason: 'may-5th' },\n // 5th of may\n { match: `#Value of [${months}]`, group: 0, tag: 'Month', reason: '5th-of-may' },\n // dick van dyke\n { match: '#ProperNoun (van|al|bin) #ProperNoun', tag: 'Person', reason: 'title-van-title', safe: true },\n //jose de Sucre\n { match: '#ProperNoun (de|du) la? #ProperNoun', tag: 'Person', reason: 'title-de-title', safe: true },\n //Jani K. Smith\n { match: '#Singular #Acronym #LastName', tag: '#Person', reason: 'title-acro-noun', safe: true },\n //John Foo\n { match: '#FirstName (#Noun && #ProperNoun) #ProperNoun?', tag: 'Person', reason: 'firstname-titlecase' },\n //Joe K. Sombrero\n { match: '#FirstName #Acronym #Noun', tag: 'Person', reason: 'n-acro-noun', safe: true },\n]\nmodule.exports = list\n","const parseSyntax = require('../../../Doc/match/syntax')\nconst unique = require('../_unique')\nlet matches = []\nmatches = matches.concat(require('./01-misc'))\nmatches = matches.concat(require('./02-dates'))\nmatches = matches.concat(require('./03-noun'))\nmatches = matches.concat(require('./04-adjective'))\nmatches = matches.concat(require('./05-adverb'))\nmatches = matches.concat(require('./06-value'))\nmatches = matches.concat(require('./07-verbs'))\nmatches = matches.concat(require('./08-place'))\nmatches = matches.concat(require('./09-org'))\nmatches = matches.concat(require('./10-people'))\n\n// cache the easier conditions up-front\nconst cacheRequired = function(reg) {\n let needTags = []\n let needWords = []\n reg.forEach(obj => {\n if (obj.optional === true || obj.negative === true) {\n return\n }\n if (obj.tag !== undefined) {\n needTags.push(obj.tag)\n }\n if (obj.word !== undefined) {\n needWords.push(obj.word)\n }\n })\n return { tags: unique(needTags), words: unique(needWords) }\n}\n\nconst allLists = function(m) {\n let more = []\n let lists = m.reg.filter(r => r.oneOf !== undefined)\n if (lists.length === 1) {\n let i = m.reg.findIndex(r => r.oneOf !== undefined)\n Object.keys(m.reg[i].oneOf).forEach(w => {\n let newM = Object.assign({}, m)\n newM.reg = newM.reg.slice(0)\n newM.reg[i] = Object.assign({}, newM.reg[i])\n newM.reg[i].word = w\n delete newM.reg[i].operator\n delete newM.reg[i].oneOf\n newM.reason += '-' + w\n more.push(newM)\n })\n }\n return more\n}\n\n// parse them\nlet all = []\nmatches.forEach(m => {\n m.reg = parseSyntax(m.match)\n let enumerated = allLists(m)\n if (enumerated.length > 0) {\n all = all.concat(enumerated)\n } else {\n all.push(m)\n }\n})\n\nall.forEach(m => {\n m.required = cacheRequired(m.reg)\n return m\n})\n\nmodule.exports = all\n","const matches = require('./matches')\nconst unique = require('./_unique')\n\n// return intersection of array-of-arrays\nconst hasEvery = function(chances) {\n if (chances.length === 0) {\n return []\n }\n let obj = {}\n chances.forEach(arr => {\n arr = unique(arr)\n for (let i = 0; i < arr.length; i++) {\n obj[arr[i]] = obj[arr[i]] || 0\n obj[arr[i]] += 1\n }\n })\n let res = Object.keys(obj)\n res = res.filter(k => obj[k] === chances.length)\n res = res.map(num => Number(num))\n return res\n}\n\nconst runner = function(doc) {\n //find phrases to try for each match\n matches.forEach(m => {\n let allChances = []\n m.required.words.forEach(w => {\n allChances.push(doc._cache.words[w] || [])\n })\n m.required.tags.forEach(tag => {\n allChances.push(doc._cache.tags[tag] || [])\n })\n\n let worthIt = hasEvery(allChances)\n if (worthIt.length === 0) {\n return\n }\n\n let phrases = worthIt.map(index => doc.list[index])\n let tryDoc = doc.buildFrom(phrases)\n // phrases getting tagged\n let match = tryDoc.match(m.reg, m.group)\n if (match.found) {\n if (m.safe === true) {\n match.tagSafe(m.tag, m.reason)\n } else {\n match.tag(m.tag, m.reason)\n }\n }\n })\n}\nmodule.exports = runner\n\n// console.log(hasEvery([[1, 2, 2, 3], [2, 3], []]))\n","const fixMisc = require('./fixMisc')\nconst runner = require('./runner')\n\n// runner: 250ms\n// misc: 40ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n runner(doc)\n fixMisc(doc)\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n // remove our cache, as it's invalidated now\n doc.uncache()\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc\n .splitAfter('@hasComma')\n .splitOn('(and|or) not?')\n .not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)', 0)\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('@hasComma').splitOn('(and|or) not?')\n }\n /** remove the conjunction */\n items() {\n return parse(this).things\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove(match) {\n return this.items()\n .if(match)\n .remove()\n }\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n let items = this.items()\n let needsComma = items.eq(items.length - 2)\n if (needsComma.found && needsComma.has('@hasComma') === false) {\n needsComma.post(', ')\n }\n return this\n }\n removeOxfordComma() {\n let items = this.items()\n let needsComma = items.eq(items.length - 2)\n if (needsComma.found && needsComma.has('@hasComma') === true) {\n needsComma.post(' ')\n }\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m\n .match('(#Noun|#Adjective|#Determiner|#Article)+ #Conjunction not? (#Article|#Determiner)? #Adjective? #Noun+')\n .if('#Noun')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]', 0)\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let hasHyphen = parsed.verb.termList(0).hasHyphen()\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n let space = hasHyphen === true ? '-' : ' '\n Object.keys(forms).forEach(k => (forms[k] += space + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n let space = hasHyphen === true ? '-' : ' '\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += space + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + space + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n if (parsed[k] && parsed[k].isA === 'Doc') {\n json.parts[k] = parsed[k].text('normal')\n } else {\n json.parts[k] = parsed[k]\n }\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Infinitive\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n Object.defineProperty(this, '_cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const lexiconStep = require('./01-init/01-lexicon')\n\n//for the tokenize-only build, we want to keep\nconst smallTagger = function(doc) {\n let terms = doc.termList()\n lexiconStep(terms, doc.world)\n return doc\n}\nmodule.exports = smallTagger\n","const tokenize = require('./01-tokenizer')\nconst fromJSON = require('./01-tokenizer/fromJSON')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\nconst Phrase = require('./Phrase/Phrase')\nconst Term = require('./Term/Term')\nconst Pool = require('./01-tokenizer/Pool')\nconst tinyTagger = require('./02-tagger/tiny')\n\nfunction instance(worldInstance) {\n //blast-out our word-lists, just once\n let world = worldInstance\n\n /** parse and tag text into a compromise object */\n const nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n }\n\n /** parse text into a compromise object, without running POS-tagging */\n nlp.tokenize = function(text = '', lexicon) {\n let w = world\n if (lexicon) {\n w = w.clone()\n w.words = {}\n w.addWords(lexicon)\n }\n let list = tokenize(text, w)\n let doc = new Doc(list, null, w)\n if (lexicon) {\n tinyTagger(doc)\n }\n return doc\n }\n\n /** mix in a compromise-plugin */\n nlp.extend = function(fn) {\n fn(Doc, world, this, Phrase, Term, Pool)\n return this\n }\n\n /** create a compromise Doc object from .json() results */\n nlp.fromJSON = function(json) {\n let list = fromJSON(json, world)\n return new Doc(list, null, world)\n }\n\n /** make a deep-copy of the library state */\n nlp.clone = function() {\n return instance(world.clone())\n }\n\n /** log our decision-making for debugging */\n nlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n }\n\n /** current version of the library */\n nlp.version = version\n // alias\n nlp.import = nlp.load\n\n return nlp\n}\n\nmodule.exports = instance(new World())\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","a","b","c","d","e","f","g","h","I","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","oneOf","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","len","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","getGreedy","until","count","max","min","greedyTo","nextReg","getOrCreateGroup","namedGroups","namedGroupId","startIndex","group","tryHere","previousGroupId","isNamedGroup","named","hasNeeds","remain","greedy","skipto","startAt","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","captureName","RegExp","stripStart","stripEnd","stripBoth","parseToken","groupType","exec","Number","isNamed","capture","fillGroups","tokens","convert","current","useOneOf","token","shouldPack","isArray","byParentheses","byWords","words","byArray","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","groups","notMatch","ts","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","linkTerms","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","fromText","splitTerms","phrases","fromJSON","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","NickName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","ache","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","name","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","JSON","parse","stringify","w2","from","addParent","reverse","doShallow","wordCount","eq","firstTerms","lastTerms","num","getGroups","allGroups","getOneName","target","fullSentence","cacheRequired","needTags","needWords","_cache","parseSyntax","checkCache","not","has","lookAhead","lookBehind","befores","tagTerms","safe","tagList","why","setTag","detachParent","sub","tokenize","buildTree","termList","val","more","rest","fastLookup","everyTerm","isObject","isObj","lookup","byVal","setRoot","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","termOffsets","elapsed","offsets","calcOffset","jsonDefaults","setOptions","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","alpha","left","right","byFreq","counts","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","underOver","tryMultiple","checkLexicon","foundWords","noPrefix","apostrophes","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","lookups","afterThisWord","first","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","periodSeperated","oneLetterWord","A","checkAcronym","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","french","qu","checkFrench","isNumber","createPhrase","firstTerm","hasWord","hasTag","miscCorrection","notIf","ifNo","dates","months","allLists","lists","newM","enumerated","required","hasEvery","chances","runner","allChances","worthIt","tryDoc","corrections","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","needsComma","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","an","lookBefore","adj","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","verb","findNoun","vb","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","space","advb","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","untag","and","onlyIf","smallTagger","lexiconStep","instance","worldInstance","nlp","addWords","tinyTagger","verbose","version","load"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA,IAAMA,KAAK,GAAG,iEAAiEC,KAAjE,CAAuE,EAAvE,CAAd;;EAGA,SAASC,MAAT,CAAgBC,GAAhB,EAAqB;EACnBA,EAAAA,GAAG,GAAGA,GAAG,IAAI,GAAb;EACA,MAAIC,IAAI,GAAGD,GAAG,GAAG,GAAjB;;EACA,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;EAC1BD,IAAAA,IAAI,IAAIJ,KAAK,CAACM,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgBR,KAAK,CAACS,MAAjC,CAAD,CAAb;EACD;;EACD,SAAOL,IAAP;EACD;;EAED,OAAc,GAAGF,MAAjB;;ECbA;EACA;EACA;EACA;EACA,IAAIQ,OAAO,GAAG;EACZ,OAAK,GADO;EAEZ,OAAK,IAFO;EAGZ,OAAK,OAHO;EAIZ,OAAK,MAJO;EAKZ,OAAK,IALO;EAMZC,EAAAA,CAAC,EAAE,uDANS;EAOZC,EAAAA,CAAC,EAAE,0BAPS;EAQZC,EAAAA,CAAC,EAAE,iCARS;EASZC,EAAAA,CAAC,EAAE,aATS;EAUZC,EAAAA,CAAC,EAAE,6DAVS;EAWZC,EAAAA,CAAC,EAAE,WAXS;EAYZC,EAAAA,CAAC,EAAE,iBAZS;EAaZC,EAAAA,CAAC,EAAE,2BAbS;EAcZC,EAAAA,CAAC,EAAE,MAdS;EAeZd,EAAAA,CAAC,EAAE,gCAfS;EAgBZe,EAAAA,CAAC,EAAE,WAhBS;EAiBZC,EAAAA,CAAC,EAAE,yBAjBS;EAkBZC,EAAAA,CAAC,EAAE,sBAlBS;EAmBZC,EAAAA,CAAC,EAAE,SAnBS;EAoBZC,EAAAA,CAAC,EAAE,2CApBS;EAqBZC,EAAAA,CAAC,EAAE,oEArBS;EAsBZC,EAAAA,CAAC,EAAE,cAtBS;EAuBZC,EAAAA,CAAC,EAAE,IAvBS;EAwBZC,EAAAA,CAAC,EAAE,uBAxBS;EAyBZC,EAAAA,CAAC,EAAE,iBAzBS;EA0BZC,EAAAA,CAAC,EAAE,sBA1BS;EA2BZC,EAAAA,CAAC,EAAE,+CA3BS;EA4BZC,EAAAA,CAAC,EAAE,OA5BS;EA6BZC,EAAAA,CAAC,EAAE,gBA7BS;EA8BZC,EAAAA,CAAC,EAAE,eA9BS;EA+BZC,EAAAA,CAAC,EAAE,uCA/BS;EAgCZC,EAAAA,CAAC,EAAE;EAhCS,CAAd;;EAmCA,IAAIC,OAAO,GAAG,EAAd;EACAC,MAAM,CAACC,IAAP,CAAY7B,OAAZ,EAAqB8B,OAArB,CAA6B,UAASnB,CAAT,EAAY;EACvCX,EAAAA,OAAO,CAACW,CAAD,CAAP,CAAWpB,KAAX,CAAiB,EAAjB,EAAqBuC,OAArB,CAA6B,UAASX,CAAT,EAAY;EACvCQ,IAAAA,OAAO,CAACR,CAAD,CAAP,GAAaR,CAAb;EACD,GAFD;EAGD,CAJD;;EAMA,IAAMoB,WAAW,GAAG,SAAdA,WAAc,CAAAtC,GAAG,EAAI;EACzB,MAAIH,KAAK,GAAGG,GAAG,CAACF,KAAJ,CAAU,EAAV,CAAZ;EACAD,EAAAA,KAAK,CAACwC,OAAN,CAAc,UAACX,CAAD,EAAIxB,CAAJ,EAAU;EACtB,QAAIgC,OAAO,CAACR,CAAD,CAAX,EAAgB;EACd7B,MAAAA,KAAK,CAACK,CAAD,CAAL,GAAWgC,OAAO,CAACR,CAAD,CAAlB;EACD;EACF,GAJD;EAKA,SAAO7B,KAAK,CAAC0C,IAAN,CAAW,EAAX,CAAP;EACD,CARD;;EASA,aAAc,GAAGD,WAAjB;;ECvDA,IAAME,aAAa,GAAG,qBAAtB;EACA,IAAMC,gBAAgB,GAAG,aAAzB;EACA,IAAMC,eAAe,GAAG,mBAAxB;EACA,IAAMC,gBAAgB,GAAG,wBAAzB;;EAEA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAS5C,GAAT,EAAc;;EAE9B,MAAIwC,aAAa,CAACK,IAAd,CAAmB7C,GAAnB,MAA4B,IAAhC,EAAsC;EACpC,WAAO,IAAP;EACD,GAJ6B;;;EAM9B,MAAI2C,gBAAgB,CAACE,IAAjB,CAAsB7C,GAAtB,MAA+B,IAAnC,EAAyC;EACvC,WAAO,IAAP;EACD,GAR6B;;;EAU9B,MAAIyC,gBAAgB,CAACI,IAAjB,CAAsB7C,GAAtB,MAA+B,IAAnC,EAAyC;EACvC,WAAO,IAAP;EACD,GAZ6B;;;EAc9B,MAAI0C,eAAe,CAACG,IAAhB,CAAqB7C,GAArB,MAA8B,IAAlC,EAAwC;EACtC,WAAO,IAAP;EACD;;EACD,SAAO,KAAP;EACD,CAlBD;;EAmBA,eAAc,GAAG4C,SAAjB;;ECtBA,IAAME,QAAQ,GAAG,4CAAjB;EAEA;;EACA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAAS/C,GAAT,EAAc;EAC1BA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;EACAA,EAAAA,GAAG,GAAGA,GAAG,CAACgD,WAAJ,EAAN;EACAhD,EAAAA,GAAG,GAAGA,GAAG,CAACiD,IAAJ,EAAN;EACA,MAAIC,QAAQ,GAAGlD,GAAf,CAJ0B;;EAM1BA,EAAAA,GAAG,GAAGsC,SAAW,CAACtC,GAAD,CAAjB,CAN0B;;EAQ1B,MAAI8C,QAAQ,CAACD,IAAT,CAAc7C,GAAd,MAAuB,IAA3B,EAAiC;EAC/BA,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,MAAZ,EAAoB,EAApB,CAAN;EACD,GAVyB;;;EAY1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,OAAZ,EAAqB,EAArB,CAAN,CAZ0B;;EAc1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,WAAZ,EAAyB,EAAzB,CAAN,CAd0B;;EAgB1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,wEAAZ,EAAsF,GAAtF,CAAN,CAhB0B;;EAkB1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CACJ,sGADI,EAEJ,GAFI,CAAN,CAlB0B;;EAuB1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,SAAZ,EAAuB,KAAvB,CAAN,CAvB0B;;EAyB1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,SAAZ,EAAuB,GAAvB,CAAN,CAzB0B;;EA2B1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,oBAAZ,EAAkC,OAAlC,CAAN,CA3B0B;;EA6B1B,MAAI,sBAAsBN,IAAtB,CAA2B7C,GAA3B,MAAoC,IAAxC,EAA8C;EAC5CA,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,GAAZ,EAAiB,EAAjB,CAAN;EACD,GA/ByB;;;EAiC1B,MAAI,QAAQN,IAAR,CAAa7C,GAAb,MAAsB,KAA1B,EAAiC;EAC/BA,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,UAAZ,EAAwB,EAAxB,CAAN;EACAnD,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,kBAAZ,EAAgC,EAAhC,CAAN;EACAnD,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,WAAZ,EAAyB,EAAzB,CAAN;EACD,GArCyB;;;EAuC1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACiD,IAAJ,EAAN,CAvC0B;;EAyC1B,MAAIjD,GAAG,KAAK,EAAZ,EAAgB;EACdA,IAAAA,GAAG,GAAGkD,QAAN;EACD,GA3CyB;;;EA6C1B,MAAIN,WAAS,CAAC5C,GAAD,CAAb,EAAoB;EAClBA,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,KAAZ,EAAmB,EAAnB,CAAN;EACD,GA/CyB;;;EAiD1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,kBAAZ,EAAgC,MAAhC,CAAN;EACA,SAAOnD,GAAP;EACD,CAnDD;;EAqDA,WAAc,GAAG+C,KAAjB;;EC1DA;EACA,IAAMK,OAAO,GAAG,SAAVA,OAAU,CAASpD,GAAT,EAAc;;EAE5BA,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,QAAZ,EAAsB,EAAtB,CAAN;EACAnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,QAAZ,EAAsB,GAAtB,CAAN;EACA,SAAOnD,GAAP;EACD,CALD;;EAMA,UAAc,GAAGoD,OAAjB;;ECHA;EACA;;EACA,IAAMC,SAAS,GAAG,sNAAlB;EACA,IAAMC,OAAO,GAAG,uNAAhB;;EAGA,IAAMR,UAAQ,GAAG,IAAjB;EACA,IAAMS,aAAa,GAAG,MAAtB;EACA,IAAMC,UAAU,GAAG,qBAAnB;EACA,IAAMC,WAAW,GAAG,cAApB;EAEA;;;;EAGA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAA1D,GAAG,EAAI;EACvB,MAAIkD,QAAQ,GAAGlD,GAAf;EACA,MAAI2D,GAAG,GAAG,EAAV;EACA,MAAIC,IAAI,GAAG,EAAX;EACA5D,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAYE,SAAZ,EAAuB,UAAAQ,KAAK,EAAI;EACpCF,IAAAA,GAAG,GAAGE,KAAN,CADoC;;EAGpC,QAAI,CAACF,GAAG,KAAK,GAAR,IAAeA,GAAG,KAAK,GAAvB,IAA8BA,GAAG,KAAK,GAAvC,KAA+CF,WAAW,CAACZ,IAAZ,CAAiB7C,GAAjB,CAAnD,EAA0E;EACxE2D,MAAAA,GAAG,GAAG,EAAN;EACA,aAAOE,KAAP;EACD;;EACD,WAAO,EAAP;EACD,GARK,CAAN;EASA7D,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAYG,OAAZ,EAAqB,UAAAO,KAAK,EAAI;EAClCD,IAAAA,IAAI,GAAGC,KAAP,CADkC;;EAGlC,QAAIN,aAAa,CAACV,IAAd,CAAmBgB,KAAnB,KAA6B,YAAYhB,IAAZ,CAAiBK,QAAjB,CAA7B,IAA2DK,aAAa,CAACV,IAAd,CAAmBc,GAAnB,MAA4B,KAA3F,EAAkG;EAChGC,MAAAA,IAAI,GAAGA,IAAI,CAACT,OAAL,CAAaI,aAAb,EAA4B,EAA5B,CAAP;EACA;EACD,KANiC;;;EAQlC,QAAIC,UAAU,CAACX,IAAX,CAAgB7C,GAAhB,MAAyB,IAA7B,EAAmC;EACjC4D,MAAAA,IAAI,GAAGA,IAAI,CAACT,OAAL,CAAa,IAAb,EAAmB,EAAnB,CAAP;EACA,aAAO,GAAP;EACD;;EACD,WAAO,EAAP;EACD,GAbK,CAAN,CAbuB;;EA4BvB,MAAInD,GAAG,KAAK,EAAZ,EAAgB;;EAEdkD,IAAAA,QAAQ,GAAGA,QAAQ,CAACC,OAAT,CAAiB,KAAjB,EAAwB,UAAAW,KAAK,EAAI;EAC1CF,MAAAA,IAAI,GAAGE,KAAK,IAAI,EAAhB;EACA,aAAO,EAAP;EACD,KAHU,CAAX;EAIA9D,IAAAA,GAAG,GAAGkD,QAAN;EACAS,IAAAA,GAAG,GAAG,EAAN;EACAC,IAAAA,IAAI,GAAGA,IAAP;EACD,GArCsB;;;EAuCvB,MAAIb,KAAK,GAAGgB,OAAS,CAAC/D,GAAD,CAArB;EACA,MAAMgE,MAAM,GAAG;EACb/D,IAAAA,IAAI,EAAED,GADO;EAEb+C,IAAAA,KAAK,EAAEA,KAFM;EAGbK,IAAAA,OAAO,EAAEa,MAAM,CAAClB,KAAD,CAHF;EAIbY,IAAAA,GAAG,EAAEA,GAJQ;EAKbC,IAAAA,IAAI,EAAEA;EALO,GAAf,CAxCuB;;EAgDvB,MAAId,UAAQ,CAACD,IAAT,CAAc7C,GAAd,CAAJ,EAAwB;EACtBA,IAAAA,GAAG,CAACF,KAAJ,CAAUgD,UAAV,EAAoBT,OAApB,CAA4B,UAAA6B,IAAI,EAAI;EAClCF,MAAAA,MAAM,CAACG,KAAP,GAAeH,MAAM,CAACG,KAAP,IAAgB,EAA/B;EACAH,MAAAA,MAAM,CAACG,KAAP,CAAaD,IAAI,CAACjB,IAAL,EAAb,IAA4B,IAA5B;EACD,KAHD;EAID;;EACD,SAAOe,MAAP;EACD,CAvDD;;EAwDA,SAAc,GAAGN,SAAjB;;;;;;;EC1EA,MAAMU,SAAS,GAAG,2BAAlB;EACA,MAAMC,SAAS,GAAG,YAAlB;EAEA;;EACAC,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,SAAKrE,IAAL,GAAY,KAAKA,IAAL,CAAUsE,WAAV,EAAZ;EACA,WAAO,IAAP;EACD,GAHD;EAKA;;;EACAD,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,SAAKrE,IAAL,GAAY,KAAKA,IAAL,CAAU+C,WAAV,EAAZ;EACA,WAAO,IAAP;EACD,GAHD;EAKA;;;;;EAGAsB,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,SAAKrE,IAAL,GAAY,KAAKA,IAAL,CAAUkD,OAAV,CAAkB,uBAAlB,EAA2C,UAAApB,CAAC;EAAA,aAAIA,CAAC,CAACwC,WAAF,EAAJ;EAAA,KAA5C,CAAZ,CAD+B;;EAE/B,WAAO,IAAP;EACD,GAHD;EAKA;;;EACAD,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,WAAOD,SAAS,CAACxB,IAAV,CAAe,KAAK5C,IAApB,CAAP;EACD,GAFD;EAGA;;;EACAqE,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,WAAOF,SAAS,CAACvB,IAAV,CAAe,KAAK5C,IAApB,CAAP;EACD,GAFD;;EAGAqE,EAAAA,iBAAA,GAAoBA,OAAO,CAACE,WAA5B;;;;;;;;;;EC/BA;EACA;EACA,MAAMC,UAAU,GAAG,iIAAnB;EACA,MAAMC,QAAQ,GAAG,iIAAjB;EAEA;;EACAJ,EAAAA,eAAA,GAAkB,UAASK,KAAT,EAAgB;EAChC,WAAO,KAAKf,IAAL,CAAUgB,OAAV,CAAkBD,KAAlB,MAA6B,CAAC,CAArC;EACD,GAFD;EAGA;;;EACAL,EAAAA,cAAA,GAAiB,UAASK,KAAT,EAAgB;EAC/B,WAAO,KAAKhB,GAAL,CAASiB,OAAT,CAAiBD,KAAjB,MAA4B,CAAC,CAApC;EACD,GAFD;EAIA;;;EACAL,EAAAA,gBAAA,GAAmB,YAAW;EAC5B,WAAOG,UAAU,CAAC5B,IAAX,CAAgB,KAAKc,GAArB,KAA6Be,QAAQ,CAAC7B,IAAT,CAAc,KAAKe,IAAnB,CAApC;EACD,GAFD;;EAGAU,EAAAA,oBAAA,GAAuBA,OAAO,CAACO,QAA/B;EAEA;;EACAP,EAAAA,gBAAA,GAAmB,YAAW;EAC5B,WAAO,KAAKQ,OAAL,CAAa,GAAb,CAAP;EACD,GAFD;EAIA;;;EACAR,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,WAAO,KAAKQ,OAAL,CAAa,GAAb,MAAsB,IAAtB,IAA8B,KAAKA,OAAL,CAAa,KAAb,MAAwB,KAA7D;EACD,GAFD;EAIA;;;EACAR,EAAAA,sBAAA,GAAyB,YAAW;EAClC,WAAO,KAAKQ,OAAL,CAAa,GAAb,CAAP;EACD,GAFD;EAIA;;;EACAR,EAAAA,uBAAA,GAA0B,YAAW;EACnC,WAAO,KAAKQ,OAAL,CAAa,GAAb,KAAqB,KAAKA,OAAL,CAAa,GAAb,CAA5B;EACD,GAFD;EAIA;;;EACAR,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,WAAO,KAAKQ,OAAL,CAAa,IAAb,KAAsB,KAAKA,OAAL,CAAa,GAAb,CAAtB,IAA2C,KAAKC,MAAL,CAAY,IAAZ,CAA3C,IAAgE,KAAKA,MAAL,CAAY,GAAZ,CAAvE;EACD,GAFD;EAIA;;;EACAT,EAAAA,oBAAA,GAAuB,YAAW;EAChC,WAAO,KAAKQ,OAAL,CAAa,GAAb,CAAP;EACD,GAFD;EAIA;;;EACAR,EAAAA,gBAAA,GAAmB,YAAW;EAC5B,WAAO,KAAKzB,IAAL,CAAU,KAAK5C,IAAf,CAAP;EACD,GAFD;EAIA;;;EACAqE,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,QAAMU,MAAM,GAAG,SAAf;EACA,WAAOA,MAAM,CAACnC,IAAP,CAAY,KAAKe,IAAjB,KAA0BoB,MAAM,CAACnC,IAAP,CAAY,KAAKc,GAAjB,CAAjC;EACD,GAHD;EAIA;;;EACAW,EAAAA,eAAA,GAAkB,YAAW;EAC3B,QAAMU,MAAM,GAAG,WAAf;EACA,WAAOA,MAAM,CAACnC,IAAP,CAAY,KAAKe,IAAjB,KAA0BoB,MAAM,CAACnC,IAAP,CAAY,KAAKc,GAAjB,CAAjC;EACD,GAHD;EAKA;;;EACAW,EAAAA,sBAAA,GAAyB,YAAW;EAClC,WAAOW,OAAO,CAAC,KAAKC,QAAN,CAAd;EACD,GAFD;EAIA;;;EACAZ,EAAAA,sBAAA,GAAyB,UAASK,KAAT,EAAgB;;EAEvC,QAAIA,KAAK,KAAK,GAAV,IAAiBA,KAAK,KAAK,GAA/B,EAAoC;EAClC,WAAKf,IAAL,GAAY,KAAKA,IAAL,CAAUT,OAAV,CAAkBwB,KAAlB,EAAyB,EAAzB,CAAZ;EACD;;EACD,SAAKf,IAAL,GAAYe,KAAK,GAAG,KAAKf,IAAzB;EACA,WAAO,IAAP;KANF;;;;;;;;;;;;;;;;;;ECxEA;EACA,IAAIuB,SAAS,GAAG,qBAAW,EAA3B;EAEA;;;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASzD,CAAT,EAAY0D,GAAZ,EAAiBC,KAAjB,EAAwBhF,MAAxB,EAAgC;;EAEhD,MAAI+E,GAAG,CAACE,EAAJ,KAAW5D,CAAC,CAAC4D,EAAjB,EAAqB;EACnB,WAAO,IAAP;EACD,GAJ+C;;;EAMhD,MAAIF,GAAG,CAACG,QAAJ,KAAiB,IAArB,EAA2B;EACzB,WAAO,IAAP;EACD,GAR+C;;;EAUhD,MAAIH,GAAG,CAACI,KAAJ,KAAc,IAAd,IAAsBH,KAAK,KAAK,CAApC,EAAuC;EACrC,WAAO,KAAP;EACD,GAZ+C;;;EAchD,MAAID,GAAG,CAACK,GAAJ,KAAY,IAAZ,IAAoBJ,KAAK,KAAKhF,MAAM,GAAG,CAA3C,EAA8C;EAC5C,WAAO,KAAP;EACD,GAhB+C;;;EAkBhD,MAAI+E,GAAG,CAACnB,IAAJ,KAAayB,SAAjB,EAA4B;;EAE1B,QAAIhE,CAAC,CAACuD,QAAF,KAAe,IAAf,IAAuBvD,CAAC,CAACuD,QAAF,KAAeG,GAAG,CAACnB,IAA9C,EAAoD;EAClD,aAAO,IAAP;EACD,KAJyB;;;EAM1B,QAAIvC,CAAC,CAACwC,KAAF,KAAYwB,SAAZ,IAAyBhE,CAAC,CAACwC,KAAF,CAAQyB,cAAR,CAAuBP,GAAG,CAACnB,IAA3B,CAA7B,EAA+D;EAC7D,aAAO,IAAP;EACD,KARyB;;;EAU1B,QAAImB,GAAG,CAACQ,IAAJ,KAAa,IAAb,IAAqBR,GAAG,CAACnB,IAAJ,KAAavC,CAAC,CAACmE,IAAxC,EAA8C;EAC5C,aAAO,IAAP;EACD,KAZyB;;;EAc1B,WAAOT,GAAG,CAACnB,IAAJ,KAAavC,CAAC,CAACoB,KAAf,IAAwBsC,GAAG,CAACnB,IAAJ,KAAavC,CAAC,CAAC1B,IAAvC,IAA+CoF,GAAG,CAACnB,IAAJ,KAAavC,CAAC,CAACyB,OAArE;EACD,GAjC+C;;;EAmChD,MAAIiC,GAAG,CAACU,GAAJ,KAAYJ,SAAhB,EAA2B;EACzB,WAAOhE,CAAC,CAACqE,IAAF,CAAOX,GAAG,CAACU,GAAX,MAAoB,IAA3B;EACD,GArC+C;;;EAuChD,MAAIV,GAAG,CAACY,MAAJ,KAAeN,SAAnB,EAA8B;EAC5B,QAAI,OAAOhE,CAAC,CAAC0D,GAAG,CAACY,MAAL,CAAR,KAAyB,UAAzB,IAAuCtE,CAAC,CAAC0D,GAAG,CAACY,MAAL,CAAD,OAAoB,IAA/D,EAAqE;EACnE,aAAO,IAAP;EACD;;EACD,WAAO,KAAP;EACD,GA5C+C;;;EA8ChD,MAAIZ,GAAG,CAACa,KAAJ,KAAcP,SAAlB,EAA6B;EAC3B,WAAON,GAAG,CAACa,KAAJ,CAAUrD,IAAV,CAAelB,CAAC,CAACoB,KAAjB,CAAP;EACD,GAhD+C;;;EAkDhD,MAAIsC,GAAG,CAACc,KAAJ,KAAcR,SAAlB,EAA6B;EAC3B,WAAON,GAAG,CAACc,KAAJ,CAAUP,cAAV,CAAyBjE,CAAC,CAACyB,OAA3B,KAAuCiC,GAAG,CAACc,KAAJ,CAAUP,cAAV,CAAyBjE,CAAC,CAAC1B,IAA3B,CAA9C;EACD,GApD+C;;;EAsDhD,MAAIoF,GAAG,CAACe,OAAJ,KAAgBT,SAApB,EAA+B;;EAE7B,QAAIN,GAAG,CAACgB,QAAJ,KAAiB,KAArB,EAA4B;;EAE1B,aAAOhB,GAAG,CAACe,OAAJ,CAAYE,KAAZ,CAAkB,UAAA7E,CAAC;EAAA,eAAI0D,SAAS,CAACxD,CAAD,EAAIF,CAAJ,EAAO6D,KAAP,EAAchF,MAAd,CAAb;EAAA,OAAnB,CAAP;EACD,KAL4B;;;EAO7B,WAAO+E,GAAG,CAACe,OAAJ,CAAYG,IAAZ,CAAiB,UAAA9E,CAAC;EAAA,aAAI0D,SAAS,CAACxD,CAAD,EAAIF,CAAJ,EAAO6D,KAAP,EAAchF,MAAd,CAAb;EAAA,KAAlB,CAAP;EACD;;EACD,SAAO,KAAP;EACD,CAhED;;;EAmEA6E,SAAS,GAAG,mBAASxD,CAAT,EAAY0D,GAAZ,EAAiBC,KAAjB,EAAwBhF,MAAxB,EAAgC;EAC1C,MAAIkG,MAAM,GAAGpB,SAAS,CAACzD,CAAD,EAAI0D,GAAJ,EAASC,KAAT,EAAgBhF,MAAhB,CAAtB;;EACA,MAAI+E,GAAG,CAACoB,QAAJ,KAAiB,IAArB,EAA2B;EACzB,WAAO,CAACD,MAAR;EACD;;EACD,SAAOA,MAAP;EACD,CAND;;EAQA,cAAc,GAAGrB,SAAjB;;EC3EA,IAAMuB,MAAM,GAAG,EAAf;EAEA;;EACA,eAAiB,GAAG,oBAAA,CAASrB,GAAT,EAAcC,KAAd,EAAqBhF,MAArB,EAA6B;EAC/C,SAAO8E,UAAS,CAAC,IAAD,EAAOC,GAAP,EAAYC,KAAZ,EAAmBhF,MAAnB,CAAhB;EACD,CAFD;EAIA;;;EACA,iBAAiB,GAAG,sBAAA,GAAW;EAC7B,SAAOsC,WAAS,CAAC,KAAK3C,IAAN,CAAhB;EACD,CAFD;EAIA;;;EACA,cAAkB,GAAG,mBAAA,GAAW;EAC9B,SAAO,KAAKA,IAAL,KAAc,EAAd,IAAoBgF,OAAO,CAAC,KAAKC,QAAN,CAAlC;EACD,CAFD;EAIA;;;EACA,WAAe,GAAG,gBAAA,GAAW;EAC3B,SAAO/C,MAAM,CAACC,IAAP,CAAY,KAAK4D,IAAjB,EAAuBO,IAAvB,CAA4B,UAAA5E,CAAC;EAAA,WAAI+E,MAAM,CAAC/E,CAAD,CAAN,KAAc,IAAlB;EAAA,GAA7B,CAAP;EACD,CAFD;EAIA;;;EACA,WAAe,GAAG,gBAAA,CAASgF,KAAT,EAAgB;EAChC,MAAIC,SAAS,GAAGD,KAAK,CAACE,UAAtB;EACA,MAAI7G,GAAG,GAAG,KAAKkF,QAAL,IAAiB,KAAKnC,KAAhC;;EACA,MAAI,KAAKiD,IAAL,CAAUc,MAAd,EAAsB;EACpB9G,IAAAA,GAAG,GAAG4G,SAAS,CAACG,UAAV,CAAqB/G,GAArB,EAA0B2G,KAA1B,CAAN;EACD;;EACD,MAAI,KAAKX,IAAL,CAAUgB,IAAV,IAAkB,CAAC,KAAKhB,IAAL,CAAUiB,QAA7B,IAAyC,CAAC,KAAKjB,IAAL,CAAUkB,UAAxD,EAAoE;EAClE,QAAIC,KAAK,GAAG,IAAZ;;EACA,QAAI,KAAKnB,IAAL,CAAUoB,SAAd,EAAyB;EACvBD,MAAAA,KAAK,GAAG,WAAR;EACD,KAFD,MAEO,IAAI,KAAKnB,IAAL,CAAUqB,MAAd,EAAsB;EAC3BF,MAAAA,KAAK,GAAG,QAAR;EACD,KAFM,MAEA,IAAI,KAAKnB,IAAL,CAAUsB,YAAd,EAA4B;EACjCH,MAAAA,KAAK,GAAG,cAAR;EACD,KAFM,MAEA,IAAI,KAAKnB,IAAL,CAAUuB,UAAd,EAA0B;EAC/BJ,MAAAA,KAAK,GAAG,YAAR;EACD,KAFM,MAEA,IAAI,KAAKnB,IAAL,CAAUwB,KAAd,EAAqB;EAC1BL,MAAAA,KAAK,GAAG,OAAR;EACD;;EACDnH,IAAAA,GAAG,GAAG4G,SAAS,CAACa,YAAV,CAAuBzH,GAAvB,EAA4B2G,KAA5B,EAAmCQ,KAAnC,CAAN;EACD;;EACD,OAAKrB,IAAL,GAAY9F,GAAZ;GArBF;;;;;;;;;;EC1BA,IAAM0H,QAAQ,GAAG,OAAjB;EACA,IAAMC,WAAW,GAAG,WAApB;EAGA;EACA;;EAEA;;EACA,WAAe,GAAG,gBAAA,CAASC,OAAT,EAAkBC,OAAlB,EAA2BC,QAA3B,EAAqC;EACrDF,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;EACA,MAAI1D,IAAI,GAAG,KAAKjE,IAAhB;EACA,MAAI8H,MAAM,GAAG,KAAKpE,GAAlB;EACA,MAAIG,KAAK,GAAG,KAAKF,IAAjB,CAJqD;;EAOrD,MAAIgE,OAAO,CAACxE,OAAR,KAAoB,IAAxB,EAA8B;EAC5Bc,IAAAA,IAAI,GAAG,KAAKd,OAAL,IAAgB,EAAvB;EACD;;EACD,MAAIwE,OAAO,CAAC9B,IAAR,KAAiB,IAArB,EAA2B;EACzB5B,IAAAA,IAAI,GAAG,KAAK4B,IAAL,IAAa,EAApB;EACD;;EACD,MAAI8B,OAAO,CAAC1C,QAAR,KAAqB,IAArB,IAA6B,KAAKA,QAAtC,EAAgD;EAC9ChB,IAAAA,IAAI,GAAG,KAAKgB,QAAL,IAAiB,EAAxB;EACD;;EACD,MAAI0C,OAAO,CAACI,MAAR,KAAmB,IAAvB,EAA6B;EAC3B9D,IAAAA,IAAI,GAAG,KAAKnB,KAAL,IAAc,KAAK9C,IAAnB,IAA2B,EAAlC;EACD;;EACD,MAAI2H,OAAO,CAAC9B,IAAR,KAAiB,IAArB,EAA2B;EACzB5B,IAAAA,IAAI,GAAG,KAAK4B,IAAL,IAAa,KAAK1C,OAAlB,IAA6B,EAApC;EACD;;EACD,MAAIwE,OAAO,CAAC1F,OAAR,KAAoB,IAAxB,EAA8B;EAC5BgC,IAAAA,IAAI,GAAG5B,SAAW,CAAC4B,IAAD,CAAlB;EACD,GAxBoD;;;EA0BrD,MAAI0D,OAAO,CAACK,SAAR,KAAsB,IAA1B,EAAgC;EAC9B,QAAI,KAAKjC,IAAL,CAAUkC,UAAV,IAAwB,CAAC,KAAK9D,SAAL,EAA7B,EAA+C,CAA/C,MAEO,IAAI,KAAK4B,IAAL,CAAUmC,OAAd,EAAuB;EAC5BjE,MAAAA,IAAI,GAAGA,IAAI,CAACK,WAAL,EAAP,CAD4B;EAE7B,KAFM,MAEA,IAAIoD,WAAW,CAAC9E,IAAZ,CAAiBqB,IAAjB,KAA0B,CAAC,KAAK8B,IAAL,CAAUmC,OAAzC,EAAkD;;EAEvDjE,MAAAA,IAAI,GAAGA,IAAI,CAAClB,WAAL,EAAP;EACD;EACF;;EACD,MAAI4E,OAAO,CAACQ,SAAR,KAAsB,IAA1B,EAAgC;EAC9BlE,IAAAA,IAAI,GAAGA,IAAI,CAAClB,WAAL,EAAP;EACD,GAtCoD;;;EAwCrD,MAAI4E,OAAO,CAACS,QAAR,KAAqB,IAArB,IAA6B,KAAKrC,IAAL,CAAUmC,OAA3C,EAAoD;EAClDjE,IAAAA,IAAI,GAAGA,IAAI,CAACf,OAAL,CAAa,KAAb,EAAoB,EAApB,CAAP;EACD,GA1CoD;;;EA6CrD,MAAIyE,OAAO,CAACU,UAAR,KAAuB,IAAvB,IAA+BV,OAAO,CAAC9B,IAAR,KAAiB,IAApD,EAA0D;EACxDiC,IAAAA,MAAM,GAAG,EAAT;EACAjE,IAAAA,KAAK,GAAG,GAAR;;EACA,QAAI,CAAC4D,QAAQ,CAAC7E,IAAT,CAAc,KAAKe,IAAnB,MAA6B,KAA7B,IAAsCgE,OAAO,CAACW,IAA/C,KAAwD,CAAC,KAAKrD,QAAlE,EAA4E;EAC1EpB,MAAAA,KAAK,GAAG,EAAR;EACD;EACF;;EACD,MAAI8D,OAAO,CAACY,WAAR,KAAwB,IAAxB,IAAgC,CAACZ,OAAO,CAAC9B,IAA7C,EAAmD;;EAEjD,QAAI,KAAKhB,OAAL,CAAa,GAAb,MAAsB,IAA1B,EAAgC;EAC9BhB,MAAAA,KAAK,GAAG,MAAMA,KAAd;EACD,KAFD,MAEO,IAAI,KAAKgB,OAAL,CAAa,GAAb,MAAsB,IAA1B,EAAgC;EACrChB,MAAAA,KAAK,GAAG,MAAMA,KAAd;EACD,KAFM,MAEA,IAAI,KAAKgB,OAAL,CAAa,GAAb,MAAsB,IAA1B,EAAgC;EACrChB,MAAAA,KAAK,GAAG,MAAMA,KAAd;EACD,KAFM,MAEA,IAAI,KAAKgB,OAAL,CAAa,GAAb,MAAsB,IAA1B,EAAgC;EACrChB,MAAAA,KAAK,GAAG,MAAMA,KAAd;EACD,KAFM,MAEA,IAAI,KAAK2E,WAAL,OAAuB,IAA3B,EAAiC;EACtC3E,MAAAA,KAAK,GAAG,QAAQA,KAAhB;EACD;EACF;;EACD,MAAI+D,OAAO,KAAK,IAAhB,EAAsB;EACpBE,IAAAA,MAAM,GAAG,EAAT;EACD;;EACD,MAAID,QAAQ,KAAK,IAAjB,EAAuB;;EAErBhE,IAAAA,KAAK,GAAG,EAAR,CAFqB;EAGtB,GAxEoD;;;EA0ErD,MAAI8D,OAAO,CAACc,aAAR,KAA0B,IAA1B,IAAkC,KAAK1C,IAAL,CAAU2C,YAAhD,EAA8D;EAC5D7E,IAAAA,KAAK,GAAGA,KAAK,CAACX,OAAN,CAAc,KAAd,EAAqB,EAArB,CAAR;EACD;;EACD,SAAO4E,MAAM,GAAG7D,IAAT,GAAgBJ,KAAvB;GA7EF;;;;;;ECTA,IAAM8E,UAAU,GAAG;EACjBC,EAAAA,SAAS,EAAE,CADM;EAEjBC,EAAAA,UAAU,EAAE;EAFK,CAAnB;EAKA;;EACA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAASC,IAAT,EAAerC,KAAf,EAAsB;EACrC,MAAIX,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAY4G,IAAI,CAAChD,IAAjB,CAAX;EACA,MAAMiD,MAAM,GAAGtC,KAAK,CAACX,IAArB;EACAA,EAAAA,IAAI,GAAGA,IAAI,CAACkD,IAAL,CAAU,UAAC1I,CAAD,EAAIC,CAAJ,EAAU;;EAEzB,QAAImI,UAAU,CAACnI,CAAD,CAAV,IAAiB,CAACwI,MAAM,CAACxI,CAAD,CAA5B,EAAiC;EAC/B,aAAO,CAAC,CAAR;EACD,KAJwB;;;EAMzB,QAAI,CAACwI,MAAM,CAACxI,CAAD,CAAX,EAAgB;EACd,aAAO,CAAP;EACD;;EACD,QAAI,CAACwI,MAAM,CAACzI,CAAD,CAAX,EAAgB;EACd,aAAO,CAAP;EACD,KAXwB;;;EAazB,QAAIyI,MAAM,CAACzI,CAAD,CAAN,CAAU2I,OAAV,CAAkB7I,MAAlB,GAA2B2I,MAAM,CAACxI,CAAD,CAAN,CAAU0I,OAAV,CAAkB7I,MAAjD,EAAyD;EACvD,aAAO,CAAP;EACD;;EACD,QAAI2I,MAAM,CAACzI,CAAD,CAAN,CAAU4I,GAAV,CAAc9I,MAAd,GAAuB2I,MAAM,CAACxI,CAAD,CAAN,CAAU2I,GAAV,CAAc9I,MAAzC,EAAiD;EAC/C,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD,GApBM,CAAP;EAqBA,SAAO0F,IAAP;EACD,CAzBD;;EA0BA,YAAc,GAAG+C,QAAjB;;EC9BA,IAAMM,WAAW,GAAG;EAClBpJ,EAAAA,IAAI,EAAE,IADY;EAElB+F,EAAAA,IAAI,EAAE,IAFY;EAGlBd,EAAAA,QAAQ,EAAE,IAHQ;EAIlBoD,EAAAA,UAAU,EAAE,IAJM;EAMlBvF,EAAAA,KAAK,EAAE,KANW;EAOlBwC,EAAAA,EAAE,EAAE,KAPc;EAQlBD,EAAAA,KAAK,EAAE,KARW;EASlBgE,EAAAA,MAAM,EAAE,KATU;EAUlBC,EAAAA,OAAO,EAAE;EAVS,CAApB;EAaA;;EACA,QAAY,GAAG,aAAA,CAAS3B,OAAT,EAAkBjB,KAAlB,EAAyB;EACtCiB,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;EACAA,EAAAA,OAAO,GAAGzF,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBH,WAAlB,EAA+BzB,OAA/B,CAAV;EACA,MAAIpB,MAAM,GAAG,EAAb,CAHsC;;EAMtC,MAAIoB,OAAO,CAAC3H,IAAZ,EAAkB;EAChBuG,IAAAA,MAAM,CAACvG,IAAP,GAAc,KAAKA,IAAnB;EACD;;EACD,MAAI2H,OAAO,CAACI,MAAZ,EAAoB;EAClBxB,IAAAA,MAAM,CAACwB,MAAP,GAAgB,KAAKA,MAArB;EACD;;EAED,MAAIJ,OAAO,CAAC5B,IAAZ,EAAkB;EAChBQ,IAAAA,MAAM,CAACR,IAAP,GAAc7D,MAAM,CAACC,IAAP,CAAY,KAAK4D,IAAjB,CAAd;EACD,GAfqC;;;EAkBtC,MAAI4B,OAAO,CAAC7E,KAAZ,EAAmB;EACjByD,IAAAA,MAAM,CAACzD,KAAP,GAAe,KAAKA,KAApB;EACD;;EACD,MAAI6E,OAAO,CAACrC,EAAR,IAAcqC,OAAO,CAAC0B,MAA1B,EAAkC;EAChC9C,IAAAA,MAAM,CAACjB,EAAP,GAAY,KAAKA,EAAjB;EACD;;EACD,MAAIqC,OAAO,CAAC1C,QAAR,IAAoB,KAAKA,QAAL,KAAkB,IAA1C,EAAgD;EAC9CsB,IAAAA,MAAM,CAACtB,QAAP,GAAkB,KAAKA,QAAvB;EACD;;EACD,MAAI0C,OAAO,CAACU,UAAZ,EAAwB;EACtB9B,IAAAA,MAAM,CAAC7C,GAAP,GAAa,KAAKA,GAAlB;EACA6C,IAAAA,MAAM,CAAC5C,IAAP,GAAc,KAAKA,IAAnB;EACD;;EACD,MAAIgE,OAAO,CAAC2B,OAAZ,EAAqB;EACnB/C,IAAAA,MAAM,CAAC+C,OAAP,GAAiBR,QAAQ,CAAC,IAAD,EAAOpC,KAAP,CAAR,CAAsB,CAAtB,CAAjB;EACD;;EAED,SAAOH,MAAP;GAnCF;;;;;;EChBA,WAAc,GAAGrE,MAAM,CAACqH,MAAP,CACf,EADe,EAEfC,OAFe,EAGfC,cAHe,EAIfC,OAJe,EAKfC,OALe,EAMfC,OANe,CAAjB;;ECAA,SAASC,YAAT,GAAwB;EACtB,SAAO,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,QAA/C;EACD;EAED;;;EACA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAASjK,GAAT,EAAckK,KAAd,EAAqB;EAClClK,EAAAA,GAAG,GAAGA,GAAG,CAACmK,QAAJ,EAAN;;EACA,SAAOnK,GAAG,CAACM,MAAJ,GAAa4J,KAApB,EAA2B;EACzBlK,IAAAA,GAAG,IAAI,GAAP;EACD;;EACD,SAAOA,GAAP;EACD,CAND;EAQA;;;EACA,UAAc,GAAG,eAAA,CAAS2B,CAAT,EAAYoE,GAAZ,EAAiBqE,MAAjB,EAAyB;EACxC,MAAIN,YAAY,EAAhB,EAAoB;EAClBO,IAAAA,OAAO,CAACC,GAAR,CAAY,OAAOL,MAAM,CAACtI,CAAC,CAACoB,KAAH,EAAU,CAAV,CAAb,GAA4B,MAA5B,GAAqCgD,GAArC,GAA2C,GAAvD,EAA4D,iBAA5D;EACA;EACD,GAJuC;;;EAMxC,MAAIuE,GAAG,GAAG,aAAaL,MAAM,CAACtI,CAAC,CAACoB,KAAH,EAAU,EAAV,CAAnB,GAAmC,oBAAnC,GAA0DgD,GAA1D,GAAgE,UAA1E;;EACA,MAAIqE,MAAJ,EAAY;EACVE,IAAAA,GAAG,GAAGL,MAAM,CAACK,GAAD,EAAM,EAAN,CAAN,GAAkB,GAAlB,GAAwBF,MAAxB,GAAiC,EAAvC;EACD;;EACDC,EAAAA,OAAO,CAACC,GAAR,CAAYA,GAAZ;EACD,CAXD;EAaA;;;EACA,YAAgB,GAAG,iBAAA,CAAS3I,CAAT,EAAYoE,GAAZ,EAAiBqE,MAAjB,EAAyB;EAC1C,MAAIN,YAAY,EAAhB,EAAoB;EAClBO,IAAAA,OAAO,CAACC,GAAR,CAAY,OAAOL,MAAM,CAACtI,CAAC,CAACoB,KAAH,EAAU,CAAV,CAAb,GAA4B,MAA5B,GAAqCgD,GAArC,GAA2C,GAAvD,EAA4D,iBAA5D;EACA;EACD,GAJyC;;;EAM1C,MAAIuE,GAAG,GAAG,aAAaL,MAAM,CAACtI,CAAC,CAACoB,KAAH,EAAU,CAAV,CAAnB,GAAkC,eAAlC,GAAoDgD,GAApD,GAA0D,UAApE;;EACA,MAAIqE,MAAJ,EAAY;EACVE,IAAAA,GAAG,GAAGL,MAAM,CAACK,GAAD,EAAM,EAAN,CAAN,GAAkB,GAAlB,GAAwBF,MAA9B;EACD;;EACDC,EAAAA,OAAO,CAACC,GAAR,CAAYA,GAAZ;EACD,CAXD;;EAaA,WAAe,GAAG,gBAAA,CAASC,GAAT,EAAc;EAC9B,SAAOpI,MAAM,CAACqI,SAAP,CAAiBL,QAAjB,CAA0BM,IAA1B,CAA+BF,GAA/B,MAAwC,gBAA/C;EACD,CAFD;;EAIA,aAAiB,GAAG,kBAAA,CAAAvK,GAAG,EAAI;EACzB,SAAOA,GAAG,CAAC0K,MAAJ,CAAW,CAAX,EAAcnG,WAAd,KAA8BvE,GAAG,CAAC2K,MAAJ,CAAW,CAAX,CAArC;GADF;;;;;;;;;EC3CA;;EACA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAASjJ,CAAT,EAAYoE,GAAZ,EAAiBqE,MAAjB,EAAyBzD,KAAzB,EAAgC;EAC7C,MAAIkE,MAAM,GAAGlE,KAAK,CAACX,IAAnB,CAD6C;;EAG7C,MAAID,GAAG,KAAK,EAAR,IAAcA,GAAG,KAAK,GAAtB,IAA6BA,GAAG,KAAK,GAAzC,EAA8C;EAC5C;EACD;;EACD,MAAIA,GAAG,CAAC,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClBA,IAAAA,GAAG,GAAGA,GAAG,CAAC5C,OAAJ,CAAY,IAAZ,EAAkB,EAAlB,CAAN;EACD;;EACD4C,EAAAA,GAAG,GAAG+E,GAAG,CAAC1G,SAAJ,CAAc2B,GAAd,CAAN,CAT6C;;EAW7C,MAAIpE,CAAC,CAACqE,IAAF,CAAOD,GAAP,MAAgB,IAApB,EAA0B;EACxB;EACD,GAb4C;;;EAe7C,MAAMgF,SAAS,GAAGpE,KAAK,CAACoE,SAAN,EAAlB;;EACA,MAAIA,SAAS,KAAK,IAAlB,EAAwB;EACtBD,IAAAA,GAAG,CAACE,MAAJ,CAAWrJ,CAAX,EAAcoE,GAAd,EAAmBqE,MAAnB;EACD,GAlB4C;;;EAoB7CzI,EAAAA,CAAC,CAACqE,IAAF,CAAOD,GAAP,IAAc,IAAd,CApB6C;;;EAuB7C,MAAI8E,MAAM,CAACjF,cAAP,CAAsBG,GAAtB,MAA+B,IAAnC,EAAyC;;EAEvC8E,IAAAA,MAAM,CAAC9E,GAAD,CAAN,CAAYqD,GAAZ,CAAgB/G,OAAhB,CAAwB,UAAA4I,IAAI,EAAI;EAC9BtJ,MAAAA,CAAC,CAACqE,IAAF,CAAOiF,IAAP,IAAe,IAAf;;EACA,UAAIF,SAAS,KAAK,IAAlB,EAAwB;EACtBD,QAAAA,GAAG,CAACE,MAAJ,CAAWrJ,CAAX,EAAc,OAAOsJ,IAArB;EACD;EACF,KALD,EAFuC;;EASvCtJ,IAAAA,CAAC,CAACuJ,KAAF,CAAQL,MAAM,CAAC9E,GAAD,CAAN,CAAYoF,IAApB,EAA0B,GAA1B,EAA+BxE,KAA/B;EACD;EACF,CAlCD;EAoCA;;;EACA,IAAMyE,OAAO,GAAG,SAAVA,OAAU,CAASpC,IAAT,EAAehD,IAAf,EAAqBoE,MAArB,EAA6BzD,KAA7B,EAAoC;EAClD,MAAI,OAAOX,IAAP,KAAgB,QAApB,EAA8B;EAC5B,SAAK,IAAI9F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC0K,MAAAA,MAAM,CAAC5B,IAAD,EAAOhD,IAAI,CAAC9F,CAAD,CAAX,EAAgBkK,MAAhB,EAAwBzD,KAAxB,CAAN;EACD,KAH2B;;EAK7B,GALD,MAKO;EACLiE,IAAAA,MAAM,CAAC5B,IAAD,EAAOhD,IAAP,EAAaoE,MAAb,EAAqBzD,KAArB,CAAN;EACD;EACF,CATD;;EAUA,OAAc,GAAGyE,OAAjB;;EChDA;;EACA,IAAMF,KAAK,GAAG,SAARA,KAAQ,CAASvJ,CAAT,EAAYoE,GAAZ,EAAiBqE,MAAjB,EAAyBzD,KAAzB,EAAgC;EAC5C,MAAMoE,SAAS,GAAGpE,KAAK,CAACoE,SAAN,EAAlB,CAD4C;;EAG5C,MAAIhF,GAAG,KAAK,GAAZ,EAAiB;EACfpE,IAAAA,CAAC,CAACqE,IAAF,GAAS,EAAT;EACA,WAAOrE,CAAP;EACD,GAN2C;;;EAQ5C,MAAIA,CAAC,CAACqE,IAAF,CAAOD,GAAP,MAAgB,IAApB,EAA0B;EACxB,WAAOpE,CAAC,CAACqE,IAAF,CAAOD,GAAP,CAAP,CADwB;;EAGxB,QAAIgF,SAAS,KAAK,IAAlB,EAAwB;EACtBD,MAAAA,GAAG,CAACO,QAAJ,CAAa1J,CAAb,EAAgBoE,GAAhB,EAAqBqE,MAArB;EACD;EACF,GAd2C;;;EAgB5C,MAAMS,MAAM,GAAGlE,KAAK,CAACX,IAArB;;EACA,MAAI6E,MAAM,CAAC9E,GAAD,CAAV,EAAiB;EACf,QAAIoD,OAAO,GAAG0B,MAAM,CAAC9E,GAAD,CAAN,CAAYoD,OAA1B;;EACA,SAAK,IAAIjJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiJ,OAAO,CAAC7I,MAA5B,EAAoCJ,CAAC,EAArC,EAAyC;EACvC,UAAIyB,CAAC,CAACqE,IAAF,CAAOmD,OAAO,CAACjJ,CAAD,CAAd,MAAuB,IAA3B,EAAiC;EAC/B,eAAOyB,CAAC,CAACqE,IAAF,CAAOmD,OAAO,CAACjJ,CAAD,CAAd,CAAP;;EACA,YAAI6K,SAAS,KAAK,IAAlB,EAAwB;EACtBD,UAAAA,GAAG,CAACO,QAAJ,CAAa1J,CAAb,EAAgB,QAAQwH,OAAO,CAACjJ,CAAD,CAA/B;EACD;EACF;EACF;EACF;;EACD,SAAOyB,CAAP;EACD,CA7BD;;;EAgCA,IAAM2J,QAAQ,GAAG,SAAXA,QAAW,CAAStC,IAAT,EAAehD,IAAf,EAAqBoE,MAArB,EAA6BzD,KAA7B,EAAoC;EACnD,MAAI,OAAOX,IAAP,KAAgB,QAAhB,IAA4BA,IAAhC,EAAsC;EACpC,SAAK,IAAI9F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpCgL,MAAAA,KAAK,CAAClC,IAAD,EAAOhD,IAAI,CAAC9F,CAAD,CAAX,EAAgBkK,MAAhB,EAAwBzD,KAAxB,CAAL;EACD;;EACD;EACD;;EACDuE,EAAAA,KAAK,CAAClC,IAAD,EAAOhD,IAAP,EAAaoE,MAAb,EAAqBzD,KAArB,CAAL;EACD,CARD;;EASA,WAAc,GAAG2E,QAAjB;;ECzCA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAASvC,IAAT,EAAejD,GAAf,EAAoBY,KAApB,EAA2B;EACvC,MAAMkE,MAAM,GAAGlE,KAAK,CAACX,IAArB,CADuC;;EAGvC,MAAID,GAAG,CAAC,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClBA,IAAAA,GAAG,GAAGA,GAAG,CAAC5C,OAAJ,CAAY,IAAZ,EAAkB,EAAlB,CAAN;EACD,GALsC;;;EAOvC,MAAI0H,MAAM,CAAC9E,GAAD,CAAN,KAAgBJ,SAApB,EAA+B;EAC7B,WAAO,IAAP;EACD,GATsC;;;EAWvC,MAAI6F,OAAO,GAAGX,MAAM,CAAC9E,GAAD,CAAN,CAAYoF,IAAZ,IAAoB,EAAlC;;EACA,OAAK,IAAIjL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsL,OAAO,CAAClL,MAA5B,EAAoCJ,CAAC,EAArC,EAAyC;EACvC,QAAI8I,IAAI,CAAChD,IAAL,CAAUwF,OAAO,CAACtL,CAAD,CAAjB,MAA0B,IAA9B,EAAoC;EAClC,aAAO,KAAP;EACD;EACF;;EACD,MAAI2K,MAAM,CAAC9E,GAAD,CAAN,CAAYqD,GAAZ,KAAoBzD,SAAxB,EAAmC;EACjC,WAAO4F,KAAK,CAACvC,IAAD,EAAO6B,MAAM,CAAC9E,GAAD,CAAN,CAAYqD,GAAnB,EAAwBzC,KAAxB,CAAZ,CADiC;EAElC;;EACD,SAAO,IAAP;EACD,CArBD;;EAuBA,WAAc,GAAG4E,KAAjB;;ECtBA;;;;;EAIA,SAAW,GAAG,cAAA,CAASvF,IAAT,EAAeoE,MAAf,EAAuBzD,KAAvB,EAA8B;EAC1C8E,EAAAA,GAAG,CAAC,IAAD,EAAOzF,IAAP,EAAaoE,MAAb,EAAqBzD,KAArB,CAAH;EACA,SAAO,IAAP;EACD,CAHD;EAKA;;;EACA,WAAe,GAAG,gBAAA,CAASX,IAAT,EAAeoE,MAAf,EAAuBzD,KAAvB,EAA8B;EAC9C,MAAI4E,OAAK,CAAC,IAAD,EAAOvF,IAAP,EAAaW,KAAb,CAAT,EAA8B;EAC5B8E,IAAAA,GAAG,CAAC,IAAD,EAAOzF,IAAP,EAAaoE,MAAb,EAAqBzD,KAArB,CAAH;EACD;;EACD,SAAO,IAAP;EACD,CALD;EAOA;;;;;;EAIA,aAAa,GAAG,kBAAA,CAASX,IAAT,EAAeoE,MAAf,EAAuBzD,KAAvB,EAA8B;EAC5CuE,EAAAA,OAAK,CAAC,IAAD,EAAOlF,IAAP,EAAaoE,MAAb,EAAqBzD,KAArB,CAAL;EACA,SAAO,IAAP;EACD,CAHD;EAKA;;;;;;EAIA,aAAa,GAAG,kBAAA,CAASX,IAAT,EAAeW,KAAf,EAAsB;EACpC,SAAO4E,OAAK,CAAC,IAAD,EAAOvF,IAAP,EAAaW,KAAb,CAAZ;GADF;;;;;;;;;MC7BM+E;;;EACJ,kBAAuB;EAAA,QAAXzL,IAAW,uEAAJ,EAAI;;EAAA;;EACrBA,IAAAA,IAAI,GAAG0L,MAAM,CAAC1L,IAAD,CAAb;EACA,QAAI2L,GAAG,GAAGlI,KAAS,CAACzD,IAAD,CAAnB,CAFqB;;EAIrB,SAAKA,IAAL,GAAY2L,GAAG,CAAC3L,IAAJ,IAAY,EAAxB;EACA,SAAK8C,KAAL,GAAa6I,GAAG,CAAC7I,KAAjB;EACA,SAAKK,OAAL,GAAewI,GAAG,CAACxI,OAAnB;EACA,SAAK0C,IAAL,GAAY8F,CAAY,IAAxB;EACA,SAAK1G,QAAL,GAAgB0G,CAAgB,IAAhC;EAEA,SAAKjI,GAAL,GAAWiI,GAAG,CAACjI,GAAJ,IAAW,EAAtB;EACA,SAAKC,IAAL,GAAYgI,GAAG,CAAChI,IAAJ,IAAY,EAAxB;EACA,SAAKoC,IAAL,GAAY,EAAZ;EACA,SAAK6F,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKvG,EAAL,GAAUxF,GAAM,CAAC6L,GAAG,CAAC7I,KAAL,CAAhB;EACA,SAAKqG,GAAL,GAAW,MAAX,CAhBqB;;;EAkBrB,QAAIwC,GAAG,CAACzH,KAAR,EAAe;EACb,WAAKA,KAAL,GAAayH,GAAG,CAACzH,KAAjB;EACD;EACF;;;;;;0BAEGnE,KAAK;EACP,UAAI4L,GAAG,GAAGlI,KAAS,CAAC1D,GAAD,CAAnB;EAEA,WAAKC,IAAL,GAAY2L,GAAG,CAAC3L,IAAhB;EACA,WAAK8C,KAAL,GAAa6I,GAAG,CAAC7I,KAAjB;EACA,aAAO,IAAP;EACD;;;;;EAGH;;;EACA2I,IAAI,CAAClB,SAAL,CAAeuB,KAAf,GAAuB,YAAW;EAChC,MAAI/C,IAAI,GAAG,IAAI0C,IAAJ,CAAS,KAAKzL,IAAd,CAAX;EACA+I,EAAAA,IAAI,CAACrF,GAAL,GAAW,KAAKA,GAAhB;EACAqF,EAAAA,IAAI,CAACpF,IAAL,GAAY,KAAKA,IAAjB;EACAoF,EAAAA,IAAI,CAAChD,IAAL,GAAY7D,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkB,KAAKxD,IAAvB,CAAZ,CAJgC;;;EAOhC,SAAOgD,IAAP;EACD,CARD;;EAUA7G,MAAM,CAACqH,MAAP,CAAckC,IAAI,CAAClB,SAAnB,EAA8BwB,OAA9B;EACA7J,MAAM,CAACqH,MAAP,CAAckC,IAAI,CAAClB,SAAnB,EAA8ByB,GAA9B;EAEA,UAAc,GAAGP,IAAjB;;ECpDA;EACA,SAAa,GAAG,eAASrK,CAAT,EAAY;EAC1B,MAAI,KAAKf,MAAL,KAAgB,CAApB,EAAuB;EACrB,WAAO,EAAP;EACD,GAHyB;;;EAK1B,MAAI,KAAK4L,KAAL,CAAWC,KAAf,EAAsB;EACpB,QAAI9K,CAAC,KAAKsE,SAAV,EAAqB;EACnB,aAAO,KAAKuG,KAAL,CAAWC,KAAX,CAAiB9K,CAAjB,CAAP;EACD;;EACD,WAAO,KAAK6K,KAAL,CAAWC,KAAlB;EACD;;EACD,MAAIA,KAAK,GAAG,CAAC,KAAKC,IAAL,CAAUC,GAAV,CAAc,KAAK5G,KAAnB,CAAD,CAAZ;;EACA,OAAK,IAAIvF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKI,MAAL,GAAc,CAAlC,EAAqCJ,CAAC,IAAI,CAA1C,EAA6C;EAC3C,QAAIqF,EAAE,GAAG4G,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAL,CAAwBwL,IAAjC;;EACA,QAAIvG,EAAE,KAAK,IAAX,EAAiB;;EAEf8E,MAAAA,OAAO,CAACiC,KAAR,CAAc,qDAAqD,KAAK7G,KAA1D,GAAkE,GAAhF;EACA;EACD;;EACD,QAAIuD,IAAI,GAAG,KAAKoD,IAAL,CAAUC,GAAV,CAAc9G,EAAd,CAAX;EACA4G,IAAAA,KAAK,CAACI,IAAN,CAAWvD,IAAX,EAR2C;;EAU3C,QAAI3H,CAAC,KAAKsE,SAAN,IAAmBtE,CAAC,KAAKnB,CAA7B,EAAgC;EAC9B,aAAOiM,KAAK,CAAC9K,CAAD,CAAZ;EACD;EACF;;EACD,MAAIA,CAAC,KAAKsE,SAAV,EAAqB;EACnB,SAAKuG,KAAL,CAAWC,KAAX,GAAmBA,KAAnB;EACD;;EACD,MAAI9K,CAAC,KAAKsE,SAAV,EAAqB;EACnB,WAAOwG,KAAK,CAAC9K,CAAD,CAAZ;EACD;;EACD,SAAO8K,KAAP;EACD,CAjCD;EAmCA;;;EACA,SAAa,GAAG,cAAA,CAASK,SAAT,EAAoB;EAAA;;EAClC,MAAIA,SAAJ,EAAe;EACb,QAAIjL,CAAC,GAAG,KAAKkL,SAAL,CAAe,KAAKhH,KAApB,EAA2B,KAAKnF,MAAhC,CAAR;EACAiB,IAAAA,CAAC,CAAC2K,KAAF,GAAU,KAAKA,KAAf;EACA,WAAO3K,CAAP;EACD,GALiC;;;EAOlC,MAAI4K,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,MAAIO,QAAQ,GAAGP,KAAK,CAACQ,GAAN,CAAU,UAAAhL,CAAC;EAAA,WAAIA,CAAC,CAACoK,KAAF,EAAJ;EAAA,GAAX,CAAf,CARkC;;EAUlCW,EAAAA,QAAQ,CAACrK,OAAT,CAAiB,UAACV,CAAD,EAAIzB,CAAJ,EAAU;;EAEzB,IAAA,KAAI,CAACkM,IAAL,CAAUX,GAAV,CAAc9J,CAAd;;EACA,QAAI+K,QAAQ,CAACxM,CAAC,GAAG,CAAL,CAAZ,EAAqB;EACnByB,MAAAA,CAAC,CAACmK,IAAF,GAASY,QAAQ,CAACxM,CAAC,GAAG,CAAL,CAAR,CAAgBqF,EAAzB;EACD;;EACD,QAAImH,QAAQ,CAACxM,CAAC,GAAG,CAAL,CAAZ,EAAqB;EACnByB,MAAAA,CAAC,CAACkK,IAAF,GAASa,QAAQ,CAACxM,CAAC,GAAG,CAAL,CAAR,CAAgBqF,EAAzB;EACD;EACF,GATD;EAUA,SAAO,KAAKkH,SAAL,CAAeC,QAAQ,CAAC,CAAD,CAAR,CAAYnH,EAA3B,EAA+BmH,QAAQ,CAACpM,MAAxC,CAAP;EACD,CArBD;EAuBA;;;EACA,YAAgB,GAAG,iBAAA,GAAW;EAC5B,MAAI6L,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,SAAOA,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAZ;EACD,CAHD;EAKA;;;EACA,SAAa,GAAG,cAAA,CAASsM,MAAT,EAAiB;EAC/B,MAAI,KAAKtM,MAAL,KAAgB,CAAhB,IAAqB,CAACsM,MAA1B,EAAkC;EAChC,WAAO,KAAP;EACD;;EACD,MAAI,KAAKnH,KAAL,KAAemH,MAAnB,EAA2B;EACzB,WAAO,IAAP;EACD,GAN8B;;;EAQ/B,MAAI,KAAKV,KAAL,CAAWC,KAAf,EAAsB;EACpB,QAAIA,MAAK,GAAG,KAAKD,KAAL,CAAWC,KAAvB;;EACA,SAAK,IAAIjM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,MAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,UAAIiM,MAAK,CAACjM,CAAD,CAAL,CAASqF,EAAT,KAAgBqH,MAApB,EAA4B;EAC1B,eAAO,IAAP;EACD;EACF;;EACD,WAAO,KAAP;EACD,GAhB8B;;;EAkB/B,MAAIC,MAAM,GAAG,KAAKpH,KAAlB;;EACA,OAAK,IAAIvF,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG,KAAKI,MAAL,GAAc,CAAlC,EAAqCJ,EAAC,IAAI,CAA1C,EAA6C;EAC3C,QAAI8I,IAAI,GAAG,KAAKoD,IAAL,CAAUC,GAAV,CAAcQ,MAAd,CAAX;;EACA,QAAI7D,IAAI,KAAKrD,SAAb,EAAwB;EACtB0E,MAAAA,OAAO,CAACiC,KAAR,+DAAqEO,MAArE,0BAA2F,KAAKpH,KAAhG,UADsB;;EAGtB,aAAO,KAAP;EACD;;EACD,QAAIuD,IAAI,CAAC8C,IAAL,KAAcc,MAAlB,EAA0B;EACxB,aAAO,IAAP;EACD;;EACDC,IAAAA,MAAM,GAAG7D,IAAI,CAAC8C,IAAd;EACD;;EACD,SAAO,KAAP;EACD,CAhCD;EAkCA;;;EACA,aAAiB,GAAG,kBAAA,GAAW;EAC7B,SAAO,KAAKK,KAAL,GAAaW,MAAb,CAAoB,UAAAnL,CAAC;EAAA,WAAIA,CAAC,CAAC1B,IAAF,KAAW,EAAf;EAAA,GAArB,EAAwCK,MAA/C;EACD,CAFD;EAIA;;;EACA,gBAAoB,GAAG,qBAAA,GAAW;EAChC,MAAIqB,CAAC,GAAG,KAAKwK,KAAL,CAAW,CAAX,CAAR,CADgC;;EAGhC,SAAOxK,CAAC,CAACkK,IAAT,EAAe;EACblK,IAAAA,CAAC,GAAG,KAAKyK,IAAL,CAAUC,GAAV,CAAc1K,CAAC,CAACkK,IAAhB,CAAJ;EACD;;EACD,MAAIpG,KAAK,GAAG9D,CAAC,CAAC4D,EAAd;EACA,MAAIwH,GAAG,GAAG,CAAV,CAPgC;;EAShC,SAAOpL,CAAC,CAACmK,IAAT,EAAe;EACbnK,IAAAA,CAAC,GAAG,KAAKyK,IAAL,CAAUC,GAAV,CAAc1K,CAAC,CAACmK,IAAhB,CAAJ;EACAiB,IAAAA,GAAG,IAAI,CAAP;EACD;;EACD,SAAO,KAAKN,SAAL,CAAehH,KAAf,EAAsBsH,GAAtB,CAAP;GAbF;;;;;;;;;;;EC3GA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAShN,GAAT,EAAc;EAC5B,SAAOA,GAAG,CAACmD,OAAJ,CAAY,KAAZ,EAAmB,EAAnB,CAAP;EACD,CAFD;EAIA;;;EACA,QAAY,GAAG,gBAAwC;EAAA,MAA/ByE,OAA+B,uEAArB,EAAqB;EAAA,MAAjBqF,OAAiB;EAAA,MAARC,MAAQ;;EACrD,MAAI,OAAOtF,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,QAAIA,OAAO,KAAK,QAAhB,EAA0B;EACxBA,MAAAA,OAAO,GAAG;EACRU,QAAAA,UAAU,EAAE,IADJ;EAERpG,QAAAA,OAAO,EAAE,IAFD;EAGRkG,QAAAA,SAAS,EAAE,IAHH;EAIRI,QAAAA,WAAW,EAAE,IAJL;EAKRH,QAAAA,QAAQ,EAAE,IALF;EAMRK,QAAAA,aAAa,EAAE,IANP;EAORxD,QAAAA,QAAQ,EAAE,IAPF;EAQR8C,QAAAA,MAAM,EAAE;EARA,OAAV;EAUD,KAXD,MAWO,IAAIJ,OAAO,KAAK,OAAhB,EAAyB;EAC9BA,MAAAA,OAAO,GAAG;EACRK,QAAAA,SAAS,EAAE,KADH;EAERG,QAAAA,SAAS,EAAE,IAFH;EAGRI,QAAAA,WAAW,EAAE,IAHL;EAIRF,QAAAA,UAAU,EAAE,IAJJ;EAKRpG,QAAAA,OAAO,EAAE,IALD;EAMRgD,QAAAA,QAAQ,EAAE;EANF,OAAV;EAQD,KATM,MASA,IAAI0C,OAAO,KAAK,SAAhB,EAA2B;EAChCA,MAAAA,OAAO,GAAG;EACRK,QAAAA,SAAS,EAAE,KADH;EAERG,QAAAA,SAAS,EAAE,IAFH;EAGRI,QAAAA,WAAW,EAAE,KAHL;;EAIRF,QAAAA,UAAU,EAAE,IAJJ;EAKRpG,QAAAA,OAAO,EAAE,IALD;EAMRgD,QAAAA,QAAQ,EAAE,IANF;EAOR9B,QAAAA,OAAO,EAAE;EAPD,OAAV;EASD,KAVM,MAUA,IAAIwE,OAAO,KAAK,MAAhB,EAAwB;EAC7BA,MAAAA,OAAO,GAAG;EACRK,QAAAA,SAAS,EAAE,KADH;EAERG,QAAAA,SAAS,EAAE,IAFH;EAGRI,QAAAA,WAAW,EAAE,IAHL;EAIRF,QAAAA,UAAU,EAAE,IAJJ;EAKRpG,QAAAA,OAAO,EAAE,IALD;EAMRgD,QAAAA,QAAQ,EAAE,IANF;EAORY,QAAAA,IAAI,EAAE;EAPE,OAAV;EASD,KAVM,MAUA;EACL8B,MAAAA,OAAO,GAAG,EAAV;EACD;EACF;;EACD,MAAIuE,KAAK,GAAG,KAAKA,KAAL,EAAZ,CA9CqD;;EAgDrD,MAAIgB,MAAM,GAAG,KAAb;;EACA,MAAIhB,KAAK,CAAC,CAAD,CAAL,IAAYA,KAAK,CAAC,CAAD,CAAL,CAASN,IAAT,KAAkB,IAA9B,IAAsCM,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAL,CAAwBwL,IAAxB,KAAiC,IAA3E,EAAiF;EAC/EqB,IAAAA,MAAM,GAAG,IAAT;EACD;;EACD,MAAIlN,IAAI,GAAGkM,KAAK,CAAClI,MAAN,CAAa,UAACjE,GAAD,EAAM2B,CAAN,EAASzB,CAAT,EAAe;EACrC0H,IAAAA,OAAO,CAACW,IAAR,GAAe2E,MAAM,IAAIhN,CAAC,KAAKiM,KAAK,CAAC7L,MAAN,GAAe,CAA9C;EACA,QAAIuH,OAAO,GAAG,IAAd;EACA,QAAIC,QAAQ,GAAG,IAAf;;EACA,QAAIqF,MAAM,KAAK,KAAf,EAAsB;;EAEpB,UAAIjN,CAAC,KAAK,CAAN,IAAW+M,OAAf,EAAwB;EACtBpF,QAAAA,OAAO,GAAG,KAAV;EACD,OAJmB;;;EAMpB,UAAI3H,CAAC,KAAKiM,KAAK,CAAC7L,MAAN,GAAe,CAArB,IAA0B4M,MAA9B,EAAsC;EACpCpF,QAAAA,QAAQ,GAAG,KAAX;EACD;EACF;;EACD,QAAIsF,GAAG,GAAGzL,CAAC,CAAC0L,OAAF,CAAUzF,OAAV,EAAmBC,OAAnB,EAA4BC,QAA5B,CAAV,CAdqC;;;;EAkBrC,WAAO9H,GAAG,GAAGoN,GAAb;EACD,GAnBU,EAmBR,EAnBQ,CAAX,CApDqD;;EAyErD,MAAID,MAAM,KAAK,IAAX,IAAmBD,MAAvB,EAA+B;EAC7BjN,IAAAA,IAAI,GAAG+M,OAAO,CAAC/M,IAAD,CAAd;EACD;;EACD,MAAI2H,OAAO,CAAC3E,IAAR,KAAiB,IAArB,EAA2B;EACzBhD,IAAAA,IAAI,GAAGA,IAAI,CAACgD,IAAL,EAAP;EACD;;EACD,SAAOhD,IAAP;GA/EF;;;;;;ECLA;EACA,QAAY,GAAG,aAAA,GAAW;EACxB,MAAIkM,KAAK,GAAG,KAAKA,KAAL,EAAZ;;EACA,MAAIA,KAAK,CAAC7L,MAAN,GAAe,CAAnB,EAAsB;;EAEpB6L,IAAAA,KAAK,CAAC,CAAD,CAAL,CAASxI,GAAT,GAAewI,KAAK,CAAC,CAAD,CAAL,CAASxI,GAAT,CAAaR,OAAb,CAAqB,MAArB,EAA6B,EAA7B,CAAf,CAFoB;;EAIpB,QAAImK,QAAQ,GAAGnB,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAApB;EACAgN,IAAAA,QAAQ,CAAC1J,IAAT,GAAgB0J,QAAQ,CAAC1J,IAAT,CAAcT,OAAd,CAAsB,MAAtB,EAA8B,EAA9B,CAAhB;EACD;;EACD,SAAO,IAAP;GATF;;;;;;ECDA,IAAMoK,aAAa,GAAG,WAAtB;;EAGA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAASzF,MAAT,EAAiBjE,KAAjB,EAAwB;;EAE1C,MAAIyJ,aAAa,CAAC1K,IAAd,CAAmBiB,KAAnB,CAAJ,EAA+B;EAC7B,QAAIwE,UAAU,GAAGP,MAAM,CAAC0F,KAAP,CAAa,MAAb,CAAjB;EACA,WAAO3J,KAAK,GAAGwE,UAAf;EACD;;EACD,SAAOP,MAAP;EACD,CAPD;;;EAUA,IAAM2F,aAAa,GAAG,SAAhBA,aAAgB,CAASC,WAAT,EAAsBjB,QAAtB,EAAgC;;EAEpDA,EAAAA,QAAQ,CAAC,CAAD,CAAR,CAAY/I,GAAZ,GAAkBgK,WAAW,CAAC,CAAD,CAAX,CAAehK,GAAjC;EACA,MAAI2J,QAAQ,GAAGK,WAAW,CAACA,WAAW,CAACrN,MAAZ,GAAqB,CAAtB,CAA1B,CAHoD;;EAMpD,MAAIsN,OAAO,GAAGlB,QAAQ,CAACA,QAAQ,CAACpM,MAAT,GAAkB,CAAnB,CAAtB;EACAsN,EAAAA,OAAO,CAAChK,IAAR,GAAe4J,WAAW,CAACF,QAAQ,CAAC1J,IAAV,EAAgBgK,OAAO,CAAChK,IAAxB,CAA1B,CAPoD;;EASpD0J,EAAAA,QAAQ,CAAC1J,IAAT,GAAgB,EAAhB,CAToD;;EAYpD,MAAI0J,QAAQ,CAAC1J,IAAT,KAAkB,EAAtB,EAA0B;EACxB0J,IAAAA,QAAQ,CAAC1J,IAAT,IAAiB,GAAjB;EACD;EACF,CAfD;;;EAkBA,IAAMiK,QAAQ,GAAG,SAAXA,QAAW,CAASF,WAAT,EAAsBjB,QAAtB,EAAgCN,IAAhC,EAAsC;EACrD,MAAI0B,UAAU,GAAGH,WAAW,CAACA,WAAW,CAACrN,MAAZ,GAAqB,CAAtB,CAA5B;EACA,MAAIyN,OAAO,GAAGrB,QAAQ,CAACA,QAAQ,CAACpM,MAAT,GAAkB,CAAnB,CAAtB;EACA,MAAI0N,OAAO,GAAGF,UAAU,CAAChC,IAAzB,CAHqD;;EAKrDgC,EAAAA,UAAU,CAAChC,IAAX,GAAkBY,QAAQ,CAAC,CAAD,CAAR,CAAYnH,EAA9B,CALqD;;EAOrDwI,EAAAA,OAAO,CAACjC,IAAR,GAAekC,OAAf,CAPqD;;EASrD,MAAIA,OAAJ,EAAa;;EAEX,QAAIC,SAAS,GAAG7B,IAAI,CAACC,GAAL,CAAS2B,OAAT,CAAhB;EACAC,IAAAA,SAAS,CAACpC,IAAV,GAAiBkC,OAAO,CAACxI,EAAzB;EACD,GAboD;;;EAerD,MAAI2I,QAAQ,GAAGP,WAAW,CAAC,CAAD,CAAX,CAAepI,EAA9B;;EACA,MAAI2I,QAAJ,EAAc;EACZ,QAAIN,OAAO,GAAGlB,QAAQ,CAAC,CAAD,CAAtB;EACAkB,IAAAA,OAAO,CAAC/B,IAAR,GAAeqC,QAAf;EACD;EACF,CApBD;;;EAuBA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAASC,IAAT,EAAe;EAC5B,SAAOA,IAAI,CAACtB,MAAL,CAAY,UAACxL,CAAD,EAAIpB,CAAJ,EAAU;EAC3B,WAAOkO,IAAI,CAACxJ,OAAL,CAAatD,CAAb,MAAoBpB,CAA3B;EACD,GAFM,CAAP;EAGD,CAJD;;;EAOA,IAAMmO,YAAY,GAAG,SAAfA,YAAe,CAAStG,MAAT,EAAiBuG,SAAjB,EAA4BC,GAA5B,EAAiC;EACpD,MAAIZ,WAAW,GAAG5F,MAAM,CAACoE,KAAP,EAAlB;EACA,MAAIO,QAAQ,GAAG4B,SAAS,CAACnC,KAAV,EAAf,CAFoD;;EAIpDuB,EAAAA,aAAa,CAACC,WAAD,EAAcjB,QAAd,CAAb,CAJoD;;EAMpDmB,EAAAA,QAAQ,CAACF,WAAD,EAAcjB,QAAd,EAAwB3E,MAAM,CAACqE,IAA/B,CAAR,CANoD;;;EAUpD,MAAIoC,SAAS,GAAG,CAACzG,MAAD,CAAhB;EACA,MAAI0G,KAAK,GAAG1G,MAAM,CAACtC,KAAnB;EACA,MAAIiJ,IAAI,GAAG,CAACH,GAAD,CAAX;EAEAG,EAAAA,IAAI,GAAGA,IAAI,CAACC,MAAL,CAAYJ,GAAG,CAACK,OAAJ,EAAZ,CAAP,CAdoD;;EAgBpDF,EAAAA,IAAI,CAACrM,OAAL,CAAa,UAAAwM,MAAM,EAAI;;EAErB,QAAIC,YAAY,GAAGD,MAAM,CAACT,IAAP,CAAYtB,MAAZ,CAAmB,UAAAvL,CAAC,EAAI;EACzC,aAAOA,CAAC,CAACkN,KAAF,CAAQA,KAAR,CAAP;EACD,KAFkB,CAAnB;EAGAD,IAAAA,SAAS,GAAGA,SAAS,CAACG,MAAV,CAAiBG,YAAjB,CAAZ;EACD,GAND,EAhBoD;;EAwBpDN,EAAAA,SAAS,GAAGL,MAAM,CAACK,SAAD,CAAlB;EACAA,EAAAA,SAAS,CAACnM,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,IAAAA,CAAC,CAACjB,MAAF,IAAYgO,SAAS,CAAChO,MAAtB;EACD,GAFD;EAGAyH,EAAAA,MAAM,CAACmE,KAAP,GAAe,EAAf;EACA,SAAOnE,MAAP;EACD,CA9BD;;EA+BA,UAAc,GAAGsG,YAAjB;;EC5FA,IAAM3G,UAAQ,GAAG,GAAjB;EAGA;;EACA,IAAMgG,eAAa,GAAG,SAAhBA,aAAgB,CAAShB,QAAT,EAAmB;;;EAGvC,MAAIY,QAAQ,GAAGZ,QAAQ,CAACA,QAAQ,CAACpM,MAAT,GAAkB,CAAnB,CAAvB;;EACA,MAAIoH,UAAQ,CAAC7E,IAAT,CAAcyK,QAAQ,CAAC1J,IAAvB,MAAiC,KAArC,EAA4C;EAC1C0J,IAAAA,QAAQ,CAAC1J,IAAT,IAAiB,GAAjB;EACD;;EACD;EACD,CARD;;;EAWA,IAAMiK,UAAQ,GAAG,SAAXA,QAAW,CAASkB,IAAT,EAAeT,SAAf,EAA0B5B,QAA1B,EAAoC;;EAEnD,MAAIY,QAAQ,GAAGZ,QAAQ,CAACA,QAAQ,CAACpM,MAAT,GAAkB,CAAnB,CAAvB;EACAgN,EAAAA,QAAQ,CAACxB,IAAT,GAAgBiD,IAAI,CAACtJ,KAArB,CAHmD;;EAKnD,MAAI2G,IAAI,GAAG2C,IAAI,CAAC3C,IAAhB;EACA,MAAI3G,KAAK,GAAG2G,IAAI,CAACC,GAAL,CAAS0C,IAAI,CAACtJ,KAAd,CAAZ;;EACA,MAAIA,KAAK,CAACoG,IAAV,EAAgB;EACd,QAAI9D,MAAM,GAAGqE,IAAI,CAACC,GAAL,CAAS5G,KAAK,CAACoG,IAAf,CAAb;EACA9D,IAAAA,MAAM,CAAC+D,IAAP,GAAcwC,SAAS,CAAC7I,KAAxB;EACD,GAVkD;;;;EAanDiH,EAAAA,QAAQ,CAAC,CAAD,CAAR,CAAYb,IAAZ,GAAmBkD,IAAI,CAAC5C,KAAL,CAAW,CAAX,EAAcN,IAAjC,CAbmD;;EAenDkD,EAAAA,IAAI,CAAC5C,KAAL,CAAW,CAAX,EAAcN,IAAd,GAAqByB,QAAQ,CAAC/H,EAA9B;EACD,CAhBD;;EAkBA,IAAM4I,QAAM,GAAG,SAATA,MAAS,CAASC,IAAT,EAAe;EAC5B,SAAOA,IAAI,CAACtB,MAAL,CAAY,UAACxL,CAAD,EAAIpB,CAAJ,EAAU;EAC3B,WAAOkO,IAAI,CAACxJ,OAAL,CAAatD,CAAb,MAAoBpB,CAA3B;EACD,GAFM,CAAP;EAGD,CAJD;;;EAOA,IAAM8O,UAAU,GAAG,SAAbA,UAAa,CAAS9L,QAAT,EAAmBoL,SAAnB,EAA8BC,GAA9B,EAAmC;EACpD,MAAMU,SAAS,GAAG/L,QAAQ,CAACuC,KAA3B;EACA,MAAIiH,QAAQ,GAAG4B,SAAS,CAACnC,KAAV,EAAf,CAFoD;;EAIpDuB,EAAAA,eAAa,CAAChB,QAAD,AAAA,CAAb,CAJoD;;EAMpDmB,EAAAA,UAAQ,CAAC3K,QAAD,EAAWoL,SAAX,EAAsB5B,QAAtB,CAAR,CANoD;;EAQpD,MAAI8B,SAAS,GAAG,CAACtL,QAAD,CAAhB;EACA,MAAIwL,IAAI,GAAG,CAACH,GAAD,CAAX;EACAG,EAAAA,IAAI,GAAGA,IAAI,CAACC,MAAL,CAAYJ,GAAG,CAACK,OAAJ,EAAZ,CAAP;EACAF,EAAAA,IAAI,CAACrM,OAAL,CAAa,UAAA1B,CAAC,EAAI;;EAEhB,QAAImO,YAAY,GAAGnO,CAAC,CAACyN,IAAF,CAAOtB,MAAP,CAAc,UAAAvL,CAAC,EAAI;EACpC,aAAOA,CAAC,CAACkN,KAAF,CAAQQ,SAAR,KAAsB1N,CAAC,CAACkN,KAAF,CAAQH,SAAS,CAAC7I,KAAlB,CAA7B;EACD,KAFkB,CAAnB;EAGA+I,IAAAA,SAAS,GAAGA,SAAS,CAACG,MAAV,CAAiBG,YAAjB,CAAZ;EACD,GAND,EAXoD;;EAmBpDN,EAAAA,SAAS,GAAGL,QAAM,CAACK,SAAD,CAAlB,CAnBoD;;EAqBpDA,EAAAA,SAAS,CAACnM,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,IAAAA,CAAC,CAACjB,MAAF,IAAYgO,SAAS,CAAChO,MAAtB,CADqB;;EAGrB,QAAIiB,CAAC,CAACkE,KAAF,KAAYwJ,SAAhB,EAA2B;EACzB1N,MAAAA,CAAC,CAACkE,KAAF,GAAU6I,SAAS,CAAC7I,KAApB;EACD;;EACDlE,IAAAA,CAAC,CAAC2K,KAAF,GAAU,EAAV;EACD,GAPD;EAQA,SAAOhJ,QAAP;EACD,CA9BD;;EA+BA,WAAc,GAAG8L,UAAjB;;ECvEA;EACA,IAAME,SAAS,GAAG,SAAZA,SAAY,CAASX,GAAT,EAAchJ,EAAd,EAAkB4J,YAAlB,EAAgCrL,KAAhC,EAAuC;EACvD,MAAIyG,GAAG,GAAGgE,GAAG,CAACK,OAAJ,EAAV;EACArE,EAAAA,GAAG,CAACgC,IAAJ,CAASgC,GAAT;EAEAhE,EAAAA,GAAG,CAAClI,OAAJ,CAAY,UAAA1B,CAAC,EAAI;;EAEf,QAAIyO,MAAM,GAAGzO,CAAC,CAACyN,IAAF,CAAOiB,IAAP,CAAY,UAAA9N,CAAC;EAAA,aAAIA,CAAC,CAACkN,KAAF,CAAQlJ,EAAR,CAAJ;EAAA,KAAb,CAAb;;EACA,QAAI,CAAC6J,MAAL,EAAa;EACX;EACD;;EACDA,IAAAA,MAAM,CAAC9O,MAAP,IAAiB6O,YAAjB,CANe;;EAQf,QAAIC,MAAM,CAAC3J,KAAP,KAAiBF,EAArB,EAAyB;EACvB6J,MAAAA,MAAM,CAAC3J,KAAP,GAAe3B,KAAK,CAACyB,EAArB;EACD;;EACD6J,IAAAA,MAAM,CAAClD,KAAP,GAAe,EAAf;EACD,GAZD,EAJuD;;EAkBvDqC,EAAAA,GAAG,CAACH,IAAJ,GAAWG,GAAG,CAACH,IAAJ,CAAStB,MAAT,CAAgB,UAAAvL,CAAC,EAAI;EAC9B,QAAI,CAACA,CAAC,CAACkE,KAAH,IAAY,CAAClE,CAAC,CAACjB,MAAnB,EAA2B;EACzB,aAAO,KAAP;EACD;;EACD,WAAO,IAAP;EACD,GALU,CAAX;EAMD,CAxBD;EA0BA;;;;;EAGA,IAAMgP,YAAY,GAAG,SAAfA,YAAe,CAASF,MAAT,EAAiBb,GAAjB,EAAsB;EACzC,MAAInC,IAAI,GAAGmC,GAAG,CAACnC,IAAJ,EAAX;EACA,MAAID,KAAK,GAAGiD,MAAM,CAACjD,KAAP,EAAZ,CAFyC;;EAKzC,MAAIN,IAAI,GAAGO,IAAI,CAACC,GAAL,CAASF,KAAK,CAAC,CAAD,CAAL,CAASN,IAAlB,KAA2B,EAAtC;EACA,MAAI/H,KAAK,GAAGsI,IAAI,CAACC,GAAL,CAASF,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAL,CAAwBwL,IAAjC,KAA0C,EAAtD;;EAEA,MAAIK,KAAK,CAAC,CAAD,CAAL,CAASjH,QAAT,IAAqB2G,IAAI,CAAC3G,QAA9B,EAAwC;EACtC2G,IAAAA,IAAI,CAAC0D,GAAL,CAAS1D,IAAI,CAAC3G,QAAd;EACA2G,IAAAA,IAAI,CAACjI,IAAL,IAAa,GAAb;EACD,GAXwC;;;EAczCsL,EAAAA,SAAS,CAACX,GAAD,EAAMa,MAAM,CAAC3J,KAAb,EAAoB2J,MAAM,CAAC9O,MAA3B,EAAmCwD,KAAnC,CAAT,CAdyC;;EAiBzC,MAAI+H,IAAJ,EAAU;EACRA,IAAAA,IAAI,CAACC,IAAL,GAAYhI,KAAK,CAACyB,EAAlB;EACD,GAnBwC;;;EAqBzC,MAAIzB,KAAJ,EAAW;EACTA,IAAAA,KAAK,CAAC+H,IAAN,GAAaA,IAAI,CAACtG,EAAlB;EACD,GAvBwC;;;;;EA6B1C,CA7BD;;EA8BA,WAAc,GAAG+J,YAAjB;;ECvDA;;EACA,YAAc,GAAG,iBAAA,CAAShB,SAAT,EAAoBC,GAApB,EAAyB;EACxCiB,EAAAA,MAAM,CAAC,IAAD,EAAOlB,SAAP,EAAkBC,GAAlB,CAAN;EACA,SAAO,IAAP;EACD,CAHD;EAKA;;;EACA,aAAe,GAAG,kBAAA,CAASD,SAAT,EAAoBC,GAApB,EAAyB;EACzCkB,EAAAA,OAAO,CAAC,IAAD,EAAOnB,SAAP,EAAkBC,GAAlB,CAAP;EACA,SAAO,IAAP;EACD,CAHD;;EAKA,YAAc,GAAG,iBAAA,CAASA,GAAT,EAAc;EAC7Be,EAAAA,OAAY,CAAC,IAAD,EAAOf,GAAP,CAAZ;EACA,SAAO,IAAP;EACD,CAHD;;;EAMA,WAAe,GAAG,gBAAA,CAASD,SAAT,EAAoBC,GAApB,EAAyB;;EAEzC,MAAImB,WAAW,GAAG,KAAKpP,MAAvB;EACAkP,EAAAA,MAAM,CAAC,IAAD,EAAOlB,SAAP,EAAkBC,GAAlB,CAAN,CAHyC;;EAMzC,MAAIoB,GAAG,GAAG,KAAKlD,SAAL,CAAe,KAAKhH,KAApB,EAA2B,KAAKnF,MAAhC,CAAV;EACAqP,EAAAA,GAAG,CAACrP,MAAJ,GAAaoP,WAAb;EACAJ,EAAAA,OAAY,CAACK,GAAD,EAAMpB,GAAN,CAAZ;EACD,CATD;EAWA;;;;;EAGA,WAAe,GAAG,gBAAA,CAAShN,CAAT,EAAY;EAC5B,MAAI4K,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,MAAI3F,MAAM,GAAG;EACXuB,IAAAA,MAAM,EAAE,IADG;EAEX0F,IAAAA,KAAK,EAAE,IAFI;EAGX3J,IAAAA,KAAK,EAAE;EAHI,GAAb;EAKA,MAAIwB,KAAK,GAAG6G,KAAK,CAACyD,SAAN,CAAgB,UAAAjO,CAAC;EAAA,WAAIA,CAAC,CAAC4D,EAAF,KAAShE,CAAC,CAACkE,KAAf;EAAA,GAAjB,CAAZ;;EACA,MAAIH,KAAK,KAAK,CAAC,CAAf,EAAkB;EAChB,WAAOkB,MAAP;EACD,GAV2B;;;EAY5B,MAAIf,KAAK,GAAG0G,KAAK,CAAC0D,KAAN,CAAY,CAAZ,EAAevK,KAAf,CAAZ;;EACA,MAAIG,KAAK,CAACnF,MAAN,GAAe,CAAnB,EAAsB;EACpBkG,IAAAA,MAAM,CAACuB,MAAP,GAAgB,KAAK0E,SAAL,CAAehH,KAAK,CAAC,CAAD,CAAL,CAASF,EAAxB,EAA4BE,KAAK,CAACnF,MAAlC,CAAhB;EACD;;EACD,MAAImN,KAAK,GAAGtB,KAAK,CAAC0D,KAAN,CAAYvK,KAAZ,EAAmBA,KAAK,GAAG/D,CAAC,CAACjB,MAA7B,CAAZ;;EACA,MAAImN,KAAK,CAACnN,MAAN,GAAe,CAAnB,EAAsB;EACpBkG,IAAAA,MAAM,CAACiH,KAAP,GAAe,KAAKhB,SAAL,CAAegB,KAAK,CAAC,CAAD,CAAL,CAASlI,EAAxB,EAA4BkI,KAAK,CAACnN,MAAlC,CAAf;EACD;;EACD,MAAIoF,GAAG,GAAGyG,KAAK,CAAC0D,KAAN,CAAYvK,KAAK,GAAG/D,CAAC,CAACjB,MAAtB,EAA8B6L,KAAK,CAAC7L,MAApC,CAAV;;EACA,MAAIoF,GAAG,CAACpF,MAAJ,GAAa,CAAjB,EAAoB;EAClBkG,IAAAA,MAAM,CAAC1C,KAAP,GAAe,KAAK2I,SAAL,CAAe/G,GAAG,CAAC,CAAD,CAAH,CAAOH,EAAtB,EAA0BG,GAAG,CAACpF,MAA9B,EAAsC,KAAK8L,IAA3C,CAAf;EACD;;EACD,SAAO5F,MAAP;GAxBF;;;;;;;;;;ECrCA;EACA,UAAY,GAAG,aAAA,GAA8B;EAAA,MAArBoB,OAAqB,uEAAX,EAAW;EAAA,MAAPjB,KAAO;EAC3C,MAAImJ,GAAG,GAAG,EAAV,CAD2C;;EAG3C,MAAIlI,OAAO,CAAC3H,IAAZ,EAAkB;EAChB6P,IAAAA,GAAG,CAAC7P,IAAJ,GAAW,KAAKA,IAAL,EAAX;EACD;;EACD,MAAI2H,OAAO,CAACI,MAAZ,EAAoB;EAClB8H,IAAAA,GAAG,CAAC9H,MAAJ,GAAa,KAAK/H,IAAL,CAAU,QAAV,CAAb;EACD;;EACD,MAAI2H,OAAO,CAAC7E,KAAZ,EAAmB;EACjB+M,IAAAA,GAAG,CAAC/M,KAAJ,GAAY,KAAK9C,IAAL,CAAU,OAAV,CAAZ;EACD;;EACD,MAAI2H,OAAO,CAACxE,OAAZ,EAAqB;EACnB0M,IAAAA,GAAG,CAAC1M,OAAJ,GAAc,KAAKnD,IAAL,CAAU,SAAV,CAAd;EACD;;EACD,MAAI2H,OAAO,CAAC9B,IAAZ,EAAkB;EAChBgK,IAAAA,GAAG,CAAChK,IAAJ,GAAW,KAAK7F,IAAL,CAAU,MAAV,CAAX;EACD;;EACD,MAAI2H,OAAO,CAAC3E,IAAZ,EAAkB;EAChB,QAAI6M,GAAG,CAAC7P,IAAR,EAAc;EACZ6P,MAAAA,GAAG,CAAC7P,IAAJ,GAAW6P,GAAG,CAAC7P,IAAJ,CAASgD,IAAT,EAAX;EACD;;EACD,QAAI6M,GAAG,CAAC9H,MAAR,EAAgB;EACd8H,MAAAA,GAAG,CAAC9H,MAAJ,GAAa8H,GAAG,CAAC9H,MAAJ,CAAW/E,IAAX,EAAb;EACD;;EACD,QAAI6M,GAAG,CAAC1M,OAAR,EAAiB;EACf0M,MAAAA,GAAG,CAAC1M,OAAJ,GAAc0M,GAAG,CAAC1M,OAAJ,CAAYH,IAAZ,EAAd;EACD;EACF,GA5B0C;;;EA8B3C,MAAI2E,OAAO,CAACuE,KAAZ,EAAmB;EACjB,QAAIvE,OAAO,CAACuE,KAAR,KAAkB,IAAtB,EAA4B;EAC1BvE,MAAAA,OAAO,CAACuE,KAAR,GAAgB,EAAhB;EACD;;EACD2D,IAAAA,GAAG,CAAC3D,KAAJ,GAAY,KAAKA,KAAL,GAAaQ,GAAb,CAAiB,UAAAhL,CAAC;EAAA,aAAIA,CAAC,CAACoO,IAAF,CAAOnI,OAAO,CAACuE,KAAf,EAAsBxF,KAAtB,CAAJ;EAAA,KAAlB,CAAZ;EACD;;EACD,SAAOmJ,GAAP;GApCF;;;;;;ECDA;EACA,aAAiB,GAAG,kBAAA,CAASE,IAAT,EAAe;;EAEjC,MAAI,CAACA,IAAL,EAAW;EACTA,IAAAA,IAAI,GAAG,IAAP;EACD;;EACD,MAAI5D,IAAI,GAAG,KAAKA,IAAhB,CALiC;;EAOjC,MAAID,KAAK,GAAG,EAAZ;;EACA,MAAM8D,QAAQ,GAAG,SAAXA,QAAW,CAAS1K,EAAT,EAAa;EAC5B,QAAIyD,IAAI,GAAGoD,IAAI,CAACC,GAAL,CAAS9G,EAAT,CAAX;;EACA,QAAI,CAACyD,IAAL,EAAW;EACT;EACD;;EACDmD,IAAAA,KAAK,CAACI,IAAN,CAAWvD,IAAX;;EACA,QAAIA,IAAI,CAAC6C,IAAT,EAAe;EACboE,MAAAA,QAAQ,CAACjH,IAAI,CAAC8C,IAAN,CAAR,CADa;EAEd;EACF,GATD;;EAUA,MAAIoE,GAAG,GAAG,KAAK/D,KAAL,EAAV;EACA,MAAImB,QAAQ,GAAG4C,GAAG,CAACA,GAAG,CAAC5P,MAAJ,GAAa,CAAd,CAAlB;EACA2P,EAAAA,QAAQ,CAAC3C,QAAQ,CAACxB,IAAV,CAAR;;EACA,MAAIK,KAAK,CAAC7L,MAAN,KAAiB,CAArB,EAAwB;EACtB,WAAO,EAAP;EACD,GAvBgC;;;EAyBjC,MAAIiB,CAAC,GAAG,KAAKkL,SAAL,CAAeN,KAAK,CAAC,CAAD,CAAL,CAAS5G,EAAxB,EAA4B4G,KAAK,CAAC7L,MAAlC,CAAR;EACA,SAAOiB,CAAC,CAACkM,KAAF,CAAQuC,IAAR,CAAP;EACD,CA3BD;EA6BA;;;EACA,cAAkB,GAAG,mBAAA,CAASA,IAAT,EAAe;;EAElC,MAAI,CAACA,IAAL,EAAW;EACTA,IAAAA,IAAI,GAAG,IAAP;EACD;;EACD,MAAI5D,IAAI,GAAG,KAAKA,IAAhB,CALkC;;EAOlC,MAAID,KAAK,GAAG,EAAZ;;EACA,MAAMgE,SAAS,GAAG,SAAZA,SAAY,CAAS5K,EAAT,EAAa;EAC7B,QAAIyD,IAAI,GAAGoD,IAAI,CAACC,GAAL,CAAS9G,EAAT,CAAX;;EACA,QAAI,CAACyD,IAAL,EAAW;EACT;EACD;;EACDmD,IAAAA,KAAK,CAACI,IAAN,CAAWvD,IAAX;;EACA,QAAIA,IAAI,CAAC6C,IAAT,EAAe;EACbsE,MAAAA,SAAS,CAACnH,IAAI,CAAC6C,IAAN,CAAT,CADa;EAEd;EACF,GATD;;EAUA,MAAI7C,IAAI,GAAGoD,IAAI,CAACC,GAAL,CAAS,KAAK5G,KAAd,CAAX;EACA0K,EAAAA,SAAS,CAACnH,IAAI,CAAC6C,IAAN,CAAT;;EACA,MAAIM,KAAK,CAAC7L,MAAN,KAAiB,CAArB,EAAwB;EACtB,WAAO,EAAP;EACD,GAtBiC;;;EAwBlC,MAAIiB,CAAC,GAAG,KAAKkL,SAAL,CAAeN,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAL,CAAwBiF,EAAvC,EAA2C4G,KAAK,CAAC7L,MAAjD,CAAR;EACA,SAAOiB,CAAC,CAACkM,KAAF,CAAQuC,IAAR,CAAP;GAzBF;;;;;;;EC/BA,aAAc,GAAG7N,MAAM,CAACqH,MAAP,CACf,EADe,EAEfC,QAFe,EAGfC,OAHe,EAIfC,SAJe,EAKfC,SALe,EAMfC,SANe,EAOfuG,YAPe,CAAjB;;ECAA;EACA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAS9O,CAAT,EAAYyO,IAAZ,EAAkB;EACjC,MAAIA,IAAI,CAAC1P,MAAL,KAAgB,CAApB,EAAuB;EACrB,WAAO,IAAP;EACD;;EACD,OAAK,IAAIJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8P,IAAI,CAAC1P,MAAzB,EAAiCJ,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAImF,GAAG,GAAG2K,IAAI,CAAC9P,CAAD,CAAd,CADuC;;EAGvC,QAAImF,GAAG,CAACiL,QAAJ,KAAiB,IAAjB,IAAyBjL,GAAG,CAACoB,QAAJ,KAAiB,IAA9C,EAAoD;;EAElD,UAAIpB,GAAG,CAACI,KAAJ,KAAc,IAAd,IAAsBvF,CAAC,GAAG,CAA9B,EAAiC;EAC/B,eAAO,IAAP;EACD;EACF,KARsC;;;EAUvC,QAAImF,GAAG,CAACG,QAAJ,KAAiB,IAAjB,IAAyBH,GAAG,CAACoB,QAAJ,KAAiB,IAA9C,EAAoD;EAClD,aAAO,IAAP;EACD;EACF;;EACD,SAAO,KAAP;EACD,CAnBD;;EAoBA,eAAc,GAAG4J,QAAjB;;EClBA;;EACA,IAAME,SAAS,GAAG,SAAZA,SAAY,CAASpE,KAAT,EAAgBxK,CAAhB,EAAmB0D,GAAnB,EAAwBmL,KAAxB,EAA+BlL,KAA/B,EAAsChF,MAAtC,EAA8C;EAC9D,MAAImF,KAAK,GAAG9D,CAAZ;;EACA,SAAOA,CAAC,GAAGwK,KAAK,CAAC7L,MAAjB,EAAyBqB,CAAC,IAAI,CAA9B,EAAiC;;EAE/B,QAAI6O,KAAK,IAAIrE,KAAK,CAACxK,CAAD,CAAL,CAASyD,SAAT,CAAmBoL,KAAnB,EAA0BlL,KAAK,GAAG3D,CAAlC,EAAqCrB,MAArC,CAAb,EAA2D;EACzD,aAAOqB,CAAP;EACD;;EACD,QAAI8O,KAAK,GAAG9O,CAAC,GAAG8D,KAAJ,GAAY,CAAxB,CAL+B;;EAO/B,QAAIJ,GAAG,CAACqL,GAAJ,KAAY/K,SAAZ,IAAyB8K,KAAK,KAAKpL,GAAG,CAACqL,GAA3C,EAAgD;EAC9C,aAAO/O,CAAP;EACD,KAT8B;;;EAW/B,QAAIwK,KAAK,CAACxK,CAAD,CAAL,CAASyD,SAAT,CAAmBC,GAAnB,EAAwBC,KAAK,GAAG3D,CAAhC,EAAmCrB,MAAnC,MAA+C,KAAnD,EAA0D;;EAExD,UAAI+E,GAAG,CAACsL,GAAJ,KAAYhL,SAAZ,IAAyB8K,KAAK,GAAGpL,GAAG,CAACsL,GAAzC,EAA8C;EAC5C,eAAO,IAAP;EACD;;EACD,aAAOhP,CAAP;EACD;EACF;;EACD,SAAOA,CAAP;EACD,CAtBD;;;EAyBA,IAAMiP,QAAQ,GAAG,SAAXA,QAAW,CAASzE,KAAT,EAAgBxK,CAAhB,EAAmBkP,OAAnB,EAA4BvL,KAA5B,EAAmChF,MAAnC,EAA2C;;EAE1D,MAAI,CAACuQ,OAAL,EAAc;EACZ,WAAO1E,KAAK,CAAC7L,MAAb;EACD,GAJyD;;;EAM1D,SAAOqB,CAAC,GAAGwK,KAAK,CAAC7L,MAAjB,EAAyBqB,CAAC,IAAI,CAA9B,EAAiC;EAC/B,QAAIwK,KAAK,CAACxK,CAAD,CAAL,CAASyD,SAAT,CAAmByL,OAAnB,EAA4BvL,KAAK,GAAG3D,CAApC,EAAuCrB,MAAvC,MAAmD,IAAvD,EAA6D;EAC3D,aAAOqB,CAAP;EACD;EACF,GAVyD;;;EAY1D,SAAO,IAAP;EACD,CAbD;;;EAgBA,IAAMmP,gBAAgB,GAAG,SAAnBA,gBAAmB,CAASC,WAAT,EAAsBC,YAAtB,EAAoC7E,KAApC,EAA2C8E,UAA3C,EAAuDC,KAAvD,EAA8D;EACrF,MAAMpQ,CAAC,GAAGiQ,WAAW,CAACC,YAAD,CAArB;;EAEA,MAAIlQ,CAAJ,EAAO;EACL,WAAOA,CAAP;EACD;;EALoF,MAO7EyE,EAP6E,GAOtE4G,KAAK,CAAC8E,UAAD,CAPiE,CAO7E1L,EAP6E;EASrFwL,EAAAA,WAAW,CAACC,YAAD,CAAX,GAA4B;EAC1BE,IAAAA,KAAK,EAAEvF,MAAM,CAACuF,KAAD,CADa;EAE1BzL,IAAAA,KAAK,EAAEF,EAFmB;EAG1BjF,IAAAA,MAAM,EAAE;EAHkB,GAA5B;EAMA,SAAOyQ,WAAW,CAACC,YAAD,CAAlB;EACD,CAhBD;EAkBA;;;EACA,IAAMG,OAAO,GAAG,SAAVA,OAAU,CAAShF,KAAT,EAAgB6D,IAAhB,EAAsB1K,KAAtB,EAA6BhF,MAA7B,EAAqC;EACnD,MAAMyQ,WAAW,GAAG,EAApB;EACA,MAAIK,eAAe,GAAG,IAAtB;EACA,MAAIzP,CAAC,GAAG,CAAR,CAHmD;;EAKnD,OAAK,IAAIF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuO,IAAI,CAAC1P,MAAzB,EAAiCmB,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAI4D,GAAG,GAAG2K,IAAI,CAACvO,CAAD,CAAd,CADuC;;EAIvC,QAAM4P,YAAY,GAAG,OAAOhM,GAAG,CAACiM,KAAX,KAAqB,QAArB,IAAiC,OAAOjM,GAAG,CAACiM,KAAX,KAAqB,QAA3E;EACA,QAAIN,YAAY,GAAG,IAAnB,CALuC;;EAQvC,QAAIK,YAAJ,EAAkB;EAChB,UAAMxF,IAAI,GAAGmE,IAAI,CAACvO,CAAC,GAAG,CAAL,CAAjB;;EACA,UAAIoK,IAAI,IAAIA,IAAI,CAACyF,KAAL,KAAejM,GAAG,CAACiM,KAA3B,IAAoCF,eAAxC,EAAyD;EACvDJ,QAAAA,YAAY,GAAGI,eAAf;EACD,OAFD,MAEO;EACLJ,QAAAA,YAAY,GAAGjR,GAAM,CAACsF,GAAG,CAACiM,KAAL,CAArB;EACAF,QAAAA,eAAe,GAAGJ,YAAlB;EACD;EACF,KAhBsC;;;EAmBvC,QAAI,CAAC7E,KAAK,CAACxK,CAAD,CAAV,EAAe;;EAEb,UAAM4P,QAAQ,GAAGvB,IAAI,CAACH,KAAL,CAAWpO,CAAX,EAAc8E,IAAd,CAAmB,UAAAiL,MAAM;EAAA,eAAI,CAACA,MAAM,CAAClB,QAAZ;EAAA,OAAzB,CAAjB;;EACA,UAAIiB,QAAQ,KAAK,KAAjB,EAAwB;EACtB;EACD,OALY;;;EAOb,aAAO,CAAC,KAAD,EAAQ,IAAR,CAAP;EACD,KA3BsC;;;EA8BvC,QAAIlM,GAAG,CAACG,QAAJ,KAAiB,IAAjB,IAAyBH,GAAG,CAACoM,MAAJ,KAAe,IAA5C,EAAkD;EAChD,UAAIC,MAAM,GAAGd,QAAQ,CAACzE,KAAD,EAAQxK,CAAR,EAAWqO,IAAI,CAACvO,CAAC,GAAG,CAAL,CAAf,EAAwB4D,GAAxB,EAA6BC,KAA7B,AAAA,CAArB,CADgD;;EAGhD,UAAID,GAAG,CAACsL,GAAJ,KAAYhL,SAAZ,IAAyB+L,MAAM,GAAG/P,CAAT,GAAa0D,GAAG,CAACsL,GAA9C,EAAmD;EACjD,eAAO,CAAC,KAAD,EAAQ,IAAR,CAAP;EACD,OAL+C;;;EAOhD,UAAItL,GAAG,CAACqL,GAAJ,KAAY/K,SAAZ,IAAyB+L,MAAM,GAAG/P,CAAT,GAAa0D,GAAG,CAACqL,GAA9C,EAAmD;EACjD/O,QAAAA,CAAC,GAAGA,CAAC,GAAG0D,GAAG,CAACqL,GAAZ;EACA;EACD;;EAED,UAAIgB,MAAM,KAAK,IAAf,EAAqB;EACnB,eAAO,CAAC,KAAD,EAAQ,IAAR,CAAP,CADmB;EAEpB,OAd+C;;;EAiBhD,UAAIL,YAAJ,EAAkB;EAChB,YAAMvQ,CAAC,GAAGgQ,gBAAgB,CAACC,WAAD,EAAcC,YAAd,EAA4B7E,KAA5B,EAAmCxK,CAAnC,EAAsC0D,GAAG,CAACiM,KAA1C,CAA1B,CADgB;;EAIhBxQ,QAAAA,CAAC,CAACR,MAAF,GAAWoR,MAAM,GAAG/P,CAApB;EACD;;EAEDA,MAAAA,CAAC,GAAG+P,MAAJ;EAEA;EACD,KAzDsC;;;;;;;EAgEvC,QACErM,GAAG,CAACG,QAAJ,KAAiB,IAAjB,IACCH,GAAG,CAACK,GAAJ,KAAY,IAAZ,IACCL,GAAG,CAACoM,MAAJ,KAAe,IADhB,IAECnM,KAAK,GAAG3D,CAAR,GAAYrB,MAAM,GAAG,CAFtB,IAGC6L,KAAK,CAACxK,CAAD,CAAL,CAASyD,SAAT,CAAmBjD,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBnE,GAAlB,EAAuB;EAAEK,MAAAA,GAAG,EAAE;EAAP,KAAvB,CAAnB,EAA2DJ,KAAK,GAAG3D,CAAnE,EAAsErB,MAAtE,MAAkF,IAJpF,IAKA6L,KAAK,CAACxK,CAAD,CAAL,CAASyD,SAAT,CAAmBC,GAAnB,EAAwBC,KAAK,GAAG3D,CAAhC,EAAmCrB,MAAnC,MAA+C,IANjD,EAOE;EACA,UAAIqR,OAAO,GAAGhQ,CAAd,CADA;;;EAIA,UAAI0D,GAAG,CAACiL,QAAJ,IAAgBN,IAAI,CAACvO,CAAC,GAAG,CAAL,CAAxB,EAAiC;;EAE/B,YAAI0K,KAAK,CAACxK,CAAD,CAAL,CAASyD,SAAT,CAAmB4K,IAAI,CAACvO,CAAC,GAAG,CAAL,CAAvB,EAAgC6D,KAAK,GAAG3D,CAAxC,EAA2CrB,MAA3C,MAAuD,IAA3D,EAAiE;;;EAG/D,cAAI,CAAC6L,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAN,IAAiBwK,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAayD,SAAb,CAAuB4K,IAAI,CAACvO,CAAC,GAAG,CAAL,CAA3B,EAAoC6D,KAAK,GAAG3D,CAA5C,EAA+CrB,MAA/C,MAA2D,KAAhF,EAAuF;EACrFmB,YAAAA,CAAC,IAAI,CAAL;EACD;EACF;EACF,OAbD;;;EAeAE,MAAAA,CAAC,IAAI,CAAL,CAfA;;EAiBA,UAAI0D,GAAG,CAACK,GAAJ,KAAY,IAAhB,EAAsB;;EAEpB,YAAI/D,CAAC,KAAKwK,KAAK,CAAC7L,MAAZ,IAAsB+E,GAAG,CAACoM,MAAJ,KAAe,IAAzC,EAA+C;EAC7C,iBAAO,CAAC,KAAD,EAAQ,IAAR,CAAP;EACD;EACF,OAtBD;;;EAyBA,UAAIpM,GAAG,CAACoM,MAAJ,KAAe,IAAnB,EAAyB;;;;;EAKvB9P,QAAAA,CAAC,GAAG4O,SAAS,CAACpE,KAAD,EAAQxK,CAAR,EAAWQ,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBnE,GAAlB,EAAuB;EAAEI,UAAAA,KAAK,EAAE,KAAT;EAAgBC,UAAAA,GAAG,EAAE;EAArB,SAAvB,CAAX,EAAiEsK,IAAI,CAACvO,CAAC,GAAG,CAAL,CAArE,EAA8E6D,KAA9E,EAAqFhF,MAArF,CAAb;;EACA,YAAIqB,CAAC,KAAK,IAAV,EAAgB;EACd,iBAAO,CAAC,KAAD,EAAQ,IAAR,CAAP,CADc;EAEf,SARsB;;;;EAWvB,YAAI0D,GAAG,CAACK,GAAJ,KAAY,IAAZ,IAAoBJ,KAAK,GAAG3D,CAAR,KAAcrB,MAAtC,EAA8C;EAC5C,iBAAO,CAAC,KAAD,EAAQ,IAAR,CAAP,CAD4C;EAE7C;EACF;;EACD,UAAI+Q,YAAJ,EAAkB;;EAEhB,YAAMvQ,EAAC,GAAGgQ,gBAAgB,CAACC,WAAD,EAAcC,YAAd,EAA4B7E,KAA5B,EAAmCwF,OAAnC,EAA4CtM,GAAG,CAACiM,KAAhD,CAA1B,CAFgB;;;EAKhB,YAAI3P,CAAC,GAAG,CAAJ,IAAS0D,GAAG,CAACoM,MAAjB,EAAyB;EACvB3Q,UAAAA,EAAC,CAACR,MAAF,IAAYqB,CAAC,GAAGgQ,OAAhB;EACD,SAFD,MAEO;EACL7Q,UAAAA,EAAC,CAACR,MAAF;EACD;EACF;;EAED;EACD,KA5HsC;;;EA+HvC,QAAI+E,GAAG,CAACiL,QAAJ,KAAiB,IAArB,EAA2B;EACzB;EACD,KAjIsC;;;EAmIvC,QAAInE,KAAK,CAACxK,CAAD,CAAL,CAASiQ,UAAT,MAAyB5B,IAAI,CAACvO,CAAC,GAAG,CAAL,CAA7B,IAAwC0K,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAjD,EAA0D;;EAExD,UAAIwK,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAayD,SAAb,CAAuBC,GAAvB,EAA4BC,KAAK,GAAG3D,CAApC,EAAuCrB,MAAvC,CAAJ,EAAoD;EAClDqB,QAAAA,CAAC,IAAI,CAAL;EACA;EACD;EACF,KAzIsC;;;EA2IvC,WAAO,CAAC,KAAD,EAAQ,IAAR,CAAP;EACD,GAjJkD;;;EAoJnD,SAAO,CAACwK,KAAK,CAAC0D,KAAN,CAAY,CAAZ,EAAelO,CAAf,CAAD,EAAoBoP,WAApB,CAAP;EACD,CArJD;;EAsJA,eAAc,GAAGI,OAAjB;;ECtNA,IAAMU,WAAW,GAAG,SAAdA,WAAc,CAAS1F,KAAT,EAAgB6D,IAAhB,EAAsB8B,OAAtB,EAA+B;EACjD,MAAI,CAACA,OAAD,IAAYA,OAAO,CAACxR,MAAR,KAAmB,CAAnC,EAAsC;EACpC,WAAOwR,OAAP;EACD,GAHgD;;;EAKjD,MAAIC,KAAK,GAAG/B,IAAI,CAACzJ,IAAL,CAAU,UAAA9E,CAAC;EAAA,WAAIA,CAAC,CAACiE,GAAN;EAAA,GAAX,CAAZ;;EACA,MAAIqM,KAAJ,EAAW;EACT,QAAIzE,QAAQ,GAAGnB,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAApB;EACAwR,IAAAA,OAAO,GAAGA,OAAO,CAAChF,MAAR,CAAe;EAAA,UAAUvC,GAAV,QAAGkD,KAAH;EAAA,aAAoBlD,GAAG,CAAC3F,OAAJ,CAAY0I,QAAZ,MAA0B,CAAC,CAA/C;EAAA,KAAf,CAAV;EACD;;EACD,SAAOwE,OAAP;EACD,CAXD;;EAYA,kBAAc,GAAGD,WAAjB;;ECZA;;;;;;;;;;;;;;;;;EAiBA,IAAMG,SAAS,GAAG,sBAAlB;EACA,IAAMC,OAAO,GAAG,IAAhB;EACA,IAAMC,WAAW,GAAG,IAAIC,MAAJ,CAAW,UAAX,CAApB;;EAEA,IAAM/N,WAAS,GAAG,SAAZA,SAAY,CAAApE,GAAG,EAAI;EACvB,SAAOA,GAAG,CAAC0K,MAAJ,CAAW,CAAX,EAAcnG,WAAd,KAA8BvE,GAAG,CAAC2K,MAAJ,CAAW,CAAX,CAArC;EACD,CAFD;;EAIA,IAAMjF,GAAG,GAAG,SAANA,GAAM,CAAS1F,GAAT,EAAc;EACxB,SAAOA,GAAG,CAACA,GAAG,CAACM,MAAJ,GAAa,CAAd,CAAV;EACD,CAFD;;EAGA,IAAMmF,KAAK,GAAG,SAARA,KAAQ,CAASzF,GAAT,EAAc;EAC1B,SAAOA,GAAG,CAAC,CAAD,CAAV;EACD,CAFD;;EAGA,IAAMoS,UAAU,GAAG,SAAbA,UAAa,CAASpS,GAAT,EAAc;EAC/B,SAAOA,GAAG,CAAC2K,MAAJ,CAAW,CAAX,CAAP;EACD,CAFD;;EAGA,IAAM0H,QAAQ,GAAG,SAAXA,QAAW,CAASrS,GAAT,EAAc;EAC7B,SAAOA,GAAG,CAAC2K,MAAJ,CAAW,CAAX,EAAc3K,GAAG,CAACM,MAAJ,GAAa,CAA3B,CAAP;EACD,CAFD;;EAGA,IAAMgS,SAAS,GAAG,SAAZA,SAAY,CAAStS,GAAT,EAAc;EAC9BA,EAAAA,GAAG,GAAGoS,UAAU,CAACpS,GAAD,CAAhB;EACAA,EAAAA,GAAG,GAAGqS,QAAQ,CAACrS,GAAD,CAAd;EACA,SAAOA,GAAP;EACD,CAJD;;;EAOA,IAAMuS,UAAU,GAAG,SAAbA,UAAa,CAASzQ,CAAT,EAAY;EAC7B,MAAI8J,GAAG,GAAG,EAAV,CAD6B;;EAG7B,OAAK,IAAI1L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,IAAI,CAA5B,EAA+B;;EAE7B,QAAIwF,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClB8J,MAAAA,GAAG,CAAClG,GAAJ,GAAU,IAAV;EACA5D,MAAAA,CAAC,GAAGuQ,QAAQ,CAACvQ,CAAD,CAAZ;EACD,KAL4B;;;EAO7B,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB8J,MAAAA,GAAG,CAACnG,KAAJ,GAAY,IAAZ;EACA3D,MAAAA,CAAC,GAAGsQ,UAAU,CAACtQ,CAAD,CAAd;EACD,KAV4B;;;EAY7B,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAb,IAAoB4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAnC,EAAwC;EACtC8J,MAAAA,GAAG,CAAC0F,KAAJ,GAAY,IAAZ;;EAEA,UAAI7L,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB8J,QAAAA,GAAG,CAAC4G,SAAJ,GAAgB9M,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAX,GAAiB,QAAjB,GAA4B,OAA5C;EACD,OAFD,MAEO;EACL8J,QAAAA,GAAG,CAAC4G,SAAJ,GAAgB,KAAhB;EACD;;EAED1Q,MAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU,KAAV,EAAiB,EAAjB,CAAJ;EACArB,MAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU,KAAV,EAAiB,EAAjB,CAAJ,CAVsC;;EAatC,UAAIsC,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB,YAAMgO,GAAG,GAAGoC,WAAW,CAACO,IAAZ,CAAiB3Q,CAAjB,CAAZ;;EAEA,YAAIgO,GAAG,CAACxP,MAAJ,IAAc,CAAlB,EAAqB;EACnBsL,UAAAA,GAAG,CAAC0F,KAAJ,GAAYxB,GAAG,CAAC,CAAD,CAAf;EACAhO,UAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU2M,GAAG,CAAC,CAAD,CAAb,EAAkB,EAAlB,CAAJ;EACD;EACF;EACF,KAjC4B;;;EAmC7B,QAAIpK,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClB8J,MAAAA,GAAG,CAAC6F,MAAJ,GAAa,IAAb;EACA3P,MAAAA,CAAC,GAAGuQ,QAAQ,CAACvQ,CAAD,CAAZ;EACD;;EACD,QAAIA,CAAC,KAAK,GAAN,IAAa4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAxB,IAA+BA,CAAC,KAAK,KAAzC,EAAgD;EAC9C8J,MAAAA,GAAG,CAAC6F,MAAJ,GAAa,IAAb;EACA3P,MAAAA,CAAC,GAAGuQ,QAAQ,CAACvQ,CAAD,CAAZ;EACD;;EACD,QAAI4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClB8J,MAAAA,GAAG,CAAC0E,QAAJ,GAAe,IAAf;EACAxO,MAAAA,CAAC,GAAGuQ,QAAQ,CAACvQ,CAAD,CAAZ;EACD;;EAED,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB8J,MAAAA,GAAG,CAACnF,QAAJ,GAAe,IAAf;EACA3E,MAAAA,CAAC,GAAGsQ,UAAU,CAACtQ,CAAD,CAAd;EACD,KAnD4B;;;EAqD7B,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAb,IAAoB4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAnC,EAAwC;;EAEtC,UAAImQ,OAAO,CAACpP,IAAR,CAAaf,CAAb,CAAJ,EAAqB;EACnB8J,QAAAA,GAAG,CAACxF,OAAJ,GAActE,CAAC,CAAChC,KAAF,CAAQmS,OAAR,CAAd;EACArG,QAAAA,GAAG,CAACvF,QAAJ,GAAe,KAAf;EACD,OAHD,MAGO;EACLuF,QAAAA,GAAG,CAACxF,OAAJ,GAActE,CAAC,CAAChC,KAAF,CAAQ,GAAR,CAAd;EACA8L,QAAAA,GAAG,CAACvF,QAAJ,GAAe,IAAf;EACD,OARqC;;;EAUtCuF,MAAAA,GAAG,CAACxF,OAAJ,CAAY,CAAZ,IAAiBgM,UAAU,CAACxG,GAAG,CAACxF,OAAJ,CAAY,CAAZ,CAAD,CAA3B;EACA,UAAImC,IAAI,GAAGqD,GAAG,CAACxF,OAAJ,CAAY9F,MAAZ,GAAqB,CAAhC;EACAsL,MAAAA,GAAG,CAACxF,OAAJ,CAAYmC,IAAZ,IAAoB8J,QAAQ,CAACzG,GAAG,CAACxF,OAAJ,CAAYmC,IAAZ,CAAD,CAA5B,CAZsC;;EActCqD,MAAAA,GAAG,CAACxF,OAAJ,GAAcwF,GAAG,CAACxF,OAAJ,CAAYuG,GAAZ,CAAgB,UAAAjL,CAAC;EAAA,eAAIA,CAAC,CAACuB,IAAF,EAAJ;EAAA,OAAjB,CAAd;EACA2I,MAAAA,GAAG,CAACxF,OAAJ,GAAcwF,GAAG,CAACxF,OAAJ,CAAY0G,MAAZ,CAAmB,UAAApL,CAAC;EAAA,eAAIA,CAAJ;EAAA,OAApB,CAAd,CAfsC;;EAiBtCkK,MAAAA,GAAG,CAACxF,OAAJ,GAAcwF,GAAG,CAACxF,OAAJ,CAAYuG,GAAZ,CAAgB4F,UAAhB,CAAd;EACAzQ,MAAAA,CAAC,GAAG,EAAJ;EACD,KAxE4B;;;EA2E7B,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAb,IAAoB4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAnC,EAAwC;EACtCA,MAAAA,CAAC,GAAGwQ,SAAS,CAACxQ,CAAD,CAAb;EACA8J,MAAAA,GAAG,CAAC1F,KAAJ,GAAY,IAAIiM,MAAJ,CAAWrQ,CAAX,CAAZ,CAFsC;;EAGtC,aAAO8J,GAAP;EACD,KA/E4B;;;EAiF7B,QAAInG,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAb,IAAoB4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAnC,EAAwC;EACtCA,MAAAA,CAAC,GAAGwQ,SAAS,CAACxQ,CAAD,CAAb;EACA8J,MAAAA,GAAG,CAAC/F,IAAJ,GAAW,IAAX;EACA+F,MAAAA,GAAG,CAAC1H,IAAJ,GAAWpC,CAAX;EACA,aAAO8J,GAAP;EACD;EACF,GA1F4B;;;EA4F7B,MAAIoG,SAAS,CAACnP,IAAV,CAAef,CAAf,MAAsB,IAA1B,EAAgC;EAC9BA,IAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU6O,SAAV,EAAqB,UAACxR,CAAD,EAAIC,CAAJ,EAAU;EACjC,UAAI8J,GAAG,GAAG9J,CAAC,CAACX,KAAF,CAAQ,IAAR,CAAV;;EACA,UAAIyK,GAAG,CAACjK,MAAJ,KAAe,CAAnB,EAAsB;;EAEpBsL,QAAAA,GAAG,CAAC+E,GAAJ,GAAU+B,MAAM,CAACnI,GAAG,CAAC,CAAD,CAAJ,CAAhB;EACAqB,QAAAA,GAAG,CAAC8E,GAAJ,GAAUgC,MAAM,CAACnI,GAAG,CAAC,CAAD,CAAJ,CAAhB;EACD,OAJD,MAIO;;;EAGLqB,QAAAA,GAAG,CAAC+E,GAAJ,GAAU+B,MAAM,CAACnI,GAAG,CAAC,CAAD,CAAJ,CAAhB;EACAqB,QAAAA,GAAG,CAAC8E,GAAJ,GAAUgC,MAAM,CAACnI,GAAG,CAAC,CAAD,CAAH,IAAU,GAAX,CAAhB;EACD;;EACDqB,MAAAA,GAAG,CAAC6F,MAAJ,GAAa,IAAb;EACA,aAAO,EAAP;EACD,KAdG,CAAJ;EAeD,GA5G4B;;;EA+G7B,MAAIhM,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB8J,IAAAA,GAAG,CAAC7F,GAAJ,GAAUqM,UAAU,CAACtQ,CAAD,CAApB;EACA8J,IAAAA,GAAG,CAAC7F,GAAJ,GAAU3B,WAAS,CAACwH,GAAG,CAAC7F,GAAL,CAAnB;EACA,WAAO6F,GAAP;EACD,GAnH4B;;;EAqH7B,MAAInG,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB8J,IAAAA,GAAG,CAAC3F,MAAJ,GAAamM,UAAU,CAACtQ,CAAD,CAAvB;EACA,WAAO8J,GAAP;EACD;;EACD,MAAI9J,CAAC,KAAK,GAAV,EAAe;EACb8J,IAAAA,GAAG,CAACpG,QAAJ,GAAe,IAAf;EACA,WAAOoG,GAAP;EACD,GA5H4B;;;EA8H7B,MAAI9J,CAAC,KAAK,GAAV,EAAe;EACb8J,IAAAA,GAAG,CAACpG,QAAJ,GAAe,IAAf;EACAoG,IAAAA,GAAG,CAAC6F,MAAJ,GAAa,IAAb;EACA7F,IAAAA,GAAG,CAAC0E,QAAJ,GAAe,IAAf;EACA,WAAO1E,GAAP;EACD;;EACD,MAAI9J,CAAJ,EAAO;;EAELA,IAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU,KAAV,EAAiB,GAAjB,CAAJ;EACArB,IAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU,KAAV,EAAiB,GAAjB,CAAJ;EACAyI,IAAAA,GAAG,CAAC1H,IAAJ,GAAWpC,CAAC,CAACkB,WAAF,EAAX;EACD;;EACD,SAAO4I,GAAP;EACD,CA3ID;;EA4IA,gBAAc,GAAG2G,UAAjB;;ECxLA,IAAMI,OAAO,GAAG,SAAVA,OAAU,CAASC,OAAT,EAAkB;EAChC,SAAO,OAAOA,OAAP,KAAmB,QAAnB,IAA+B,OAAOA,OAAP,KAAmB,QAAzD;EACD,CAFD;;EAIA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAASC,MAAT,EAAiB;EAClC,MAAIC,OAAO,GAAG,KAAd;EACA,MAAIzN,KAAK,GAAG,CAAC,CAAb;EACA,MAAI0N,OAAJ,CAHkC;;EAMlC,OAAK,IAAI9S,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4S,MAAM,CAACxS,MAA3B,EAAmCJ,CAAC,EAApC,EAAwC;EACtC,QAAMmB,CAAC,GAAGyR,MAAM,CAAC5S,CAAD,CAAhB,CADsC;;EAItC,QAAImB,CAAC,CAACmR,SAAF,KAAgB,QAAhB,IAA4BnR,CAAC,CAACiQ,KAAF,KAAY,IAA5C,EAAkD;EAChDhM,MAAAA,KAAK,IAAI,CAAT;EACAjE,MAAAA,CAAC,CAACiQ,KAAF,GAAUhM,KAAV;EACA;EACD,KARqC;;;EAWtC,QAAIjE,CAAC,CAACmR,SAAF,KAAgB,OAApB,EAA6B;EAC3BO,MAAAA,OAAO,GAAG,IAAV;;EACA,UAAIJ,OAAO,CAACtR,CAAC,CAACiQ,KAAH,CAAX,EAAsB;EACpB0B,QAAAA,OAAO,GAAG3R,CAAC,CAACiQ,KAAZ;EACD,OAFD,MAEO;EACLhM,QAAAA,KAAK,IAAI,CAAT;EACA0N,QAAAA,OAAO,GAAG1N,KAAV;EACD;EACF,KAnBqC;;;EAsBtC,QAAIyN,OAAJ,EAAa;EACX1R,MAAAA,CAAC,CAACiQ,KAAF,GAAU0B,OAAV;EACD,KAxBqC;;;EA2BtC,QAAI3R,CAAC,CAACmR,SAAF,KAAgB,KAApB,EAA2B;EACzBO,MAAAA,OAAO,GAAG,KAAV;EACD;EACF;;EACD,SAAOD,MAAP;EACD,CAtCD;;EAwCA,IAAMG,QAAQ,GAAG,SAAXA,QAAW,CAASH,MAAT,EAAiB;EAChC,SAAOA,MAAM,CAACnG,GAAP,CAAW,UAAAuG,KAAK,EAAI;EACzB,QAAIA,KAAK,CAAC9M,OAAN,KAAkBT,SAAtB,EAAiC;;EAE/B,UAAIwN,UAAU,GAAGD,KAAK,CAAC9M,OAAN,CAAcE,KAAd,CAAoB,UAAA5F,CAAC;EAAA,eAAIA,CAAC,CAAC4P,QAAF,KAAe,IAAf,IAAuB5P,CAAC,CAAC+F,QAAF,KAAe,IAAtC,IAA8C/F,CAAC,CAACwD,IAAF,KAAWyB,SAA7D;EAAA,OAArB,CAAjB;;EACA,UAAIwN,UAAU,KAAK,IAAnB,EAAyB;EACvB,YAAIhN,KAAK,GAAG,EAAZ;EACA+M,QAAAA,KAAK,CAAC9M,OAAN,CAAc/D,OAAd,CAAsB,UAAA3B,CAAC;EAAA,iBAAKyF,KAAK,CAACzF,CAAC,CAACwD,IAAH,CAAL,GAAgB,IAArB;EAAA,SAAvB;EACAgP,QAAAA,KAAK,CAAC/M,KAAN,GAAcA,KAAd;EACA,eAAO+M,KAAK,CAAC9M,OAAb;EACD;EACF;;EACD,WAAO8M,KAAP;EACD,GAZM,CAAP;EAaD,CAdD;;EAgBA,IAAMrB,aAAW,GAAG,SAAdA,WAAc,CAASiB,MAAT,EAAiB;;;EAGnC,MAAIrC,KAAK,GAAGqC,MAAM,CAAChG,MAAP,CAAc,UAAAnL,CAAC;EAAA,WAAIA,CAAC,CAAC6Q,SAAN;EAAA,GAAf,EAAgClS,MAA5C;;EACA,MAAImQ,KAAK,GAAG,CAAZ,EAAe;EACbqC,IAAAA,MAAM,GAAGD,UAAU,CAACC,MAAD,CAAnB;EACD,GANkC;;;EAQnCA,EAAAA,MAAM,GAAGG,QAAQ,CAACH,MAAD,CAAjB,CARmC;;EAWnC,SAAOA,MAAP;EACD,CAZD;;EAaA,iBAAc,GAAGjB,aAAjB;;ECtEA,IAAMuB,SAAO,GAAG,SAAVA,OAAU,CAAS7I,GAAT,EAAc;EAC5B,SAAOpI,MAAM,CAACqI,SAAP,CAAiBL,QAAjB,CAA0BM,IAA1B,CAA+BF,GAA/B,MAAwC,gBAA/C;EACD,CAFD;;;EAKA,IAAM8I,aAAa,GAAG,SAAhBA,aAAgB,CAASrT,GAAT,EAAc;EAClC,MAAIuK,GAAG,GAAGvK,GAAG,CAACF,KAAJ,CAAU,0CAAV,CAAV;EACAyK,EAAAA,GAAG,GAAGA,GAAG,CAACoC,GAAJ,CAAQ,UAAAjL,CAAC;EAAA,WAAIA,CAAC,CAACuB,IAAF,EAAJ;EAAA,GAAT,CAAN;EACA,SAAOsH,GAAP;EACD,CAJD;;EAMA,IAAM+I,OAAO,GAAG,SAAVA,OAAU,CAAS/I,GAAT,EAAc;EAC5B,MAAIgJ,KAAK,GAAG,EAAZ;EACAhJ,EAAAA,GAAG,CAAClI,OAAJ,CAAY,UAAA7B,CAAC,EAAI;;EAEf,QAAI,aAAaqC,IAAb,CAAkBrC,CAAC,CAAC,CAAD,CAAnB,CAAJ,EAA6B;EAC3B+S,MAAAA,KAAK,CAAChH,IAAN,CAAW/L,CAAX;EACA;EACD;;EACD,QAAI4N,IAAI,GAAG5N,CAAC,CAACV,KAAF,CAAQ,GAAR,CAAX;EACAsO,IAAAA,IAAI,GAAGA,IAAI,CAACtB,MAAL,CAAY,UAAAhL,CAAC;EAAA,aAAIA,CAAJ;EAAA,KAAb,CAAP;EACAyR,IAAAA,KAAK,GAAGA,KAAK,CAAC5E,MAAN,CAAaP,IAAb,CAAR;EACD,GATD;EAUA,SAAOmF,KAAP;EACD,CAbD;;;EAgBA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAASjJ,GAAT,EAAc;EAC5B,SAAO,CACL;EACEnE,IAAAA,OAAO,EAAEmE,GAAG,CAACoC,GAAJ,CAAQ,UAAAjL,CAAC,EAAI;EACpB,aAAO;EACLwC,QAAAA,IAAI,EAAExC;EADD,OAAP;EAGD,KAJQ;EADX,GADK,CAAP;EASD,CAVD;;EAYA,IAAM+R,OAAO,GAAG,SAAVA,OAAU,CAASlF,GAAT,EAAc;EAC5B,MAAI,CAACA,GAAD,IAAQ,CAACA,GAAG,CAACH,IAAb,IAAqB,CAACG,GAAG,CAACH,IAAJ,CAAS,CAAT,CAA1B,EAAuC;EACrC,WAAO,EAAP;EACD;;EACD,MAAIsF,GAAG,GAAG,EAAV;EACAnF,EAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpBA,IAAAA,CAAC,CAAC4K,KAAF,GAAU9J,OAAV,CAAkB,UAAAV,CAAC,EAAI;EACrB+R,MAAAA,GAAG,CAACnH,IAAJ,CAAS;EAAEhH,QAAAA,EAAE,EAAE5D,CAAC,CAAC4D;EAAR,OAAT;EACD,KAFD;EAGD,GAJD;EAKA,SAAO,CAAC;EAAEa,IAAAA,OAAO,EAAEsN,GAAX;EAAgBjC,IAAAA,MAAM,EAAE;EAAxB,GAAD,CAAP;EACD,CAXD;EAaA;;;EACA,IAAMkC,MAAM,GAAG,SAATA,MAAS,CAASC,KAAT,EAAgB;;EAE7B,MAAIA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAKjO,SAA5B,IAAyCiO,KAAK,KAAK,EAAvD,EAA2D;EACzD,WAAO,EAAP;EACD,GAJ4B;;;EAM7B,MAAI,QAAOA,KAAP,MAAiB,QAArB,EAA+B;EAC7B,QAAIR,SAAO,CAACQ,KAAD,CAAX,EAAoB;EAClB,UAAIA,KAAK,CAACtT,MAAN,KAAiB,CAAjB,IAAsB,CAACsT,KAAK,CAAC,CAAD,CAAhC,EAAqC;EACnC,eAAO,EAAP;EACD,OAHiB;;;EAMlB,UAAI,QAAOA,KAAK,CAAC,CAAD,CAAZ,MAAoB,QAAxB,EAAkC;EAChC,eAAOA,KAAP;EACD,OARiB;;;EAUlB,UAAI,OAAOA,KAAK,CAAC,CAAD,CAAZ,KAAoB,QAAxB,EAAkC;EAChC,eAAOJ,OAAO,CAACI,KAAD,CAAd;EACD;EACF,KAd4B;;;EAgB7B,QAAIA,KAAK,IAAIA,KAAK,CAACxK,GAAN,KAAc,KAA3B,EAAkC;EAChC,aAAOqK,OAAO,CAACG,KAAD,CAAd;EACD;;EACD,WAAO,EAAP;EACD;;EACD,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;EAC7BA,IAAAA,KAAK,GAAGjI,MAAM,CAACiI,KAAD,CAAd,CAD6B;EAE9B;;EACD,MAAId,MAAM,GAAGO,aAAa,CAACO,KAAD,CAA1B;EACAd,EAAAA,MAAM,GAAGQ,OAAO,CAACR,MAAD,CAAhB;EACAA,EAAAA,MAAM,GAAGA,MAAM,CAACnG,GAAP,CAAW4F,YAAX,CAAT,CAhC6B;;EAkC7BO,EAAAA,MAAM,GAAGjB,aAAW,CAACiB,MAAD,CAApB,CAlC6B;;EAoC7B,SAAOA,MAAP;EACD,CArCD;;EAuCA,YAAc,GAAGa,MAAjB;;EC1FA;;EACA,IAAME,QAAQ,GAAG,SAAXA,QAAW,CAAStS,CAAT,EAAYyO,IAAZ,EAAoC;EAAA,MAAlB8D,QAAkB,uEAAP,KAAO;;;EAEnD,MAAI,OAAO9D,IAAP,KAAgB,QAApB,EAA8B;EAC5BA,IAAAA,IAAI,GAAG2D,QAAM,CAAC3D,IAAD,CAAb;EACD,GAJkD;;;EAMnD,MAAIK,WAAQ,CAAC9O,CAAD,EAAIyO,IAAJ,CAAR,KAAsB,IAA1B,EAAgC;EAC9B,WAAO,EAAP;EACD,GARkD;;;EAWnD,MAAM+D,SAAS,GAAG/D,IAAI,CAAClD,MAAL,CAAY,UAAArL,CAAC;EAAA,WAAIA,CAAC,CAAC6O,QAAF,KAAe,IAAnB;EAAA,GAAb,EAAsChQ,MAAxD;EACA,MAAI6L,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACA,MAAI2F,OAAO,GAAG,EAAd,CAbmD;;EAgBnD,MAAI9B,IAAI,CAAC,CAAD,CAAJ,CAAQvK,KAAR,KAAkB,IAAtB,EAA4B;EAAA,oBACJuO,WAAQ,CAAC7H,KAAD,EAAQ6D,IAAR,EAAc,CAAd,EAAiB7D,KAAK,CAAC7L,MAAvB,CADJ;EAAA;EAAA,QACrBmN,KADqB;EAAA,QACdwG,MADc;;EAE1B,QAAIxG,KAAK,KAAK,KAAV,IAAmBA,KAAK,CAACnN,MAAN,GAAe,CAAtC,EAAyC;EACvCmN,MAAAA,KAAK,GAAGA,KAAK,CAACX,MAAN,CAAa,UAAA1L,CAAC;EAAA,eAAIA,CAAJ;EAAA,OAAd,CAAR;EACA0Q,MAAAA,OAAO,CAACvF,IAAR,CAAa;EAAEkB,QAAAA,KAAK,EAALA,KAAF;EAASwG,QAAAA,MAAM,EAANA;EAAT,OAAb;EACD;;EAED,WAAOpC,cAAW,CAAC1F,KAAD,EAAQ6D,IAAR,EAAc8B,OAAd,CAAlB;EACD,GAxBkD;;;EA0BnD,OAAK,IAAI5R,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;;EAExC,QAAIA,CAAC,GAAG6T,SAAJ,GAAgB5H,KAAK,CAAC7L,MAA1B,EAAkC;EAChC;EACD,KAJuC;;;EAAA,qBAMlB0T,WAAQ,CAAC7H,KAAK,CAAC0D,KAAN,CAAY3P,CAAZ,CAAD,EAAiB8P,IAAjB,EAAuB9P,CAAvB,EAA0BiM,KAAK,CAAC7L,MAAhC,CANU;EAAA;EAAA,QAMnCmN,MANmC;EAAA,QAM5BwG,OAN4B;;EAOxC,QAAIxG,MAAK,KAAK,KAAV,IAAmBA,MAAK,CAACnN,MAAN,GAAe,CAAtC,EAAyC;;EAEvCJ,MAAAA,CAAC,IAAIuN,MAAK,CAACnN,MAAN,GAAe,CAApB,CAFuC;;EAIvCmN,MAAAA,MAAK,GAAGA,MAAK,CAACX,MAAN,CAAa,UAAA1L,CAAC;EAAA,eAAIA,CAAJ;EAAA,OAAd,CAAR;EACA0Q,MAAAA,OAAO,CAACvF,IAAR,CAAa;EAAEkB,QAAAA,KAAK,EAALA,MAAF;EAASwG,QAAAA,MAAM,EAANA;EAAT,OAAb,EALuC;;EAQvC,UAAIH,QAAQ,KAAK,IAAjB,EAAuB;EACrB,eAAOjC,cAAW,CAAC1F,KAAD,EAAQ6D,IAAR,EAAc8B,OAAd,CAAlB;EACD;EACF;EACF;;EACD,SAAOD,cAAW,CAAC1F,KAAD,EAAQ6D,IAAR,EAAc8B,OAAd,CAAlB;EACD,CA/CD;;EAgDA,eAAc,GAAG+B,QAAjB;;ECpDA;;;;EAGA,IAAMK,QAAQ,GAAG,SAAXA,QAAW,CAAS3S,CAAT,EAAYyO,IAAZ,EAAkB;EACjC,MAAInM,KAAK,GAAG,EAAZ;EACA,MAAI0G,GAAG,GAAGsJ,WAAQ,CAACtS,CAAD,EAAIyO,IAAJ,CAAlB;EACAzF,EAAAA,GAAG,CAAClI,OAAJ,CAAY,gBAAmB;EAAA,QAAT8R,EAAS,QAAhB1G,KAAgB;EAC7B0G,IAAAA,EAAE,CAAC9R,OAAH,CAAW,UAAAV,CAAC,EAAI;EACdkC,MAAAA,KAAK,CAAClC,CAAC,CAAC4D,EAAH,CAAL,GAAc,IAAd;EACD,KAFD;EAGD,GAJD,EAHiC;;EASjC,MAAI4G,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACA,MAAI3F,MAAM,GAAG,EAAb;EACA,MAAIwM,OAAO,GAAG,EAAd;EACA7G,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,QAAIkC,KAAK,CAAClC,CAAC,CAAC4D,EAAH,CAAL,KAAgB,IAApB,EAA0B;EACxB,UAAIyN,OAAO,CAAC1S,MAAR,GAAiB,CAArB,EAAwB;EACtBkG,QAAAA,MAAM,CAAC+F,IAAP,CAAYyG,OAAZ;EACAA,QAAAA,OAAO,GAAG,EAAV;EACD;;EACD;EACD;;EACDA,IAAAA,OAAO,CAACzG,IAAR,CAAa5K,CAAb;EACD,GATD;;EAUA,MAAIqR,OAAO,CAAC1S,MAAR,GAAiB,CAArB,EAAwB;EACtBkG,IAAAA,MAAM,CAAC+F,IAAP,CAAYyG,OAAZ;EACD;;EACD,SAAOxM,MAAP;EACD,CA1BD;;EA2BA,OAAc,GAAG0N,QAAjB;;EC7BA;;EACA,WAAa,GAAG,gBAAA,CAASlE,IAAT,EAAgC;EAAA;;EAAA,MAAjBoE,OAAiB,uEAAP,KAAO;EAC9C,MAAItC,OAAO,GAAG+B,WAAQ,CAAC,IAAD,EAAO7D,IAAP,EAAaoE,OAAb,CAAtB,CAD8C;;EAG9CtC,EAAAA,OAAO,GAAGA,OAAO,CAACnF,GAAR,CAAY,gBAAuB;EAAA,QAApBc,KAAoB,QAApBA,KAAoB;EAAA,QAAbwG,MAAa,QAAbA,MAAa;;EAC3C,QAAI1S,CAAC,GAAG,KAAI,CAACkL,SAAL,CAAegB,KAAK,CAAC,CAAD,CAAL,CAASlI,EAAxB,EAA4BkI,KAAK,CAACnN,MAAlC,EAA0C2T,MAA1C,CAAR;;EACA1S,IAAAA,CAAC,CAAC2K,KAAF,CAAQC,KAAR,GAAgBsB,KAAhB;EACA,WAAOlM,CAAP;EACD,GAJS,CAAV;EAKA,SAAOuQ,OAAP;EACD,CATD;EAWA;;;EACA,OAAW,GAAG,YAAA,CAAS9B,IAAT,EAAe;EAC3B,MAAI8B,OAAO,GAAG+B,WAAQ,CAAC,IAAD,EAAO7D,IAAP,EAAa,IAAb,CAAtB;EACA,SAAO8B,OAAO,CAACxR,MAAR,GAAiB,CAAxB;EACD,CAHD;EAKA;;;EACA,SAAW,GAAG,cAAA,CAAS0P,IAAT,EAAe;EAAA;;EAC3B,MAAI8B,OAAO,GAAGoC,GAAQ,CAAC,IAAD,EAAOlE,IAAP,CAAtB,CAD2B;;EAG3B8B,EAAAA,OAAO,GAAGA,OAAO,CAACnF,GAAR,CAAY,UAAAyB,IAAI,EAAI;EAC5B,WAAO,MAAI,CAAC3B,SAAL,CAAe2B,IAAI,CAAC,CAAD,CAAJ,CAAQ7I,EAAvB,EAA2B6I,IAAI,CAAC9N,MAAhC,CAAP;EACD,GAFS,CAAV;EAGA,SAAOwR,OAAP;EACD,CAPD;EASA;;;EACA,WAAa,GAAG,cAAA,CAAS/L,GAAT,EAAcY,KAAd,EAAqB;EAAA;;EACnC,MAAI0N,OAAO,GAAG,EAAd;EACA,MAAIlI,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,MAAImI,QAAQ,GAAG,KAAf;;EACA,OAAK,IAAIpU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAIqU,GAAG,GAAGpI,KAAK,CAACjM,CAAD,CAAL,CAASqL,KAAT,CAAexF,GAAf,EAAoBY,KAApB,CAAV;;EACA,QAAI4N,GAAG,KAAK,IAAZ,EAAkB;EAChB,UAAID,QAAQ,KAAK,IAAjB,EAAuB;;EAErBD,QAAAA,OAAO,CAACA,OAAO,CAAC/T,MAAR,GAAiB,CAAlB,CAAP,CAA4BiM,IAA5B,CAAiCJ,KAAK,CAACjM,CAAD,CAAtC;EACD,OAHD,MAGO;EACLmU,QAAAA,OAAO,CAAC9H,IAAR,CAAa,CAACJ,KAAK,CAACjM,CAAD,CAAN,CAAb,EADK;EAEN;;EACDoU,MAAAA,QAAQ,GAAGC,GAAX;EACD;EACF,GAfkC;;;EAiBnCF,EAAAA,OAAO,GAAGA,OAAO,CACdvH,MADO,CACA,UAAAtM,CAAC;EAAA,WAAIA,CAAC,CAACF,MAAF,GAAW,CAAf;EAAA,GADD,EAEPqM,GAFO,CAEH,UAAApC,GAAG,EAAI;EACV,WAAO,MAAI,CAACkC,SAAL,CAAelC,GAAG,CAAC,CAAD,CAAH,CAAOhF,EAAtB,EAA0BgF,GAAG,CAACjK,MAA9B,CAAP;EACD,GAJO,CAAV;EAKA,SAAO+T,OAAP;GAtBF;;;;;;;;;MC5BMG,SACJ,gBAAYjP,EAAZ,EAAgBjF,MAAhB,EAAwB8L,IAAxB,EAA8B;EAAA;;EAC5B,OAAK3G,KAAL,GAAaF,EAAb;EACA,OAAKjF,MAAL,GAAcA,MAAd;EACA,OAAK8I,GAAL,GAAW,QAAX,CAH4B;;EAI5BjH,EAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC;EAClCC,IAAAA,UAAU,EAAE,KADsB;EAElCC,IAAAA,QAAQ,EAAE,IAFwB;EAGlCC,IAAAA,KAAK,EAAExI;EAH2B,GAApC;EAKAjK,EAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,IAAAA,UAAU,EAAE,KADuB;EAEnCC,IAAAA,QAAQ,EAAE,IAFyB;EAGnCC,IAAAA,KAAK,EAAE;EAH4B,GAArC;EAKAzS,EAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;EACpCC,IAAAA,UAAU,EAAE,KADwB;EAEpCC,IAAAA,QAAQ,EAAE,IAF0B;EAGpCC,IAAAA,KAAK,EAAE;EAH6B,GAAtC;EAKD;EAGH;;;EACAJ,MAAM,CAAChK,SAAP,CAAiBiC,SAAjB,GAA6B,UAASlH,EAAT,EAAajF,MAAb,EAAqB2T,MAArB,EAA6B;EACxD,MAAI1S,CAAC,GAAG,IAAIiT,MAAJ,CAAWjP,EAAX,EAAejF,MAAf,EAAuB,KAAK8L,IAA5B,CAAR,CADwD;;EAGxD,MAAI6H,MAAM,IAAI9R,MAAM,CAACC,IAAP,CAAY6R,MAAZ,EAAoB3T,MAApB,GAA6B,CAA3C,EAA8C;EAC5CiB,IAAAA,CAAC,CAAC0S,MAAF,GAAWA,MAAX;EACD,GAFD,MAEO;EACL1S,IAAAA,CAAC,CAAC0S,MAAF,GAAW,KAAKA,MAAhB;EACD;;EACD,SAAO1S,CAAP;EACD,CATD;;;EAYAY,MAAM,CAACqH,MAAP,CAAcgL,MAAM,CAAChK,SAArB,EAAgCqK,KAAhC;EACA1S,MAAM,CAACqH,MAAP,CAAcgL,MAAM,CAAChK,SAArB,EAAgCwB,SAAhC;;EAGA,IAAM8I,OAAO,GAAG;EACd9L,EAAAA,IAAI,EAAE;EADQ,CAAhB;EAGA7G,MAAM,CAACC,IAAP,CAAY0S,OAAZ,EAAqBzS,OAArB,CAA6B,UAAAnB,CAAC;EAAA,SAAKsT,MAAM,CAAChK,SAAP,CAAiBtJ,CAAjB,IAAsBsT,MAAM,CAAChK,SAAP,CAAiBsK,OAAO,CAAC5T,CAAD,CAAxB,CAA3B;EAAA,CAA9B;EAEA,YAAc,GAAGsT,MAAjB;;ECjDA;MACMO;;;EACJ,kBAAwB;EAAA,QAAZxB,KAAY,uEAAJ,EAAI;;EAAA;;;EAEtBpR,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,MAAAA,UAAU,EAAE,KADuB;EAEnCE,MAAAA,KAAK,EAAErB;EAF4B,KAArC;EAID;;;;;;0BAEGvK,MAAM;EACR,WAAKuK,KAAL,CAAWvK,IAAI,CAACzD,EAAhB,IAAsByD,IAAtB;EACA,aAAO,IAAP;EACD;;;;;0BAEGzD,IAAI;EACN,aAAO,KAAKgO,KAAL,CAAWhO,EAAX,CAAP;EACD;;;;;6BAEMA,IAAI;EACT,aAAO,KAAKgO,KAAL,CAAWhO,EAAX,CAAP;EACD;;;4BACK6G,MAAM;EACVjK,MAAAA,MAAM,CAACqH,MAAP,CAAc,KAAK+J,KAAnB,EAA0BnH,IAAI,CAACmH,KAA/B;EACA,aAAO,IAAP;EACD;;;;;8BAEO;EACN,aAAO;EACLA,QAAAA,KAAK,EAAEpR,MAAM,CAACC,IAAP,CAAY,KAAKmR,KAAjB,EAAwBjT;EAD1B,OAAP;EAGD;;;;;EAGH;;;EACAyU,IAAI,CAACvK,SAAL,CAAeuB,KAAf,GAAuB,YAAW;EAAA;;EAChC,MAAI3J,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY,KAAKmR,KAAjB,CAAX;EACA,MAAIA,KAAK,GAAGnR,IAAI,CAAC6B,MAAL,CAAY,UAAClD,CAAD,EAAIG,CAAJ,EAAU;EAChC,QAAIS,CAAC,GAAG,KAAI,CAAC4R,KAAL,CAAWrS,CAAX,EAAc6K,KAAd,EAAR;;EACAhL,IAAAA,CAAC,CAACY,CAAC,CAAC4D,EAAH,CAAD,GAAU5D,CAAV;EACA,WAAOZ,CAAP;EACD,GAJW,EAIT,EAJS,CAAZ;EAKA,SAAO,IAAIgU,IAAJ,CAASxB,KAAT,CAAP;EACD,CARD;;EAUA,UAAc,GAAGwB,IAAjB;;EC7CA;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAA7I,KAAK,EAAI;EACzBA,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAC2G,IAAD,EAAO9I,CAAP,EAAa;EACzB,QAAIA,CAAC,GAAG,CAAR,EAAW;EACT8I,MAAAA,IAAI,CAAC6C,IAAL,GAAYM,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAL,CAAaqF,EAAzB;EACD;;EACD,QAAI4G,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAT,EAAkB;EAChB8I,MAAAA,IAAI,CAAC8C,IAAL,GAAYK,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAL,CAAaqF,EAAzB;EACD;EACF,GAPD;EAQD,CATD;;EAUA,cAAc,GAAGyP,SAAjB;;ECXA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA,IAAMC,SAAS,GAAG,uDAAlB;EACA,IAAMC,YAAY,GAAG,IAArB;EAEA,IAAMtS,WAAS,GAAG,kBAAlB;EACA,IAAMuS,UAAU,GAAG,sBAAnB;EACA,IAAMC,OAAO,GAAG,iBAAhB;;EACA,IAAMC,SAAS,GAAG,sHAAlB;EAEA,IAAMC,eAAe,GAAG,MAAxB;;EAGA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAAStV,IAAT,EAAe;EAClC,MAAIiQ,GAAG,GAAG,EAAV,CADkC;;EAGlC,MAAIsF,KAAK,GAAGvV,IAAI,CAACH,KAAL,CAAWsV,OAAX,CAAZ;;EACA,OAAK,IAAIlV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsV,KAAK,CAAClV,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;;EAErC,QAAIqK,GAAG,GAAGiL,KAAK,CAACtV,CAAD,CAAL,CAASJ,KAAT,CAAemV,SAAf,CAAV;;EACA,SAAK,IAAI3T,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiJ,GAAG,CAACjK,MAAxB,EAAgCgB,CAAC,EAAjC,EAAqC;EACnC4O,MAAAA,GAAG,CAAC3D,IAAJ,CAAShC,GAAG,CAACjJ,CAAD,CAAZ;EACD;EACF;;EACD,SAAO4O,GAAP;EACD,CAZD;EAcA;;;EACA,IAAMuF,UAAU,GAAG,SAAbA,UAAa,CAASzV,GAAT,EAAc0V,OAAd,EAAuB;;EAExC,MAAI9S,WAAS,CAACC,IAAV,CAAe7C,GAAf,MAAwB,IAA5B,EAAkC;EAChC,WAAO,KAAP;EACD,GAJuC;;;EAMxC,MAAImV,UAAU,CAACtS,IAAX,CAAgB7C,GAAhB,MAAyB,IAA7B,EAAmC;EACjC,WAAO,KAAP;EACD,GARuC;;;EAUxC,MAAIqV,SAAS,CAACxS,IAAV,CAAe7C,GAAf,MAAwB,KAA5B,EAAmC;EACjC,WAAO,KAAP;EACD;;EAED,MAAIoN,GAAG,GAAGpN,GAAG,CAACmD,OAAJ,CAAY,yCAAZ,EAAuD,EAAvD,CAAV;EACA,MAAIoQ,KAAK,GAAGnG,GAAG,CAACtN,KAAJ,CAAU,GAAV,CAAZ;EACA,MAAI6V,QAAQ,GAAGpC,KAAK,CAACA,KAAK,CAACjT,MAAN,GAAe,CAAhB,CAAL,CAAwB0C,WAAxB,EAAf,CAhBwC;;EAkBxC,MAAI0S,OAAO,CAAC9P,cAAR,CAAuB+P,QAAvB,CAAJ,EAAsC;EACpC,WAAO,KAAP;EACD,GApBuC;;;;;;EAyBxC,SAAO,IAAP;EACD,CA1BD;;EA4BA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAAS3V,IAAT,EAAe0G,KAAf,EAAsB;EAC3C,MAAI+O,OAAO,GAAG/O,KAAK,CAACuF,KAAN,CAAYxD,aAA1B;EAEAzI,EAAAA,IAAI,GAAGA,IAAI,IAAI,EAAf;EACAA,EAAAA,IAAI,GAAG0L,MAAM,CAAC1L,IAAD,CAAb;EACA,MAAI4V,SAAS,GAAG,EAAhB,CAL2C;;EAO3C,MAAIC,MAAM,GAAG,EAAb,CAP2C;;EAS3C,MAAI,CAAC7V,IAAD,IAAS,OAAOA,IAAP,KAAgB,QAAzB,IAAqCiV,YAAY,CAACrS,IAAb,CAAkB5C,IAAlB,MAA4B,KAArE,EAA4E;EAC1E,WAAO4V,SAAP;EACD,GAX0C;;;EAa3C,MAAIE,MAAM,GAAGR,YAAY,CAACtV,IAAD,CAAzB,CAb2C;;EAe3C,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6V,MAAM,CAACzV,MAA3B,EAAmCJ,CAAC,EAApC,EAAwC;EACtC,QAAIwB,CAAC,GAAGqU,MAAM,CAAC7V,CAAD,CAAd;;EACA,QAAIwB,CAAC,KAAKiE,SAAN,IAAmBjE,CAAC,KAAK,EAA7B,EAAiC;EAC/B;EACD,KAJqC;;;EAMtC,QAAIwT,YAAY,CAACrS,IAAb,CAAkBnB,CAAlB,MAAyB,KAA7B,EAAoC;;EAElC,UAAIoU,MAAM,CAACA,MAAM,CAACxV,MAAP,GAAgB,CAAjB,CAAV,EAA+B;EAC7BwV,QAAAA,MAAM,CAACA,MAAM,CAACxV,MAAP,GAAgB,CAAjB,CAAN,IAA6BoB,CAA7B;EACA;EACD,OAHD,MAGO,IAAIqU,MAAM,CAAC7V,CAAC,GAAG,CAAL,CAAV,EAAmB;;EAExB6V,QAAAA,MAAM,CAAC7V,CAAC,GAAG,CAAL,CAAN,GAAgBwB,CAAC,GAAGqU,MAAM,CAAC7V,CAAC,GAAG,CAAL,CAA1B;EACA;EACD;EACF,KAhBqC;;;EAkBtC4V,IAAAA,MAAM,CAACvJ,IAAP,CAAY7K,CAAZ;EACD,GAlC0C;;;;EAsC3C,OAAK,IAAIxB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG4V,MAAM,CAACxV,MAA3B,EAAmCJ,EAAC,EAApC,EAAwC;EACtC,QAAIQ,CAAC,GAAGoV,MAAM,CAAC5V,EAAD,CAAd,CADsC;;EAGtC,QAAI4V,MAAM,CAAC5V,EAAC,GAAG,CAAL,CAAN,IAAiBuV,UAAU,CAAC/U,CAAD,EAAIgV,OAAJ,CAAV,KAA2B,KAAhD,EAAuD;EACrDI,MAAAA,MAAM,CAAC5V,EAAC,GAAG,CAAL,CAAN,GAAgBQ,CAAC,IAAIoV,MAAM,CAAC5V,EAAC,GAAG,CAAL,CAAN,IAAiB,EAArB,CAAjB;EACD,KAFD,MAEO,IAAIQ,CAAC,IAAIA,CAAC,CAACJ,MAAF,GAAW,CAApB,EAAuB;;;EAG5BuV,MAAAA,SAAS,CAACtJ,IAAV,CAAe7L,CAAf;EACAoV,MAAAA,MAAM,CAAC5V,EAAD,CAAN,GAAY,EAAZ;EACD;EACF,GAjD0C;;;EAmD3C,MAAI2V,SAAS,CAACvV,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAO,CAACL,IAAD,CAAP;EACD,GArD0C;;;;EAyD3C,OAAK,IAAIC,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAG2V,SAAS,CAACvV,MAA9B,EAAsCJ,GAAC,IAAI,CAA3C,EAA8C;EAC5C,QAAI8V,EAAE,GAAGH,SAAS,CAAC3V,GAAD,CAAT,CAAauN,KAAb,CAAmB6H,eAAnB,CAAT;;EACA,QAAIU,EAAE,KAAK,IAAX,EAAiB;EACfH,MAAAA,SAAS,CAAC3V,GAAC,GAAG,CAAL,CAAT,IAAoB8V,EAAE,CAAC,CAAD,CAAtB;EACAH,MAAAA,SAAS,CAAC3V,GAAD,CAAT,GAAe2V,SAAS,CAAC3V,GAAD,CAAT,CAAaiD,OAAb,CAAqBmS,eAArB,EAAsC,EAAtC,CAAf;EACD;EACF;;EACD,SAAOO,SAAP;EACD,CAjED;;EAmEA,gBAAc,GAAGD,cAAjB;;ECrIA,IAAMK,QAAQ,GAAG,IAAjB;EACA,IAAMC,UAAU,GAAG,UAAnB;EACA,IAAMC,WAAW,GAAG,OAApB;EACA,IAAMC,OAAO,GAAG,QAAhB;EAEA,IAAMC,OAAO,GAAG;EACd,OAAK,IADS;EAEd,OAAK,IAFS;;EAGd,OAAK,IAHS;;EAId,OAAK,IAJS;;EAKd,QAAM,IALQ;EAMd,SAAO,IANO;;EAAA,CAAhB;;EAUA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAStW,GAAT,EAAc;;EAE9B,MAAI,sBAAsB6C,IAAtB,CAA2B7C,GAA3B,MAAoC,IAAxC,EAA8C;EAC5C,WAAO,KAAP;EACD,GAJ6B;;;EAM9B,MAAIqF,GAAG,GAAG,6DAAV;;EACA,MAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,MAAkB,IAAtB,EAA4B;EAC1B,WAAO,IAAP;EACD,GAT6B;;;;;;;EAe9B,SAAO,KAAP;EACD,CAhBD;;;EAmBA,IAAMuW,cAAc,GAAG,SAAjBA,cAAiB,CAAShM,GAAT,EAAc;EACnC,OAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqK,GAAG,CAACjK,MAAJ,GAAa,CAAjC,EAAoCJ,CAAC,EAArC,EAAyC;EACvC,QAAIkW,OAAO,CAACvT,IAAR,CAAa0H,GAAG,CAACrK,CAAD,CAAhB,CAAJ,EAA0B;EACxBqK,MAAAA,GAAG,CAACrK,CAAC,GAAG,CAAL,CAAH,IAAcqK,GAAG,CAACrK,CAAD,CAAH,GAASqK,GAAG,CAACrK,CAAC,GAAG,CAAL,CAA1B;EACAqK,MAAAA,GAAG,CAACrK,CAAD,CAAH,GAAS,IAAT;EACAqK,MAAAA,GAAG,CAACrK,CAAC,GAAG,CAAL,CAAH,GAAa,IAAb;EACD;EACF;;EACD,SAAOqK,GAAP;EACD,CATD;;EAWA,IAAMiM,YAAY,GAAG,SAAfA,YAAe,CAAStS,IAAT,EAAe;EAClC,MAAIqG,GAAG,GAAG,EAAV,CADkC;;EAGlC,MAAMkM,OAAO,GAAGvS,IAAI,CAACpE,KAAL,CAAW,OAAX,CAAhB;EACA,MAAI4W,SAAS,GAAG,GAAhB;EACA,MAAI7S,KAAK,GAAGK,IAAI,CAACuJ,KAAL,CAAW,OAAX,CAAZ;;EACA,MAAI5J,KAAK,IAAIA,KAAK,CAAC,CAAD,CAAlB,EAAuB;EACrB6S,IAAAA,SAAS,GAAG7S,KAAZ;EACD;;EACD,OAAK,IAAIvC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmV,OAAO,CAACnW,MAA5B,EAAoCgB,CAAC,EAArC,EAAyC;EACvC,QAAIA,CAAC,KAAKmV,OAAO,CAACnW,MAAR,GAAiB,CAA3B,EAA8B;EAC5BiK,MAAAA,GAAG,CAACgC,IAAJ,CAASkK,OAAO,CAACnV,CAAD,CAAhB;EACD,KAFD,MAEO;EACLiJ,MAAAA,GAAG,CAACgC,IAAJ,CAASkK,OAAO,CAACnV,CAAD,CAAP,GAAaoV,SAAtB;EACD;EACF;;EACD,SAAOnM,GAAP;EACD,CAjBD;;;EAoBA,IAAMoM,UAAU,GAAG,SAAbA,UAAa,CAAS3W,GAAT,EAAc;EAC/B,MAAIwG,MAAM,GAAG,EAAb;EACA,MAAI+D,GAAG,GAAG,EAAV,CAF+B;;EAI/BvK,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;;EACA,MAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;EAC3BA,IAAAA,GAAG,GAAG2L,MAAM,CAAC3L,GAAD,CAAZ;EACD;;EAED,MAAMuT,KAAK,GAAGvT,GAAG,CAACF,KAAJ,CAAUqW,WAAV,CAAd;;EACA,OAAK,IAAIjW,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqT,KAAK,CAACjT,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;;EAErC,QAAIoW,SAAS,CAAC/C,KAAK,CAACrT,CAAD,CAAN,CAAT,KAAwB,IAA5B,EAAkC;EAChCqK,MAAAA,GAAG,GAAGA,GAAG,CAACoE,MAAJ,CAAW6H,YAAY,CAACjD,KAAK,CAACrT,CAAD,CAAN,CAAvB,CAAN;EACA;EACD;;EACDqK,IAAAA,GAAG,CAACgC,IAAJ,CAASgH,KAAK,CAACrT,CAAD,CAAd;EACD,GAjB8B;;;EAmB/B,MAAI0W,KAAK,GAAG,EAAZ;;EACA,OAAK,IAAI1W,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGqK,GAAG,CAACjK,MAAxB,EAAgCJ,EAAC,EAAjC,EAAqC;EACnC,QAAIgE,IAAI,GAAGqG,GAAG,CAACrK,EAAD,CAAd,CADmC;;EAGnC,QAAI+V,QAAQ,CAACpT,IAAT,CAAcqB,IAAd,MAAwB,IAAxB,IAAgCmS,OAAO,CAACzQ,cAAR,CAAuB1B,IAAvB,MAAiC,KAAjE,IAA0EgS,UAAU,CAACrT,IAAX,CAAgBqB,IAAhB,MAA0B,KAAxG,EAA+G;;EAE7G,UAAIsC,MAAM,CAAClG,MAAP,GAAgB,CAApB,EAAuB;EACrBkG,QAAAA,MAAM,CAACA,MAAM,CAAClG,MAAP,GAAgB,CAAjB,CAAN,IAA6BsW,KAA7B;EACApQ,QAAAA,MAAM,CAAC+F,IAAP,CAAYrI,IAAZ;EACD,OAHD,MAGO;;EAELsC,QAAAA,MAAM,CAAC+F,IAAP,CAAYqK,KAAK,GAAG1S,IAApB;EACD;;EACD0S,MAAAA,KAAK,GAAG,EAAR;EACD,KAVD,MAUO;EACLA,MAAAA,KAAK,IAAI1S,IAAT;EACD;EACF,GApC8B;;;EAsC/B,MAAI0S,KAAJ,EAAW;EACT,QAAIpQ,MAAM,CAAClG,MAAP,KAAkB,CAAtB,EAAyB;EACvBkG,MAAAA,MAAM,CAAC,CAAD,CAAN,GAAY,EAAZ;EACD;;EACDA,IAAAA,MAAM,CAACA,MAAM,CAAClG,MAAP,GAAgB,CAAjB,CAAN,IAA6BsW,KAA7B,CAJS;EAKV,GA3C8B;;;EA6C/BpQ,EAAAA,MAAM,GAAG+P,cAAc,CAAC/P,MAAD,CAAvB,CA7C+B;;EA+C/BA,EAAAA,MAAM,GAAGA,MAAM,CAACsG,MAAP,CAAc,UAAApL,CAAC;EAAA,WAAIA,CAAJ;EAAA,GAAf,CAAT;EACA,SAAO8E,MAAP;EACD,CAjDD;;EAkDA,YAAc,GAAGmQ,UAAjB;;EC5GA;;EACA,IAAME,QAAQ,GAAG,SAAXA,QAAW,GAAiC;EAAA,MAAxB5W,IAAwB,uEAAjB,EAAiB;EAAA,MAAb0G,KAAa;EAAA,MAANyF,IAAM;;;EAEhD,MAAI,OAAOnM,IAAP,KAAgB,QAApB,EAA8B;EAC5B,QAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;EAC5BA,MAAAA,IAAI,GAAG0L,MAAM,CAAC1L,IAAD,CAAb;EACD;EACF,GAN+C;;;EAQhD,MAAI4V,SAAS,GAAGD,YAAc,CAAC3V,IAAD,EAAO0G,KAAP,CAA9B;EACAkP,EAAAA,SAAS,GAAGA,SAAS,CAAClJ,GAAV,CAAc,UAAA3M,GAAG;EAAA,WAAI8W,QAAU,CAAC9W,GAAD,CAAd;EAAA,GAAjB,CAAZ,CATgD;;EAYhDoM,EAAAA,IAAI,GAAGA,IAAI,IAAI,IAAI2I,MAAJ,EAAf;EAEA,MAAIgC,OAAO,GAAGlB,SAAS,CAAClJ,GAAV,CAAc,UAAAR,KAAK,EAAI;EACnCA,IAAAA,KAAK,GAAGA,KAAK,CAACQ,GAAN,CAAU,UAAA3M,GAAG,EAAI;EACvB,UAAIgJ,IAAI,GAAG,IAAI0C,MAAJ,CAAS1L,GAAT,CAAX;EACAoM,MAAAA,IAAI,CAACX,GAAL,CAASzC,IAAT;EACA,aAAOA,IAAP;EACD,KAJO,CAAR,CADmC;;EAOnCgM,IAAAA,UAAS,CAAC7I,KAAD,CAAT,CAPmC;;EAUnC,QAAI5K,CAAC,GAAG,IAAIiT,QAAJ,CAAWrI,KAAK,CAAC,CAAD,CAAL,CAAS5G,EAApB,EAAwB4G,KAAK,CAAC7L,MAA9B,EAAsC8L,IAAtC,CAAR;EACA7K,IAAAA,CAAC,CAAC2K,KAAF,CAAQC,KAAR,GAAgBA,KAAhB;EACA,WAAO5K,CAAP;EACD,GAba,CAAd,CAdgD;;EA6BhD,SAAOwV,OAAP;EACD,CA9BD;;EAgCA,gBAAc,GAAGF,QAAjB;;ECnCA,IAAMG,QAAQ,GAAG,SAAXA,QAAW,CAASjH,IAAT,EAAepJ,KAAf,EAAsB;EACrC,MAAIyF,IAAI,GAAG,IAAI2I,MAAJ,EAAX;EACA,MAAIgC,OAAO,GAAGhH,IAAI,CAACpD,GAAL,CAAS,UAACpL,CAAD,EAAIL,CAAJ,EAAU;EAC/B,QAAIiL,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,CAAQQ,GAAR,CAAY,UAACrL,CAAD,EAAIpB,CAAJ,EAAU;EAChC,UAAI8I,IAAI,GAAG,IAAI0C,MAAJ,CAASpK,CAAC,CAACrB,IAAX,CAAX;EACA+I,MAAAA,IAAI,CAACrF,GAAL,GAAWrC,CAAC,CAACqC,GAAF,KAAUgC,SAAV,GAAsBrE,CAAC,CAACqC,GAAxB,GAA8B,EAAzC;;EACA,UAAIrC,CAAC,CAACsC,IAAF,KAAW+B,SAAf,EAA0B;EACxBrE,QAAAA,CAAC,CAACsC,IAAF,GAAS,GAAT,CADwB;;EAGxB,YAAI1D,CAAC,IAAIqB,CAAC,CAAC4K,KAAF,CAAQ7L,MAAR,GAAiB,CAA1B,EAA6B;EAC3BgB,UAAAA,CAAC,CAACsC,IAAF,GAAS,IAAT;;EACA,cAAI1C,CAAC,IAAIK,CAAC,CAAC4K,KAAF,CAAQ7L,MAAR,GAAiB,CAA1B,EAA6B;EAC3BgB,YAAAA,CAAC,CAACsC,IAAF,GAAS,GAAT;EACD;EACF;EACF;;EACDoF,MAAAA,IAAI,CAACpF,IAAL,GAAYtC,CAAC,CAACsC,IAAF,KAAW+B,SAAX,GAAuBrE,CAAC,CAACsC,IAAzB,GAAgC,GAA5C;;EAEA,UAAItC,CAAC,CAAC0E,IAAN,EAAY;EACV1E,QAAAA,CAAC,CAAC0E,IAAF,CAAO3D,OAAP,CAAe,UAAA0D,GAAG;EAAA,iBAAIiD,IAAI,CAACjD,GAAL,CAASA,GAAT,EAAc,EAAd,EAAkBY,KAAlB,CAAJ;EAAA,SAAlB;EACD;;EACDyF,MAAAA,IAAI,CAACX,GAAL,CAASzC,IAAT;EACA,aAAOA,IAAP;EACD,KApBW,CAAZ,CAD+B;;EAuB/BgM,IAAAA,UAAS,CAAC7I,KAAD,CAAT,CAvB+B;;EAyB/B,WAAO,IAAIqI,QAAJ,CAAWrI,KAAK,CAAC,CAAD,CAAL,CAAS5G,EAApB,EAAwB4G,KAAK,CAAC7L,MAA9B,EAAsC8L,IAAtC,CAAP;EACD,GA1Ba,CAAd;EA2BA,SAAO2K,OAAP;EACD,CA9BD;;EA+BA,cAAc,GAAGC,QAAjB;;ECpCA,YAAc,GAAG,QAAjB;;ECAA,SAAc,GAAC;EACb,iBAAe,aADF;EAEb,iBAAe,cAFF;EAGb,kBAAgB,gBAHH;EAIb,WAAS,YAJI;EAKb,UAAQ,oGALK;EAMb,YAAU,0BANG;EAOb,eAAa,iEAPA;EAQb,eAAa,gBARA;EASb,YAAU,6CATG;EAUb,cAAY,sBAVC;EAWb,kBAAgB,+CAXH;EAYb,YAAU,cAZG;EAab,iBAAe,0KAbF;EAcb,aAAW,gFAdE;EAeb,cAAY,2uBAfC;EAgBb,WAAS,+WAhBI;EAiBb,eAAa,2cAjBA;EAkBb,gBAAc,+8CAlBD;EAmBb,iBAAe,wgCAnBF;EAoBb,gBAAc,8hFApBD;EAqBb,UAAQ,8rBArBK;EAsBb,kBAAgB,u1EAtBH;EAuBb,aAAW,gzBAvBE;EAwBb,gBAAc,qGAxBD;EAyBb,cAAY,8SAzBC;EA0Bb,UAAQ,8lDA1BK;EA2Bb,kBAAgB,ubA3BH;EA4Bb,WAAS,ufA5BI;EA6Bb,aAAW,yyDA7BE;EA8Bb,YAAU,kvCA9BG;EA+Bb,gBAAc,0wKA/BD;EAgCb,aAAW,2DAhCE;EAiCb,WAAS,kGAjCI;EAkCb,UAAQ,8CAlCK;EAmCb,eAAa,sLAnCA;EAoCb,cAAY,mhDApCC;EAqCb,cAAY,88HArCC;EAsCb,YAAU,8gBAtCG;EAuCb,UAAQ,kHAvCK;EAwCb,iBAAe,i6FAxCF;EAyCb,WAAS,wEAzCI;EA0Cb,eAAa,q+FA1CA;EA2Cb,gBAAc,kqDA3CD;EA4Cb,eAAa,qNA5CA;EA6Cb,aAAW,8KA7CE;EA8Cb,cAAY,8JA9CC;EA+Cb,gBAAc,4UA/CD;EAgDb,YAAU,4hBAhDG;EAiDb,iBAAe,wTAjDF;EAkDb,gBAAc;EAlDD,CAAf;;ECAA,IAAMC,MAAM,GAAG,CAAC,QAAD,EAAW,OAAX,EAAoB,cAApB,CAAf;EAEA,SAAc,GAAG;EACfC,EAAAA,IAAI,EAAE;EACJ/L,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,QAAtB;EADF,GADS;;EAKfgM,EAAAA,QAAQ,EAAE;EACR/N,IAAAA,GAAG,EAAE,MADG;EAER+B,IAAAA,IAAI,EAAE;EAFE,GALK;;EAUfjD,EAAAA,UAAU,EAAE;EACVkB,IAAAA,GAAG,EAAE;EADK,GAVG;;EAefgO,EAAAA,MAAM,EAAE;EACNhO,IAAAA,GAAG,EAAE,CAAC,YAAD,EAAe,UAAf,CADC;EAEN+B,IAAAA,IAAI,EAAE,CAAC,OAAD,EAAU,cAAV,EAA0B,MAA1B;EAFA,GAfO;EAmBfkM,EAAAA,SAAS,EAAE;EACTjO,IAAAA,GAAG,EAAE;EADI,GAnBI;EAsBfkO,EAAAA,QAAQ,EAAE;EACRlO,IAAAA,GAAG,EAAE,WADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,YAAD,EAAe,UAAf;EAFE,GAtBK;EA0BfoM,EAAAA,UAAU,EAAE;EACVnO,IAAAA,GAAG,EAAE,WADK;EAEV+B,IAAAA,IAAI,EAAE,CAAC,UAAD,EAAa,UAAb;EAFI,GA1BG;EA8BfqM,EAAAA,QAAQ,EAAE;EACRpO,IAAAA,GAAG,EAAE,QADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,WAAD;EAFE,GA9BK;EAkCfsM,EAAAA,QAAQ,EAAE;EACRrO,IAAAA,GAAG,EAAE,QADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,UAAd;EAFE,GAlCK;EAsCfuM,EAAAA,SAAS,EAAE;EACTtO,IAAAA,GAAG,EAAE,MADI;EAET+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,UAAd,EAA0B,OAA1B;EAFG,GAtCI;;EA4CfwM,EAAAA,KAAK,EAAE;EACLvO,IAAAA,GAAG,EAAE,UADA;EAEL+B,IAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,cAAX;EAFD,GA5CQ;EAgDfyM,EAAAA,OAAO,EAAE;EACPxO,IAAAA,GAAG,EAAE,CAAC,OAAD,EAAU,YAAV,CADE;EAEP+B,IAAAA,IAAI,EAAE,CAAC,MAAD;EAFC,GAhDM;EAoDf0M,EAAAA,IAAI,EAAE;EACJzO,IAAAA,GAAG,EAAE,CAAC,OAAD,EAAU,YAAV,CADD;EAEJ+B,IAAAA,IAAI,EAAE,CAAC,SAAD;EAFF,GApDS;EAwDf2M,EAAAA,MAAM,EAAE;EACN1O,IAAAA,GAAG,EAAE,CAAC,OAAD,EAAU,YAAV;EADC,GAxDO;EA2Df2O,EAAAA,OAAO,EAAE;EACP3O,IAAAA,GAAG,EAAE;EADE,GA3DM;;EAgEf4O,EAAAA,YAAY,EAAE;EACZ5O,IAAAA,GAAG,EAAE,CAAC,UAAD,EAAa,YAAb,CADO;EAEZ+B,IAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,OAAX;EAFM,GAhEC;EAoEf8M,EAAAA,UAAU,EAAE;EACV7O,IAAAA,GAAG,EAAE;EADK,GApEG;EAuEf8O,EAAAA,MAAM,EAAE;EACN9O,IAAAA,GAAG,EAAE;EADC,GAvEO;EA0Ef+O,EAAAA,OAAO,EAAE;EACP/O,IAAAA,GAAG,EAAE;EADE,GA1EM;;EA+EftC,EAAAA,MAAM,EAAE;EACNsC,IAAAA,GAAG,EAAE,MADC;EAEN+B,IAAAA,IAAI,EAAE,CAAC,UAAD;EAFA,GA/EO;;EAoFfiN,EAAAA,WAAW,EAAE;EACXhP,IAAAA,GAAG,EAAE;EADM,GApFE;EAuFfiP,EAAAA,OAAO,EAAE;EACPjP,IAAAA,GAAG,EAAE,MADE;EAEP+B,IAAAA,IAAI,EAAE8L;EAFC,GAvFM;;EA4FfzP,EAAAA,KAAK,EAAE;EACL4B,IAAAA,GAAG,EAAE,MADA;EAEL+B,IAAAA,IAAI,EAAE8L;EAFD,GA5FQ;;EAiGfqB,EAAAA,QAAQ,EAAE;EACRlP,IAAAA,GAAG,EAAE,MADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,OAAX;EAFE,GAjGK;;EAsGfoN,EAAAA,IAAI,EAAE;EACJnP,IAAAA,GAAG,EAAE,MADD;EAEJ+B,IAAAA,IAAI,EAAE8L;EAFF,GAtGS;;EA2GfuB,EAAAA,OAAO,EAAE;EACPpP,IAAAA,GAAG,EAAE,CAAC,MAAD,EAAS,YAAT,CADE;EAEP+B,IAAAA,IAAI,EAAE8L;EAFC,GA3GM;;EAgHfnO,EAAAA,UAAU,EAAE;EACVM,IAAAA,GAAG,EAAE,MADK;;EAAA;EAhHG,CAAjB;;ECFA,SAAc,GAAG;EACfpC,EAAAA,IAAI,EAAE;EACJmE,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,QAAtB,EAAgC,OAAhC;EADF,GADS;;EAKf7D,EAAAA,YAAY,EAAE;EACZ8B,IAAAA,GAAG,EAAE,MADO;EAEZ+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,QAAd,EAAwB,aAAxB;EAFM,GALC;;EAUfjE,EAAAA,UAAU,EAAE;EACVkC,IAAAA,GAAG,EAAE,cADK;EAEV+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,QAAd;EAFI,GAVG;;EAef9D,EAAAA,MAAM,EAAE;EACN+B,IAAAA,GAAG,EAAE,cADC;EAEN+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,QAAd,EAAwB,aAAxB;EAFA,GAfO;;EAoBf/D,EAAAA,SAAS,EAAE;EACTgC,IAAAA,GAAG,EAAE,MADI;EAET+B,IAAAA,IAAI,EAAE,CAAC,aAAD;EAFG,GApBI;;EAyBfsN,EAAAA,WAAW,EAAE;EACXrP,IAAAA,GAAG,EAAE;EADM,GAzBE;;EA8BfsP,EAAAA,MAAM,EAAE;EACNtP,IAAAA,GAAG,EAAE;EADC,GA9BO;;EAkCfuP,EAAAA,KAAK,EAAE;EACLvP,IAAAA,GAAG,EAAE,MADA;EAEL+B,IAAAA,IAAI,EAAE,CAAC,YAAD;EAFD,GAlCQ;;EAuCfyN,EAAAA,YAAY,EAAE;EACZxP,IAAAA,GAAG,EAAE,MADO;EAEZ+B,IAAAA,IAAI,EAAE;EAFM,GAvCC;EA2Cf0N,EAAAA,UAAU,EAAE;EACVzP,IAAAA,GAAG,EAAE;EADK,GA3CG;;EA+Cf7B,EAAAA,UAAU,EAAE;EACV6B,IAAAA,GAAG,EAAE;EADK,GA/CG;;EAmDf0P,EAAAA,WAAW,EAAE;EACX1P,IAAAA,GAAG,EAAE;EADM,GAnDE;;EAuDf2P,EAAAA,QAAQ,EAAE;EACR3P,IAAAA,GAAG,EAAE;EADG;EAvDK,CAAjB;;ECAA,UAAc,GAAG;EACf4P,EAAAA,KAAK,EAAE;EACL7N,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,QAAtB;EADD,GADQ;EAIf8N,EAAAA,OAAO,EAAE;EACP7P,IAAAA,GAAG,EAAE,OADE;EAEP+B,IAAAA,IAAI,EAAE,CAAC,UAAD;EAFC,GAJM;EAQf+N,EAAAA,QAAQ,EAAE;EACR9P,IAAAA,GAAG,EAAE,OADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,SAAD;EAFE,GARK;EAYfgO,EAAAA,YAAY,EAAE;EACZ/P,IAAAA,GAAG,EAAE,UADO;;EAEZ+B,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,WAAZ;EAFM,GAZC;EAgBfiO,EAAAA,SAAS,EAAE;EACThQ,IAAAA,GAAG,EAAE,OADI;EAET+B,IAAAA,IAAI,EAAE,CAAC,cAAD;EAFG,GAhBI;EAoBfkO,EAAAA,YAAY,EAAE;EACZjQ,IAAAA,GAAG,EAAE,OADO;EAEZ+B,IAAAA,IAAI,EAAE,CAAC,WAAD;EAFM,GApBC;EAwBfmO,EAAAA,KAAK,EAAE;EACLlQ,IAAAA,GAAG,EAAE;EADA,GAxBQ;EA2BfmQ,EAAAA,OAAO,EAAE;EACPnQ,IAAAA,GAAG,EAAE;EADE;EA3BM,CAAjB;;ECAA,IAAM5D,QAAQ,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,EAA8B,QAA9B,EAAwC,OAAxC,EAAiD,cAAjD,CAAjB;EAEA,QAAc,GAAG;;EAEfgU,EAAAA,SAAS,EAAE;EACTrO,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,MAAT,EAAiB,QAAjB,EAA2B,OAA3B;EADG,GAFI;;EAMfsO,EAAAA,UAAU,EAAE;EACVrQ,IAAAA,GAAG,EAAE,CAAC,WAAD;EADK,GANG;;EAUfsQ,EAAAA,WAAW,EAAE;EACXtQ,IAAAA,GAAG,EAAE,CAAC,WAAD;EADM,GAVE;;EAcfuQ,EAAAA,WAAW,EAAE;EACXvQ,IAAAA,GAAG,EAAE,CAAC,WAAD,CADM;EAEX+B,IAAAA,IAAI,EAAE,CAAC,aAAD;EAFK,GAdE;EAmBfyO,EAAAA,WAAW,EAAE;EACXxQ,IAAAA,GAAG,EAAE,CAAC,aAAD;EADM,GAnBE;EAsBfyQ,EAAAA,MAAM,EAAE;EACN1O,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,EAA8B,OAA9B;EADA,GAtBO;;;EA4Bf2O,EAAAA,IAAI,EAAE;EACJ3O,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,aAAT,EAAwB,QAAxB,EAAkC,aAAlC,EAAiD,WAAjD;EADF,GA5BS;EA+Bf4O,EAAAA,KAAK,EAAE;EACL3Q,IAAAA,GAAG,EAAE,CAAC,MAAD,EAAS,UAAT,CADA;EAEL+B,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,SAAT,EAAoB,MAApB;EAFD,GA/BQ;EAmCf6O,EAAAA,OAAO,EAAE;EACP5Q,IAAAA,GAAG,EAAE,CAAC,MAAD,EAAS,MAAT;EADE,GAnCM;;EAuCf6Q,EAAAA,IAAI,EAAE;EACJ7Q,IAAAA,GAAG,EAAE,CAAC,MAAD,CADD;EAEJ+B,IAAAA,IAAI,EAAE,CAAC,OAAD;EAFF,GAvCS;;EA6Cf+O,EAAAA,UAAU,EAAE;EACV/O,IAAAA,IAAI,EAAE3F;EADI,GA7CG;EAgDf2U,EAAAA,WAAW,EAAE;EACXhP,IAAAA,IAAI,EAAE3F;EADK,GAhDE;EAmDf4U,EAAAA,WAAW,EAAE;EACXjP,IAAAA,IAAI,EAAE3F;EADK,GAnDE;;EAwDf6U,EAAAA,YAAY,EAAE;EACZlP,IAAAA,IAAI,EAAE,CAAC,YAAD;EADM,GAxDC;;EA6DfmP,EAAAA,QAAQ,EAAE,EA7DK;;EA+DfC,EAAAA,UAAU,EAAE;EACVpP,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,MAAtB,EAA8B,QAA9B;EADI,GA/DG;;EAmEfxC,EAAAA,YAAY,EAAE,EAnEC;;EAsEf6R,EAAAA,GAAG,EAAE;EACHrP,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,aAAZ,EAA2B,MAA3B,EAAmC,WAAnC,EAAgD,OAAhD,EAAyD,WAAzD,EAAsE,OAAtE;EADH,GAtEU;EAyEfsP,EAAAA,WAAW,EAAE;EACXtP,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,WAA1C,EAAuD,OAAvD;EADK,GAzEE;EA4EfuP,EAAAA,OAAO,EAAE,EA5EM;EA6EfC,EAAAA,SAAS,EAAE;EACTvR,IAAAA,GAAG,EAAE,CAAC,MAAD,CADI;EAET+B,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,OAA1C;EAFG,GA7EI;EAiFfyP,EAAAA,KAAK,EAAE;EACLzP,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,WAA1C;EADD,GAjFQ;EAoFf0P,EAAAA,QAAQ,EAAE;EACR1P,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,WAA1C;EADE,GApFK;EAuFf2P,EAAAA,KAAK,EAAE;EACL3P,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,WAA1C;EADD,GAvFQ;;EA4FftC,EAAAA,SAAS,EAAE;EACTsC,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,OAAtB;EADG,GA5FI;EA+FfhD,EAAAA,OAAO,EAAE;EACPgD,IAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,cAAX;EADC,GA/FM;EAkGflE,EAAAA,QAAQ,EAAE;EACRkE,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,OAAtB;EADE,GAlGK;;EAsGf4P,EAAAA,SAAS,EAAE;EACT5P,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,MAAtB,EAA8B,OAA9B;EADG;EAtGI,CAAjB;;ECFA;EACA,IAAM6P,QAAQ,GAAG;EACf9D,EAAAA,IAAI,EAAE,MADS;EAGflQ,EAAAA,IAAI,EAAE,OAHS;EAIfC,EAAAA,QAAQ,EAAE,OAJK;EAMf6S,EAAAA,IAAI,EAAE,KANS;EAOfd,EAAAA,KAAK,EAAE,KAPQ;EASfQ,EAAAA,SAAS,EAAE,SATI;EAWfY,EAAAA,WAAW,EAAE,MAXE;EAYfD,EAAAA,WAAW,EAAE,MAZE;EAafD,EAAAA,UAAU,EAAE,MAbG;EAcfL,EAAAA,MAAM,EAAE;EAdO,CAAjB;EAiBA;;EACA,IAAMoB,SAAS,GAAG,SAAZA,SAAY,CAASjV,IAAT,EAAe;EAC/B7D,EAAAA,MAAM,CAACC,IAAP,CAAY4D,IAAZ,EAAkB3D,OAAlB,CAA0B,UAAAnB,CAAC,EAAI;;EAE7B,QAAI8E,IAAI,CAAC9E,CAAD,CAAJ,CAAQga,KAAZ,EAAmB;EACjBlV,MAAAA,IAAI,CAAC9E,CAAD,CAAJ,CAAQga,KAAR,GAAgBlV,IAAI,CAAC9E,CAAD,CAAJ,CAAQga,KAAxB;EACA;EACD,KAL4B;;;EAO7B,QAAIF,QAAQ,CAAC9Z,CAAD,CAAZ,EAAiB;EACf8E,MAAAA,IAAI,CAAC9E,CAAD,CAAJ,CAAQga,KAAR,GAAgBF,QAAQ,CAAC9Z,CAAD,CAAxB;EACA;EACD;;EACD8E,IAAAA,IAAI,CAAC9E,CAAD,CAAJ,CAAQkI,GAAR,CAAY7C,IAAZ,CAAiB,UAAA5E,CAAC,EAAI;EACpB,UAAIqZ,QAAQ,CAACrZ,CAAD,CAAZ,EAAiB;EACfqE,QAAAA,IAAI,CAAC9E,CAAD,CAAJ,CAAQga,KAAR,GAAgBF,QAAQ,CAACrZ,CAAD,CAAxB;EACA,eAAO,IAAP;EACD;;EACD,aAAO,KAAP;EACD,KAND;EAOD,GAlBD;EAmBA,SAAOqE,IAAP;EACD,CArBD;;EAuBA,UAAc,GAAGiV,SAAjB;;EC1CA,IAAM9M,QAAM,GAAG,SAATA,MAAS,CAAS5D,GAAT,EAAc;EAC3B,SAAOA,GAAG,CAACuC,MAAJ,CAAW,UAACjL,CAAD,EAAI3B,CAAJ,EAAOM,CAAP;EAAA,WAAaA,CAAC,CAACoE,OAAF,CAAU/C,CAAV,MAAiB3B,CAA9B;EAAA,GAAX,CAAP;EACD,CAFD;;;EAKA,IAAMib,QAAQ,GAAG,SAAXA,QAAW,CAASnV,IAAT,EAAe;EAC9B7D,EAAAA,MAAM,CAACC,IAAP,CAAY4D,IAAZ,EAAkB3D,OAAlB,CAA0B,UAAAnB,CAAC,EAAI;EAC7B,QAAI6E,GAAG,GAAGC,IAAI,CAAC9E,CAAD,CAAd;EACA,QAAI6L,GAAG,GAAGhH,GAAG,CAACqD,GAAJ,CAAQ9I,MAAlB;;EACA,SAAK,IAAIJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6M,GAApB,EAAyB7M,CAAC,EAA1B,EAA8B;EAC5B,UAAI+K,IAAI,GAAGlF,GAAG,CAACqD,GAAJ,CAAQlJ,CAAR,CAAX;;EACA,UAAI8F,IAAI,CAACiF,IAAD,CAAR,EAAgB;EACdlF,QAAAA,GAAG,CAACqD,GAAJ,GAAUrD,GAAG,CAACqD,GAAJ,CAAQuF,MAAR,CAAe3I,IAAI,CAACiF,IAAD,CAAJ,CAAW7B,GAA1B,CAAV;EACD;EACF,KAR4B;;;EAU7BrD,IAAAA,GAAG,CAACqD,GAAJ,GAAU+E,QAAM,CAACpI,GAAG,CAACqD,GAAL,CAAhB;EACD,GAXD;EAYA,SAAOpD,IAAP;EACD,CAdD;;EAeA,QAAc,GAAGmV,QAAjB;;ECpBA,IAAMhN,QAAM,GAAG,SAATA,MAAS,CAAS5D,GAAT,EAAc;EAC3B,SAAOA,GAAG,CAACuC,MAAJ,CAAW,UAACjL,CAAD,EAAI3B,CAAJ,EAAOM,CAAP;EAAA,WAAaA,CAAC,CAACoE,OAAF,CAAU/C,CAAV,MAAiB3B,CAA9B;EAAA,GAAX,CAAP;EACD,CAFD;EAKA;;;EACA,IAAMkb,SAAS,GAAG,SAAZA,SAAY,CAASpV,IAAT,EAAe;EAC/B,MAAI5D,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY4D,IAAZ,CAAX;EACA5D,EAAAA,IAAI,CAACC,OAAL,CAAa,UAAAnB,CAAC,EAAI;EAChB,QAAI6E,GAAG,GAAGC,IAAI,CAAC9E,CAAD,CAAd;EACA6E,IAAAA,GAAG,CAACoF,IAAJ,GAAWpF,GAAG,CAACoF,IAAJ,IAAY,EAAvB;EACApF,IAAAA,GAAG,CAACqD,GAAJ,CAAQ/G,OAAR,CAAgB,UAAA4I,IAAI,EAAI;EACtB,UAAIjF,IAAI,CAACiF,IAAD,CAAJ,IAAcjF,IAAI,CAACiF,IAAD,CAAJ,CAAWE,IAA7B,EAAmC;;EAEjC,YAAIA,IAAI,GAAG,OAAOnF,IAAI,CAACiF,IAAD,CAAJ,CAAWE,IAAlB,KAA2B,QAA3B,GAAsC,CAACnF,IAAI,CAACiF,IAAD,CAAJ,CAAW7B,GAAZ,CAAtC,GAAyDpD,IAAI,CAACiF,IAAD,CAAJ,CAAWE,IAAX,IAAmB,EAAvF;EACApF,QAAAA,GAAG,CAACoF,IAAJ,GAAWpF,GAAG,CAACoF,IAAJ,CAASwD,MAAT,CAAgBxD,IAAhB,CAAX;EACD;EACF,KAND,EAHgB;;EAWhB,SAAK,IAAIjL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,UAAMmb,GAAG,GAAGjZ,IAAI,CAAClC,CAAD,CAAhB;;EACA,UAAI8F,IAAI,CAACqV,GAAD,CAAJ,CAAUlQ,IAAV,CAAevG,OAAf,CAAuB1D,CAAvB,MAA8B,CAAC,CAAnC,EAAsC;EACpC6E,QAAAA,GAAG,CAACoF,IAAJ,CAASoB,IAAT,CAAc8O,GAAd;EACD;EACF,KAhBe;;;EAkBhBtV,IAAAA,GAAG,CAACoF,IAAJ,GAAWgD,QAAM,CAACpI,GAAG,CAACoF,IAAL,CAAjB;EACD,GAnBD;EAoBA,SAAOnF,IAAP;EACD,CAvBD;;EAwBA,SAAc,GAAGoV,SAAjB;;EC9BA;EACA,IAAME,YAAY,GAAG,SAAfA,YAAe,CAAStV,IAAT,EAAe;EAClC,MAAI5D,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY4D,IAAZ,CAAX;EACA5D,EAAAA,IAAI,CAACC,OAAL,CAAa,UAAAnB,CAAC,EAAI;EAChB,QAAI6E,GAAG,GAAGC,IAAI,CAAC9E,CAAD,CAAd;EACA6E,IAAAA,GAAG,CAACoD,OAAJ,GAAc,EAAd,CAFgB;;EAIhB,SAAK,IAAIjJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,UAAI8F,IAAI,CAAC5D,IAAI,CAAClC,CAAD,CAAL,CAAJ,CAAckJ,GAAd,CAAkBxE,OAAlB,CAA0B1D,CAA1B,MAAiC,CAAC,CAAtC,EAAyC;EACvC6E,QAAAA,GAAG,CAACoD,OAAJ,CAAYoD,IAAZ,CAAiBnK,IAAI,CAAClC,CAAD,CAArB;EACD;EACF;EACF,GATD;EAUA,SAAO8F,IAAP;EACD,CAbD;;EAcA,YAAc,GAAGsV,YAAjB;;ECVA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAASvV,IAAT,EAAe;;EAE9B7D,EAAAA,MAAM,CAACC,IAAP,CAAY4D,IAAZ,EAAkB3D,OAAlB,CAA0B,UAAAnB,CAAC,EAAI;EAC7B,QAAI6E,GAAG,GAAGC,IAAI,CAAC9E,CAAD,CAAd,CAD6B;;EAG7B6E,IAAAA,GAAG,CAACqD,GAAJ,GAAUrD,GAAG,CAACqD,GAAJ,IAAW,EAArB;;EACA,QAAI,OAAOrD,GAAG,CAACqD,GAAX,KAAmB,QAAvB,EAAiC;EAC/BrD,MAAAA,GAAG,CAACqD,GAAJ,GAAU,CAACrD,GAAG,CAACqD,GAAL,CAAV;EACD,KAN4B;;;EAQ7BrD,IAAAA,GAAG,CAACoF,IAAJ,GAAWpF,GAAG,CAACoF,IAAJ,IAAY,EAAvB;;EACA,QAAI,OAAOpF,GAAG,CAACoF,IAAX,KAAoB,QAAxB,EAAkC;EAChCpF,MAAAA,GAAG,CAACoF,IAAJ,GAAW,CAACpF,GAAG,CAACoF,IAAL,CAAX;EACD;EACF,GAZD;EAaA,SAAOnF,IAAP;EACD,CAhBD;;;EAmBA,IAAMwV,SAAS,GAAG,SAAZA,SAAY,CAASxV,IAAT,EAAe;;EAE/BA,EAAAA,IAAI,GAAGuV,QAAQ,CAACvV,IAAD,CAAf,CAF+B;;EAI/BA,EAAAA,IAAI,GAAGmV,IAAQ,CAACnV,IAAD,CAAf,CAJ+B;;EAM/BA,EAAAA,IAAI,GAAGoV,KAAS,CAACpV,IAAD,CAAhB,CAN+B;;EAQ/BA,EAAAA,IAAI,GAAGyV,MAAU,CAACzV,IAAD,CAAjB,CAR+B;;EAU/BA,EAAAA,IAAI,GAAGmD,QAAO,CAACnD,IAAD,CAAd;EACA,SAAOA,IAAP;EACD,CAZD;;EAaA,aAAc,GAAGwV,SAAjB;;EC9BA,IAAME,KAAK,GAAG,SAARA,KAAQ,CAAS9P,GAAT,EAAc5F,IAAd,EAAoB;EAChC7D,EAAAA,MAAM,CAACC,IAAP,CAAYwJ,GAAZ,EAAiBvJ,OAAjB,CAAyB,UAAAnB,CAAC,EAAI;EAC5B8E,IAAAA,IAAI,CAAC9E,CAAD,CAAJ,GAAU0K,GAAG,CAAC1K,CAAD,CAAb;EACD,GAFD;EAGD,CAJD;;EAMA,IAAMya,KAAK,GAAG,SAARA,KAAQ,GAAM;EAClB,MAAI3V,IAAI,GAAG,EAAX;EACA0V,EAAAA,KAAK,CAACE,KAAD,EAAQ5V,IAAR,CAAL;EACA0V,EAAAA,KAAK,CAACG,KAAD,EAAQ7V,IAAR,CAAL;EACA0V,EAAAA,KAAK,CAACI,MAAD,EAAS9V,IAAT,CAAL;EACA0V,EAAAA,KAAK,CAACK,IAAD,EAAO/V,IAAP,CAAL,CALkB;;EAOlBA,EAAAA,IAAI,GAAGwV,SAAS,CAACxV,IAAD,CAAhB;EACA,SAAOA,IAAP;EACD,CATD;;EAUA,QAAc,GAAG2V,KAAK,EAAtB;;MCvB2BK,GAAG,GAAC,sCAAlB;EAAA,IAAyD9P,KAAK,GAAC8P,GAAG,CAAClc,KAAJ,CAAU,EAAV,EAAcmE,MAAd,CAAqB,UAAS5C,CAAT,EAAWC,CAAX,EAAaV,CAAb,EAAe;EAAC,SAAOS,CAAC,CAACC,CAAD,CAAD,GAAKV,CAAL,EAAOS,CAAd;EAAgB,CAArD,EAAsD,EAAtD,CAA/D;EAAA,IAAyH4a,WAAW,GAAC,SAAZA,WAAY,CAAS5a,CAAT,EAAW;EAAC,MAAG,KAAK,CAAL,KAAS2a,GAAG,CAAC3a,CAAD,CAAf,EAAmB,OAAO2a,GAAG,CAAC3a,CAAD,CAAV;EAAc,MAAIC,CAAC,GAAC,CAAN;EAAA,MAAQV,CAAC,GAAC,EAAV;EAAA,MAAae,CAAC,GAAC,EAAf;;EAAkB,SAAKN,CAAC,IAAET,CAAR,EAAUS,CAAC,IAAET,CAAH,EAAKU,CAAC,EAAN,EAASV,CAAC,IAAE,EAAtB;AAAyB,EAAzB;;EAA0B,SAAKU,CAAC,EAAN,GAAU;EAAC,QAAMA,EAAC,GAACD,CAAC,GAAC,EAAV;;EAAaM,IAAAA,CAAC,GAACgK,MAAM,CAACuQ,YAAP,CAAoB,CAAC5a,EAAC,GAAC,EAAF,GAAK,EAAL,GAAQ,EAAT,IAAaA,EAAjC,IAAoCK,CAAtC,EAAwCN,CAAC,GAAC,CAACA,CAAC,GAACC,EAAH,IAAM,EAAhD;EAAmD;;EAAA,SAAOK,CAAP;EAAS,CAAlT;EAAA,IAAmTwa,aAAa,GAAC,SAAdA,aAAc,CAAS9a,CAAT,EAAW;EAAC,MAAG,KAAK,CAAL,KAAS6K,KAAK,CAAC7K,CAAD,CAAjB,EAAqB,OAAO6K,KAAK,CAAC7K,CAAD,CAAZ;EAAgB,MAAIC,CAAC,GAAC,CAAN;EAAA,MAAQV,CAAC,GAAC,CAAV;EAAA,MAAYe,CAAC,GAAC,EAAd;EAAA,MAAiBF,CAAC,GAAC,CAAnB;;EAAqB,SAAKb,CAAC,GAACS,CAAC,CAACf,MAAT,EAAgBgB,CAAC,IAAEK,CAAH,EAAKf,CAAC,EAAN,EAASe,CAAC,IAAE,EAA5B;AAA+B,EAA/B;;EAAgC,OAAI,IAAIf,EAAC,GAACS,CAAC,CAACf,MAAF,GAAS,CAAnB,EAAqBM,EAAC,IAAE,CAAxB,EAA0BA,EAAC,IAAGa,CAAC,IAAE,EAAjC,EAAoC;EAAC,QAAIE,EAAC,GAACN,CAAC,CAAC+a,UAAF,CAAaxb,EAAb,IAAgB,EAAtB;;EAAyBe,IAAAA,EAAC,GAAC,EAAF,KAAOA,EAAC,IAAE,CAAV,GAAaL,CAAC,IAAEK,EAAC,GAACF,CAAlB;EAAoB;;EAAA,SAAOH,CAAP;EAAS,CAAlgB;;EAAmgB,IAAI+a,QAAQ,GAAC;EAACJ,EAAAA,WAAW,EAACA,WAAb;EAAyBE,EAAAA,aAAa,EAACA;EAAvC,CAAb;EAAA,IAAmEG,OAAO,GAAC,SAARA,OAAQ,CAASjb,CAAT,EAAW;EAAC,MAAMC,CAAC,GAAC,IAAI6Q,MAAJ,CAAW,yBAAX,CAAR;;EAA8C,OAAI,IAAIvR,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACS,CAAC,CAACkb,KAAF,CAAQjc,MAAtB,EAA6BM,CAAC,EAA9B,EAAiC;EAAC,QAAMe,CAAC,GAACL,CAAC,CAACmR,IAAF,CAAOpR,CAAC,CAACkb,KAAF,CAAQ3b,CAAR,CAAP,CAAR;;EAA2B,QAAG,CAACe,CAAJ,EAAM;EAACN,MAAAA,CAAC,CAACmb,QAAF,GAAW5b,CAAX;EAAa;EAAM;;EAAAS,IAAAA,CAAC,CAACob,IAAF,CAAOJ,QAAQ,CAACF,aAAT,CAAuBxa,CAAC,CAAC,CAAD,CAAxB,CAAP,IAAqC0a,QAAQ,CAACF,aAAT,CAAuBxa,CAAC,CAAC,CAAD,CAAxB,CAArC;EAAkE;;EAAAN,EAAAA,CAAC,CAACkb,KAAF,GAAQlb,CAAC,CAACkb,KAAF,CAAQ1M,KAAR,CAAcxO,CAAC,CAACmb,QAAhB,EAAyBnb,CAAC,CAACkb,KAAF,CAAQjc,MAAjC,CAAR;EAAiD,CAA/U;;EAAgV,IAAMoc,YAAY,GAAC,SAAbA,YAAa,CAASrb,CAAT,EAAWC,CAAX,EAAaV,CAAb,EAAe;EAAC,MAAMe,CAAC,GAAC0a,QAAQ,CAACF,aAAT,CAAuB7a,CAAvB,CAAR;EAAkC,SAAOK,CAAC,GAACN,CAAC,CAACmb,QAAJ,GAAanb,CAAC,CAACob,IAAF,CAAO9a,CAAP,CAAb,GAAuBf,CAAC,GAACe,CAAF,GAAI,CAAJ,GAAMN,CAAC,CAACmb,QAAtC;EAA+C,CAApH;EAAA,IAAqHG,OAAO,GAAC,SAARA,OAAQ,CAAStb,CAAT,EAAW;EAAC,MAAMC,CAAC,GAAC,EAAR;EAAA,MAAWV,CAAC,GAAC,SAAFA,CAAE,CAACe,CAAD,EAAGF,CAAH,EAAO;EAAC,QAAIC,CAAC,GAACL,CAAC,CAACkb,KAAF,CAAQ5a,CAAR,CAAN;EAAiB,YAAMD,CAAC,CAAC,CAAD,CAAP,KAAaJ,CAAC,CAACiL,IAAF,CAAO9K,CAAP,GAAUC,CAAC,GAACA,CAAC,CAACmO,KAAF,CAAQ,CAAR,CAAzB;EAAqC,QAAMnP,CAAC,GAACgB,CAAC,CAAC5B,KAAF,CAAQ,eAAR,CAAR;;EAAiC,SAAI,IAAI4B,EAAC,GAAC,CAAV,EAAYA,EAAC,GAAChB,CAAC,CAACJ,MAAhB,EAAuBoB,EAAC,IAAE,CAA1B,EAA4B;EAAC,UAAME,CAAC,GAAClB,CAAC,CAACgB,EAAD,CAAT;EAAA,UAAaxB,CAAC,GAACQ,CAAC,CAACgB,EAAC,GAAC,CAAH,CAAhB;EAAsB,UAAG,CAACE,CAAJ,EAAM;EAAS,UAAMT,CAAC,GAACM,CAAC,GAACG,CAAV;;EAAY,UAAG,QAAM1B,CAAN,IAAS,KAAK,CAAL,KAASA,CAArB,EAAuB;EAACoB,QAAAA,CAAC,CAACiL,IAAF,CAAOpL,CAAP;EAAU;EAAS;;EAAA,UAAMN,CAAC,GAAC6b,YAAY,CAACrb,CAAD,EAAGnB,CAAH,EAAKyB,CAAL,CAApB;EAA4Bf,MAAAA,CAAC,CAACC,CAAD,EAAGM,CAAH,CAAD;EAAO;EAAC,GAAzQ;;EAA0Q,SAAOP,CAAC,CAAC,CAAD,EAAG,EAAH,CAAD,EAAQU,CAAf;EAAiB,CAApa;EAAA,IAAqasb,MAAM,GAAC,SAAPA,MAAO,CAASvb,CAAT,EAAW;EAAC,MAAMC,CAAC,GAAC;EAACib,IAAAA,KAAK,EAAClb,CAAC,CAACvB,KAAF,CAAQ,GAAR,CAAP;EAAoB2c,IAAAA,IAAI,EAAC,EAAzB;EAA4BD,IAAAA,QAAQ,EAAC;EAArC,GAAR;EAAgD,SAAOnb,CAAC,CAACoM,KAAF,CAAQ,GAAR,KAAc6O,OAAO,CAAChb,CAAD,CAArB,EAAyBqb,OAAO,CAACrb,CAAD,CAAvC;EAA2C,CAAnhB;;EAAohB,IAAIub,QAAQ,GAACD,MAAb;EAAA,IAAoBE,UAAU,GAAC,SAAXA,UAAW,CAASzb,CAAT,EAAW;EAAC,MAAMC,CAAC,GAACD,CAAC,CAACvB,KAAF,CAAQ,GAAR,EAAamE,MAAb,CAAoB,UAAC5C,CAAD,EAAGC,CAAH,EAAO;EAAC,QAAMV,CAAC,GAACU,CAAC,CAACxB,KAAF,CAAQ,GAAR,CAAR;EAAqB,WAAOuB,CAAC,CAACT,CAAC,CAAC,CAAD,CAAF,CAAD,GAAQA,CAAC,CAAC,CAAD,CAAT,EAAaS,CAApB;EAAsB,GAAvE,EAAwE,EAAxE,CAAR;EAAA,MAAoFT,CAAC,GAAC,EAAtF;EAAyF,SAAOuB,MAAM,CAACC,IAAP,CAAYd,CAAZ,EAAee,OAAf,CAAuB,UAAShB,CAAT,EAAW;EAAC,QAAMM,CAAC,GAACkb,QAAQ,CAACvb,CAAC,CAACD,CAAD,CAAF,CAAhB;EAAuB,eAASA,CAAT,KAAaA,CAAC,GAAC,CAAC,CAAhB;;EAAmB,SAAI,IAAIC,GAAC,GAAC,CAAV,EAAYA,GAAC,GAACK,CAAC,CAACrB,MAAhB,EAAuBgB,GAAC,EAAxB,EAA2B;EAAC,UAAMG,CAAC,GAACE,CAAC,CAACL,GAAD,CAAT;EAAa,OAAC,CAAD,KAAKV,CAAC,CAACgF,cAAF,CAAiBnE,CAAjB,CAAL,GAAyB,CAAC,CAAD,KAAKsb,KAAK,CAAC3J,OAAN,CAAcxS,CAAC,CAACa,CAAD,CAAf,CAAL,GAAyBb,CAAC,CAACa,CAAD,CAAD,GAAK,CAACb,CAAC,CAACa,CAAD,CAAF,EAAMJ,CAAN,CAA9B,GAAuCT,CAAC,CAACa,CAAD,CAAD,CAAK8K,IAAL,CAAUlL,CAAV,CAAhE,GAA6ET,CAAC,CAACa,CAAD,CAAD,GAAKJ,CAAlF;EAAoF;EAAC,GAA3M,GAA6MT,CAApN;EAAsN,CAA1V;;EAA2V,kBAAc,GAACkc,UAAf;;ECA/sD;EACA,IAAME,OAAO,GAAG,SAAVA,OAAU,CAAS9Y,IAAT,EAAe6B,GAAf,EAAoBkX,GAApB,EAAyB;EACvC,MAAIA,GAAG,CAAC/Y,IAAD,CAAH,KAAcyB,SAAlB,EAA6B;EAC3B,QAAI,OAAOsX,GAAG,CAAC/Y,IAAD,CAAV,KAAqB,QAAzB,EAAmC;EACjC+Y,MAAAA,GAAG,CAAC/Y,IAAD,CAAH,GAAY,CAAC+Y,GAAG,CAAC/Y,IAAD,CAAJ,CAAZ;EACD;;EACD,QAAI,OAAO6B,GAAP,KAAe,QAAnB,EAA6B;EAC3BkX,MAAAA,GAAG,CAAC/Y,IAAD,CAAH,CAAUqI,IAAV,CAAexG,GAAf;EACD,KAFD,MAEO;EACLkX,MAAAA,GAAG,CAAC/Y,IAAD,CAAH,GAAY+Y,GAAG,CAAC/Y,IAAD,CAAH,CAAUyK,MAAV,CAAiB5I,GAAjB,CAAZ;EACD;EACF,GATD,MASO;EACLkX,IAAAA,GAAG,CAAC/Y,IAAD,CAAH,GAAY6B,GAAZ;EACD;EACF,CAbD;;;EAgBA,IAAMmX,OAAO,GAAG,SAAVA,OAAU,CAAShZ,IAAT,EAAe6B,GAAf,EAAoBY,KAApB,EAA2B;EACzC,MAAIwW,OAAO,GAAGxW,KAAK,CAAC4M,KAApB;EACA,MAAI3M,SAAS,GAAGD,KAAK,CAACE,UAAtB,CAFyC;;EAKzC,MAAI0M,KAAK,GAAGrP,IAAI,CAACpE,KAAL,CAAW,GAAX,CAAZ;;EACA,MAAIyT,KAAK,CAACjT,MAAN,GAAe,CAAnB,EAAsB;;EAEpBqG,IAAAA,KAAK,CAACyW,WAAN,CAAkB7J,KAAK,CAAC,CAAD,CAAvB,IAA8B,IAA9B;EACD,GATwC;;;EAWzC,MAAIxN,GAAG,KAAK,UAAZ,EAAwB;EACtB,QAAIsX,MAAM,GAAGzW,SAAS,CAAC0W,QAAV,CAAmBpZ,IAAnB,EAAyByC,KAAzB,CAAb;EACAwW,IAAAA,OAAO,CAACE,MAAD,CAAP,GAAkBF,OAAO,CAACE,MAAD,CAAP,IAAmB,QAArC,CAFsB;EAGvB,GAdwC;;;EAgBzC,MAAItX,GAAG,KAAK,YAAZ,EAA0B;EACxB,QAAIwX,IAAI,GAAG3W,SAAS,CAAC4W,SAAV,CAAoBtZ,IAApB,EAA0ByC,KAA1B,CAAX;EACA,QAAIX,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYmb,IAAZ,CAAX;;EACA,SAAK,IAAIrd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,UAAI4B,CAAC,GAAGyb,IAAI,CAACvX,IAAI,CAAC9F,CAAD,CAAL,CAAZ;EACAid,MAAAA,OAAO,CAACrb,CAAD,CAAP,GAAaqb,OAAO,CAACrb,CAAD,CAAP,IAAckE,IAAI,CAAC9F,CAAD,CAA/B,CAFoC;EAGrC;EACF,GAvBwC;;;EAyBzC,MAAI6F,GAAG,KAAK,YAAZ,EAA0B;EACxB,QAAIwX,KAAI,GAAG3W,SAAS,CAAC6W,UAAV,CAAqBvZ,IAArB,CAAX;;EACA,QAAI8B,KAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYmb,KAAZ,CAAX;;EACA,SAAK,IAAIrd,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG8F,KAAI,CAAC1F,MAAzB,EAAiCJ,EAAC,EAAlC,EAAsC;EACpC,UAAI4B,EAAC,GAAGyb,KAAI,CAACvX,KAAI,CAAC9F,EAAD,CAAL,CAAZ;EACAid,MAAAA,OAAO,CAACrb,EAAD,CAAP,GAAaqb,OAAO,CAACrb,EAAD,CAAP,IAAckE,KAAI,CAAC9F,EAAD,CAA/B,CAFoC;EAGrC;EACF,GAhCwC;;;EAkCzC,MAAI6F,GAAG,KAAK,aAAZ,EAA2B;;EAEzBiX,IAAAA,OAAO,CAAC9Y,IAAD,EAAO,YAAP,EAAqBiZ,OAArB,CAAP,CAFyB;;EAIzB,QAAII,MAAI,GAAG3W,SAAS,CAAC4W,SAAV,CAAoBjK,KAAK,CAAC,CAAD,CAAzB,EAA8B5M,KAA9B,CAAX;;EACA,QAAIX,MAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYmb,MAAZ,CAAX;;EACA,SAAK,IAAIrd,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAG8F,MAAI,CAAC1F,MAAzB,EAAiCJ,GAAC,EAAlC,EAAsC;;EAEpCyG,MAAAA,KAAK,CAACyW,WAAN,CAAkBG,MAAI,CAACvX,MAAI,CAAC9F,GAAD,CAAL,CAAtB,IAAmC,IAAnC,CAFoC;;EAIpC,UAAI4B,GAAC,GAAGyb,MAAI,CAACvX,MAAI,CAAC9F,GAAD,CAAL,CAAJ,GAAgB,GAAhB,GAAsBqT,KAAK,CAAC,CAAD,CAAnC;;EAEAyJ,MAAAA,OAAO,CAAClb,GAAD,EAAIkE,MAAI,CAAC9F,GAAD,CAAR,EAAaid,OAAb,CAAP;EACAH,MAAAA,OAAO,CAAClb,GAAD,EAAI,aAAJ,EAAmBqb,OAAnB,CAAP;EACD;EACF,GAjDwC;;;EAmDzC,MAAIpX,GAAG,KAAK,SAAZ,EAAuB;EACrB,QAAIsX,OAAM,GAAGzW,SAAS,CAAC0W,QAAV,CAAmBpZ,IAAnB,EAAyByC,KAAzB,CAAb;;EACAwW,IAAAA,OAAO,CAACE,OAAD,CAAP,GAAkBF,OAAO,CAACE,OAAD,CAAP,IAAmB,CAAC,SAAD,EAAY,QAAZ,CAArC,CAFqB;EAGtB;EACF,CAvDD;EA0DA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACA,YAAc,GAAG;EACfL,EAAAA,OAAO,EAAEA,OADM;EAEfE,EAAAA,OAAO,EAAEA;EAFM,CAAjB;;ECnFA;EACA,IAAMQ,aAAa,GAAG,SAAhBA,aAAgB,CAAS/W,KAAT,EAAgB;;EAEpC,MAAIiV,KAAK,GAAGjV,KAAK,CAACgX,UAAN,CAAiB/B,KAA7B;EACA,MAAIrI,KAAK,GAAGpR,MAAM,CAACC,IAAP,CAAYwZ,KAAZ,CAAZ;;EACA,OAAK,IAAI1b,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqT,KAAK,CAACjT,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,QAAM4B,CAAC,GAAGyR,KAAK,CAACrT,CAAD,CAAf;EACAyG,IAAAA,KAAK,CAAC4M,KAAN,CAAYzR,CAAZ,IAAiB,UAAjB;EACA6E,IAAAA,KAAK,CAAC4M,KAAN,CAAYqI,KAAK,CAAC9Z,CAAD,CAAjB,IAAwB,QAAxB;EACD,GARmC;;;EAWpC,MAAI+Z,KAAK,GAAGlV,KAAK,CAACgX,UAAN,CAAiB9B,KAA7B;EACA,MAAIzZ,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYyZ,KAAZ,CAAX;;EAZoC,6BAa3B3b,EAb2B;EAclC,QAAM0d,GAAG,GAAGxb,IAAI,CAAClC,EAAD,CAAhB,CAdkC;;EAgBlCyG,IAAAA,KAAK,CAAC4M,KAAN,CAAYqK,GAAZ,IAAmBjX,KAAK,CAAC4M,KAAN,CAAYqK,GAAZ,KAAoB,YAAvC;EACA,QAAIC,KAAK,GAAGlX,KAAK,CAACE,UAAN,CAAiB2W,SAAjB,CAA2BI,GAA3B,EAAgCjX,KAAhC,CAAZ;EACAkX,IAAAA,KAAK,GAAG1b,MAAM,CAACqH,MAAP,CAAcqU,KAAd,EAAqBhC,KAAK,CAAC+B,GAAD,CAA1B,CAAR,CAlBkC;;EAoBlCzb,IAAAA,MAAM,CAACC,IAAP,CAAYyb,KAAZ,EAAmBxb,OAAnB,CAA2B,UAAA0D,GAAG,EAAI;EAChCY,MAAAA,KAAK,CAAC4M,KAAN,CAAYsK,KAAK,CAAC9X,GAAD,CAAjB,IAA0BY,KAAK,CAAC4M,KAAN,CAAYsK,KAAK,CAAC9X,GAAD,CAAjB,KAA2BA,GAArD;EACD,KAFD;EApBkC;;EAapC,OAAK,IAAI7F,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,EAAC,EAAlC,EAAsC;EAAA,UAA7BA,EAA6B;EAUrC;EACF,CAxBD;;EAyBA,mBAAc,GAAGwd,aAAjB;;EC1BA;EACA,UAAc,GAAG;;EAEf,sBAAoB,cAFL;;EAIf,cAAY,cAJG;EAKf,cAAY,cALG;EAMfI,EAAAA,EAAE,EAAE,cANW;EAOf,aAAW,cAPI;EAQfC,EAAAA,GAAG,EAAE,cARU;EASfC,EAAAA,EAAE,EAAE,MATW;EAUfC,EAAAA,EAAE,EAAE,MAVW;EAWfC,EAAAA,EAAE,EAAE,MAXW;EAYfC,EAAAA,EAAE,EAAE;EAZW,CAAjB;;ECDA;EACA;EAEA,WAAc,GAAG;EACfC,EAAAA,QAAQ,EAAE,SADK;EAEfC,EAAAA,IAAI,EAAE,OAFS;EAGfC,EAAAA,MAAM,EAAE,SAHO;EAIfC,EAAAA,OAAO,EAAE,QAJM;EAKfC,EAAAA,QAAQ,EAAE,UALK;EAMfC,EAAAA,OAAO,EAAE,UANM;EAOfC,EAAAA,QAAQ,EAAE,YAPK;EAQfC,EAAAA,OAAO,EAAE,UARM;EASfC,EAAAA,IAAI,EAAE,MATS;EAUfC,EAAAA,QAAQ,EAAE,SAVK;EAWfC,EAAAA,QAAQ,EAAE,UAXK;EAYfC,EAAAA,IAAI,EAAE,OAZS;EAafC,EAAAA,GAAG,EAAE,OAbU;EAcfC,EAAAA,MAAM,EAAE,OAdO;EAefC,EAAAA,OAAO,EAAE,UAfM;EAgBfC,EAAAA,KAAK,EAAE,UAhBQ;EAiBfC,EAAAA,MAAM,EAAE,UAjBO;EAkBfC,EAAAA,OAAO,EAAE,SAlBM;EAmBfC,EAAAA,MAAM,EAAE,SAnBO;EAoBfC,EAAAA,SAAS,EAAE,UApBI;EAqBfC,EAAAA,UAAU,EAAE,WArBG;EAsBfC,EAAAA,QAAQ,EAAE,WAtBK;EAuBfC,EAAAA,IAAI,EAAE,MAvBS;EAwBfC,EAAAA,SAAS,EAAE,WAxBI;EAyBfC,EAAAA,IAAI,EAAE,QAzBS;EA0BfC,EAAAA,OAAO,EAAE,WA1BM;EA2BfC,EAAAA,KAAK,EAAE,QA3BQ;EA4BfC,EAAAA,IAAI,EAAE,MA5BS;EA6BfC,EAAAA,OAAO,EAAE,UA7BM;EA8BfC,EAAAA,MAAM,EAAE,OA9BO;EA+BfC,EAAAA,KAAK,EAAE,QA/BQ;EAgCfC,EAAAA,KAAK,EAAE,OAhCQ;EAiCfC,EAAAA,IAAI,EAAE,OAjCS;EAkCfC,EAAAA,YAAY,EAAE,aAlCC;EAmCf/a,EAAAA,KAAK,EAAE,SAnCQ;EAoCfgb,EAAAA,KAAK,EAAE,QApCQ;EAqCfC,EAAAA,IAAI,EAAE,QArCS;EAsCfC,EAAAA,QAAQ,EAAE,UAtCK;EAuCfC,EAAAA,IAAI,EAAE,QAvCS;EAwCfC,EAAAA,GAAG,EAAE,KAxCU;EAyCfC,EAAAA,MAAM,EAAE,UAzCO;EA0CfC,EAAAA,UAAU,EAAE,WA1CG;EA2CfC,EAAAA,OAAO,EAAE,QA3CM;EA4CfC,EAAAA,QAAQ,EAAE,YA5CK;EA6CfC,EAAAA,KAAK,EAAE,MA7CQ;EA8CfC,EAAAA,IAAI,EAAE,OA9CS;EA+CfC,EAAAA,MAAM,EAAE,SA/CO;EAgDfC,EAAAA,OAAO,EAAE,QAhDM;EAiDfC,EAAAA,OAAO,EAAE,QAjDM;EAkDfC,EAAAA,IAAI,EAAE,OAlDS;EAmDfC,EAAAA,IAAI,EAAE,KAnDS;EAoDfC,EAAAA,EAAE,EAAE,MApDW;EAqDfC,EAAAA,WAAW,EAAE,aArDE;EAsDfC,EAAAA,MAAM,EAAE,QAtDO;EAuDfC,EAAAA,UAAU,EAAE,WAvDG;EAwDfC,EAAAA,SAAS,EAAE,WAxDI;EAyDfC,EAAAA,IAAI,EAAE,SAzDS;EA0DfC,EAAAA,MAAM,EAAE,OA1DO;EA2DfC,EAAAA,UAAU,EAAE,WA3DG;EA4DfC,EAAAA,KAAK,EAAE,QA5DQ;EA6DfC,EAAAA,GAAG,EAAE,OA7DU;EA8DfC,EAAAA,IAAI,EAAE,OA9DS;EA+DfC,EAAAA,QAAQ,EAAE,WA/DK;EAgEfC,EAAAA,QAAQ,EAAE,SAhEK;EAiEfC,EAAAA,OAAO,EAAE,UAjEM;EAkEfC,EAAAA,QAAQ,EAAE,SAlEK;EAmEfC,EAAAA,QAAQ,EAAE,UAnEK;EAoEfC,EAAAA,OAAO,EAAE,UApEM;EAqEfC,EAAAA,MAAM,EAAE,QArEO;EAsEfC,EAAAA,KAAK,EAAE,SAtEQ;EAuEfC,EAAAA,KAAK,EAAE,OAvEQ;EAwEfC,EAAAA,OAAO,EAAE,UAxEM;EAyEfC,EAAAA,MAAM,EAAE,SAzEO;EA0EfC,EAAAA,QAAQ,EAAE,WA1EK;;;EAAA,CAAjB;;ECHA;EACA;EACA;EAEA;EACA,IAAMC,OAAO,GAAG;EACd/hB,EAAAA,CAAC,EAAE,QADW;EAEdgiB,EAAAA,GAAG,EAAE,YAFS;EAGdC,EAAAA,IAAI,EAAE,cAHQ;EAIdC,EAAAA,GAAG,EAAE,WAJS;EAKdC,EAAAA,GAAG,EAAE,eALS;EAMdC,EAAAA,IAAI,EAAE,cANQ;EAOdC,EAAAA,OAAO,EAAE,YAPK;EAQd3iB,EAAAA,CAAC,EAAE;EARW,CAAhB;;EAYA,IAAI4iB,YAAY,GAAG;EACjBC,EAAAA,GAAG,EAAE;EACH7iB,IAAAA,CAAC,EAAE;EADA,GADY;EAIjB8iB,EAAAA,IAAI,EAAE;EACJN,IAAAA,GAAG,EAAE,OADD;EAEJliB,IAAAA,CAAC,EAAE;EAFC,GAJW;EAQjByiB,EAAAA,GAAG,EAAE;EACHziB,IAAAA,CAAC,EAAE,QADA;EAEHkiB,IAAAA,GAAG,EAAE,MAFF;EAGHE,IAAAA,IAAI,EAAE;EAHH,GARY;EAajBM,EAAAA,GAAG,EAAE;EACHhjB,IAAAA,CAAC,EAAE,KADA;EAEHM,IAAAA,CAAC,EAAE,MAFA;EAGHkiB,IAAAA,GAAG,EAAE;EAHF,GAbY;EAkBjBS,EAAAA,KAAK,EAAE;EACLX,IAAAA,GAAG,EAAE,IADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAlBU;EAsBjBU,EAAAA,OAAO,EAAE;EACPljB,IAAAA,CAAC,EAAE,MADI;EAEPwiB,IAAAA,GAAG,EAAE;EAFE,GAtBQ;EA0BjBW,EAAAA,GAAG,EAAE;EACHnjB,IAAAA,CAAC,EAAE,EADA;EAEHM,IAAAA,CAAC,EAAE,OAFA;EAGHkiB,IAAAA,GAAG,EAAE;EAHF,GA1BY;EA+BjBY,EAAAA,EAAE,EAAE;EACFpjB,IAAAA,CAAC,EAAE,EADD;EAEFM,IAAAA,CAAC,EAAE,IAFD;EAGFgiB,IAAAA,GAAG,EAAE,MAHH;EAIFE,IAAAA,GAAG,EAAE,KAJH;EAKFE,IAAAA,IAAI,EAAE;EALJ,GA/Ba;EAsCjBW,EAAAA,IAAI,EAAE;EACJrjB,IAAAA,CAAC,EAAE,KADC;EAEJM,IAAAA,CAAC,EAAE,MAFC;EAGJgiB,IAAAA,GAAG,EAAE;EAHD,GAtCW;EA2CjBgB,EAAAA,MAAM,EAAE;EACNhB,IAAAA,GAAG,EAAE;EADC,GA3CS;EA8CjBiB,EAAAA,KAAK,EAAE;EACLjjB,IAAAA,CAAC,EAAE,OADE;EAELgiB,IAAAA,GAAG,EAAE,OAFA;EAGLE,IAAAA,GAAG,EAAE;EAHA,GA9CU;EAmDjBgB,EAAAA,KAAK,EAAE;EACLljB,IAAAA,CAAC,EAAE,KADE;EAELkiB,IAAAA,GAAG,EAAE,MAFA;EAGLE,IAAAA,IAAI,EAAE;EAHD,GAnDU;EAwDjBe,EAAAA,IAAI,EAAE;EACJnB,IAAAA,GAAG,EAAE;EADD,GAxDW;EA2DjBoB,EAAAA,GAAG,EAAE;EACH1jB,IAAAA,CAAC,EAAE,MADA;EAEHsiB,IAAAA,GAAG,EAAE;EAFF,GA3DY;EA+DjBqB,EAAAA,IAAI,EAAE;EACJnB,IAAAA,GAAG,EAAE;EADD,GA/DW;EAkEjBoB,EAAAA,IAAI,EAAE;EACJtjB,IAAAA,CAAC,EAAE,QADC;EAEJgiB,IAAAA,GAAG,EAAE,QAFD;EAGJE,IAAAA,GAAG,EAAE;EAHD,GAlEW;EAuEjBqB,EAAAA,KAAK,EAAE;EACLvB,IAAAA,GAAG,EAAE,MADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAvEU;EA2EjBsB,EAAAA,IAAI,EAAE;EACJxB,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GA3EW;EA+EjBuB,EAAAA,IAAI,EAAE;EACJ/jB,IAAAA,CAAC,EAAE;EADC,GA/EW;EAkFjBgkB,EAAAA,KAAK,EAAE;EACL1B,IAAAA,GAAG,EAAE;EADA,GAlFU;EAqFjB,WAAO;EACLE,IAAAA,GAAG,EAAE;EADA,GArFU;EAwFjByB,EAAAA,KAAK,EAAE;EACLzB,IAAAA,GAAG,EAAE;EADA,GAxFU;EA2FjB0B,EAAAA,KAAK,EAAE;EACL5B,IAAAA,GAAG,EAAE,SADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA3FU;EA+FjB2B,EAAAA,SAAS,EAAE;EACT3B,IAAAA,GAAG,EAAE;EADI,GA/FM;EAkGjB4B,EAAAA,MAAM,EAAE;EACN5B,IAAAA,GAAG,EAAE;EADC,GAlGS;EAqGjBrH,EAAAA,KAAK,EAAE;EACLmH,IAAAA,GAAG,EAAE,OADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GArGU;EAyGjB6B,EAAAA,IAAI,EAAE;EACJ/B,IAAAA,GAAG,EAAE;EADD,GAzGW;EA4GjBgC,EAAAA,KAAK,EAAE;EACLhC,IAAAA,GAAG,EAAE;EADA,GA5GU;EA+GjBiC,EAAAA,GAAG,EAAE;EACHjC,IAAAA,GAAG,EAAE,QADF;EAEHE,IAAAA,GAAG,EAAE;EAFF,GA/GY;EAmHjBzO,EAAAA,GAAG,EAAE;EACH/T,IAAAA,CAAC,EAAE,EADA;EAEHyiB,IAAAA,GAAG,EAAE,GAFF;EAGHniB,IAAAA,CAAC,EAAE,EAHA;EAIHkiB,IAAAA,GAAG,EAAE,OAJF;EAKHD,IAAAA,IAAI,EAAE,OALH;EAMHI,IAAAA,OAAO,EAAE,OANN;EAOHD,IAAAA,IAAI,EAAE;EAPH,GAnHY;EA4HjB,WAAO;EACLF,IAAAA,GAAG,EAAE;EADA,GA5HU;EA+HjBgC,EAAAA,MAAM,EAAE;EACNlkB,IAAAA,CAAC,EAAE,UADG;EAENgiB,IAAAA,GAAG,EAAE,QAFC;EAGNE,IAAAA,GAAG,EAAE;EAHC,GA/HS;EAoIjBiC,EAAAA,KAAK,EAAE;EACLnC,IAAAA,GAAG,EAAE;EADA,GApIU;EAuIjBoC,EAAAA,IAAI,EAAE;EACJpC,IAAAA,GAAG,EAAE,GADD;EAEJE,IAAAA,GAAG,EAAE,MAFD;EAGJliB,IAAAA,CAAC,EAAE;EAHC,GAvIW;EA4IjBqkB,EAAAA,OAAO,EAAE;EACP3kB,IAAAA,CAAC,EAAE,YADI;EAEPM,IAAAA,CAAC,EAAE,WAFI;EAGPkiB,IAAAA,GAAG,EAAE;EAHE,GA5IQ;EAiJjBoC,EAAAA,IAAI,EAAE;EACJpC,IAAAA,GAAG,EAAE;EADD,GAjJW;EAoJjBqC,EAAAA,KAAK,EAAE;EACLvC,IAAAA,GAAG,EAAE;EADA,GApJU;EAuJjBwC,EAAAA,GAAG,EAAE;EACHxC,IAAAA,GAAG,EAAE;EADF,GAvJY;EA0JjByC,EAAAA,IAAI,EAAE;EACJzC,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GA1JW;EA8JjBwC,EAAAA,OAAO,EAAE;EACPhlB,IAAAA,CAAC,EAAE,KADI;EAEPM,IAAAA,CAAC,EAAE,MAFI;EAGPkiB,IAAAA,GAAG,EAAE;EAHE,GA9JQ;EAmKjByC,EAAAA,GAAG,EAAE;EACH3kB,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GAnKY;EAuKjB0C,EAAAA,GAAG,EAAE;EACH5kB,IAAAA,CAAC,EAAE,OADA;EAEHgiB,IAAAA,GAAG,EAAE,KAFF;EAGHE,IAAAA,GAAG,EAAE;EAHF,GAvKY;EA4KjB2C,EAAAA,IAAI,EAAE;EACJ7C,IAAAA,GAAG,EAAE;EADD,GA5KW;EA+KjB,QAAI;EACFE,IAAAA,GAAG,EAAE,KADH;EAEFE,IAAAA,IAAI,EAAE;EAFJ,GA/Ka;EAmLjB0C,EAAAA,IAAI,EAAE;EACJ9C,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAnLW;EAuLjB6C,EAAAA,KAAK,EAAE;EACL/C,IAAAA,GAAG,EAAE;EADA,GAvLU;EA0LjBgD,EAAAA,KAAK,EAAE;EACLhD,IAAAA,GAAG,EAAE,OADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA1LU;EA8LjB+C,EAAAA,KAAK,EAAE;EACLjlB,IAAAA,CAAC,EAAE,SADE;EAELgiB,IAAAA,GAAG,EAAE,IAFA;EAGLE,IAAAA,GAAG,EAAE;EAHA,GA9LU;EAmMjBgD,EAAAA,IAAI,EAAE;EACJllB,IAAAA,CAAC,EAAE,OADC;EAEJkiB,IAAAA,GAAG,EAAE;EAFD,GAnMW;EAuMjBiD,EAAAA,GAAG,EAAE;EACHzlB,IAAAA,CAAC,EAAE,KADA;EAEHM,IAAAA,CAAC,EAAE,MAFA;EAGHgiB,IAAAA,GAAG,EAAE,KAHF;EAIHE,IAAAA,GAAG,EAAE;EAJF,GAvMY;EA6MjBkD,EAAAA,IAAI,EAAE;EACJplB,IAAAA,CAAC,EAAE;EADC,GA7MW;EAgNjBqlB,EAAAA,GAAG,EAAE;EACHnD,IAAAA,GAAG,EAAE;EADF,GAhNY;EAmNjBoD,EAAAA,IAAI,EAAE;EACJtD,IAAAA,GAAG,EAAE,KADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAnNW;EAuNjBqD,EAAAA,IAAI,EAAE;EACJvD,IAAAA,GAAG,EAAE,KADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAvNW;EA2NjBsD,EAAAA,IAAI,EAAE;EACJ9lB,IAAAA,CAAC,EAAE,KADC;EAEJwiB,IAAAA,GAAG,EAAE;EAFD,GA3NW;EA+NjBuD,EAAAA,KAAK,EAAE;EACLzD,IAAAA,GAAG,EAAE,QADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA/NU;EAmOjB3T,EAAAA,IAAI,EAAE;EACJ2T,IAAAA,GAAG,EAAE;EADD,GAnOW;EAsOjBwD,EAAAA,IAAI,EAAE;EACJ1lB,IAAAA,CAAC,EAAE,MADC;EAEJgiB,IAAAA,GAAG,EAAE;EAFD,GAtOW;EA0OjB2D,EAAAA,KAAK,EAAE;EACL3D,IAAAA,GAAG,EAAE;EADA,GA1OU;EA6OjB4D,EAAAA,GAAG,EAAE;EACH5D,IAAAA,GAAG,EAAE,OADF;EAEHE,IAAAA,GAAG,EAAE;EAFF,GA7OY;EAiPjB2D,EAAAA,MAAM,EAAE;EACN3D,IAAAA,GAAG,EAAE;EADC,GAjPS;EAoPjB4D,EAAAA,MAAM,EAAE;EACN9lB,IAAAA,CAAC,EAAE,MADG;EAENgiB,IAAAA,GAAG,EAAE,WAFC;EAGNE,IAAAA,GAAG,EAAE;EAHC,GApPS;EAyPjB6D,EAAAA,OAAO,EAAE;EACP/lB,IAAAA,CAAC,EAAE,WADI;EAEPgiB,IAAAA,GAAG,EAAE,IAFE;EAGPE,IAAAA,GAAG,EAAE;EAHE,GAzPQ;EA8PjB8D,EAAAA,IAAI,EAAE;EACJtmB,IAAAA,CAAC,EAAE,EADC;EAEJM,IAAAA,CAAC,EAAE;EAFC,GA9PW;EAkQjBimB,EAAAA,MAAM,EAAE;EACNjmB,IAAAA,CAAC,EAAE,UADG;EAENgiB,IAAAA,GAAG,EAAE,QAFC;EAGNE,IAAAA,GAAG,EAAE;EAHC,GAlQS;EAuQjB3W,EAAAA,GAAG,EAAE;EACH2W,IAAAA,GAAG,EAAE,KADF;EAEHF,IAAAA,GAAG,EAAE;EAFF,GAvQY;EA2QjBkE,EAAAA,IAAI,EAAE;EACJlmB,IAAAA,CAAC,EAAE,QADC;EAEJgiB,IAAAA,GAAG,EAAE,IAFD;EAGJE,IAAAA,GAAG,EAAE;EAHD,GA3QW;EAgRjBiE,EAAAA,EAAE,EAAE;EACFnE,IAAAA,GAAG,EAAE,KADH;EAEFE,IAAAA,GAAG,EAAE,MAFH;EAGFE,IAAAA,IAAI,EAAE;EAHJ,GAhRa;EAqRjBgE,EAAAA,IAAI,EAAE;EACJpE,IAAAA,GAAG,EAAE;EADD,GArRW;EAwRjBqE,EAAAA,IAAI,EAAE;EACJrE,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAxRW;EA4RjBoE,EAAAA,IAAI,EAAE;EACJtmB,IAAAA,CAAC,EAAE,QADC;EAEJgiB,IAAAA,GAAG,EAAE,KAFD;EAGJE,IAAAA,GAAG,EAAE,KAHD;EAIJE,IAAAA,IAAI,EAAE;EAJF,GA5RW;EAkSjBmE,EAAAA,IAAI,EAAE;EACJvE,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAlSW;EAsSjBsE,EAAAA,IAAI,EAAE;EACJxE,IAAAA,GAAG,EAAE,QADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAtSW;EA0SjBuE,EAAAA,GAAG,EAAE;EACHzE,IAAAA,GAAG,EAAE;EADF,GA1SY;EA6SjB0E,EAAAA,IAAI,EAAE;EACJ1E,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GA7SW;EAiTjByE,EAAAA,IAAI,EAAE;EACJ3E,IAAAA,GAAG,EAAE,GADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAjTW;EAqTjB0E,EAAAA,GAAG,EAAE;EACH5mB,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GArTY;EAyTjB2E,EAAAA,KAAK,EAAE;EACL3E,IAAAA,GAAG,EAAE,SADA;EAELE,IAAAA,IAAI,EAAE;EAFD,GAzTU;EA6TjB0E,EAAAA,EAAE,EAAE;EACFpnB,IAAAA,CAAC,EAAE,EADD;EAEFM,IAAAA,CAAC,EAAE,OAFD;EAGFkiB,IAAAA,GAAG,EAAE,KAHH;EAIFE,IAAAA,IAAI,EAAE;EAJJ,GA7Ta;EAmUjB2E,EAAAA,IAAI,EAAE;EACJ/E,IAAAA,GAAG,EAAE;EADD,GAnUW;EAsUjBgF,EAAAA,KAAK,EAAE;EACLhF,IAAAA,GAAG,EAAE;EADA,GAtUU;EAyUjBiF,EAAAA,IAAI,EAAE;EACJjF,IAAAA,GAAG,EAAE;EADD,GAzUW;EA4UjBkF,EAAAA,GAAG,EAAE;EACHlF,IAAAA,GAAG,EAAE,MADF;EAEHE,IAAAA,GAAG,EAAE;EAFF,GA5UY;EAgVjBiF,EAAAA,IAAI,EAAE;EACJnF,IAAAA,GAAG,EAAE,KADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAhVW;EAoVjBkF,EAAAA,IAAI,EAAE;EACJpF,IAAAA,GAAG,EAAE;EADD,GApVW;EAuVjBqF,EAAAA,KAAK,EAAE;EACLrF,IAAAA,GAAG,EAAE,MADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAvVU;EA2VjBoF,EAAAA,IAAI,EAAE;EACJtF,IAAAA,GAAG,EAAE;EADD,GA3VW;EA8VjBuF,EAAAA,GAAG,EAAE;EACHvnB,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GA9VY;EAkWjBsF,EAAAA,KAAK,EAAE;EACLxF,IAAAA,GAAG,EAAE,KADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAlWU;EAsWjB1Y,EAAAA,GAAG,EAAE;EACHxJ,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GAtWY;EA0WjBuF,EAAAA,KAAK,EAAE;EACLzF,IAAAA,GAAG,EAAE;EADA,GA1WU;EA6WjB0F,EAAAA,IAAI,EAAE;EACJ1nB,IAAAA,CAAC,EAAE,QADC;EAEJkiB,IAAAA,GAAG,EAAE;EAFD,GA7WW;EAiXjByF,EAAAA,IAAI,EAAE;EACJ3F,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAjXW;EAqXjB0F,EAAAA,IAAI,EAAE;EACJ5F,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GArXW;EAyXjB2F,EAAAA,IAAI,EAAE;EACJnoB,IAAAA,CAAC,EAAE,KADC;EAEJM,IAAAA,CAAC,EAAE,MAFC;EAGJgiB,IAAAA,GAAG,EAAE,KAHD;EAIJE,IAAAA,GAAG,EAAE;EAJD,GAzXW;EA+XjB4F,EAAAA,IAAI,EAAE;EACJ1F,IAAAA,IAAI,EAAE;EADF,GA/XW;EAkYjB2F,EAAAA,IAAI,EAAE;EACJ/nB,IAAAA,CAAC,EAAE;EADC,GAlYW;EAqYjBgoB,EAAAA,GAAG,EAAE;EACHhG,IAAAA,GAAG,EAAE,MADF;EAEHE,IAAAA,GAAG,EAAE;EAFF,GArYY;EAyYjB+F,EAAAA,KAAK,EAAE;EACLjG,IAAAA,GAAG,EAAE;EADA,GAzYU;EA4YjBkG,EAAAA,IAAI,EAAE;EACJloB,IAAAA,CAAC,EAAE;EADC,GA5YW;EA+YjBmoB,EAAAA,GAAG,EAAE;EACHnG,IAAAA,GAAG,EAAE;EADF,GA/YY;EAkZjBoG,EAAAA,IAAI,EAAE;EACJpG,IAAAA,GAAG,EAAE;EADD,GAlZW;EAqZjBqG,EAAAA,IAAI,EAAE;EACJrG,IAAAA,GAAG,EAAE,GADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GArZW;EAyZjBoG,EAAAA,IAAI,EAAE;EACJtG,IAAAA,GAAG,EAAE;EADD,GAzZW;EA4ZjBuG,EAAAA,IAAI,EAAE;EACJvG,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GA5ZW;EAgajBsG,EAAAA,IAAI,EAAE;EACJrG,IAAAA,GAAG,EAAE,cADD;EAEJniB,IAAAA,CAAC,EAAE,QAFC;EAGJgiB,IAAAA,GAAG,EAAE,IAHD;EAIJE,IAAAA,GAAG,EAAE,MAJD;EAKJG,IAAAA,OAAO,EAAE;EALL,GAhaW;EAuajBoG,EAAAA,GAAG,EAAE;EACHzoB,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GAvaY;EA2ajBwG,EAAAA,GAAG,EAAE;EACH1oB,IAAAA,CAAC,EAAE,OADA;EAEHgiB,IAAAA,GAAG,EAAE,GAFF;EAGHE,IAAAA,GAAG,EAAE;EAHF,GA3aY;EAgbjByG,EAAAA,GAAG,EAAE;EACH3G,IAAAA,GAAG,EAAE,MADF;EAEHE,IAAAA,GAAG,EAAE,MAFF;EAGHE,IAAAA,IAAI,EAAE;EAHH,GAhbY;EAqbjBwG,EAAAA,IAAI,EAAE;EACJ5G,IAAAA,GAAG,EAAE;EADD,GArbW;EAwbjB6G,EAAAA,GAAG,EAAE;EACH7oB,IAAAA,CAAC,EAAE,MADA;EAEHgiB,IAAAA,GAAG,EAAE,IAFF;EAGHE,IAAAA,GAAG,EAAE;EAHF,GAxbY;EA6bjB4G,EAAAA,IAAI,EAAE;EACJ9G,IAAAA,GAAG,EAAE;EADD,GA7bW;EAgcjB+G,EAAAA,IAAI,EAAE;EACJ/G,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAhcW;EAocjB8G,EAAAA,IAAI,EAAE;EACJhH,IAAAA,GAAG,EAAE;EADD,GApcW;EAucjBvT,EAAAA,GAAG,EAAE;EACHuT,IAAAA,GAAG,EAAE;EADF,GAvcY;EA0cjBiH,EAAAA,GAAG,EAAE;EACHjH,IAAAA,GAAG,EAAE;EADF,GA1cY;EA6cjBkH,EAAAA,KAAK,EAAE;EACLlH,IAAAA,GAAG,EAAE;EADA,GA7cU;EAgdjBmH,EAAAA,KAAK,EAAE;EACLnH,IAAAA,GAAG,EAAE;EADA,GAhdU;EAmdjBoH,EAAAA,IAAI,EAAE;EACJppB,IAAAA,CAAC,EAAE,OADC;EAEJkiB,IAAAA,GAAG,EAAE,GAFD;EAGJE,IAAAA,IAAI,EAAE;EAHF,GAndW;EAwdjBiH,EAAAA,KAAK,EAAE;EACLrH,IAAAA,GAAG,EAAE,OADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAxdU;EA4djBoH,EAAAA,KAAK,EAAE;EACLtH,IAAAA,GAAG,EAAE,MADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA5dU;EAgejBqH,EAAAA,IAAI,EAAE;EACJrH,IAAAA,GAAG,EAAE;EADD,GAheW;EAmejBsH,EAAAA,IAAI,EAAE;EACJxH,IAAAA,GAAG,EAAE;EADD,GAneW;EAsejByH,EAAAA,IAAI,EAAE;EACJzH,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAteW;EA0ejBwH,EAAAA,IAAI,EAAE;EACJxH,IAAAA,GAAG,EAAE,MADD;EAEJG,IAAAA,OAAO,EAAE;EAFL,GA1eW;EA8ejBsH,EAAAA,GAAG,EAAE;EACHzH,IAAAA,GAAG,EAAE;EADF,GA9eY;EAifjB0H,EAAAA,GAAG,EAAE;EACH1H,IAAAA,GAAG,EAAE;EADF,GAjfY;EAofjB2H,EAAAA,IAAI,EAAE;EACJ7H,IAAAA,GAAG,EAAE;EADD,GApfW;EAufjB8H,EAAAA,KAAK,EAAE;EACL9H,IAAAA,GAAG,EAAE;EADA,GAvfU;EA0fjB+H,EAAAA,KAAK,EAAE;EACL/H,IAAAA,GAAG,EAAE,MADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA1fU;EA8fjB8H,EAAAA,KAAK,EAAE;EACL5H,IAAAA,IAAI,EAAE;EADD,GA9fU;EAigBjB6H,EAAAA,KAAK,EAAE;EACLjI,IAAAA,GAAG,EAAE;EADA,GAjgBU;EAogBjBkI,EAAAA,KAAK,EAAE;EACL/H,IAAAA,GAAG,EAAE,kBADA;EAELH,IAAAA,GAAG,EAAE,QAFA;EAGLE,IAAAA,GAAG,EAAE,OAHA;EAILD,IAAAA,IAAI,EAAE,aAJD;EAKLI,IAAAA,OAAO,EAAE;EALJ,GApgBU;EA2gBjB8H,EAAAA,KAAK,EAAE;EACLnI,IAAAA,GAAG,EAAE;EADA,GA3gBU;EA8gBjBoI,EAAAA,KAAK,EAAE;EACLpI,IAAAA,GAAG,EAAE;EADA,GA9gBU;EAihBjBqI,EAAAA,KAAK,EAAE;EACLrI,IAAAA,GAAG,EAAE,KADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAjhBU;EAqhBjBoI,EAAAA,IAAI,EAAE;EACJtqB,IAAAA,CAAC,EAAE,OADC;EAEJgiB,IAAAA,GAAG,EAAE,MAFD;EAGJE,IAAAA,GAAG,EAAE;EAHD,GArhBW;EA0hBjBqI,EAAAA,IAAI,EAAE;EACJvI,IAAAA,GAAG,EAAE;EADD,GA1hBW;EA6hBjBhjB,EAAAA,KAAK,EAAE;EACLgjB,IAAAA,GAAG,EAAE;EADA,GA7hBU;EAgiBjBwI,EAAAA,MAAM,EAAE;EACNtI,IAAAA,GAAG,EAAE;EADC,GAhiBS;EAmiBjBuI,EAAAA,MAAM,EAAE;EACNzI,IAAAA,GAAG,EAAE;EADC,GAniBS;EAsiBjB0I,EAAAA,KAAK,EAAE;EACLxI,IAAAA,GAAG,EAAE;EADA,GAtiBU;EAyiBjByI,EAAAA,KAAK,EAAE;EACLjrB,IAAAA,CAAC,EAAE,KADE;EAELwiB,IAAAA,GAAG,EAAE;EAFA,GAziBU;EA6iBjB0I,EAAAA,KAAK,EAAE;EACL1I,IAAAA,GAAG,EAAE;EADA,GA7iBU;EAgjBjB2I,EAAAA,KAAK,EAAE;EACL3I,IAAAA,GAAG,EAAE;EADA,GAhjBU;EAmjBjB4I,EAAAA,KAAK,EAAE;EACL9I,IAAAA,GAAG,EAAE,OADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAnjBU;EAujBjB6I,EAAAA,MAAM,EAAE;EACNrrB,IAAAA,CAAC,EAAE;EADG,GAvjBS;EA0jBjBsrB,EAAAA,KAAK,EAAE;EACLhJ,IAAAA,GAAG,EAAE;EADA,GA1jBU;EA6jBjBiJ,EAAAA,MAAM,EAAE;EACNjrB,IAAAA,CAAC,EAAE,UADG;EAENkiB,IAAAA,GAAG,EAAE;EAFC,GA7jBS;EAikBjBgJ,EAAAA,IAAI,EAAE;EACJxrB,IAAAA,CAAC,EAAE,KADC;EAEJM,IAAAA,CAAC,EAAE,MAFC;EAGJkiB,IAAAA,GAAG,EAAE;EAHD,GAjkBW;EAskBjBiJ,EAAAA,KAAK,EAAE;EACLnJ,IAAAA,GAAG,EAAE;EADA,GAtkBU;EAykBjBoJ,EAAAA,KAAK,EAAE;EACLlJ,IAAAA,GAAG,EAAE;EADA,GAzkBU;EA4kBjBmJ,EAAAA,KAAK,EAAE;EACLrJ,IAAAA,GAAG,EAAE;EADA,GA5kBU;EA+kBjBsJ,EAAAA,IAAI,EAAE;EACJtrB,IAAAA,CAAC,EAAE,OADC;EAEJkiB,IAAAA,GAAG,EAAE;EAFD,GA/kBW;EAmlBjBqJ,EAAAA,KAAK,EAAE;EACLrJ,IAAAA,GAAG,EAAE;EADA,GAnlBU;EAslBjBsJ,EAAAA,IAAI,EAAE;EACJrJ,IAAAA,GAAG,EAAE,cADD;EAEJD,IAAAA,GAAG,EAAE,MAFD;EAGJD,IAAAA,IAAI,EAAE,SAHF;EAIJI,IAAAA,OAAO,EAAE;EAJL,GAtlBW;EA4lBjBoJ,EAAAA,KAAK,EAAE;EACLvJ,IAAAA,GAAG,EAAE,QADA;EAELE,IAAAA,IAAI,EAAE;EAFD,GA5lBU;EAgmBjBsJ,EAAAA,IAAI,EAAE;EACJxJ,IAAAA,GAAG,EAAE;EADD,GAhmBW;EAmmBjByJ,EAAAA,IAAI,EAAE;EACJzJ,IAAAA,GAAG,EAAE;EADD,GAnmBW;EAsmBjB0J,EAAAA,KAAK,EAAE;EACL1J,IAAAA,GAAG,EAAE;EADA,GAtmBU;EAymBjB2J,EAAAA,MAAM,EAAE;EACN7J,IAAAA,GAAG,EAAE;EADC,GAzmBS;EA4mBjB8J,EAAAA,GAAG,EAAE;EACH9rB,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GA5mBY;EAgnBjB6J,EAAAA,OAAO,EAAE;EACP/J,IAAAA,GAAG,EAAE;EADE,GAhnBQ;EAmnBjBgK,EAAAA,UAAU,EAAE;EACV9J,IAAAA,GAAG,EAAE;EADK,GAnnBK;EAsnBjB+J,EAAAA,KAAK,EAAE;EACLjK,IAAAA,GAAG,EAAE;EADA,GAtnBU;EAynBjBkK,EAAAA,IAAI,EAAE;EACJxsB,IAAAA,CAAC,EAAE,KADC;EAEJM,IAAAA,CAAC,EAAE,MAFC;EAGJkiB,IAAAA,GAAG,EAAE;EAHD,GAznBW;EA8nBjBiK,EAAAA,IAAI,EAAE;EACJjK,IAAAA,GAAG,EAAE;EADD,GA9nBW;EAioBjBkK,EAAAA,IAAI,EAAE;EACJlK,IAAAA,GAAG,EAAE;EADD,GAjoBW;EAooBjBmK,EAAAA,KAAK,EAAE;EACLrK,IAAAA,GAAG,EAAE;EADA,GApoBU;EAuoBjBsK,EAAAA,GAAG,EAAE;EACHpK,IAAAA,GAAG,EAAE;EADF,GAvoBY;EA0oBjBqK,EAAAA,IAAI,EAAE;EACJvK,IAAAA,GAAG,EAAE;EADD,GA1oBW;EA6oBjBwK,EAAAA,GAAG,EAAE;EACHxsB,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GA7oBY;EAipBjBuK,EAAAA,IAAI,EAAE;EACJzK,IAAAA,GAAG,EAAE;EADD,GAjpBW;EAopBjB0K,EAAAA,QAAQ,EAAE;EACRxK,IAAAA,GAAG,EAAE;EADG,GAppBO;EAupBjByK,EAAAA,KAAK,EAAE;EACL3K,IAAAA,GAAG,EAAE;EADA,GAvpBU;EA0pBjB4K,EAAAA,KAAK,EAAE;EACL5sB,IAAAA,CAAC,EAAE,SADE;EAELgiB,IAAAA,GAAG,EAAE,SAFA;EAGLE,IAAAA,GAAG,EAAE;EAHA;EA1pBU,CAAnB;;EAkqBA,IAAI5gB,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYghB,YAAZ,CAAX;;6BACSljB;EACP,MAAM0d,GAAG,GAAGxb,IAAI,CAAClC,CAAD,CAAhB;EACA,MAAIytB,MAAK,GAAG,EAAZ;EACAxrB,EAAAA,MAAM,CAACC,IAAP,CAAYghB,YAAY,CAACxF,GAAD,CAAxB,EAA+Bvb,OAA/B,CAAuC,UAAAgZ,GAAG,EAAI;EAC5C,QAAIrb,GAAG,GAAGojB,YAAY,CAACxF,GAAD,CAAZ,CAAkBvC,GAAlB,CAAV,CAD4C;;EAG5Crb,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,GAAZ,EAAiBya,GAAjB,CAAN;EAEA,QAAIgQ,IAAI,GAAG/K,OAAO,CAACxH,GAAD,CAAlB;EACAsS,IAAAA,MAAK,CAACC,IAAD,CAAL,GAAc5tB,GAAd;EACD,GAPD;;EASAojB,EAAAA,YAAY,CAACxF,GAAD,CAAZ,GAAoB+P,MAApB;;;EAZF,KAAK,IAAIztB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EAAA,QAA7BA,CAA6B;EAarC;;EAED,kBAAc,GAAGkjB,YAAjB;;ECnsBA,IAAMyK,QAAQ,GAAG;EACfptB,EAAAA,CAAC,EAAE,CACD;EACE4E,IAAAA,GAAG,EAAE,sBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CADY;EAWfttB,EAAAA,CAAC,EAAE,CACD;EACE0E,IAAAA,GAAG,EAAE,SADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GADC,EAUD;EACE7oB,IAAAA,GAAG,EAAE,SADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GAVC,EAmBD;EACE7oB,IAAAA,GAAG,EAAE,QADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,OAFA;EAGJE,MAAAA,EAAE,EAAE,OAHA;EAIJD,MAAAA,EAAE,EAAE;EAJA;EAFR,GAnBC,EA4BD;EACE5oB,IAAAA,GAAG,EAAE,mBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GA5BC,CAXY;EAgDfrtB,EAAAA,CAAC,EAAE,CACD;EACEyE,IAAAA,GAAG,EAAE,UADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE,QAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GADC,EAUD;EACE7oB,IAAAA,GAAG,EAAE,SADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GAVC,EAmBD;;EAEE7oB,IAAAA,GAAG,EAAE,gBAFP;EAGEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,OADA;EAEJC,MAAAA,EAAE,EAAE,OAFA;EAGJC,MAAAA,EAAE,EAAE,SAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAHR,GAnBC,EA6BD;;EAEE7oB,IAAAA,GAAG,EAAE,UAFP;EAGEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,QAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAHR,GA7BC,EAuCD;;EAEE7oB,IAAAA,GAAG,EAAE,UAFP;EAGEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,QAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAHR,GAvCC,EAiDD;EACE7oB,IAAAA,GAAG,EAAE,8BADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;;EAAA;EAFR,GAjDC,EA0DD;EACE5oB,IAAAA,GAAG,EAAE,YADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GA1DC,EAkED;EACE5oB,IAAAA,GAAG,EAAE,SADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAlEC,CAhDY;EA4HfntB,EAAAA,CAAC,EAAE,CACD;EACEuE,IAAAA,GAAG,EAAE,mBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CA5HY;EAsIfltB,EAAAA,CAAC,EAAE,CACD;EACEsE,IAAAA,GAAG,EAAE,eADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,QADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CAtIY;EAgJf/sB,EAAAA,CAAC,EAAE,CACD;EACEmE,IAAAA,GAAG,EAAE,SADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GADC,CAhJY;EA4Jf9sB,EAAAA,CAAC,EAAE,CACD;EACEiE,IAAAA,GAAG,EAAE,sBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CA5JY;EAuKf5sB,EAAAA,CAAC,EAAE,CACD;EACEgE,IAAAA,GAAG,EAAE,QADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CAvKY;EAiLf1sB,EAAAA,CAAC,EAAE,CACD;EACE8D,IAAAA,GAAG,EAAE,WADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,OADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,SAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GADC,EAUD;EACE7oB,IAAAA,GAAG,EAAE,sBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAVC,EAkBD;EACE5oB,IAAAA,GAAG,EAAE,aADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAlBC,CAjLY;EA6MfxsB,EAAAA,CAAC,EAAE,CACD;EACE4D,IAAAA,GAAG,EAAE,YADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,EASD;EACE5oB,IAAAA,GAAG,EAAE,QADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GATC,CA7MY;EA+NfvsB,EAAAA,CAAC,EAAE,CACD;EACE2D,IAAAA,GAAG,EAAE,iBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CA/NY;EA0OftsB,EAAAA,CAAC,EAAE,CACD;EACE0D,IAAAA,GAAG,EAAE,oBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,EASD;EACE5oB,IAAAA,GAAG,EAAE,UADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GATC,EAiBD;EACE5oB,IAAAA,GAAG,EAAE,aADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAjBC,EAyBD;EACE5oB,IAAAA,GAAG,EAAE,sBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAzBC,CA1OY;EA6QfnsB,EAAAA,CAAC,EAAE,CACD;EACEuD,IAAAA,GAAG,EAAE,YADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,OADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,SAHA;EAIJnL,MAAAA,GAAG,EAAE;EAJD;EAFR,GADC,CA7QY;EAwRf9gB,EAAAA,CAAC,EAAE,CACD;EACEqD,IAAAA,GAAG,EAAE,eADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,OADA;EAEJC,MAAAA,EAAE,EAAE,OAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CAxRY;EAmSfhsB,EAAAA,CAAC,EAAE,CACD;EACEoD,IAAAA,GAAG,EAAE,eADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC;EAnSY,CAAjB;EA+SA,YAAc,GAAGJ,QAAjB;;EC9SA,IAAMM,MAAM,GAAG;EACbJ,EAAAA,EAAE,EAAE,cADS;EAEbC,EAAAA,EAAE,EAAE,WAFS;EAGbC,EAAAA,EAAE,EAAE,QAHS;EAIbnL,EAAAA,GAAG,EAAE,YAJQ;EAKboL,EAAAA,EAAE,EAAE;EALS,CAAf;;EAQA,IAAME,WAAW,GAAG,SAAdA,WAAc,CAASpuB,GAAT,EAAc4L,GAAd,EAAmB;EACrC,MAAI/H,KAAK,GAAG,EAAZ;EACA,MAAIzB,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYwJ,GAAG,CAACkiB,IAAhB,CAAX;;EACA,OAAK,IAAI5tB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAImuB,GAAG,GAAGjsB,IAAI,CAAClC,CAAD,CAAd;EACA2D,IAAAA,KAAK,CAACsqB,MAAM,CAACE,GAAD,CAAP,CAAL,GAAqBruB,GAAG,CAACmD,OAAJ,CAAYyI,GAAG,CAACvG,GAAhB,EAAqBuG,GAAG,CAACkiB,IAAJ,CAASO,GAAT,CAArB,CAArB;EACD;;EACD,SAAOxqB,KAAP;EACD,CARD;;;EAWA,IAAMyqB,WAAW,GAAG,SAAdA,WAAc,GAAmB;EAAA,MAAVtuB,GAAU,uEAAJ,EAAI;EACrC,MAAIU,CAAC,GAAGV,GAAG,CAACA,GAAG,CAACM,MAAJ,GAAa,CAAd,CAAX;;EACA,MAAIiuB,QAAQ,CAAC3oB,cAAT,CAAwBlF,CAAxB,MAA+B,IAAnC,EAAyC;EACvC,SAAK,IAAIe,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8sB,QAAQ,CAAC7tB,CAAD,CAAR,CAAYJ,MAAhC,EAAwCmB,CAAC,IAAI,CAA7C,EAAgD;EAC9C,UAAM4D,GAAG,GAAGkpB,QAAQ,CAAC7tB,CAAD,CAAR,CAAYe,CAAZ,EAAe4D,GAA3B;;EACA,UAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,MAAkB,IAAtB,EAA4B;EAC1B,eAAOouB,WAAW,CAACpuB,GAAD,EAAMuuB,QAAQ,CAAC7tB,CAAD,CAAR,CAAYe,CAAZ,CAAN,CAAlB;EACD;EACF;EACF;;EACD,SAAO,EAAP;EACD,CAXD;;EAYA,eAAc,GAAG6sB,WAAjB;;EChCA;EACA,IAAME,IAAI,GAAG,0BAAb;EAEA,IAAMC,OAAO,GAAG;EACdpnB,EAAAA,MAAM,EAAE,gBAAAuW,GAAG,EAAI;EACb,QAAIA,GAAG,CAAClT,MAAJ,CAAWkT,GAAG,CAACtd,MAAJ,GAAa,CAAxB,MAA+B,GAAnC,EAAwC;EACtC,aAAOsd,GAAG,CAACza,OAAJ,CAAY,IAAZ,EAAkB,KAAlB,CAAP;EACD;;EACD,WAAOya,GAAG,GAAG,KAAb;EACD,GANa;EAQdtW,EAAAA,YAAY,EAAE,sBAAAsW,GAAG,EAAI;EACnB,QAAIA,GAAG,CAAClT,MAAJ,CAAWkT,GAAG,CAACtd,MAAJ,GAAa,CAAxB,MAA+B,GAAnC,EAAwC;EACtC,aAAOsd,GAAG,GAAG,IAAb;EACD;;EACD,QAAI4Q,IAAI,CAAC3rB,IAAL,CAAU+a,GAAV,MAAmB,IAAvB,EAA6B;EAC3B,aAAOA,GAAG,CAAC/N,KAAJ,CAAU,CAAV,EAAa,CAAC,CAAd,IAAmB,KAA1B;EACD;;EACD,WAAO+N,GAAG,GAAG,GAAb;EACD,GAhBa;EAkBdxW,EAAAA,SAAS,EAAE,mBAAAwW,GAAG,EAAI;EAChB,QAAIA,GAAG,CAAClT,MAAJ,CAAWkT,GAAG,CAACtd,MAAJ,GAAa,CAAxB,MAA+B,GAAnC,EAAwC;EACtC,aAAOsd,GAAG,GAAG,GAAb;EACD;;EACD,QAAIA,GAAG,CAACjT,MAAJ,CAAW,CAAC,CAAZ,MAAmB,IAAvB,EAA6B;EAC3B,aAAOiT,GAAP;EACD;;EACD,QAAI4Q,IAAI,CAAC3rB,IAAL,CAAU+a,GAAV,MAAmB,IAAvB,EAA6B;EAC3B,aAAOA,GAAG,CAAC/N,KAAJ,CAAU,CAAV,EAAa,CAAC,CAAd,IAAmB,KAA1B;EACD;;EACD,WAAO+N,GAAG,GAAG,IAAb;EACD;EA7Ba,CAAhB;EAgCA,cAAc,GAAG6Q,OAAjB;;EC/BA;;EACA,IAAMjR,SAAS,GAAG,SAAZA,SAAY,GAA0B;EAAA,MAAjBI,GAAiB,uEAAX,EAAW;EAAA,MAAPjX,KAAO;EAC1C,MAAI9C,KAAK,GAAG,EAAZ,CAD0C;;;EAI1C,MAAI8C,KAAK,IAAIA,KAAK,CAACgX,UAAnB,EAA+B;EAC7B,QAAIhX,KAAK,CAACgX,UAAN,CAAiB9B,KAAjB,CAAuBjW,cAAvB,CAAsCgY,GAAtC,MAA+C,IAAnD,EAAyD;EACvD/Z,MAAAA,KAAK,GAAG1B,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkB7C,KAAK,CAACgX,UAAN,CAAiB9B,KAAjB,CAAuB+B,GAAvB,CAAlB,CAAR;EACD;EACF,GARyC;;;EAU1C/Z,EAAAA,KAAK,GAAG1B,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkB8kB,WAAW,CAAC1Q,GAAD,CAA7B,EAAoC/Z,KAApC,CAAR,CAV0C;;;EAc1C,MAAIA,KAAK,CAACwD,MAAN,KAAiB1B,SAArB,EAAgC;EAC9B9B,IAAAA,KAAK,CAACwD,MAAN,GAAeqnB,UAAW,CAACrnB,MAAZ,CAAmBuW,GAAnB,CAAf;EACD,GAhByC;;;EAkB1C,MAAI/Z,KAAK,CAACuD,SAAN,KAAoBzB,SAAxB,EAAmC;EACjC9B,IAAAA,KAAK,CAACuD,SAAN,GAAkBsnB,UAAW,CAACtnB,SAAZ,CAAsBwW,GAAtB,CAAlB;EACD,GApByC;;;EAsB1C,MAAI/Z,KAAK,CAACyD,YAAN,KAAuB3B,SAA3B,EAAsC;EACpC9B,IAAAA,KAAK,CAACyD,YAAN,GAAqBonB,UAAW,CAACpnB,YAAZ,CAAyBsW,GAAzB,CAArB;EACD;;EACD,SAAO/Z,KAAP;EACD,CA1BD;;EA2BA,eAAc,GAAG2Z,SAAjB;;EChCA;EACA,IAAMmR,QAAQ,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAjB,EAA0B,MAA1B,EAAkC,MAAlC,EAA0C,SAA1C,EAAqD,KAArD,EAA4D,MAA5D,EAAoE,OAApE,CAAjB;EACA,IAAMC,UAAU,GAAG,CAAC,MAAD,CAAnB;EAEA,IAAMjR,UAAU,GAAG;EACjBkR,EAAAA,IAAI,EAAE,QADW;EAEjBC,EAAAA,IAAI,EAAE,QAFW;EAGjBC,EAAAA,IAAI,EAAE,SAHW;EAIjBC,EAAAA,KAAK,EAAE,WAJU;EAKjBC,EAAAA,KAAK,EAAE,WALU;EAMjBC,EAAAA,GAAG,EAAE,UANY;EAOjBC,EAAAA,KAAK,EAAE,OAPU;EAQjBC,EAAAA,GAAG,EAAE,OARY;EASjBC,EAAAA,IAAI,EAAE,MATW;EAUjBC,EAAAA,GAAG,EAAE,SAVY;EAWjBC,EAAAA,KAAK,EAAE;EAXU,CAAnB;EAcA,IAAM1oB,UAAU,GAAG,CACjB;EACExB,EAAAA,GAAG,EAAE,KADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CADiB,EAKjB;EACEzoB,EAAAA,GAAG,EAAE,cADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CALiB,EASjB;EACEzoB,EAAAA,GAAG,EAAE,cADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CATiB,EAajB;EACEzoB,EAAAA,GAAG,EAAE,OADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CAbiB,EAiBjB;EACEzoB,EAAAA,GAAG,EAAE,eADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CAjBiB,CAAnB;;EAuBA,IAAM0B,cAAc,GAAG,SAAjBA,cAAiB,CAASxvB,GAAT,EAAc;;EAEnC,MAAI2d,UAAU,CAAC/X,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClC,WAAO2d,UAAU,CAAC3d,GAAD,CAAjB;EACD,GAJkC;;;EAMnC,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2G,UAAU,CAACvG,MAA/B,EAAuCJ,CAAC,EAAxC,EAA4C;EAC1C,QAAI2G,UAAU,CAAC3G,CAAD,CAAV,CAAcmF,GAAd,CAAkBxC,IAAlB,CAAuB7C,GAAvB,CAAJ,EAAiC;EAC/B,aAAOA,GAAG,CAACmD,OAAJ,CAAY0D,UAAU,CAAC3G,CAAD,CAAV,CAAcmF,GAA1B,EAA+BwB,UAAU,CAAC3G,CAAD,CAAV,CAAc4tB,IAA7C,CAAP;EACD;EACF,GAVkC;;;EAYnC,OAAK,IAAI5tB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG0uB,UAAU,CAACtuB,MAA/B,EAAuCJ,EAAC,EAAxC,EAA4C;EAC1C,QAAI0uB,UAAU,CAAC1uB,EAAD,CAAV,CAAc2C,IAAd,CAAmB7C,GAAnB,MAA4B,IAAhC,EAAsC;EACpC,aAAO,IAAP;EACD;EACF,GAhBkC;;;EAkBnC,OAAK,IAAIE,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGyuB,QAAQ,CAACruB,MAA7B,EAAqCJ,GAAC,EAAtC,EAA0C;EACxC,QAAIyuB,QAAQ,CAACzuB,GAAD,CAAR,CAAY2C,IAAZ,CAAiB7C,GAAjB,MAA0B,IAA9B,EAAoC;EAClC,UAAIA,GAAG,CAAC0K,MAAJ,CAAW1K,GAAG,CAACM,MAAJ,GAAa,CAAxB,MAA+B,GAAnC,EAAwC;EACtC,eAAON,GAAG,GAAG,IAAb;EACD;;EACD,aAAOA,GAAG,GAAG,KAAb;EACD;EACF;;EACD,SAAOA,GAAG,GAAG,KAAb;EACD,CA3BD;;EA6BA,iBAAc,GAAGwvB,cAAjB;;ECtEA;EACA,IAAMb,UAAQ,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAjB,EAA0B,MAA1B,EAAkC,MAAlC,EAA0C,SAA1C,EAAqD,KAArD,EAA4D,MAA5D,EAAoE,MAApE,EAA4E,SAA5E,CAAjB;EACA,IAAMC,YAAU,GAAG,CAAC,MAAD,EAAS,MAAT,CAAnB;EAEA,IAAMjR,YAAU,GAAG;EACjB8R,EAAAA,IAAI,EAAE,QADW;EAEjBC,EAAAA,IAAI,EAAE,QAFW;EAGjBC,EAAAA,KAAK,EAAE,SAHU;EAIjBC,EAAAA,MAAM,EAAE,UAJS;EAKjBC,EAAAA,GAAG,EAAE,QALY;EAMjBR,EAAAA,IAAI,EAAE,QANW;EAOjBS,EAAAA,IAAI,EAAE,QAPW;EAQjBV,EAAAA,GAAG,EAAE,OARY;EASjBW,EAAAA,GAAG,EAAE,QATY;EAUjBT,EAAAA,GAAG,EAAE;EAVY,CAAnB;EAaA,IAAMzoB,YAAU,GAAG,CACjB;EACExB,EAAAA,GAAG,EAAE,KADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CADiB,EAKjB;EACEzoB,EAAAA,GAAG,EAAE,cADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CALiB,EASjB;EACEzoB,EAAAA,GAAG,EAAE,cADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CATiB,EAajB;EACEzoB,EAAAA,GAAG,EAAE,OADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CAbiB,CAAnB;;EAmBA,IAAMkC,cAAc,GAAG,SAAjBA,cAAiB,CAAShwB,GAAT,EAAc;;EAEnC,MAAI2d,YAAU,CAAC/X,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClC,WAAO2d,YAAU,CAAC3d,GAAD,CAAjB;EACD,GAJkC;;;EAMnC,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2G,YAAU,CAACvG,MAA/B,EAAuCJ,CAAC,EAAxC,EAA4C;EAC1C,QAAI2G,YAAU,CAAC3G,CAAD,CAAV,CAAcmF,GAAd,CAAkBxC,IAAlB,CAAuB7C,GAAvB,MAAgC,IAApC,EAA0C;EACxC,aAAOA,GAAG,CAACmD,OAAJ,CAAY0D,YAAU,CAAC3G,CAAD,CAAV,CAAcmF,GAA1B,EAA+BwB,YAAU,CAAC3G,CAAD,CAAV,CAAc4tB,IAA7C,CAAP;EACD;EACF,GAVkC;;;EAYnC,OAAK,IAAI5tB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG0uB,YAAU,CAACtuB,MAA/B,EAAuCJ,EAAC,EAAxC,EAA4C;EAC1C,QAAI0uB,YAAU,CAAC1uB,EAAD,CAAV,CAAc2C,IAAd,CAAmB7C,GAAnB,MAA4B,IAAhC,EAAsC;EACpC,aAAO,IAAP;EACD;EACF,GAhBkC;;;EAkBnC,OAAK,IAAIE,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGyuB,UAAQ,CAACruB,MAA7B,EAAqCJ,GAAC,EAAtC,EAA0C;EACxC,QAAIyuB,UAAQ,CAACzuB,GAAD,CAAR,CAAY2C,IAAZ,CAAiB7C,GAAjB,MAA0B,IAA9B,EAAoC;EAClC,aAAOA,GAAG,GAAG,IAAb;EACD;EACF,GAtBkC;;;EAwBnC,MAAI,KAAK6C,IAAL,CAAU7C,GAAV,MAAmB,IAAvB,EAA6B;EAC3B,WAAOA,GAAG,GAAG,GAAb;EACD;;EACD,SAAOA,GAAG,GAAG,IAAb;EACD,CA5BD;;EA8BA,iBAAc,GAAGgwB,cAAjB;;EClEA,IAAMllB,KAAG,GAAG;EACVmlB,EAAAA,aAAa,EAAExmB,aADL;EAEVymB,EAAAA,aAAa,EAAExmB;EAFL,CAAZ;EAKA;;EACA,IAAM8T,WAAS,GAAG,SAAZA,SAAY,CAAS1b,CAAT,EAAY;EAC5B,MAAIgO,GAAG,GAAG,EAAV,CAD4B;;EAG5B,MAAIqgB,GAAG,GAAGrlB,KAAG,CAACmlB,aAAJ,CAAkBnuB,CAAlB,CAAV;;EACA,MAAIquB,GAAJ,EAAS;EACPrgB,IAAAA,GAAG,CAAC6J,WAAJ,GAAkBwW,GAAlB;EACD,GAN2B;;;EAQ5B,MAAIC,IAAI,GAAGtlB,KAAG,CAAColB,aAAJ,CAAkBpuB,CAAlB,CAAX;;EACA,MAAIsuB,IAAJ,EAAU;EACRtgB,IAAAA,GAAG,CAAC4J,WAAJ,GAAkB0W,IAAlB;EACD;;EACD,SAAOtgB,GAAP;EACD,CAbD;;EAcA,cAAc,GAAG0N,WAAjB;;ECpBA;EACA,IAAM+Q,UAAQ,GAAG;EACf/tB,EAAAA,CAAC,EAAE,CAAC,CAAC,sCAAD,EAAyC,MAAzC,CAAD,EAAmD,CAAC,WAAD,EAAc,KAAd,CAAnD,CADY;EAGfI,EAAAA,CAAC,EAAE,CACD,CAAC,eAAD,EAAkB,QAAlB,CADC,EAED,CAAC,UAAD,EAAa,KAAb,CAFC,EAGD,CAAC,eAAD,EAAkB,OAAlB,CAHC,EAID,CAAC,cAAD,EAAiB,OAAjB,CAJC,CAHY;EAUfC,EAAAA,CAAC,EAAE,CACD,CAAC,sCAAD,EAAyC,OAAzC,CADC,EAED,CAAC,kEAAD,EAAqE,OAArE,CAFC,CAVY;EAefX,EAAAA,CAAC,EAAE,CAAC,CAAC,gBAAD,EAAmB,KAAnB,CAAD,CAfY;EAiBfkB,EAAAA,CAAC,EAAE,CAAC,CAAC,YAAD,EAAe,KAAf,CAAD,CAjBY;EAmBfC,EAAAA,CAAC,EAAE,CAAC,CAAC,WAAD,EAAc,IAAd,CAAD,CAnBY;EAqBfC,EAAAA,CAAC,EAAE,CAAC,CAAC,2BAAD,EAA8B,OAA9B,CAAD,CArBY;EAuBfI,EAAAA,CAAC,EAAE,CACD,CAAC,eAAD,EAAkB,MAAlB,CADC,EAED,CAAC,kBAAD,EAAqB,MAArB,CAFC,EAGD,CAAC,OAAD,EAAU,KAAV,CAHC,EAID,CAAC,SAAD,EAAY,OAAZ,CAJC,EAKD,CAAC,SAAD,EAAY,KAAZ,CALC,EAMD,CAAC,0BAAD,EAA6B,OAA7B,CANC,EAOD,CAAC,6CAAD,EAAgD,KAAhD,CAPC,CAvBY;EAiCfK,EAAAA,CAAC,EAAE,CAAC,CAAC,+BAAD,EAAkC,QAAlC,CAAD,EAA8C,CAAC,SAAD,EAAY,MAAZ,CAA9C,CAjCY;EAmCfC,EAAAA,CAAC,EAAE,CAAC,CAAC,mBAAD,EAAsB,OAAtB,CAAD,CAnCY;EAqCfC,EAAAA,CAAC,EAAE,CAAC,CAAC,UAAD,EAAa,OAAb,CAAD;EArCY,CAAjB;EAwCA,UAAc,GAAGssB,UAAjB;;ECxCA,IAAM8B,IAAI,GAAG,gBAAb;;EAEA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAStwB,GAAT,EAAc;EAC9B,MAAIU,CAAC,GAAGV,GAAG,CAACA,GAAG,CAACM,MAAJ,GAAa,CAAd,CAAX;;EACA,MAAIiwB,MAAK,CAAC3qB,cAAN,CAAqBlF,CAArB,MAA4B,IAAhC,EAAsC;EACpC,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqwB,MAAK,CAAC7vB,CAAD,CAAL,CAASJ,MAA7B,EAAqCJ,CAAC,IAAI,CAA1C,EAA6C;EAC3C,UAAImF,GAAG,GAAGkrB,MAAK,CAAC7vB,CAAD,CAAL,CAASR,CAAT,EAAY,CAAZ,CAAV;;EACA,UAAImF,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,MAAkB,IAAtB,EAA4B;EAC1B,eAAOA,GAAG,CAACmD,OAAJ,CAAYkC,GAAZ,EAAiBkrB,MAAK,CAAC7vB,CAAD,CAAL,CAASR,CAAT,EAAY,CAAZ,CAAjB,CAAP;EACD;EACF;EACF;;EACD,SAAO,IAAP;EACD,CAXD;EAaA;;;;;EAGA,IAAMswB,SAAS,GAAG,SAAZA,SAAY,GAA0B;EAAA,MAAjBxwB,GAAiB,uEAAX,EAAW;EAAA,MAAP2G,KAAO;EAC1C,MAAIgX,UAAU,GAAGhX,KAAK,CAACgX,UAAN,CAAiB/B,KAAlC,CAD0C;;EAI1C,MAAI+B,UAAU,CAAC/X,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClC,WAAO2d,UAAU,CAAC3d,GAAD,CAAjB;EACD,GANyC;;;EAS1C,MAAIqd,MAAM,GAAGiT,SAAS,CAACtwB,GAAD,CAAtB;;EACA,MAAIqd,MAAM,KAAK,IAAf,EAAqB;EACnB,WAAOA,MAAP;EACD,GAZyC;;;EAc1C,MAAIgT,IAAI,CAACxtB,IAAL,CAAU7C,GAAV,CAAJ,EAAoB;EAClB,WAAOA,GAAG,GAAG,IAAb;EACD,GAhByC;;;EAkB1C,SAAOA,GAAG,GAAG,GAAb;EACD,CAnBD;;EAoBA,YAAc,GAAGwwB,SAAjB;;ECvCA;EACA,YAAc,GAAG,CACf,CAAC,aAAD,EAAgB,KAAhB,CADe,EAEf,CAAC,QAAD,EAAW,MAAX,CAFe,EAGf,CAAC,oBAAD,EAAuB,OAAvB,CAHe,EAIf,CAAC,oEAAD,EAAuE,KAAvE,CAJe,EAKf,CAAC,wCAAD,EAA2C,KAA3C,CALe,EAMf,CAAC,uCAAD,EAA0C,KAA1C,CANe,EAOf,CAAC,8CAAD,EAAiD,MAAjD,CAPe,EAQf,CAAC,8BAAD,EAAiC,KAAjC,CARe;EAUf,CAAC,kBAAD,EAAqB,IAArB,CAVe,EAWf,CAAC,yBAAD,EAA4B,MAA5B,CAXe,EAYf,CAAC,uBAAD,EAA0B,MAA1B,CAZe,EAaf,CAAC,sBAAD,EAAyB,IAAzB,CAbe,EAcf,CAAC,OAAD,EAAU,KAAV,CAde,EAef,CAAC,UAAD,EAAa,OAAb,CAfe,EAgBf,CAAC,WAAD,EAAc,MAAd,CAhBe,EAiBf,CAAC,qBAAD,EAAwB,KAAxB,CAjBe,EAkBf,CAAC,YAAD,EAAe,SAAf,CAlBe,EAmBf,CAAC,YAAD,EAAe,QAAf,CAnBe,EAoBf,CAAC,cAAD,EAAiB,QAAjB,CApBe,EAqBf,CAAC,oBAAD,EAAuB,MAAvB,CArBe,EAsBf,CAAC,oBAAD,EAAuB,IAAvB,CAtBe,EAuBf,CAAC,QAAD,EAAW,IAAX,CAvBe,EAwBf,CAAC,SAAD,EAAY,IAAZ,CAxBe,EAyBf,CAAC,KAAD,EAAQ,EAAR,CAzBe,CAAjB;;ECCA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAS7kB,GAAT,EAAc;EAC9B,SAAOzJ,MAAM,CAACC,IAAP,CAAYwJ,GAAZ,EAAiB3H,MAAjB,CAAwB,UAAClD,CAAD,EAAIG,CAAJ,EAAU;EACvCH,IAAAA,CAAC,CAAC6K,GAAG,CAAC1K,CAAD,CAAJ,CAAD,GAAYA,CAAZ;EACA,WAAOH,CAAP;EACD,GAHM,EAGJ,EAHI,CAAP;EAID,CALD;;EAOA,IAAMgG,UAAU,GAAG,SAAbA,UAAa,CAAS/G,GAAT,EAAc2G,KAAd,EAAqB;EACtC,MAAIgX,UAAU,GAAGhX,KAAK,CAACgX,UAAN,CAAiB/B,KAAlC;EACA,MAAI8U,MAAM,GAAGD,SAAS,CAAC9S,UAAD,CAAtB,CAFsC;;EAKtC,MAAI+S,MAAM,CAAC9qB,cAAP,CAAsB5F,GAAtB,CAAJ,EAAgC;EAC9B,WAAO0wB,MAAM,CAAC1wB,GAAD,CAAb;EACD,GAPqC;;;EAUtC,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqwB,QAAK,CAACjwB,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,QAAIqwB,QAAK,CAACrwB,CAAD,CAAL,CAAS,CAAT,EAAY2C,IAAZ,CAAiB7C,GAAjB,MAA0B,IAA9B,EAAoC;EAClCA,MAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAYotB,QAAK,CAACrwB,CAAD,CAAL,CAAS,CAAT,CAAZ,EAAyBqwB,QAAK,CAACrwB,CAAD,CAAL,CAAS,CAAT,CAAzB,CAAN;EACA,aAAOF,GAAP;EACD;EACF;;EACD,SAAOA,GAAP;EACD,CAjBD;;EAkBA,gBAAc,GAAG+G,UAAjB;;EC3BA;EACA,IAAIwpB,KAAK,GAAG;EACVhpB,EAAAA,UAAU,EAAE,CACV;EACElC,IAAAA,GAAG,EAAE,OADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GADU,EAKV;EACEtrB,IAAAA,GAAG,EAAE,gBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GALU,CADF;EAYVnpB,EAAAA,KAAK,EAAE,CACL;EACEnC,IAAAA,GAAG,EAAE,UADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GADK,CAZG;EAmBVrpB,EAAAA,YAAY,EAAE,CACZ;EACEjC,IAAAA,GAAG,EAAE,aADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GADY,EAKZ;EACEtrB,IAAAA,GAAG,EAAE,cADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GALY,EASZ;EACEtrB,IAAAA,GAAG,EAAE,aADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GATY,EAaZ;EACEtrB,IAAAA,GAAG,EAAE,yBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAbY,EAiBZ;EACEtrB,IAAAA,GAAG,EAAE,0CADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjBY,EAqBZ;EACEtrB,IAAAA,GAAG,EAAE,SADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArBY,EAyBZ;EACEtrB,IAAAA,GAAG,EAAE,SADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzBY,EA6BZ;EACEtrB,IAAAA,GAAG,EAAE,cADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GA7BY,EAiCZ;EACEtrB,IAAAA,GAAG,EAAE,SADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjCY,EAqCZ;EACEtrB,IAAAA,GAAG,EAAE,SADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArCY,EAyCZ;EACEtrB,IAAAA,GAAG,EAAE,UADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzCY,EA6CZ;EACEtrB,IAAAA,GAAG,EAAE,MADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GA7CY,EAiDZ;EACEtrB,IAAAA,GAAG,EAAE,KADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjDY,CAnBJ;EA0EVtpB,EAAAA,MAAM,EAAE,CACN;;EAEEhC,IAAAA,GAAG,EAAE,uBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GADM,EAMN;;EAEEtrB,IAAAA,GAAG,EAAE,iBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GANM,EAWN;EACEtrB,IAAAA,GAAG,EAAE,kBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAXM,EAeN;EACEtrB,IAAAA,GAAG,EAAE,gBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAfM,EAmBN;;EAEEtrB,IAAAA,GAAG,EAAE,oBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAnBM,EAwBN;;EAEEtrB,IAAAA,GAAG,EAAE,cAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAxBM;EA8BN;;EAEEtrB,IAAAA,GAAG,EAAE,UAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GA9BM,EAmCN;;EAEEtrB,IAAAA,GAAG,EAAE,kBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAnCM,EAwCN;;EAEEtrB,IAAAA,GAAG,EAAE,iBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAxCM,EA6CN;;EAEEtrB,IAAAA,GAAG,EAAE,uBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GA7CM,EAkDN;;EAEEtrB,IAAAA,GAAG,EAAE,iBAFP;;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAlDM,EAuDN;;EAEEtrB,IAAAA,GAAG,EAAE,UAFP;;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAvDM;;;;;EAkEN;;EAEEtrB,IAAAA,GAAG,EAAE,WAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAlEM,CA1EE;EAmJVvpB,EAAAA,SAAS,EAAE,CACT;EACE/B,IAAAA,GAAG,EAAE,SADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GADS,EAKT;EACEtrB,IAAAA,GAAG,EAAE,kBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GALS,EAST;EACEtrB,IAAAA,GAAG,EAAE,iBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GATS,EAaT;EACEtrB,IAAAA,GAAG,EAAE,aADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAbS,EAiBT;EACEtrB,IAAAA,GAAG,EAAE,gBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjBS,EAqBT;EACEtrB,IAAAA,GAAG,EAAE,aADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArBS,EAyBT;EACEtrB,IAAAA,GAAG,EAAE,cADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzBS,EA6BT;EACEtrB,IAAAA,GAAG,EAAE,UADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GA7BS,EAiCT;EACEtrB,IAAAA,GAAG,EAAE,QADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjCS,EAqCT;EACEtrB,IAAAA,GAAG,EAAE,QADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArCS,EAyCT;EACEtrB,IAAAA,GAAG,EAAE,YADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzCS,EA6CT;EACEtrB,IAAAA,GAAG,EAAE,YADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GA7CS,EAiDT;EACEtrB,IAAAA,GAAG,EAAE,yBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjDS,EAqDT;EACEtrB,IAAAA,GAAG,EAAE,iBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArDS,EAyDT;EACEtrB,IAAAA,GAAG,EAAE,wFADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzDS,EA6DT;EACEtrB,IAAAA,GAAG,EAAE,WADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GA7DS,EAiET;EACEtrB,IAAAA,GAAG,EAAE,WADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjES,EAqET;EACEtrB,IAAAA,GAAG,EAAE,UADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArES,EAyET;EACEtrB,IAAAA,GAAG,EAAE,mBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzES,EA6ET;EACEtrB,IAAAA,GAAG,EAAE,WADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GA7ES,EAiFT;EACEtrB,IAAAA,GAAG,EAAE,UADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjFS,EAqFT;EACEtrB,IAAAA,GAAG,EAAE,WADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArFS,EAyFT;EACEtrB,IAAAA,GAAG,EAAE,kBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzFS,EA6FT;;EAEEtrB,IAAAA,GAAG,EAAE,uBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GA7FS,EAkGT;EACEtrB,IAAAA,GAAG,EAAE,YADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAlGS,EAsGT;EACEtrB,IAAAA,GAAG,EAAE,WADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAtGS;EAnJD,CAAZ;EA+PA,cAAc,GAAGJ,KAAjB;;EChQA,IAAIK,SAAS,GAAG;EACdvpB,EAAAA,MAAM,EAAE,CAAC,KAAD,CADM;EAEdG,EAAAA,KAAK,EAAE,CAAC,MAAD,CAFO;EAGdN,EAAAA,UAAU,EAAE,CACV,KADU,EAEV,KAFU,EAGV,MAHU,EAIV,MAJU,EAKV,MALU,EAMV,MANU,EAOV,KAPU,EAQV,KARU,EASV,KATU,EAUV,KAVU,EAWV,KAXU,EAYV,KAZU,EAaV,KAbU,EAcV,KAdU,EAeV,KAfU,EAgBV,KAhBU,EAiBV,KAjBU,EAkBV,KAlBU,EAmBV,KAnBU,EAoBV,KApBU,EAqBV,KArBU,EAsBV,KAtBU,EAuBV,KAvBU,EAwBV,KAxBU,EAyBV,KAzBU,EA0BV,KA1BU,EA2BV,KA3BU,EA4BV,KA5BU,EA6BV,KA7BU,EA8BV,KA9BU,EA+BV,KA/BU,EAgCV,KAhCU,EAiCV,KAjCU,EAkCV,KAlCU,EAmCV,KAnCU,EAoCV,KApCU,EAqCV,IArCU,EAsCV,IAtCU,EAuCV,KAvCU,EAwCV,KAxCU,EAyCV,KAzCU,EA0CV,IA1CU,CAHE;EA+CdE,EAAAA,SAAS,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,CA/CG;EAgDdE,EAAAA,YAAY,EAAE,CACZ,KADY,EAEZ,KAFY,EAGZ,KAHY,EAIZ,KAJY,EAKZ,KALY,EAMZ,KANY,EAOZ,KAPY,EAQZ,KARY,EASZ,KATY,EAUZ,MAVY,EAWZ,MAXY,EAYZ,MAZY,EAaZ,MAbY,EAcZ,MAdY,EAeZ,MAfY,EAgBZ,KAhBY,EAiBZ,KAjBY,EAkBZ,KAlBY,EAmBZ,KAnBY,EAoBZ,KApBY,EAqBZ,KArBY,EAsBZ,KAtBY,EAuBZ,KAvBY,EAwBZ,KAxBY,EAyBZ,KAzBY,EA0BZ,KA1BY,EA2BZ,KA3BY,EA4BZ,KA5BY,EA6BZ,KA7BY,EA8BZ,KA9BY,EA+BZ,IA/BY,EAgCZ,IAhCY,EAiCZ,IAjCY;EAhDA,CAAhB;;EAqFAspB,SAAS,GAAGzuB,MAAM,CAACC,IAAP,CAAYwuB,SAAZ,EAAuB3sB,MAAvB,CAA8B,UAAClD,CAAD,EAAIG,CAAJ,EAAU;EAClD0vB,EAAAA,SAAS,CAAC1vB,CAAD,CAAT,CAAamB,OAAb,CAAqB,UAAA7B,CAAC;EAAA,WAAKO,CAAC,CAACP,CAAD,CAAD,GAAOU,CAAZ;EAAA,GAAtB;EACA,SAAOH,CAAP;EACD,CAHW,EAGT,EAHS,CAAZ;EAIA,UAAc,GAAG6vB,SAAjB;;ECtFA;;EACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAS7wB,GAAT,EAAc;EAC/B,MAAI8wB,KAAK,GAAG9wB,GAAG,CAAC2K,MAAJ,CAAW3K,GAAG,CAACM,MAAJ,GAAa,CAAxB,CAAZ;;EACA,MAAIywB,MAAK,CAACnrB,cAAN,CAAqBkrB,KAArB,MAAgC,IAApC,EAA0C;EACxC,WAAOC,MAAK,CAACD,KAAD,CAAZ;EACD;;EACD,MAAIE,GAAG,GAAGhxB,GAAG,CAAC2K,MAAJ,CAAW3K,GAAG,CAACM,MAAJ,GAAa,CAAxB,CAAV;;EACA,MAAIywB,MAAK,CAACnrB,cAAN,CAAqBorB,GAArB,MAA8B,IAAlC,EAAwC;EACtC,WAAOD,MAAK,CAACC,GAAD,CAAZ;EACD;;EACD,MAAIC,GAAG,GAAGjxB,GAAG,CAAC2K,MAAJ,CAAW3K,GAAG,CAACM,MAAJ,GAAa,CAAxB,CAAV;;EACA,MAAI2wB,GAAG,KAAK,GAAZ,EAAiB;EACf,WAAO,cAAP;EACD;;EACD,SAAO,IAAP;EACD,CAdD;;EAgBA,IAAMxpB,YAAY,GAAG,SAAfA,YAAe,CAASzH,GAAT,EAAc2G,KAAd,EAAqBQ,KAArB,EAA4B;EAC/C,MAAI,CAACnH,GAAL,EAAU;EACR,WAAO,EAAP;EACD,GAH8C;;;EAK/C,MAAI2G,KAAK,CAAC4M,KAAN,CAAY3N,cAAZ,CAA2B5F,GAA3B,MAAoC,IAAxC,EAA8C;EAC5C,QAAIkxB,MAAM,GAAGvqB,KAAK,CAACgX,UAAN,CAAiB9B,KAA9B;EACA,QAAIzZ,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY8uB,MAAZ,CAAX;;EACA,SAAK,IAAIhxB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,UAAI2d,KAAK,GAAG1b,MAAM,CAACC,IAAP,CAAY8uB,MAAM,CAAC9uB,IAAI,CAAClC,CAAD,CAAL,CAAlB,CAAZ;;EACA,WAAK,IAAIoB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuc,KAAK,CAACvd,MAA1B,EAAkCgB,CAAC,EAAnC,EAAuC;EACrC,YAAItB,GAAG,KAAKkxB,MAAM,CAAC9uB,IAAI,CAAClC,CAAD,CAAL,CAAN,CAAgB2d,KAAK,CAACvc,CAAD,CAArB,CAAZ,EAAuC;EACrC,iBAAOc,IAAI,CAAClC,CAAD,CAAX;EACD;EACF;EACF;EACF,GAhB8C;;;EAmB/CiH,EAAAA,KAAK,GAAGA,KAAK,IAAI0pB,UAAU,CAAC7wB,GAAD,CAA3B;;EACA,MAAImH,KAAK,IAAIopB,UAAK,CAACppB,KAAD,CAAlB,EAA2B;EACzB,SAAK,IAAIjH,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGqwB,UAAK,CAACppB,KAAD,CAAL,CAAa7G,MAAjC,EAAyCJ,EAAC,EAA1C,EAA8C;EAC5C,UAAMixB,IAAI,GAAGZ,UAAK,CAACppB,KAAD,CAAL,CAAajH,EAAb,CAAb;;EACA,UAAIixB,IAAI,CAAC9rB,GAAL,CAASxC,IAAT,CAAc7C,GAAd,MAAuB,IAA3B,EAAiC;EAC/B,eAAOA,GAAG,CAACmD,OAAJ,CAAYguB,IAAI,CAAC9rB,GAAjB,EAAsB8rB,IAAI,CAACR,EAA3B,CAAP;EACD;EACF;EACF;;EACD,SAAO3wB,GAAP;EACD,CA7BD;;EA8BA,kBAAc,GAAGyH,YAAjB;;ECxCA,IAAMkW,YAAU,GAAG;EACjB/B,EAAAA,KAAK,EAAEnS,OADU;EAEjBoS,EAAAA,KAAK,EAAEnS;EAFU,CAAnB;;EAMA,IAAM7C,YAAU,GAAG;EACjB2W,EAAAA,SAAS,EAAE7T,WADM;EAEjB8T,EAAAA,UAAU,EAAE7T,UAFK;EAGjB0T,EAAAA,QAAQ,EAAEzT,QAHO;EAIjB9C,EAAAA,UAAU,EAAEqJ,YAJK;EAKjB3I,EAAAA,YAAY,EAAE2pB;EALG,CAAnB;EAQA,IAAIrmB,UAAS,GAAG,KAAhB;EAEA;;MACMsmB;;;EACJ,mBAAc;EAAA;;;EAEZlvB,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,MAAAA,UAAU,EAAE,KADuB;EAEnCE,MAAAA,KAAK,EAAEmH,MAF4B;EAGnCpH,MAAAA,QAAQ,EAAE;EAHyB,KAArC;EAKAxS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,aAA5B,EAA2C;EACzCC,MAAAA,UAAU,EAAE,KAD6B;EAEzCE,MAAAA,KAAK,EAAE,EAFkC;EAGzCD,MAAAA,QAAQ,EAAE;EAH+B,KAA3C;EAKAxS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,YAA5B,EAA0C;EACxCC,MAAAA,UAAU,EAAE,KAD4B;EAExCE,MAAAA,KAAK,EAAE+I,YAFiC;EAGxChJ,MAAAA,QAAQ,EAAE;EAH8B,KAA1C;EAKAxS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC;EAClCC,MAAAA,UAAU,EAAE,KADsB;EAElCE,MAAAA,KAAK,EAAEzS,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkB8nB,IAAlB,CAF2B;EAGlC3c,MAAAA,QAAQ,EAAE;EAHwB,KAApC;EAKAxS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,YAA5B,EAA0C;EACxCC,MAAAA,UAAU,EAAE,KAD4B;EAExCE,MAAAA,KAAK,EAAE/N,YAFiC;EAGxC8N,MAAAA,QAAQ,EAAE;EAH8B,KAA1C;EAMAxS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,SAA5B,EAAuC;EACrCC,MAAAA,UAAU,EAAE,KADyB;EAErCE,MAAAA,KAAK,EAAE,EAF8B;EAGrCD,MAAAA,QAAQ,EAAE;EAH2B,KAAvC,EA5BY;;EAkCZ,SAAK4c,WAAL,CAAiBC,KAAjB,EAlCY;;EAoCZ,SAAK9T,aAAL,GApCY;;EAuCZvb,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,MAAAA,UAAU,EAAE,KADuB;EAEnCE,MAAAA,KAAK,EAAE;EACLlM,QAAAA,aAAa,EAAE,KAAK+oB,QAAL,CAAc,cAAd;EADV;EAF4B,KAArC;EAMD;;;;;;8BAGOC,MAAM;EACZ3mB,MAAAA,UAAS,GAAG2mB,IAAZ;EACA,aAAO,IAAP;EACD;;;kCACW;EACV,aAAO3mB,UAAP;EACD;;;;;+BAGQhF,KAAK;EACZ,UAAIkX,GAAG,GAAG,KAAK1J,KAAf;EACA,UAAIzD,GAAG,GAAG,EAAV;EACA,UAAIyD,KAAK,GAAGpR,MAAM,CAACC,IAAP,CAAY6a,GAAZ,CAAZ;;EACA,WAAK,IAAI/c,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqT,KAAK,CAACjT,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,YAAI,OAAO+c,GAAG,CAAC1J,KAAK,CAACrT,CAAD,CAAN,CAAV,KAAyB,QAA7B,EAAuC;EACrC,cAAI+c,GAAG,CAAC1J,KAAK,CAACrT,CAAD,CAAN,CAAH,KAAkB6F,GAAtB,EAA2B;EACzB+J,YAAAA,GAAG,CAACyD,KAAK,CAACrT,CAAD,CAAN,CAAH,GAAgB,IAAhB;EACD;EACF,SAJD,MAIO,IAAI+c,GAAG,CAAC1J,KAAK,CAACrT,CAAD,CAAN,CAAH,CAAcqG,IAAd,CAAmB,UAAA5E,CAAC;EAAA,iBAAIA,CAAC,KAAKoE,GAAV;EAAA,SAApB,CAAJ,EAAwC;EAC7C+J,UAAAA,GAAG,CAACyD,KAAK,CAACrT,CAAD,CAAN,CAAH,GAAgB,IAAhB;EACD;EACF;;EACD,aAAO4P,GAAP;EACD;;;;;kCAGWmN,KAAK;EACf,UAAIjX,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAY6a,GAAZ,CAAX;;EACA,WAAK,IAAI/c,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,YAAIqT,KAAK,GAAGpR,MAAM,CAACC,IAAP,CAAYwa,cAAM,CAACK,GAAG,CAACjX,IAAI,CAAC9F,CAAD,CAAL,CAAJ,CAAlB,CAAZ;;EACA,aAAK,IAAI4B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyR,KAAK,CAACjT,MAA1B,EAAkCwB,CAAC,EAAnC,EAAuC;EACrC6vB,UAAAA,QAAM,CAAC3U,OAAP,CAAezJ,KAAK,CAACzR,CAAD,CAApB,EAAyBkE,IAAI,CAAC9F,CAAD,CAA7B,EAAkC,KAAKqT,KAAvC,EADqC;;EAGrCoe,UAAAA,QAAM,CAACzU,OAAP,CAAe3J,KAAK,CAACzR,CAAD,CAApB,EAAyBkE,IAAI,CAAC9F,CAAD,CAA7B,EAAkC,IAAlC;EACD;EACF;EACF;;;;;iCAEQ0L,KAAK;EACZ,UAAIxJ,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYwJ,GAAZ,CAAX;;EACA,WAAK,IAAI1L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,YAAIgE,IAAI,GAAG9B,IAAI,CAAClC,CAAD,CAAJ,CAAQ8C,WAAR,EAAX;EACA2uB,QAAAA,QAAM,CAAC3U,OAAP,CAAe9Y,IAAf,EAAqB0H,GAAG,CAACxJ,IAAI,CAAClC,CAAD,CAAL,CAAxB,EAAmC,KAAKqT,KAAxC,EAFoC;;EAIpCoe,QAAAA,QAAM,CAACzU,OAAP,CAAehZ,IAAf,EAAqB0H,GAAG,CAACxJ,IAAI,CAAClC,CAAD,CAAL,CAAxB,EAAmC,IAAnC;EACD;EACF;;;sCAEe;EACdwd,MAAAA,eAAa,CAAC,IAAD,CAAb;;EACA,aAAO,IAAP;EACD;;;;;8BAGO1X,MAAM;EACZA,MAAAA,IAAI,GAAG7D,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBxD,IAAlB,CAAP;EACA,WAAKA,IAAL,GAAY7D,MAAM,CAACqH,MAAP,CAAc,KAAKxD,IAAnB,EAAyBA,IAAzB,CAAZ,CAFY;;EAIZ,WAAKA,IAAL,GAAY4rB,SAAW,CAAC,KAAK5rB,IAAN,CAAvB;EACA,aAAO,IAAP;EACD;;;;;kCAEW6rB,IAAI;EACd,WAAKC,OAAL,CAAavlB,IAAb,CAAkBslB,EAAlB;EACA,aAAO,IAAP;EACD;;;;;8BAGO;EACN,aAAO;EACLte,QAAAA,KAAK,EAAEpR,MAAM,CAACC,IAAP,CAAY,KAAKmR,KAAjB,EAAwBjT,MAD1B;EAELyxB,QAAAA,OAAO,EAAE5vB,MAAM,CAACC,IAAP,CAAY,KAAKub,UAAL,CAAgB/B,KAA5B,EAAmCtb,MAFvC;EAGL8iB,QAAAA,YAAY,EAAEjhB,MAAM,CAACC,IAAP,CAAY,KAAKub,UAAL,CAAgB9B,KAA5B,EAAmCvb,MAH5C;EAIL0xB,QAAAA,SAAS,EAAE7vB,MAAM,CAACC,IAAP,CAAY,KAAKgb,WAAjB,EAA8B9c,MAJpC;EAKL2xB,QAAAA,cAAc,EAAE,KAAKH,OAAL,CAAaxxB;EALxB,OAAP;EAOD;;;;;;;EAIH,IAAMyL,OAAK,GAAG,SAARA,KAAQ,CAASH,GAAT,EAAc;EAC1B,SAAOsmB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAexmB,GAAf,CAAX,CAAP;EACD,CAFD;EAIA;;;EACAylB,KAAK,CAAC7mB,SAAN,CAAgBuB,KAAhB,GAAwB,YAAW;EACjC,MAAIsmB,EAAE,GAAG,IAAIhB,KAAJ,EAAT,CADiC;;EAGjCgB,EAAAA,EAAE,CAAC9e,KAAH,GAAWpR,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkB,KAAK+J,KAAvB,CAAX;EACA8e,EAAAA,EAAE,CAACjV,WAAH,GAAiBjb,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkB,KAAK4T,WAAvB,CAAjB,CAJiC;;EAMjCiV,EAAAA,EAAE,CAAC1U,UAAH,GAAgB5R,OAAK,CAAC,KAAK4R,UAAN,CAArB;EACA0U,EAAAA,EAAE,CAACrsB,IAAH,GAAU+F,OAAK,CAAC,KAAK/F,IAAN,CAAf,CAPiC;;EASjCqsB,EAAAA,EAAE,CAACxrB,UAAH,GAAgB,KAAKA,UAArB;EACAwrB,EAAAA,EAAE,CAACP,OAAH,GAAa,KAAKA,OAAlB;EACA,SAAOO,EAAP;EACD,CAZD;;EAaA,WAAc,GAAGhB,KAAjB;;;EC9KA;EACA/sB,EAAAA,WAAA,GAAc,YAAW;EACvB,WAAO,KAAKsK,OAAL,GAAe,CAAf,KAAqB,IAA5B;EACD,GAFD;EAIA;;;EACAtK,EAAAA,cAAA,GAAiB,YAAW;EAC1B,QAAI,KAAKguB,IAAT,EAAe;EACb,aAAO,KAAKA,IAAZ;EACD;;EACD,WAAO,IAAP;EACD,GALD;EAOA;;;EACAhuB,EAAAA,eAAA,GAAkB,UAASjD,CAAT,EAAY;EAC5B,QAAIkJ,GAAG,GAAG,EAAV;;EACA,QAAMgoB,SAAS,GAAG,SAAZA,SAAY,CAAShkB,GAAT,EAAc;EAC9B,UAAIA,GAAG,CAAC+jB,IAAR,EAAc;EACZ/nB,QAAAA,GAAG,CAACgC,IAAJ,CAASgC,GAAG,CAAC+jB,IAAb;EACAC,QAAAA,SAAS,CAAChkB,GAAG,CAAC+jB,IAAL,CAAT;EACD;EACF,KALD;;EAMAC,IAAAA,SAAS,CAAC,IAAD,CAAT;EACAhoB,IAAAA,GAAG,GAAGA,GAAG,CAACioB,OAAJ,EAAN;;EACA,QAAI,OAAOnxB,CAAP,KAAa,QAAjB,EAA2B;EACzB,aAAOkJ,GAAG,CAAClJ,CAAD,CAAV;EACD;;EACD,WAAOkJ,GAAP;EACD,GAdD;EAgBA;;;EACAjG,EAAAA,aAAA,GAAgB,UAASmuB,SAAT,EAAoB;EAClC,QAAIrkB,IAAI,GAAG,KAAKA,IAAL,CAAUzB,GAAV,CAAc,UAAAwH,EAAE;EAAA,aAAIA,EAAE,CAACpI,KAAH,CAAS0mB,SAAT,CAAJ;EAAA,KAAhB,CAAX;EACA,QAAI9iB,GAAG,GAAG,KAAKlD,SAAL,CAAe2B,IAAf,CAAV;EACA,WAAOuB,GAAP;EACD,GAJD;EAMA;;;EACArL,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,WAAO,KAAK8J,IAAL,CAAUnK,MAAV,CAAiB,UAACwM,KAAD,EAAQlP,CAAR,EAAc;EACpCkP,MAAAA,KAAK,IAAIlP,CAAC,CAACmxB,SAAF,EAAT;EACA,aAAOjiB,KAAP;EACD,KAHM,EAGJ,CAHI,CAAP;EAID,GALD;;EAMAnM,EAAAA,iBAAA,GAAoBA,OAAO,CAACouB,SAA5B;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;;;;;;ECpDA;EACApuB,EAAAA,aAAA,GAAgB,UAASjD,CAAT,EAAY;EAC1B,QAAIA,CAAC,KAAKsE,SAAV,EAAqB;EACnB,aAAO,KAAK0G,GAAL,CAAS,CAAT,CAAP;EACD;;EACD,WAAO,KAAKwD,KAAL,CAAW,CAAX,EAAcxO,CAAd,CAAP;EACD,GALD;EAOA;;;EACAiD,EAAAA,YAAA,GAAe,UAASjD,CAAT,EAAY;EACzB,QAAIA,CAAC,KAAKsE,SAAV,EAAqB;EACnB,aAAO,KAAK0G,GAAL,CAAS,KAAK+B,IAAL,CAAU9N,MAAV,GAAmB,CAA5B,CAAP;EACD;;EACD,QAAIoF,GAAG,GAAG,KAAK0I,IAAL,CAAU9N,MAApB;EACA,WAAO,KAAKuP,KAAL,CAAWnK,GAAG,GAAGrE,CAAjB,EAAoBqE,GAApB,CAAP;EACD,GAND;EAQA;;;EACApB,EAAAA,aAAA,GAAgB,UAASmB,KAAT,EAAgBC,GAAhB,EAAqB;EACnC,QAAI0I,IAAI,GAAG,KAAKA,IAAL,CAAUyB,KAAV,CAAgBpK,KAAhB,EAAuBC,GAAvB,CAAX;EACA,WAAO,KAAK+G,SAAL,CAAe2B,IAAf,CAAP;EACD,GAHD;EAKA;;;EACA9J,EAAAA,UAAA,GAAa,UAASjD,CAAT,EAAY;EACvB,QAAIE,CAAC,GAAG,KAAK6M,IAAL,CAAU/M,CAAV,CAAR;;EACA,QAAIE,CAAC,KAAKoE,SAAV,EAAqB;EACnB,aAAO,KAAK8G,SAAL,CAAe,EAAf,CAAP;EACD;;EACD,WAAO,KAAKA,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAP;EACD,GAND;;EAOA+C,EAAAA,WAAA,GAAcA,OAAO,CAACquB,EAAtB;EAEA;;EACAruB,EAAAA,kBAAA,GAAqB,YAAW;EAC9B,WAAO,KAAKmJ,KAAL,CAAW,IAAX,CAAP;EACD,GAFD;;EAGAnJ,EAAAA,iBAAA,GAAoBA,OAAO,CAACsuB,UAA5B;EAEA;;EACAtuB,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,WAAO,KAAKmJ,KAAL,CAAW,IAAX,CAAP;EACD,GAFD;;EAGAnJ,EAAAA,gBAAA,GAAmBA,OAAO,CAACuuB,SAA3B;EAEA;;EACAvuB,EAAAA,gBAAA,GAAmB,UAASwuB,GAAT,EAAc;EAC/B,QAAIvoB,GAAG,GAAG,EAAV,CAD+B;;EAG/B,SAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkO,IAAL,CAAU9N,MAA9B,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,UAAIiM,KAAK,GAAG,KAAKiC,IAAL,CAAUlO,CAAV,EAAaiM,KAAb,EAAZ;;EACA,WAAK,IAAI7K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6K,KAAK,CAAC7L,MAA1B,EAAkCgB,CAAC,EAAnC,EAAuC;EACrCiJ,QAAAA,GAAG,CAACgC,IAAJ,CAASJ,KAAK,CAAC7K,CAAD,CAAd,EADqC;;EAGrC,YAAIwxB,GAAG,KAAKntB,SAAR,IAAqB4E,GAAG,CAACuoB,GAAD,CAAH,KAAantB,SAAtC,EAAiD;EAC/C,iBAAO4E,GAAG,CAACuoB,GAAD,CAAV;EACD;EACF;EACF;;EACD,WAAOvoB,GAAP;EACD,GAdD;EAgBA;;;EACA,MAAMwoB,SAAS,GAAG,SAAZA,SAAY,CAASxkB,GAAT,EAAc;EAC9B,QAAIuB,GAAG,GAAG,EAAV;EACA,QAAMkjB,SAAS,GAAG,EAAlB;;EAF8B,+BAGrB9yB,CAHqB;EAI5B,UAAMkP,MAAM,GAAGb,GAAG,CAACH,IAAJ,CAASlO,CAAT,CAAf;EACA,UAAM+T,MAAM,GAAG9R,MAAM,CAACC,IAAP,CAAYgN,MAAM,CAAC6E,MAAnB,EAA2BtH,GAA3B,CAA+B,UAAAzL,CAAC;EAAA,eAAIkO,MAAM,CAAC6E,MAAP,CAAc/S,CAAd,CAAJ;EAAA,OAAhC,CAAf;;EACA,WAAK,IAAID,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgT,MAAM,CAAC3T,MAA3B,EAAmCW,CAAC,EAApC,EAAwC;EAAA,wBACLgT,MAAM,CAAChT,CAAD,CADD;EAAA,YAC9BiQ,KAD8B,aAC9BA,KAD8B;EAAA,YACvBzL,KADuB,aACvBA,KADuB;EAAA,YAChBnF,MADgB,aAChBA,MADgB;;EAGtC,YAAI,CAAC0yB,SAAS,CAAC9hB,KAAD,CAAd,EAAuB;EACrB8hB,UAAAA,SAAS,CAAC9hB,KAAD,CAAT,GAAmB,EAAnB;EACD;;EACD8hB,QAAAA,SAAS,CAAC9hB,KAAD,CAAT,CAAiB3E,IAAjB,CAAsB6C,MAAM,CAAC3C,SAAP,CAAiBhH,KAAjB,EAAwBnF,MAAxB,CAAtB;EACD;EAb2B;;EAG9B,SAAK,IAAIJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqO,GAAG,CAACH,IAAJ,CAAS9N,MAA7B,EAAqCJ,CAAC,EAAtC,EAA0C;EAAA,YAAjCA,CAAiC;EAWzC;;EACD,QAAMkC,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY4wB,SAAZ,CAAb;;EACA,SAAK,IAAI9yB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,EAAC,EAAlC,EAAsC;EACpC,UAAMmb,GAAG,GAAGjZ,IAAI,CAAClC,EAAD,CAAhB;EACA4P,MAAAA,GAAG,CAACuL,GAAD,CAAH,GAAW9M,GAAG,CAAC9B,SAAJ,CAAcumB,SAAS,CAAC3X,GAAD,CAAvB,CAAX;EACD;;EACD,WAAOvL,GAAP;EACD,GArBD;;EAuBA,MAAMmjB,UAAU,GAAG,SAAbA,UAAa,CAAS1kB,GAAT,EAAcsa,IAAd,EAAoB;EACrC,QAAMte,GAAG,GAAG,EAAZ;;EADqC,iCAE5BrK,CAF4B;EAGnC,UAAMkP,MAAM,GAAGb,GAAG,CAACH,IAAJ,CAASlO,CAAT,CAAf;EACA,UAAIkC,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYgN,MAAM,CAAC6E,MAAnB,CAAX;EACA7R,MAAAA,IAAI,GAAGA,IAAI,CAAC0K,MAAL,CAAY,UAAAvH,EAAE;EAAA,eAAI6J,MAAM,CAAC6E,MAAP,CAAc1O,EAAd,EAAkB2L,KAAlB,KAA4B2X,IAAhC;EAAA,OAAd,CAAP;EACAzmB,MAAAA,IAAI,CAACC,OAAL,CAAa,UAAAkD,EAAE,EAAI;EACjBgF,QAAAA,GAAG,CAACgC,IAAJ,CAAS6C,MAAM,CAAC3C,SAAP,CAAiB2C,MAAM,CAAC6E,MAAP,CAAc1O,EAAd,EAAkBE,KAAnC,EAA0C2J,MAAM,CAAC6E,MAAP,CAAc1O,EAAd,EAAkBjF,MAA5D,CAAT;EACD,OAFD;EANmC;;EAErC,SAAK,IAAIJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqO,GAAG,CAACH,IAAJ,CAAS9N,MAA7B,EAAqCJ,CAAC,EAAtC,EAA0C;EAAA,aAAjCA,CAAiC;EAOzC;;EACD,WAAOqO,GAAG,CAAC9B,SAAJ,CAAclC,GAAd,CAAP;EACD,GAXD;EAaA;;;EACAjG,EAAAA,cAAA,GAAiB,UAAS4uB,MAAT,EAAiB;EAChC,QAAIA,MAAM,KAAKvtB,SAAf,EAA0B;EACxB,aAAOotB,SAAS,CAAC,IAAD,CAAhB;EACD;;EACD,QAAI,OAAOG,MAAP,KAAkB,QAAtB,EAAgC;EAC9BA,MAAAA,MAAM,GAAGvnB,MAAM,CAACunB,MAAD,CAAf;EACD;;EACD,WAAOD,UAAU,CAAC,IAAD,EAAOC,MAAP,CAAV,IAA4B,KAAKzmB,SAAL,CAAe,EAAf,CAAnC;EACD,GARD;;EASAnI,EAAAA,aAAA,GAAgBA,OAAO,CAAC2P,MAAxB;EAEA;;EACA3P,EAAAA,iBAAA,GAAoB,UAASjD,CAAT,EAAY;EAC9B,QAAIkJ,GAAG,GAAG,EAAV;EACA,SAAK6D,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBgJ,MAAAA,GAAG,CAACgC,IAAJ,CAAShL,CAAC,CAAC4xB,YAAF,EAAT;EACD,KAFD;;EAGA,QAAI,OAAO9xB,CAAP,KAAa,QAAjB,EAA2B;EACzB,aAAO,KAAKoL,SAAL,CAAe,CAAClC,GAAG,CAAClJ,CAAD,CAAJ,CAAf,CAAP;EACD;;EACD,WAAO,KAAKoL,SAAL,CAAelC,GAAf,CAAP;EACD,GATD;;EAUAjG,EAAAA,gBAAA,GAAmBA,OAAO,CAACuR,SAA3B;;;;;;;;;;;;;;;;;EC1HA;EACA,IAAMud,aAAa,GAAG,SAAhBA,aAAgB,CAAS/tB,GAAT,EAAc;EAClC,MAAIguB,QAAQ,GAAG,EAAf;EACA,MAAIC,SAAS,GAAG,EAAhB;EACAjuB,EAAAA,GAAG,CAAChD,OAAJ,CAAY,UAAAuJ,GAAG,EAAI;EACjB,QAAIA,GAAG,CAAC0E,QAAJ,KAAiB,IAAjB,IAAyB1E,GAAG,CAACnF,QAAJ,KAAiB,IAA9C,EAAoD;EAClD;EACD;;EACD,QAAImF,GAAG,CAAC7F,GAAJ,KAAYJ,SAAhB,EAA2B;EACzB0tB,MAAAA,QAAQ,CAAC9mB,IAAT,CAAcX,GAAG,CAAC7F,GAAlB;EACD;;EACD,QAAI6F,GAAG,CAAC1H,IAAJ,KAAayB,SAAjB,EAA4B;EAC1B2tB,MAAAA,SAAS,CAAC/mB,IAAV,CAAeX,GAAG,CAAC1H,IAAnB;EACD;EACF,GAVD;EAWA,SAAO;EAAE8B,IAAAA,IAAI,EAAEqtB,QAAR;EAAkB9f,IAAAA,KAAK,EAAE+f;EAAzB,GAAP;EACD,CAfD;;EAiBA,IAAMjjB,UAAQ,GAAG,SAAXA,QAAW,CAAS9B,GAAT,EAAcyB,IAAd,EAAoB;EACnC,MAAIzB,GAAG,CAACglB,MAAJ,IAAchlB,GAAG,CAACglB,MAAJ,CAAWhkB,GAAX,KAAmB,IAArC,EAA2C;EAAA,yBACnB6jB,aAAa,CAACpjB,IAAD,CADM;EAAA,QACnCuD,KADmC,kBACnCA,KADmC;EAAA,QAC5BvN,IAD4B,kBAC5BA,IAD4B;;;EAGzC,SAAK,IAAI9F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqT,KAAK,CAACjT,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,UAAIqO,GAAG,CAACglB,MAAJ,CAAWhgB,KAAX,CAAiBA,KAAK,CAACrT,CAAD,CAAtB,MAA+ByF,SAAnC,EAA8C;EAC5C,eAAO,KAAP;EACD;EACF,KAPwC;;;EASzC,SAAK,IAAIzF,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,EAAC,EAAlC,EAAsC;EACpC,UAAIqO,GAAG,CAACglB,MAAJ,CAAWvtB,IAAX,CAAgBA,IAAI,CAAC9F,EAAD,CAApB,MAA6ByF,SAAjC,EAA4C;EAC1C,eAAO,KAAP;EACD;EACF;EACF;;EACD,SAAO,IAAP;EACD,CAjBD;;EAkBA,cAAc,GAAG0K,UAAjB;;;ECjCA;EACA/L,EAAAA,aAAA,GAAgB,UAASe,GAAT,EAAcwjB,IAAd,EAAoB;;EAElC,QAAI7Y,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;;EACA,QAAI2K,IAAI,CAAC1P,MAAL,KAAgB,CAApB,EAAuB;EACrB,aAAO,KAAKmM,SAAL,CAAe,EAAf,CAAP;EACD,KALiC;;;EAOlC,QAAIgnB,UAAU,CAAC,IAAD,EAAOzjB,IAAP,CAAV,KAA2B,KAA/B,EAAsC;EACpC,aAAO,KAAKvD,SAAL,CAAe,EAAf,CAAP;EACD,KATiC;;;EAWlC,QAAIqF,OAAO,GAAG,KAAK1D,IAAL,CAAUnK,MAAV,CAAiB,UAACsG,GAAD,EAAMhJ,CAAN,EAAY;EACzC,aAAOgJ,GAAG,CAACoE,MAAJ,CAAWpN,CAAC,CAACkM,KAAF,CAAQuC,IAAR,CAAX,CAAP;EACD,KAFa,EAEX,EAFW,CAAd;;EAIA,QAAI6Y,IAAI,KAAKljB,SAAT,IAAsBkjB,IAAI,KAAK,IAA/B,IAAuCA,IAAI,KAAK,EAApD,EAAwD;EACtD,aAAO,KAAKpc,SAAL,CAAeqF,OAAf,EAAwBmC,MAAxB,CAA+B4U,IAA/B,CAAP;EACD;;EACD,WAAO,KAAKpc,SAAL,CAAeqF,OAAf,CAAP;EACD,GAnBD;EAqBA;;;EACAxN,EAAAA,WAAA,GAAc,UAASe,GAAT,EAAc;;EAE1B,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB,CAF0B;;EAI1B,QAAI2K,IAAI,CAAC1P,MAAL,KAAgB,CAAhB,IAAqBmzB,UAAU,CAAC,IAAD,EAAOzjB,IAAP,CAAV,KAA2B,KAApD,EAA2D;EACzD,aAAO,IAAP;EACD,KANyB;;;EAQ1B,QAAI8B,OAAO,GAAG,KAAK1D,IAAL,CAAUnK,MAAV,CAAiB,UAACsG,GAAD,EAAMhJ,CAAN,EAAY;EACzC,aAAOgJ,GAAG,CAACoE,MAAJ,CAAWpN,CAAC,CAACmyB,GAAF,CAAM1jB,IAAN,CAAX,CAAP;EACD,KAFa,EAEX,EAFW,CAAd;EAGA,WAAO,KAAKvD,SAAL,CAAeqF,OAAf,CAAP;EACD,GAZD;EAcA;;;EACAxN,EAAAA,gBAAA,GAAmB,UAASe,GAAT,EAAc;EAC/B,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB,CAD+B;;EAG/B,QAAIouB,UAAU,CAAC,IAAD,EAAOzjB,IAAP,CAAV,KAA2B,KAA/B,EAAsC;EACpC,aAAO,KAAKvD,SAAL,CAAe,EAAf,CAAP;EACD;;EACD,SAAK,IAAIvM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkO,IAAL,CAAU9N,MAA9B,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,UAAIuN,KAAK,GAAG,KAAKW,IAAL,CAAUlO,CAAV,EAAauN,KAAb,CAAmBuC,IAAnB,EAAyB,IAAzB,CAAZ;EACA,aAAO,KAAKvD,SAAL,CAAegB,KAAf,CAAP;EACD;;EACD,WAAO,KAAKhB,SAAL,CAAe,EAAf,CAAP;EACD,GAXD;EAaA;;;EACAnI,EAAAA,aAAA,GAAa,UAASe,GAAT,EAAc;EACzB,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB,CADyB;;EAGzB,QAAIouB,UAAU,CAAC,IAAD,EAAOzjB,IAAP,CAAV,KAA2B,KAA/B,EAAsC;EACpC,aAAO,KAAKvD,SAAL,CAAe,EAAf,CAAP;EACD;;EACD,QAAI5I,KAAK,GAAG,KAAKuK,IAAL,CAAUtB,MAAV,CAAiB,UAAAvL,CAAC;EAAA,aAAIA,CAAC,CAACoyB,GAAF,CAAM3jB,IAAN,MAAgB,IAApB;EAAA,KAAlB,CAAZ;EACA,WAAO,KAAKvD,SAAL,CAAe5I,KAAf,CAAP;EACD,GARD;EAUA;;;EACAS,EAAAA,YAAA,GAAe,UAASe,GAAT,EAAc;EAC3B,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;EACA,QAAIxB,KAAK,GAAG,KAAKuK,IAAL,CAAUtB,MAAV,CAAiB,UAAAvL,CAAC;EAAA,aAAIA,CAAC,CAACoyB,GAAF,CAAM3jB,IAAN,MAAgB,KAApB;EAAA,KAAlB,CAAZ;EACA,WAAO,KAAKvD,SAAL,CAAe5I,KAAf,CAAP;EACD,GAJD;EAMA;;;EACAS,EAAAA,WAAA,GAAc,UAASe,GAAT,EAAc;EAC1B,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB,CAD0B;;EAG1B,QAAIouB,UAAU,CAAC,IAAD,EAAOzjB,IAAP,CAAV,KAA2B,KAA/B,EAAsC;EACpC,aAAO,KAAP;EACD;;EACD,WAAO,KAAK5B,IAAL,CAAU7H,IAAV,CAAe,UAAAhF,CAAC;EAAA,aAAIA,CAAC,CAACoyB,GAAF,CAAM3jB,IAAN,MAAgB,IAApB;EAAA,KAAhB,CAAP;EACD,GAPD;EASA;;;EACA1L,EAAAA,iBAAA,GAAoB,UAASe,GAAT,EAAc;;EAEhC,QAAI,CAACA,GAAL,EAAU;EACRA,MAAAA,GAAG,GAAG,IAAN;EACD;;EACD,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;EACA,QAAIyM,OAAO,GAAG,EAAd;EACA,SAAK1D,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBuQ,MAAAA,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAepN,CAAC,CAACqyB,SAAF,CAAY5jB,IAAZ,CAAf,CAAV;EACD,KAFD;EAGA8B,IAAAA,OAAO,GAAGA,OAAO,CAAChF,MAAR,CAAe,UAAAvL,CAAC;EAAA,aAAIA,CAAJ;EAAA,KAAhB,CAAV;EACA,WAAO,KAAKkL,SAAL,CAAeqF,OAAf,CAAP;EACD,GAZD;;EAaAxN,EAAAA,iBAAA,GAAoBA,OAAO,CAACsvB,SAA5B;EAEA;;EACAtvB,EAAAA,kBAAA,GAAqB,UAASe,GAAT,EAAc;;EAEjC,QAAI,CAACA,GAAL,EAAU;EACRA,MAAAA,GAAG,GAAG,IAAN;EACD;;EACD,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;EACA,QAAIyM,OAAO,GAAG,EAAd;EACA,SAAK1D,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBuQ,MAAAA,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAepN,CAAC,CAACsyB,UAAF,CAAa7jB,IAAb,CAAf,CAAV;EACD,KAFD;EAGA8B,IAAAA,OAAO,GAAGA,OAAO,CAAChF,MAAR,CAAe,UAAAvL,CAAC;EAAA,aAAIA,CAAJ;EAAA,KAAhB,CAAV;EACA,WAAO,KAAKkL,SAAL,CAAeqF,OAAf,CAAP;EACD,GAZD;;EAaAxN,EAAAA,kBAAA,GAAqBA,OAAO,CAACuvB,UAA7B;EAEA;;EACAvvB,EAAAA,cAAA,GAAiB,UAASe,GAAT,EAAc;EAC7B,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB,CAD6B;;EAG7B,QAAI0R,OAAO,GAAG,WAAQ/G,IAAR,EAAc5B,IAA5B;EACA,QAAI0lB,OAAO,GAAG/c,OAAO,CAACpK,GAAR,CAAY,UAAApL,CAAC,EAAI;EAC7B,UAAImS,GAAG,GAAGnS,CAAC,CAAC4K,KAAF,GAAUQ,GAAV,CAAc,UAAAhL,CAAC;EAAA,eAAIA,CAAC,CAAC4D,EAAN;EAAA,OAAf,CAAV,CAD6B;;EAG7B,UAAInE,CAAC,GAAGG,CAAC,CAACkM,KAAF,CAAQuC,IAAR,EAAc,CAAd,CAAR;EACA,UAAI1K,KAAK,GAAGoO,GAAG,CAAC9O,OAAJ,CAAYxD,CAAC,CAACqE,KAAd,CAAZ,CAJ6B;;EAM7B,UAAIH,KAAK,KAAK,CAAV,IAAeA,KAAK,KAAK,CAAC,CAA9B,EAAiC;EAC/B,eAAO,IAAP;EACD;;EACD,aAAO/D,CAAC,CAACkL,SAAF,CAAYlL,CAAC,CAACkE,KAAd,EAAqBH,KAArB,CAAP;EACD,KAVa,CAAd;EAWAwuB,IAAAA,OAAO,GAAGA,OAAO,CAAChnB,MAAR,CAAe,UAAAvL,CAAC;EAAA,aAAIA,CAAC,KAAK,IAAV;EAAA,KAAhB,CAAV;EACA,WAAO,KAAKkL,SAAL,CAAeqnB,OAAf,CAAP;EACD,GAjBD;EAmBA;;;EACAxvB,EAAAA,aAAA,GAAgB,UAASe,GAAT,EAAc;EAC5B,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB,CAD4B;;EAG5B,QAAI0R,OAAO,GAAG,WAAQ/G,IAAR,EAAc5B,IAA5B;EACA,QAAI0lB,OAAO,GAAG/c,OAAO,CAACpK,GAAR,CAAY,UAAApL,CAAC,EAAI;EAC7B,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACA,UAAIuH,GAAG,GAAGvH,KAAK,CAACQ,GAAN,CAAU,UAAAhL,CAAC;EAAA,eAAIA,CAAC,CAAC4D,EAAN;EAAA,OAAX,CAAV,CAF6B;;EAI7B,UAAInE,CAAC,GAAGG,CAAC,CAACkM,KAAF,CAAQuC,IAAR,EAAc,CAAd,CAAR;EACA,UAAI1K,KAAK,GAAGoO,GAAG,CAAC9O,OAAJ,CAAYxD,CAAC,CAACqE,KAAd,CAAZ,CAL6B;;EAO7B,UAAIH,KAAK,KAAK,CAAC,CAAX,IAAgB,CAAC6G,KAAK,CAAC7G,KAAK,GAAGlE,CAAC,CAACd,MAAX,CAA1B,EAA8C;EAC5C,eAAO,IAAP;EACD,OAT4B;;;EAW7B,UAAIiF,EAAE,GAAG4G,KAAK,CAAC7G,KAAK,GAAGlE,CAAC,CAACd,MAAX,CAAL,CAAwBiF,EAAjC;EACA,UAAIwH,GAAG,GAAGxL,CAAC,CAACjB,MAAF,GAAWgF,KAAX,GAAmBlE,CAAC,CAACd,MAA/B;EACA,aAAOiB,CAAC,CAACkL,SAAF,CAAYlH,EAAZ,EAAgBwH,GAAhB,CAAP;EACD,KAda,CAAd;EAeA+mB,IAAAA,OAAO,GAAGA,OAAO,CAAChnB,MAAR,CAAe,UAAAvL,CAAC;EAAA,aAAIA,CAAC,KAAK,IAAV;EAAA,KAAhB,CAAV;EACA,WAAO,KAAKkL,SAAL,CAAeqnB,OAAf,CAAP;KApBF;;;;;;;;;;;;;;ECvIA;EACA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAShuB,GAAT,EAAcwI,GAAd,EAAmBylB,IAAnB,EAAyB5pB,MAAzB,EAAiC;EAChD,MAAI6pB,OAAO,GAAG,EAAd;;EACA,MAAI,OAAOluB,GAAP,KAAe,QAAnB,EAA6B;EAC3BkuB,IAAAA,OAAO,GAAGluB,GAAG,CAACjG,KAAJ,CAAU,GAAV,CAAV;EACD,GAJ+C;;;EAOhDyO,EAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,QAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CADoB;;EAGpB,QAAI6nB,IAAI,KAAK,IAAb,EAAmB;EACjB7nB,MAAAA,KAAK,GAAGA,KAAK,CAACW,MAAN,CAAa,UAAAnL,CAAC;EAAA,eAAIA,CAAC,CAAC4J,KAAF,CAAQxF,GAAR,EAAawI,GAAG,CAAC5H,KAAjB,CAAJ;EAAA,OAAd,CAAR;EACD;;EACDwF,IAAAA,KAAK,CAAC9J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;;EAEtB,UAAI+zB,OAAO,CAAC3zB,MAAR,GAAiB,CAArB,EAAwB;EACtB,YAAI2zB,OAAO,CAAC/zB,CAAD,CAAP,IAAc+zB,OAAO,CAAC/zB,CAAD,CAAP,KAAe,GAAjC,EAAsC;EACpCyB,UAAAA,CAAC,CAACoE,GAAF,CAAMkuB,OAAO,CAAC/zB,CAAD,CAAb,EAAkBkK,MAAlB,EAA0BmE,GAAG,CAAC5H,KAA9B;EACD;EACF,OAJD,MAIO;;EAELhF,QAAAA,CAAC,CAACoE,GAAF,CAAMA,GAAN,EAAWqE,MAAX,EAAmBmE,GAAG,CAAC5H,KAAvB;EACD;EACF,KAVD;EAWD,GAjBD;EAkBA;EACD,CA1BD;;EA2BA,WAAc,GAAGotB,QAAjB;;EC1BA;;EACA,SAAW,GAAG,YAAA,CAAS/tB,IAAT,EAAekuB,GAAf,EAAoB;EAChC,MAAI,CAACluB,IAAL,EAAW;EACT,WAAO,IAAP;EACD;;EACDmuB,EAAAA,OAAM,CAACnuB,IAAD,EAAO,IAAP,EAAa,KAAb,EAAoBkuB,GAApB,CAAN;EACA,SAAO,IAAP;EACD,CAND;EAQA;;;EACA,aAAe,GAAG,gBAAA,CAASluB,IAAT,EAAekuB,GAAf,EAAoB;EACpC,MAAI,CAACluB,IAAL,EAAW;EACT,WAAO,IAAP;EACD;;EACDmuB,EAAAA,OAAM,CAACnuB,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmBkuB,GAAnB,CAAN;EACA,SAAO,IAAP;EACD,CAND;EAQA;;;EACA,WAAa,GAAG,cAAA,CAASluB,IAAT,EAAekuB,GAAf,EAAoB;EAAA;;EAClC,OAAK9lB,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,IAAAA,CAAC,CAAC4K,KAAF,GAAU9J,OAAV,CAAkB,UAAAV,CAAC;EAAA,aAAIA,CAAC,CAACuJ,KAAF,CAAQlF,IAAR,EAAckuB,GAAd,EAAmB,KAAI,CAACvtB,KAAxB,CAAJ;EAAA,KAAnB;EACD,GAFD;EAGA,SAAO,IAAP;EACD,CALD;EAOA;;;EACA,WAAa,GAAG,cAAA,CAASZ,GAAT,EAAc;EAC5B,MAAI,CAACA,GAAL,EAAU;EACR,WAAO,IAAP;EACD;;EACD,MAAIY,KAAK,GAAG,KAAKA,KAAjB;EACA,MAAImL,OAAO,GAAG,KAAK1D,IAAL,CAAUnK,MAAV,CAAiB,UAACsG,GAAD,EAAMhJ,CAAN,EAAY;EACzC,WAAOgJ,GAAG,CAACoE,MAAJ,CAAWpN,CAAC,CAACgK,KAAF,CAAQxF,GAAR,EAAaY,KAAb,CAAX,CAAP;EACD,GAFa,EAEX,EAFW,CAAd;EAGA,SAAO,KAAK8F,SAAL,CAAeqF,OAAf,CAAP;GARF;;;;;;;;;EC7BA;EACA,OAAW,GAAG,YAAA,CAAS+f,EAAT,EAAa;EAAA;;EACzB,MAAI,CAACA,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,MAAIzjB,IAAI,GAAG,KAAKA,IAAL,CAAUzB,GAAV,CAAc,UAACpL,CAAD,EAAIrB,CAAJ,EAAU;EACjC,QAAIqO,GAAG,GAAG,KAAI,CAAC9B,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAV;;EACAgN,IAAAA,GAAG,CAAC+jB,IAAJ,GAAW,IAAX,CAFiC;;EAGjC,QAAIxiB,GAAG,GAAG+hB,EAAE,CAACtjB,GAAD,EAAMrO,CAAN,CAAZ,CAHiC;;EAKjC,QAAI4P,GAAG,IAAIA,GAAG,CAAC1B,IAAX,IAAmB0B,GAAG,CAAC1B,IAAJ,CAAS,CAAT,CAAvB,EAAoC;EAClC,aAAO0B,GAAG,CAAC1B,IAAJ,CAAS,CAAT,CAAP;EACD;;EACD,WAAO0B,GAAP;EACD,GATU,CAAX,CAJyB;;EAezB1B,EAAAA,IAAI,GAAGA,IAAI,CAACtB,MAAL,CAAY,UAAA/K,CAAC;EAAA,WAAIA,CAAJ;EAAA,GAAb,CAAP,CAfyB;;EAiBzB,MAAIqM,IAAI,CAAC9N,MAAL,KAAgB,CAApB,EAAuB;EACrB,WAAO,KAAKmM,SAAL,CAAe2B,IAAf,CAAP;EACD,GAnBwB;;;EAqBzB,MAAI,QAAOA,IAAI,CAAC,CAAD,CAAX,MAAmB,QAAnB,IAA+BA,IAAI,CAAC,CAAD,CAAJ,CAAQhF,GAAR,KAAgB,QAAnD,EAA6D;EAC3D,WAAOgF,IAAP;EACD;;EACD,SAAO,KAAK3B,SAAL,CAAe2B,IAAf,CAAP;EACD,CAzBD;EA2BA;;;EACA,WAAe,GAAG,gBAAA,CAASyjB,EAAT,EAAauC,YAAb,EAA2B;EAAA;;EAC3C,MAAI,CAACvC,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,OAAKzjB,IAAL,CAAU/L,OAAV,CAAkB,UAACd,CAAD,EAAIrB,CAAJ,EAAU;EAC1B,QAAIm0B,GAAG,GAAG,MAAI,CAAC5nB,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAV,CAD0B;;;EAG1B,QAAI6yB,YAAY,KAAK,IAArB,EAA2B;EACzBC,MAAAA,GAAG,CAAC/B,IAAJ,GAAW,IAAX,CADyB;EAE1B;;EACDT,IAAAA,EAAE,CAACwC,GAAD,EAAMn0B,CAAN,CAAF;EACD,GAPD;EAQA,SAAO,IAAP;EACD,CAbD;EAeA;;;EACA,UAAc,GAAG,eAAA,CAAS2xB,EAAT,EAAa;EAAA;;EAC5B,MAAI,CAACA,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,MAAIzjB,IAAI,GAAG,KAAKA,IAAL,CAAUtB,MAAV,CAAiB,UAACvL,CAAD,EAAIrB,CAAJ,EAAU;EACpC,QAAIqO,GAAG,GAAG,MAAI,CAAC9B,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAV;;EACAgN,IAAAA,GAAG,CAAC+jB,IAAJ,GAAW,IAAX,CAFoC;;EAGpC,WAAOT,EAAE,CAACtjB,GAAD,EAAMrO,CAAN,CAAT;EACD,GAJU,CAAX;EAKA,SAAO,KAAKuM,SAAL,CAAe2B,IAAf,CAAP;EACD,CAVD;EAYA;;;EACA,QAAY,GAAG,aAAA,CAASyjB,EAAT,EAAa;EAAA;;EAC1B,MAAI,CAACA,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,MAAIziB,MAAM,GAAG,KAAKhB,IAAL,CAAUiB,IAAV,CAAe,UAAC9N,CAAD,EAAIrB,CAAJ,EAAU;EACpC,QAAIqO,GAAG,GAAG,MAAI,CAAC9B,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAV;;EACAgN,IAAAA,GAAG,CAAC+jB,IAAJ,GAAW,IAAX,CAFoC;;EAGpC,WAAOT,EAAE,CAACtjB,GAAD,EAAMrO,CAAN,CAAT;EACD,GAJY,CAAb;;EAKA,MAAIkP,MAAJ,EAAY;EACV,WAAO,KAAK3C,SAAL,CAAe,CAAC2C,MAAD,CAAf,CAAP;EACD;;EACD,SAAOzJ,SAAP;EACD,CAbD;EAeA;;;EACA,QAAY,GAAG,aAAA,CAASksB,EAAT,EAAa;EAAA;;EAC1B,MAAI,CAACA,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,SAAO,KAAKzjB,IAAL,CAAU7H,IAAV,CAAe,UAAChF,CAAD,EAAIrB,CAAJ,EAAU;EAC9B,QAAIqO,GAAG,GAAG,MAAI,CAAC9B,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAV;;EACAgN,IAAAA,GAAG,CAAC+jB,IAAJ,GAAW,IAAX,CAF8B;;EAG9B,WAAOT,EAAE,CAACtjB,GAAD,EAAMrO,CAAN,CAAT;EACD,GAJM,CAAP;EAKD,CATD;EAWA;;;EACA,UAAc,GAAG,eAAA,CAASmB,CAAT,EAAY;EAC3B,MAAI,CAAC,KAAKwC,KAAV,EAAiB;EACf,WAAO,IAAP;EACD;;EACD,MAAIpC,CAAC,GAAGtB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgB,KAAK+N,IAAL,CAAU9N,MAArC,CAAR;;EACA,MAAIe,CAAC,KAAKsE,SAAV,EAAqB;EACnB,QAAIyI,IAAI,GAAG,CAAC,KAAKA,IAAL,CAAU3M,CAAV,CAAD,CAAX;EACA,WAAO,KAAKgL,SAAL,CAAe2B,IAAf,CAAP;EACD,GAR0B;;;EAU3B,MAAI3M,CAAC,GAAGJ,CAAJ,GAAQ,KAAKf,MAAjB,EAAyB;EACvBmB,IAAAA,CAAC,GAAG,KAAKnB,MAAL,GAAce,CAAlB;EACAI,IAAAA,CAAC,GAAGA,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAhB;EACD;;EACD,SAAO,KAAKoO,KAAL,CAAWpO,CAAX,EAAcA,CAAC,GAAGJ,CAAlB,CAAP;EACD,CAfD;EAiBA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;;;;;;;;EC/GA;EACA,IAAMizB,QAAQ,GAAG,SAAXA,QAAW,CAASt0B,GAAT,EAAc;EAC7B,SAAOA,GAAG,CAACF,KAAJ,CAAU,OAAV,CAAP;EACD,CAFD;EAIA;;;EACA,IAAMy0B,SAAS,GAAG,SAAZA,SAAY,CAASC,QAAT,EAAgC;EAAA,MAAb1Y,MAAa,uEAAJ,EAAI;EAChD,MAAIhW,IAAI,GAAG,EAAX,CADgD;;EAGhD0uB,EAAAA,QAAQ,CAACnyB,OAAT,CAAiB,UAACrC,GAAD,EAAME,CAAN,EAAY;EAC3B,QAAIu0B,GAAG,GAAG,IAAV;;EACA,QAAI3Y,MAAM,CAAC5b,CAAD,CAAN,KAAcyF,SAAlB,EAA6B;EAC3B8uB,MAAAA,GAAG,GAAG3Y,MAAM,CAAC5b,CAAD,CAAZ;EACD,KAJ0B;;;EAM3BF,IAAAA,GAAG,GAAG,CAACA,GAAG,IAAI,EAAR,EAAYgD,WAAZ,EAAN;EACAhD,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,WAAZ,EAAyB,EAAzB,CAAN;EACA,QAAIoH,GAAG,GAAG+pB,QAAQ,CAACt0B,GAAD,CAAR,CAAc2M,GAAd,CAAkB,UAAAjL,CAAC;EAAA,aAAIA,CAAC,CAACuB,IAAF,EAAJ;EAAA,KAAnB,CAAV;EACA6C,IAAAA,IAAI,CAACyE,GAAG,CAAC,CAAD,CAAJ,CAAJ,GAAezE,IAAI,CAACyE,GAAG,CAAC,CAAD,CAAJ,CAAJ,IAAgB,EAA/B;;EACA,QAAIA,GAAG,CAACjK,MAAJ,KAAe,CAAnB,EAAsB;EACpBwF,MAAAA,IAAI,CAACyE,GAAG,CAAC,CAAD,CAAJ,CAAJ,CAAaqK,KAAb,GAAqB6f,GAArB;EACD,KAFD,MAEO;EACL3uB,MAAAA,IAAI,CAACyE,GAAG,CAAC,CAAD,CAAJ,CAAJ,CAAamqB,IAAb,GAAoB5uB,IAAI,CAACyE,GAAG,CAAC,CAAD,CAAJ,CAAJ,CAAamqB,IAAb,IAAqB,EAAzC;EACA5uB,MAAAA,IAAI,CAACyE,GAAG,CAAC,CAAD,CAAJ,CAAJ,CAAamqB,IAAb,CAAkBnoB,IAAlB,CAAuB;EACrBooB,QAAAA,IAAI,EAAEpqB,GAAG,CAACsF,KAAJ,CAAU,CAAV,CADe;EAErB+E,QAAAA,KAAK,EAAE6f;EAFc,OAAvB;EAID;EACF,GAnBD,EAHgD;;;EAyBhD,SAAO3uB,IAAP;EACD,CA1BD;;EA4BA,IAAM8uB,UAAU,GAAG,SAAbA,UAAa,CAASJ,QAAT,EAAmB1Y,MAAnB,EAA2BvN,GAA3B,EAAgC;EACjD,MAAIzI,IAAI,GAAGyuB,SAAS,CAACC,QAAD,EAAW1Y,MAAX,CAApB;EACA,MAAIjY,KAAK,GAAG,EAAZ,CAFiD;;EAAA,6BAIxC3D,CAJwC;EAK/C,QAAMqB,CAAC,GAAGgN,GAAG,CAACH,IAAJ,CAASlO,CAAT,CAAV;EACA,QAAIiM,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EAEA,QAAIoH,KAAK,GAAGpH,KAAK,CAACQ,GAAN,CAAU,UAAAhL,CAAC;EAAA,aAAIA,CAAC,CAACyB,OAAN;EAAA,KAAX,CAAZ,CAR+C;;EAAA,iCAUtCtB,CAVsC;EAW7C,UAAIgE,IAAI,CAACyN,KAAK,CAACzR,CAAD,CAAN,CAAJ,KAAmB6D,SAAvB,EAAkC;;EAEhC,YAAIG,IAAI,CAACyN,KAAK,CAACzR,CAAD,CAAN,CAAJ,CAAe4yB,IAAf,KAAwB/uB,SAA5B,EAAuC;EACrCG,UAAAA,IAAI,CAACyN,KAAK,CAACzR,CAAD,CAAN,CAAJ,CAAe4yB,IAAf,CAAoBryB,OAApB,CAA4B,UAAAqyB,IAAI,EAAI;;EAElC,gBAAInhB,KAAK,CAACzR,CAAC,GAAG4yB,IAAI,CAACC,IAAL,CAAUr0B,MAAf,CAAL,KAAgCqF,SAApC,EAA+C;EAC7C;EACD,aAJiC;;;EAMlC,gBAAIkvB,SAAS,GAAGH,IAAI,CAACC,IAAL,CAAUruB,KAAV,CAAgB,UAACpC,IAAD,EAAOzC,CAAP,EAAa;EAC3C,qBAAOyC,IAAI,KAAKqP,KAAK,CAACzR,CAAC,GAAGL,CAAJ,GAAQ,CAAT,CAArB;EACD,aAFe,CAAhB;;EAGA,gBAAIozB,SAAS,KAAK,IAAlB,EAAwB;EACtBhxB,cAAAA,KAAK,CAAC0I,IAAN,CAAW;EAAEhH,gBAAAA,EAAE,EAAEhE,CAAC,CAAC4K,KAAF,GAAUrK,CAAV,EAAayD,EAAnB;EAAuBqP,gBAAAA,KAAK,EAAE8f,IAAI,CAAC9f,KAAnC;EAA0CtU,gBAAAA,MAAM,EAAEo0B,IAAI,CAACC,IAAL,CAAUr0B,MAAV,GAAmB;EAArE,eAAX;EACD;EACF,WAZD;EAaD,SAhB+B;;;EAkBhC,YAAIwF,IAAI,CAACyN,KAAK,CAACzR,CAAD,CAAN,CAAJ,CAAe8S,KAAf,KAAyBjP,SAA7B,EAAwC;EACtC9B,UAAAA,KAAK,CAAC0I,IAAN,CAAW;EAAEhH,YAAAA,EAAE,EAAEhE,CAAC,CAAC4K,KAAF,GAAUrK,CAAV,EAAayD,EAAnB;EAAuBqP,YAAAA,KAAK,EAAE9O,IAAI,CAACyN,KAAK,CAACzR,CAAD,CAAN,CAAJ,CAAe8S,KAA7C;EAAoDtU,YAAAA,MAAM,EAAE;EAA5D,WAAX;EACD;EACF;EAhC4C;;EAU/C,SAAK,IAAIwB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyR,KAAK,CAACjT,MAA1B,EAAkCwB,CAAC,EAAnC,EAAuC;EAAA,aAA9BA,CAA8B;EAuBtC;EAjC8C;;EAIjD,OAAK,IAAI5B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqO,GAAG,CAACH,IAAJ,CAAS9N,MAA7B,EAAqCJ,CAAC,EAAtC,EAA0C;EAAA,UAAjCA,CAAiC;EA8BzC;;EACD,SAAO2D,KAAP;EACD,CApCD;;EAqCA,WAAc,GAAG+wB,UAAjB;;;ECrEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,MAAME,QAAQ,GAAG,SAAXA,QAAW,CAASlpB,GAAT,EAAc;EAC7B,WAAOA,GAAG,IAAIzJ,MAAM,CAACqI,SAAP,CAAiBL,QAAjB,CAA0BM,IAA1B,CAA+BmB,GAA/B,MAAwC,iBAAtD;EACD,GAFD;EAIA;;;EACAtH,EAAAA,cAAA,GAAiB,UAASiG,GAAT,EAAc;EAAA;;EAC7B,QAAIuR,MAAM,GAAG,EAAb,CAD6B;;EAG7B,QAAIiZ,KAAK,GAAGD,QAAQ,CAACvqB,GAAD,CAApB;;EACA,QAAIwqB,KAAK,KAAK,IAAd,EAAoB;EAClBxqB,MAAAA,GAAG,GAAGpI,MAAM,CAACC,IAAP,CAAYmI,GAAZ,EAAiBoC,GAAjB,CAAqB,UAAAzL,CAAC,EAAI;EAC9B4a,QAAAA,MAAM,CAACvP,IAAP,CAAYhC,GAAG,CAACrJ,CAAD,CAAf;EACA,eAAOA,CAAP;EACD,OAHK,CAAN;EAID,KAT4B;;;EAW7B,QAAI,OAAOqJ,GAAP,KAAe,QAAnB,EAA6B;EAC3BA,MAAAA,GAAG,GAAG,CAACA,GAAD,CAAN;EACD,KAb4B;;;EAgB7B,QAAI,KAAKgpB,MAAL,CAAYhkB,GAAZ,KAAoB,IAAxB,EAA8B;EAC5B,WAAKrD,KAAL;EACD;;EAED,QAAIrI,KAAK,GAAGmxB,OAAM,CAACzqB,GAAD,EAAMuR,MAAN,EAAc,IAAd,CAAlB;EACA,QAAIva,CAAC,GAAG,KAAK6M,IAAL,CAAU,CAAV,CAAR,CArB6B;;EAuB7B,QAAI2mB,KAAK,KAAK,IAAd,EAAoB;EAClB,UAAIE,KAAK,GAAG,EAAZ;EACApxB,MAAAA,KAAK,CAACxB,OAAN,CAAc,UAAAf,CAAC,EAAI;EACjB2zB,QAAAA,KAAK,CAAC3zB,CAAC,CAACsT,KAAH,CAAL,GAAiBqgB,KAAK,CAAC3zB,CAAC,CAACsT,KAAH,CAAL,IAAkB,EAAnC;EACAqgB,QAAAA,KAAK,CAAC3zB,CAAC,CAACsT,KAAH,CAAL,CAAerI,IAAf,CAAoBhL,CAAC,CAACkL,SAAF,CAAYnL,CAAC,CAACiE,EAAd,EAAkBjE,CAAC,CAAChB,MAApB,CAApB;EACD,OAHD;EAIA6B,MAAAA,MAAM,CAACC,IAAP,CAAY6yB,KAAZ,EAAmB5yB,OAAnB,CAA2B,UAAAnB,CAAC,EAAI;EAC9B+zB,QAAAA,KAAK,CAAC/zB,CAAD,CAAL,GAAW,KAAI,CAACuL,SAAL,CAAewoB,KAAK,CAAC/zB,CAAD,CAApB,CAAX;EACD,OAFD;EAGA,aAAO+zB,KAAP;EACD,KAjC4B;;;EAmC7BpxB,IAAAA,KAAK,GAAGA,KAAK,CAAC8I,GAAN,CAAU,UAAArL,CAAC;EAAA,aAAIC,CAAC,CAACkL,SAAF,CAAYnL,CAAC,CAACiE,EAAd,EAAkBjE,CAAC,CAAChB,MAApB,CAAJ;EAAA,KAAX,CAAR;EACA,WAAO,KAAKmM,SAAL,CAAe5I,KAAf,CAAP;EACD,GArCD;;EAsCAS,EAAAA,cAAA,GAAiBA,OAAO,CAAC0wB,MAAzB;;;;;ECrDA;EACA,WAAa,GAAG,cAAA,CAASptB,OAAT,EAAkB;EAAA;;EAChCA,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;EACA,MAAI2L,KAAK,GAAG,EAAZ;EACA,MAAIvN,IAAI,GAAG,EAAX;EACA,OAAKutB,MAAL,CAAYhgB,KAAZ,GAAoBA,KAApB;EACA,OAAKggB,MAAL,CAAYvtB,IAAZ,GAAmBA,IAAnB;EACA,OAAKutB,MAAL,CAAYhkB,GAAZ,GAAkB,IAAlB;EACA,OAAKnB,IAAL,CAAU/L,OAAV,CAAkB,UAACd,CAAD,EAAIrB,CAAJ,EAAU;EAC1BqB,IAAAA,CAAC,CAAC2K,KAAF,GAAU3K,CAAC,CAAC2K,KAAF,IAAW,EAArB,CAD0B;;EAG1B,QAAIC,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CAH0B;;EAK1BA,IAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,UAAI4R,KAAK,CAAC5R,CAAC,CAACyB,OAAH,CAAL,IAAoB,CAACmQ,KAAK,CAAC3N,cAAN,CAAqBjE,CAAC,CAACyB,OAAvB,CAAzB,EAA0D;EACxD,eADwD;EAEzD;;EACDmQ,MAAAA,KAAK,CAAC5R,CAAC,CAACyB,OAAH,CAAL,GAAmBmQ,KAAK,CAAC5R,CAAC,CAACyB,OAAH,CAAL,IAAoB,EAAvC;EACAmQ,MAAAA,KAAK,CAAC5R,CAAC,CAACyB,OAAH,CAAL,CAAiBmJ,IAAjB,CAAsBrM,CAAtB;EAEAiC,MAAAA,MAAM,CAACC,IAAP,CAAYT,CAAC,CAACqE,IAAd,EAAoB3D,OAApB,CAA4B,UAAA0D,GAAG,EAAI;EACjCC,QAAAA,IAAI,CAACD,GAAD,CAAJ,GAAYC,IAAI,CAACD,GAAD,CAAJ,IAAa,EAAzB;EACAC,QAAAA,IAAI,CAACD,GAAD,CAAJ,CAAUwG,IAAV,CAAerM,CAAf;EACD,OAHD,EAPiB;;EAajB,UAAI0H,OAAO,CAAC9B,IAAZ,EAAkB;EAChBnE,QAAAA,CAAC,CAACuzB,OAAF,CAAU,KAAI,CAACvuB,KAAf;EACA4M,QAAAA,KAAK,CAAC5R,CAAC,CAACmE,IAAH,CAAL,GAAgB,IAAhB;EACD;EACF,KAjBD;EAkBD,GAvBD;EAwBA,SAAO,IAAP;EACD,CAhCD;EAkCA;;;EACA,WAAe,GAAG,gBAAA,GAAW;EAC3B,OAAKytB,MAAL,GAAc,EAAd;EACA,OAAKnlB,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,IAAAA,CAAC,CAAC2K,KAAF,GAAU,EAAV;EACD,GAFD,EAF2B;;EAM3B,OAAK0C,OAAL,GAAevM,OAAf,CAAuB,UAAAkM,GAAG,EAAI;EAC5BA,IAAAA,GAAG,CAACglB,MAAJ,GAAa,EAAb;EACAhlB,IAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpBA,MAAAA,CAAC,CAAC2K,KAAF,GAAU,EAAV;EACD,KAFD;EAGD,GALD;EAMA,SAAO,IAAP;GAZF;;;;;;;EClCA,IAAM9H,WAAS,GAAG,SAAZA,SAAY,CAAApE,GAAG,EAAI;EACvB,SAAOA,GAAG,CAAC0K,MAAJ,CAAW,CAAX,EAAcnG,WAAd,KAA8BvE,GAAG,CAAC2K,MAAJ,CAAW,CAAX,CAArC;EACD,CAFD;EAIA;;;EACA,eAAmB,GAAG,oBAAA,CAASxH,OAAT,EAAgC;EAAA;;EAAA,MAAdyE,OAAc,uEAAJ,EAAI;;EACpD,MAAI,CAACzE,OAAL,EAAc;EACZ,WAAO,gBAAP;EACD,GAHmD;;;EAKpD,MAAIyE,OAAO,KAAK,IAAhB,EAAsB;EACpBA,IAAAA,OAAO,GAAG;EAAEutB,MAAAA,QAAQ,EAAE;EAAZ,KAAV;EACD;;EACD,MAAIvtB,OAAO,KAAK,KAAhB,EAAuB;EACrBA,IAAAA,OAAO,GAAG;EAAEutB,MAAAA,QAAQ,EAAE;EAAZ,KAAV;EACD;;EACDvtB,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB,CAXoD;;EAcpD,OAAKwtB,OAAL,GAdoD;;EAgBpD,OAAKhnB,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,QAAIqS,KAAK,GAAGzQ,OAAZ,CADqB;;EAGrB,QAAI,OAAOA,OAAP,KAAmB,UAAvB,EAAmC;EACjCyQ,MAAAA,KAAK,GAAGzQ,OAAO,CAAC5B,CAAD,CAAf;EACD;;EACD,QAAI8zB,UAAJ,CANqB;;EAQrB,QAAIzhB,KAAK,IAAI,QAAOA,KAAP,MAAiB,QAA1B,IAAsCA,KAAK,CAACxK,GAAN,KAAc,KAAxD,EAA+D;EAC7DisB,MAAAA,UAAU,GAAGzhB,KAAK,CAACxF,IAAnB;;EACA,MAAA,KAAI,CAAChC,IAAL,GAAYkpB,KAAZ,CAAkB1hB,KAAK,CAACxH,IAAN,EAAlB;EACD,KAHD,MAGO,IAAI,OAAOwH,KAAP,KAAiB,QAArB,EAA+B;;EAEpC,UAAIhM,OAAO,CAAC2tB,QAAR,KAAqB,KAArB,IAA8Bh0B,CAAC,CAAC4K,KAAF,CAAQ,CAAR,EAAW3H,WAAX,EAAlC,EAA4D;EAC1DoP,QAAAA,KAAK,GAAGxP,WAAS,CAACwP,KAAD,CAAjB;EACD;;EACDyhB,MAAAA,UAAU,GAAGf,YAAQ,CAAC1gB,KAAD,EAAQ,KAAI,CAACjN,KAAb,EAAoB,KAAI,CAACyF,IAAL,EAApB,CAArB,CALoC;;EAOpC,UAAIopB,MAAM,GAAG,KAAI,CAAC/oB,SAAL,CAAe4oB,UAAf,CAAb;;EACAG,MAAAA,MAAM,CAACC,MAAP;EACD,KATM,MASA;EACL,aADK;EAEN,KAtBoB;;;EAyBrB,QAAI7tB,OAAO,CAACutB,QAAR,KAAqB,IAAzB,EAA+B;EAC7B,UAAIO,OAAO,GAAGn0B,CAAC,CAACwO,IAAF,CAAO;EAAE5D,QAAAA,KAAK,EAAE;EAAEnG,UAAAA,IAAI,EAAE;EAAR;EAAT,OAAP,EAAkCmG,KAAhD;EACAkpB,MAAAA,UAAU,CAAC,CAAD,CAAV,CAAclpB,KAAd,GAAsB9J,OAAtB,CAA8B,UAACV,CAAD,EAAIzB,CAAJ,EAAU;EACtC,YAAIw1B,OAAO,CAACx1B,CAAD,CAAX,EAAgB;EACdyB,UAAAA,CAAC,CAACg0B,OAAF,CAAUD,OAAO,CAACx1B,CAAD,CAAP,CAAW8F,IAArB,EAA2B,SAA3B,EAAsC,KAAI,CAACW,KAA3C;EACD;EACF,OAJD;EAKD;;EACDpF,IAAAA,CAAC,CAAC4B,OAAF,CAAUkyB,UAAU,CAAC,CAAD,CAApB,EAAyB,KAAzB,EAjCqB;EAkCtB,GAlCD;EAmCA,SAAO,IAAP;EACD,CApDD;EAsDA;;;EACA,aAAe,GAAG,iBAAS5nB,KAAT,EAAgBtK,QAAhB,EAAyByE,OAAzB,EAAkC;;EAElD,MAAIzE,QAAO,KAAKwC,SAAhB,EAA2B;EACzB,WAAO,KAAKiwB,WAAL,CAAiBnoB,KAAjB,EAAwB7F,OAAxB,CAAP;EACD;;EACD,OAAK6F,KAAL,CAAWA,KAAX,EAAkBmoB,WAAlB,CAA8BzyB,QAA9B,EAAuCyE,OAAvC;EACA,SAAO,IAAP;GANF;;;;;;;;EC5DA;EACAtD,EAAAA,cAAA,GAAiB,UAAStE,GAAT,EAAc;EAAA;;EAC7B,QAAI,CAACA,GAAL,EAAU;EACR,aAAO,IAAP;EACD,KAH4B;;;EAK7B,SAAKo1B,OAAL,GAL6B;;EAO7B,SAAKhnB,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;;EAErB,UAAI6N,MAAM,GAAGklB,YAAQ,CAACt0B,GAAD,EAAM,KAAI,CAAC2G,KAAX,EAAkB,KAAI,CAACyF,IAAL,EAAlB,CAAR,CAAuC,CAAvC,CAAb,CAFqB;;;EAIrB,UAAIopB,MAAM,GAAG,KAAI,CAAC/oB,SAAL,CAAe,CAAC2C,MAAD,CAAf,CAAb;;EACAomB,MAAAA,MAAM,CAACC,MAAP,GALqB;;EAOrBl0B,MAAAA,CAAC,CAACiO,MAAF,CAASJ,MAAT,EAAiB,KAAjB;EACD,KARD;EASA,WAAO,IAAP;EACD,GAjBD;;EAkBA9K,EAAAA,mBAAA,GAAsBA,OAAO,CAACkL,MAA9B;EACAlL,EAAAA,gBAAA,GAAmBA,OAAO,CAACkL,MAA3B;EAEA;;EACAlL,EAAAA,eAAA,GAAkB,UAAStE,GAAT,EAAc;EAAA;;EAC9B,QAAI,CAACA,GAAL,EAAU;EACR,aAAO,IAAP;EACD,KAH6B;;;EAK9B,SAAKo1B,OAAL,GAL8B;;EAO9B,SAAKhnB,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;;EAErB,UAAI6N,MAAM,GAAGklB,YAAQ,CAACt0B,GAAD,EAAM,MAAI,CAAC2G,KAAX,EAAkB,MAAI,CAACyF,IAAL,EAAlB,CAAR,CAAuC,CAAvC,CAAb,CAFqB;;;EAIrB,UAAIopB,MAAM,GAAG,MAAI,CAAC/oB,SAAL,CAAe,CAAC2C,MAAD,CAAf,CAAb;;EACAomB,MAAAA,MAAM,CAACC,MAAP,GALqB;;EAOrBl0B,MAAAA,CAAC,CAACkO,OAAF,CAAUL,MAAV,EAAkB,MAAlB;EACD,KARD;EASA,WAAO,IAAP;EACD,GAjBD;;EAkBA9K,EAAAA,oBAAA,GAAuBA,OAAO,CAACmL,OAA/B;EAEA;;EACAnL,EAAAA,cAAA,GAAiB,YAAW;;EAE1B,SAAK8wB,OAAL;EACA,QAAIhnB,IAAI,GAAG,KAAKA,IAAL,CAAUyB,KAAV,CAAgB,CAAhB,CAAX,CAH0B;;EAK1B,SAAK,IAAI3P,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG21B,SAAS,CAACv1B,MAA9B,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,UAAI41B,GAAG,GAAGD,SAAS,CAAC31B,CAAD,CAAnB,CADyC;;EAGzC,UAAI,OAAO41B,GAAP,KAAe,QAAnB,EAA6B;EAC3B,YAAIvrB,GAAG,GAAG+pB,YAAQ,CAACwB,GAAD,EAAM,KAAKnvB,KAAX,CAAlB,CAD2B;;EAG3ByH,QAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYpE,GAAZ,CAAP;EACD,OAJD,MAIO,IAAIurB,GAAG,CAAC1sB,GAAJ,KAAY,KAAhB,EAAuB;EAC5BgF,QAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYmnB,GAAG,CAAC1nB,IAAhB,CAAP;EACD,OAFM,MAEA,IAAI0nB,GAAG,CAAC1sB,GAAJ,KAAY,QAAhB,EAA0B;EAC/BgF,QAAAA,IAAI,CAAC7B,IAAL,CAAUupB,GAAV;EACD;EACF;;EACD,WAAO,KAAKrpB,SAAL,CAAe2B,IAAf,CAAP;EACD,GAnBD;EAqBA;;;EACA9J,EAAAA,iBAAA,GAAiB,UAASmJ,KAAT,EAAgB;EAAA;;;EAE/B,SAAK2nB,OAAL;EACA,QAAIW,QAAQ,GAAG,IAAf;;EACA,QAAItoB,KAAJ,EAAW;EACTsoB,MAAAA,QAAQ,GAAG,KAAKtoB,KAAL,CAAWA,KAAX,CAAX;EACD;;EACDsoB,IAAAA,QAAQ,CAAC3nB,IAAT,CAAc/L,OAAd,CAAsB,UAAA+M,MAAM;EAAA,aAAIA,MAAM,UAAN,CAAc,MAAd,CAAJ;EAAA,KAA5B;EACA,WAAO,IAAP;EACD,GATD;;;EAWA9K,EAAAA,cAAA,GAAiBA,OAAO,UAAxB;;;;;;;;;;EC/EA,IAAM0xB,UAAU,GAAG;EACjBjzB,EAAAA,KAAK,EAAE,IADU;EAEjBK,EAAAA,OAAO,EAAE,IAFQ;EAGjB0C,EAAAA,IAAI,EAAE;EAHW,CAAnB;EAMA;;EACA,UAAY,GAAG,aAAA,CAAS8B,OAAT,EAAkB;EAAA;;EAC/BA,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB,CAD+B;;EAG/B,MAAIquB,QAAQ,GAAG,KAAf;;EACA,MAAI,KAAKrnB,OAAL,GAAetO,MAAf,KAA0B,CAA9B,EAAiC;EAC/B21B,IAAAA,QAAQ,GAAG,IAAX;EACD,GAN8B;;;EAQ/B,MAAIruB,OAAO,KAAK,MAAZ,IAAuB,QAAOA,OAAP,MAAmB,QAAnB,IAA+BA,OAAO,CAAC9B,IAAlE,EAAyE;EACvE,SAAKsI,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,MAAAA,CAAC,CAAC4K,KAAF,GAAU9J,OAAV,CAAkB,UAAAV,CAAC,EAAI;EACrB,YAAIA,CAAC,CAACmE,IAAF,KAAW,IAAf,EAAqB;EACnBnE,UAAAA,CAAC,CAACuzB,OAAF,CAAU,KAAI,CAACvuB,KAAf;EACD;EACF,OAJD;EAKD,KAND;EAOD;;EAED,MAAIyG,GAAG,GAAG,KAAKgB,IAAL,CAAUnK,MAAV,CAAiB,UAACjE,GAAD,EAAMuB,CAAN,EAASrB,CAAT,EAAe;EACxC,QAAMg2B,OAAO,GAAG,CAACD,QAAD,IAAa/1B,CAAC,KAAK,CAAnC;EACA,QAAMi2B,QAAQ,GAAG,CAACF,QAAD,IAAa/1B,CAAC,KAAK,KAAI,CAACkO,IAAL,CAAU9N,MAAV,GAAmB,CAAvD;EACA,WAAON,GAAG,GAAGuB,CAAC,CAACtB,IAAF,CAAO2H,OAAP,EAAgBsuB,OAAhB,EAAyBC,QAAzB,CAAb;EACD,GAJS,EAIP,EAJO,CAAV,CAlB+B;;EAyB/B,MAAIH,UAAU,CAACpuB,OAAD,CAAV,KAAwB,IAAxB,IAAgCA,OAAO,CAACxE,OAAR,KAAoB,IAApD,IAA4DwE,OAAO,CAAC7E,KAAR,KAAkB,IAA9E,IAAsF6E,OAAO,CAAC9B,IAAR,KAAiB,IAA3G,EAAiH;EAC/GsH,IAAAA,GAAG,GAAGA,GAAG,CAACnK,IAAJ,EAAN;EACD;;EACD,SAAOmK,GAAP;GA5BF;;;;;;ECPA;EACA,IAAMgpB,WAAW,GAAG,SAAdA,WAAc,CAAS7nB,GAAT,EAAc;EAChC,MAAI8nB,OAAO,GAAG,CAAd;EACA,MAAI/wB,KAAK,GAAG,CAAZ;EACA,MAAIgxB,OAAO,GAAG,EAAd;EACA/nB,EAAAA,GAAG,CAACimB,QAAJ,GAAenyB,OAAf,CAAuB,UAAA2G,IAAI,EAAI;EAC7BstB,IAAAA,OAAO,CAACttB,IAAI,CAACzD,EAAN,CAAP,GAAmB;EACjBD,MAAAA,KAAK,EAAEA,KADU;EAEjBG,MAAAA,KAAK,EAAE4wB,OAAO,GAAGrtB,IAAI,CAACrF,GAAL,CAASrD,MAFT;EAGjBA,MAAAA,MAAM,EAAE0I,IAAI,CAAC/I,IAAL,CAAUK;EAHD,KAAnB;EAKA+1B,IAAAA,OAAO,IAAIrtB,IAAI,CAACrF,GAAL,CAASrD,MAAT,GAAkB0I,IAAI,CAAC/I,IAAL,CAAUK,MAA5B,GAAqC0I,IAAI,CAACpF,IAAL,CAAUtD,MAA1D;EACAgF,IAAAA,KAAK,IAAI,CAAT;EACD,GARD;EASA,SAAOgxB,OAAP;EACD,CAdD;;EAgBA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAShoB,GAAT,EAAc/H,MAAd,EAAsBoB,OAAtB,EAA+B;;EAEhD,MAAI0uB,OAAO,GAAGF,WAAW,CAAC7nB,GAAG,CAAC2B,GAAJ,EAAD,CAAzB,CAFgD;;EAIhD,MAAItI,OAAO,CAACuE,KAAR,CAAc7G,KAAd,IAAuBsC,OAAO,CAACtC,KAAnC,EAA0C;EACxCkB,IAAAA,MAAM,CAACnE,OAAP,CAAe,UAAAf,CAAC,EAAI;EAClBA,MAAAA,CAAC,CAAC6K,KAAF,CAAQ9J,OAAR,CAAgB,UAAAV,CAAC,EAAI;EACnBA,QAAAA,CAAC,CAAC2D,KAAF,GAAUgxB,OAAO,CAAC30B,CAAC,CAAC4D,EAAH,CAAP,CAAcD,KAAxB;EACD,OAFD;EAGAhE,MAAAA,CAAC,CAACgE,KAAF,GAAUhE,CAAC,CAAC6K,KAAF,CAAQ,CAAR,EAAW7G,KAArB;EACD,KALD;EAMD,GAX+C;;;EAahD,MAAIsC,OAAO,CAACuE,KAAR,CAAc7C,MAAd,IAAwB1B,OAAO,CAAC0B,MAApC,EAA4C;EAC1C9C,IAAAA,MAAM,CAACnE,OAAP,CAAe,UAAAf,CAAC,EAAI;EAClBA,MAAAA,CAAC,CAAC6K,KAAF,CAAQ9J,OAAR,CAAgB,UAAAV,CAAC,EAAI;EACnBA,QAAAA,CAAC,CAAC2H,MAAF,GAAWgtB,OAAO,CAAC30B,CAAC,CAAC4D,EAAH,CAAP,IAAiB,EAA5B;EACD,OAFD,EADkB;;;;;;;EAUlBjE,MAAAA,CAAC,CAACgI,MAAF,GAAWhI,CAAC,CAAC6K,KAAF,CAAQ,CAAR,EAAW7C,MAAtB;EACAhI,MAAAA,CAAC,CAACgI,MAAF,CAAShJ,MAAT,GAAkBgB,CAAC,CAACrB,IAAF,CAAOK,MAAzB;EACD,KAZD;EAaD;EACF,CA5BD;;EA6BA,WAAc,GAAGi2B,UAAjB;;;EC7CA,MAAMC,YAAY,GAAG;EAAEv2B,IAAAA,IAAI,EAAE,IAAR;EAAckM,IAAAA,KAAK,EAAE,IAArB;EAA2BlJ,IAAAA,IAAI,EAAE;EAAjC,GAArB;;EAGA,MAAMwzB,UAAU,GAAG,SAAbA,UAAa,CAAS7uB,OAAT,EAAkB;EACnCA,IAAAA,OAAO,GAAGzF,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBgtB,YAAlB,EAAgC5uB,OAAhC,CAAV;;EAEA,QAAIA,OAAO,CAACuG,MAAZ,EAAoB;EAClBvG,MAAAA,OAAO,CAACxE,OAAR,GAAkB,IAAlB;EACD,KALkC;;;EAOnC,QAAIwE,OAAO,CAAC0B,MAAZ,EAAoB;EAClB1B,MAAAA,OAAO,CAAC3H,IAAR,GAAe,IAAf;;EACA,UAAI,CAAC2H,OAAO,CAACuE,KAAT,IAAkBvE,OAAO,CAACuE,KAAR,KAAkB,IAAxC,EAA8C;EAC5CvE,QAAAA,OAAO,CAACuE,KAAR,GAAgB,EAAhB;EACD;;EACDvE,MAAAA,OAAO,CAACuE,KAAR,CAAc7C,MAAd,GAAuB,IAAvB;EACD;;EACD,QAAI1B,OAAO,CAACtC,KAAR,IAAiBsC,OAAO,CAACuE,KAAR,CAAc7G,KAAnC,EAA0C;EACxCsC,MAAAA,OAAO,CAACuE,KAAR,GAAgBvE,OAAO,CAACuE,KAAR,KAAkB,IAAlB,GAAyB,EAAzB,GAA8BvE,OAAO,CAACuE,KAAtD;EACAvE,MAAAA,OAAO,CAACuE,KAAR,CAAc5G,EAAd,GAAmB,IAAnB;EACD;;EACD,WAAOqC,OAAP;EACD,GAnBD;EAqBA;;;EACAtD,EAAAA,YAAA,GAAe,YAAuB;EAAA;;EAAA,QAAdsD,OAAc,uEAAJ,EAAI;;;EAEpC,QAAI,OAAOA,OAAP,KAAmB,QAAnB,IAA+B,KAAKwG,IAAL,CAAUxG,OAAV,CAAnC,EAAuD;EACrD,aAAO,KAAKwG,IAAL,CAAUxG,OAAV,EAAmBmI,IAAnB,CAAwBymB,YAAxB,CAAP;EACD;;EAED5uB,IAAAA,OAAO,GAAG6uB,UAAU,CAAC7uB,OAAD,CAApB,CANoC;;EASpC,QAAIA,OAAO,CAAC9B,IAAR,KAAiB,IAArB,EAA2B;EACzB,WAAKsI,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,QAAAA,CAAC,CAAC4K,KAAF,GAAU9J,OAAV,CAAkB,UAAAV,CAAC,EAAI;EACrB,cAAIA,CAAC,CAACmE,IAAF,KAAW,IAAf,EAAqB;EACnBnE,YAAAA,CAAC,CAACuzB,OAAF,CAAU,KAAI,CAACvuB,KAAf;EACD;EACF,SAJD;EAKD,OAND;EAOD;;EAED,QAAIH,MAAM,GAAG,KAAK4H,IAAL,CAAUzB,GAAV,CAAc,UAAApL,CAAC,EAAI;EAC9B,aAAOA,CAAC,CAACwO,IAAF,CAAOnI,OAAP,EAAgB,KAAI,CAACjB,KAArB,CAAP;EACD,KAFY,CAAb,CAnBoC;;EAuBpC,QAAIiB,OAAO,CAACuE,KAAR,CAAc7C,MAAd,IAAwB1B,OAAO,CAAC0B,MAAhC,IAA0C1B,OAAO,CAACuE,KAAR,CAAc7G,KAAxD,IAAiEsC,OAAO,CAACtC,KAA7E,EAAoF;EAClFgxB,MAAAA,OAAO,CAAC,IAAD,EAAO9vB,MAAP,EAAeoB,OAAf,CAAP;EACD,KAzBmC;;;EA2BpC,QAAIA,OAAO,CAAC8uB,SAAR,IAAqB9uB,OAAO,CAAC+uB,IAA7B,IAAqC/uB,OAAO,CAAC6I,KAAjD,EAAwD;EACtD,UAAI7E,GAAG,GAAG,EAAV;EACA,WAAKwC,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,YAAIvB,GAAG,GAAGuB,CAAC,CAACtB,IAAF,CAAO,SAAP,CAAV;EACA2L,QAAAA,GAAG,CAAC5L,GAAD,CAAH,GAAW4L,GAAG,CAAC5L,GAAD,CAAH,IAAY,CAAvB;EACA4L,QAAAA,GAAG,CAAC5L,GAAD,CAAH,IAAY,CAAZ;EACD,OAJD;EAKA,WAAKoO,IAAL,CAAU/L,OAAV,CAAkB,UAACd,CAAD,EAAIrB,CAAJ,EAAU;EAC1BsG,QAAAA,MAAM,CAACtG,CAAD,CAAN,CAAUuQ,KAAV,GAAkB7E,GAAG,CAACrK,CAAC,CAACtB,IAAF,CAAO,SAAP,CAAD,CAArB;EACD,OAFD;EAGD,KArCmC;;;EAuCpC,QAAI2H,OAAO,CAACuG,MAAZ,EAAoB;EAClB,UAAIyoB,OAAO,GAAG,EAAd;EACApwB,MAAAA,MAAM,GAAGA,MAAM,CAACsG,MAAP,CAAc,UAAAxL,CAAC,EAAI;EAC1B,YAAIs1B,OAAO,CAACt1B,CAAC,CAAC8B,OAAH,CAAP,KAAuB,IAA3B,EAAiC;EAC/B,iBAAO,KAAP;EACD;;EACDwzB,QAAAA,OAAO,CAACt1B,CAAC,CAAC8B,OAAH,CAAP,GAAqB,IAArB;EACA,eAAO,IAAP;EACD,OANQ,CAAT;EAOD;;EACD,WAAOoD,MAAP;EACD,GAlDD;;;EAqDAlC,EAAAA,YAAA,GAAeA,OAAO,CAACyL,IAAvB;;;;;;EC/EA;EACA,MAAM8mB,KAAK,GAAG,SAAd;;EAEA,MAAM5sB,MAAM,GAAG,SAATA,MAAS,CAASjK,GAAT,EAAckK,KAAd,EAAqB;EAClClK,IAAAA,GAAG,GAAGA,GAAG,CAACmK,QAAJ,EAAN;;EACA,WAAOnK,GAAG,CAACM,MAAJ,GAAa4J,KAApB,EAA2B;EACzBlK,MAAAA,GAAG,IAAI,GAAP;EACD;;EACD,WAAOA,GAAP;EACD,GAND;;EAQA,WAAS8J,YAAT,GAAwB;EACtB,WAAO,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,QAA/C;EACD;;;EAGD,MAAM8sB,GAAG,GAAG;EACVnH,IAAAA,KAAK,EAAE,SADG;EAEVE,IAAAA,GAAG,EAAE,SAFK;EAGVkH,IAAAA,IAAI,EAAE,SAHI;EAIVC,IAAAA,OAAO,EAAE,SAJC;EAKVC,IAAAA,IAAI,EAAE,SALI;EAMVrH,IAAAA,MAAM,EAAE,SANE;EAOVsH,IAAAA,KAAK,EAAE;EAPG,GAAZ;;EAUA,MAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAAS5oB,GAAT,EAAc;EAClC,QAAI1D,MAAM,GAAG0D,GAAG,CAAC5H,KAAJ,CAAUX,IAAvB;EACAuI,IAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB8I,MAAAA,OAAO,CAACC,GAAR,CAAY,UAAU/I,CAAC,CAACtB,IAAF,EAAV,GAAqB,GAAjC,EAAsC,iBAAtC;EACA,UAAIkM,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACAA,MAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,YAAIqE,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYT,CAAC,CAACqE,IAAd,CAAX;EACA,YAAI/F,IAAI,GAAG0B,CAAC,CAAC1B,IAAF,IAAU,GAArB;;EACA,YAAI0B,CAAC,CAACuD,QAAN,EAAgB;EACdjF,UAAAA,IAAI,GAAG,MAAM0B,CAAC,CAACuD,QAAR,GAAmB,GAA1B;EACD;;EACD,YAAIhB,IAAI,GAAG,MAAMjE,IAAN,GAAa,GAAxB;EACAiE,QAAAA,IAAI,GAAG+F,MAAM,CAAC/F,IAAD,EAAO,CAAP,CAAb;EACA,YAAIL,KAAK,GAAGmC,IAAI,CAACqJ,IAAL,CAAU,UAAAtJ,GAAG;EAAA,iBAAI8E,MAAM,CAAC9E,GAAD,CAAN,IAAe8E,MAAM,CAAC9E,GAAD,CAAN,CAAYmV,KAA/B;EAAA,SAAb,CAAZ;EACA,YAAIA,KAAK,GAAG,WAAZ;;EACA,YAAIrQ,MAAM,CAAChH,KAAD,CAAV,EAAmB;EACjBqX,UAAAA,KAAK,GAAGrQ,MAAM,CAAChH,KAAD,CAAN,CAAcqX,KAAtB;EACAA,UAAAA,KAAK,GAAG4b,GAAG,CAAC5b,KAAD,CAAX;EACD;;EACD7Q,QAAAA,OAAO,CAACC,GAAR,cAAkBpG,IAAlB,oBAAgC8B,IAAI,CAACzD,IAAL,CAAU,IAAV,CAAhC,oBAA6D2Y,KAAK,IAAI,WAAtE;EACD,OAfD;EAgBD,KAnBD;EAoBD,GAtBD;;;EAyBA,MAAMkc,GAAG,GAAG;EACVzH,IAAAA,KAAK,EAAE,eAAS3vB,GAAT,EAAc;EACnB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD,KAHS;EAIVhH,IAAAA,GAAG,EAAE,aAAS7vB,GAAT,EAAc;EACjB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD,KANS;EAOVE,IAAAA,IAAI,EAAE,cAAS/2B,GAAT,EAAc;EAClB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD,KATS;EAUVG,IAAAA,OAAO,EAAE,iBAASh3B,GAAT,EAAc;EACrB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD,KAZS;EAaVI,IAAAA,IAAI,EAAE,cAASj3B,GAAT,EAAc;EAClB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD,KAfS;EAgBVjH,IAAAA,MAAM,EAAE,gBAAS5vB,GAAT,EAAc;EACpB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD,KAlBS;EAmBVK,IAAAA,KAAK,EAAE,eAASl3B,GAAT,EAAc;EACnB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD;EArBS,GAAZ;;EAwBA,MAAMQ,SAAS,GAAG,SAAZA,SAAY,CAASrxB,IAAT,EAAeW,KAAf,EAAsB;EACtCX,IAAAA,IAAI,GAAGA,IAAI,CAAC2G,GAAL,CAAS,UAAA5G,GAAG,EAAI;EACrB,UAAI,CAACY,KAAK,CAACX,IAAN,CAAWJ,cAAX,CAA0BG,GAA1B,CAAL,EAAqC;EACnC,eAAOA,GAAP;EACD;;EACD,UAAMrF,CAAC,GAAGiG,KAAK,CAACX,IAAN,CAAWD,GAAX,EAAgBmV,KAAhB,IAAyB,MAAnC;EACA,aAAOkc,GAAG,CAAC12B,CAAD,CAAH,CAAOqF,GAAP,CAAP;EACD,KANM,CAAP;EAOA,WAAOC,IAAI,CAACzD,IAAL,CAAU,IAAV,CAAP;EACD,GATD;;;EAYA,MAAM+0B,KAAK,GAAG,SAARA,KAAQ,CAAS/oB,GAAT,EAAc;EAC1B,QAAIzE,YAAY,EAAhB,EAAoB;EAClBqtB,MAAAA,aAAa,CAAC5oB,GAAD,CAAb;EACA,aAAOA,GAAP;EACD;;EACDlE,IAAAA,OAAO,CAACC,GAAR,CAAY8sB,GAAG,CAACL,IAAJ,CAAS,OAAT,CAAZ;EACAxoB,IAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB8I,MAAAA,OAAO,CAACC,GAAR,CAAY8sB,GAAG,CAACL,IAAJ,CAAS,SAAT,CAAZ;EACA,UAAI5qB,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACAA,MAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,YAAIqE,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYT,CAAC,CAACqE,IAAd,CAAX;EACA,YAAI/F,IAAI,GAAG0B,CAAC,CAAC1B,IAAF,IAAU,GAArB;;EACA,YAAI0B,CAAC,CAACuD,QAAN,EAAgB;EACdjF,UAAAA,IAAI,GAAG,MAAM0B,CAAC,CAACuD,QAAR,GAAmB,GAA1B;EACD;;EACD,QAAiC;EAC/BjF,UAAAA,IAAI,GAAGm3B,GAAG,CAACxH,MAAJ,CAAW3vB,IAAX,CAAP;EACD;;EACD,YAAIiE,IAAI,GAAG,MAAMjE,IAAN,GAAa,GAAxB;EACAiE,QAAAA,IAAI,GAAG+F,MAAM,CAAC/F,IAAD,EAAO,EAAP,CAAb;EACA,YAAIlE,GAAG,GAAGo3B,GAAG,CAACL,IAAJ,CAAS,MAAT,IAAmB7yB,IAAnB,GAA0B,MAA1B,GAAmCmzB,SAAS,CAACrxB,IAAD,EAAOuI,GAAG,CAAC5H,KAAX,CAAtD;EACA0D,QAAAA,OAAO,CAACC,GAAR,CAAYtK,GAAZ;EACD,OAbD;EAcD,KAjBD;EAkBAqK,IAAAA,OAAO,CAACC,GAAR,CAAY,EAAZ;EACA,WAAOiE,GAAP;EACD,GA1BD;;EA2BAgpB,EAAAA,cAAA,GAAiBD,KAAjB;;;EClHA,IAAME,IAAI,GAAG,SAAPA,IAAO,CAASjpB,GAAT,EAAc;EACzB,MAAIH,IAAI,GAAGG,GAAG,CAACwB,IAAJ,CAAS;EAAE9P,IAAAA,IAAI,EAAE,KAAR;EAAekM,IAAAA,KAAK,EAAE,KAAtB;EAA6B/I,IAAAA,OAAO,EAAE;EAAtC,GAAT,CAAX,CADyB;;EAGzB,MAAIwI,GAAG,GAAG,EAAV;EACAwC,EAAAA,IAAI,CAAC/L,OAAL,CAAa,UAAAf,CAAC,EAAI;EAChB,QAAI,CAACsK,GAAG,CAACtK,CAAC,CAAC8B,OAAH,CAAR,EAAqB;EACnB9B,MAAAA,CAAC,CAACmP,KAAF,GAAU,CAAV;EACA7E,MAAAA,GAAG,CAACtK,CAAC,CAAC8B,OAAH,CAAH,GAAiB9B,CAAjB;EACD;;EACDsK,IAAAA,GAAG,CAACtK,CAAC,CAAC8B,OAAH,CAAH,CAAeqN,KAAf,IAAwB,CAAxB;EACD,GAND;EAOA,MAAIlG,GAAG,GAAGpI,MAAM,CAACC,IAAP,CAAYwJ,GAAZ,EAAiBe,GAAjB,CAAqB,UAAAzL,CAAC;EAAA,WAAI0K,GAAG,CAAC1K,CAAD,CAAP;EAAA,GAAtB,CAAV,CAXyB;;EAazBqJ,EAAAA,GAAG,CAACrB,IAAJ,CAAS,UAAC1I,CAAD,EAAIC,CAAJ,EAAU;EACjB,QAAID,CAAC,CAACiQ,KAAF,GAAUhQ,CAAC,CAACgQ,KAAhB,EAAuB;EACrB,aAAO,CAAC,CAAR;EACD,KAFD,MAEO,IAAIjQ,CAAC,CAACiQ,KAAF,GAAUhQ,CAAC,CAACgQ,KAAhB,EAAuB;EAC5B,aAAO,CAAP;EACD;;EACD,WAAO,CAAP;EACD,GAPD;EAQA,SAAOlG,GAAP;EACD,CAtBD;;EAuBA,SAAc,GAAGitB,IAAjB;;ECpBA;;EACA,WAAa,GAAG,gBAAA,GAAW;EACzBF,EAAAA,MAAK,CAAC,IAAD,CAAL;EACA,SAAO,IAAP;EACD,CAHD;EAKA;;;EACA,OAAW,GAAG,YAAA,CAASrxB,MAAT,EAAiB;EAC7B,MAAIA,MAAM,KAAK,MAAf,EAAuB;EACrB,WAAO,KAAKhG,IAAL,EAAP;EACD;;EACD,MAAIgG,MAAM,KAAK,QAAf,EAAyB;EACvB,WAAO,KAAKhG,IAAL,CAAU,QAAV,CAAP;EACD;;EACD,MAAIgG,MAAM,KAAK,MAAf,EAAuB;EACrB,WAAO,KAAK8J,IAAL,EAAP;EACD;;EACD,MAAI9J,MAAM,KAAK,QAAX,IAAuBA,MAAM,KAAK,SAAtC,EAAiD;EAC/C,WAAO,KAAK8J,IAAL,CAAU;EAAEzG,MAAAA,MAAM,EAAE;EAAV,KAAV,CAAP;EACD;;EACD,MAAIrD,MAAM,KAAK,OAAf,EAAwB;EACtB,WAAO,KAAK8J,IAAL,CAAU;EAAE5D,MAAAA,KAAK,EAAE;EAAT,KAAV,EAA4BQ,GAA5B,CAAgC,UAAAf,GAAG;EAAA,aAAIA,GAAG,CAAC3L,IAAR;EAAA,KAAnC,CAAP;EACD;;EACD,MAAIgG,MAAM,KAAK,MAAX,IAAqBA,MAAM,KAAK,WAApC,EAAiD;EAC/C,WAAOuxB,KAAI,CAAC,IAAD,CAAX;EACD;;EACD,MAAIvxB,MAAM,KAAK,OAAf,EAAwB;EACtB,QAAImI,IAAI,GAAG,EAAX;EACA,SAAK2B,IAAL,CAAU;EAAE9P,MAAAA,IAAI,EAAE,KAAR;EAAekM,MAAAA,KAAK,EAAE;EAAElM,QAAAA,IAAI,EAAE;EAAR;EAAtB,KAAV,EAAkDoC,OAAlD,CAA0D,UAAAuJ,GAAG,EAAI;EAC/D,UAAIO,KAAK,GAAGP,GAAG,CAACO,KAAJ,CAAUQ,GAAV,CAAc,UAAAhL,CAAC;EAAA,eAAIA,CAAC,CAAC1B,IAAN;EAAA,OAAf,CAAZ;EACAkM,MAAAA,KAAK,GAAGA,KAAK,CAACW,MAAN,CAAa,UAAAnL,CAAC;EAAA,eAAIA,CAAJ;EAAA,OAAd,CAAR;EACAyM,MAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYxC,KAAZ,CAAP;EACD,KAJD;EAKA,WAAOiC,IAAP;EACD;;EACD,MAAInI,MAAM,KAAK,MAAf,EAAuB;EACrB,WAAO,KAAKmI,IAAL,CAAUzB,GAAV,CAAc,UAAApL,CAAC,EAAI;EACxB,aAAOA,CAAC,CAAC4K,KAAF,GAAUlI,MAAV,CAAiB,UAAClD,CAAD,EAAIY,CAAJ,EAAU;EAChCZ,QAAAA,CAAC,CAACY,CAAC,CAACoB,KAAF,IAAWpB,CAAC,CAACuD,QAAd,CAAD,GAA2B/C,MAAM,CAACC,IAAP,CAAYT,CAAC,CAACqE,IAAd,CAA3B;EACA,eAAOjF,CAAP;EACD,OAHM,EAGJ,EAHI,CAAP;EAID,KALM,CAAP;EAMD;;EACD,MAAIkF,MAAM,KAAK,OAAf,EAAwB;EACtBqxB,IAAAA,MAAK,CAAC,IAAD,CAAL;EACA,WAAO,IAAP;EACD;;EACD,SAAO,KAAKr3B,IAAL,EAAP;GAxCF;;;;;;;ECVA,IAAM+L,SAAO,GAAG;;EAEdyrB,EAAAA,KAAK,EAAE,eAACj3B,CAAD,EAAIC,CAAJ,EAAU;EACf,QAAIi3B,IAAI,GAAGl3B,CAAC,CAACP,IAAF,CAAO,OAAP,CAAX;EACA,QAAI03B,KAAK,GAAGl3B,CAAC,CAACR,IAAF,CAAO,OAAP,CAAZ;;EACA,QAAIy3B,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAC,CAAR;EACD;;EACD,QAAID,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAP;EACD;;EACD,WAAO,CAAP;EACD,GAZa;;;EAedr3B,EAAAA,MAAM,EAAE,gBAACE,CAAD,EAAIC,CAAJ,EAAU;EAChB,QAAIi3B,IAAI,GAAGl3B,CAAC,CAACP,IAAF,GAASgD,IAAT,GAAgB3C,MAA3B;EACA,QAAIq3B,KAAK,GAAGl3B,CAAC,CAACR,IAAF,GAASgD,IAAT,GAAgB3C,MAA5B;;EACA,QAAIo3B,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAP;EACD;;EACD,QAAID,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD,GAzBa;;;EA4BdjF,EAAAA,SAAS,EAAE,mBAAClyB,CAAD,EAAIC,CAAJ,EAAU;EACnB,QAAIi3B,IAAI,GAAGl3B,CAAC,CAACkyB,SAAF,EAAX;EACA,QAAIiF,KAAK,GAAGl3B,CAAC,CAACiyB,SAAF,EAAZ;;EACA,QAAIgF,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAP;EACD;;EACD,QAAID,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD;EAtCa,CAAhB;EAyCA;;EACA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAASrpB,GAAT,EAAc;EAC3B,MAAIspB,MAAM,GAAG,EAAb;EACA,MAAMjwB,OAAO,GAAG;EACd,YAAM,IADQ;EAEdY,IAAAA,WAAW,EAAE,KAFC;EAGdF,IAAAA,UAAU,EAAE,IAHE;EAIdpG,IAAAA,OAAO,EAAE;EAJK,GAAhB;EAMAqM,EAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,QAAIvB,GAAG,GAAGuB,CAAC,CAACtB,IAAF,CAAO2H,OAAP,CAAV;EACAiwB,IAAAA,MAAM,CAAC73B,GAAD,CAAN,GAAc63B,MAAM,CAAC73B,GAAD,CAAN,IAAe,CAA7B;EACA63B,IAAAA,MAAM,CAAC73B,GAAD,CAAN,IAAe,CAAf;EACD,GAJD,EAR2B;;EAc3BuO,EAAAA,GAAG,CAACH,IAAJ,CAASlF,IAAT,CAAc,UAAC1I,CAAD,EAAIC,CAAJ,EAAU;EACtB,QAAIi3B,IAAI,GAAGG,MAAM,CAACr3B,CAAC,CAACP,IAAF,CAAO2H,OAAP,CAAD,CAAjB;EACA,QAAI+vB,KAAK,GAAGE,MAAM,CAACp3B,CAAC,CAACR,IAAF,CAAO2H,OAAP,CAAD,CAAlB;;EACA,QAAI8vB,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAP;EACD;;EACD,QAAID,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD,GAVD;EAWA,SAAOppB,GAAP;EACD,CA1BD;;;EA6BA,IAAMupB,cAAc,GAAG,SAAjBA,cAAiB,CAASvpB,GAAT,EAAc;EACnC,MAAIwpB,KAAK,GAAG,EAAZ;EACAxpB,EAAAA,GAAG,CAACwB,IAAJ,CAAS;EAAE5D,IAAAA,KAAK,EAAE;EAAE7C,MAAAA,MAAM,EAAE;EAAV;EAAT,GAAT,EAAsCjH,OAAtC,CAA8C,UAAAf,CAAC,EAAI;EACjDy2B,IAAAA,KAAK,CAACz2B,CAAC,CAAC6K,KAAF,CAAQ,CAAR,EAAW5G,EAAZ,CAAL,GAAuBjE,CAAC,CAAC6K,KAAF,CAAQ,CAAR,EAAW7C,MAAX,CAAkB7D,KAAzC;EACD,GAFD;EAGA8I,EAAAA,GAAG,CAACH,IAAJ,GAAWG,GAAG,CAACH,IAAJ,CAASlF,IAAT,CAAc,UAAC1I,CAAD,EAAIC,CAAJ,EAAU;EACjC,QAAIs3B,KAAK,CAACv3B,CAAC,CAACiF,KAAH,CAAL,GAAiBsyB,KAAK,CAACt3B,CAAC,CAACgF,KAAH,CAA1B,EAAqC;EACnC,aAAO,CAAP;EACD,KAFD,MAEO,IAAIsyB,KAAK,CAACv3B,CAAC,CAACiF,KAAH,CAAL,GAAiBsyB,KAAK,CAACt3B,CAAC,CAACgF,KAAH,CAA1B,EAAqC;EAC1C,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD,GAPU,CAAX;EAQA,SAAO8I,GAAP;EACD,CAdD;;;AAiBAvC,WAAO,CAACgsB,YAAR,GAAuBhsB,SAAO,CAACyrB,KAA/B;AACAzrB,WAAO,CAACisB,SAAR,GAAoBjsB,SAAO,CAAC0mB,SAA5B;;EAGA,IAAMwF,QAAQ,GAAG;EACf5yB,EAAAA,KAAK,EAAE,IADQ;EAEf6yB,EAAAA,QAAQ,EAAE,IAFK;EAGfnc,EAAAA,GAAG,EAAE,IAHU;EAIfoc,EAAAA,UAAU,EAAE,IAJG;EAKfC,EAAAA,KAAK,EAAE,IALQ;EAMfC,EAAAA,aAAa,EAAE;EANA,CAAjB;EASA;;EACA,QAAY,GAAG,aAAA,CAAS1kB,KAAT,EAAgB;EAC7BA,EAAAA,KAAK,GAAGA,KAAK,IAAI,OAAjB,CAD6B;;EAG7B,MAAIA,KAAK,KAAK,MAAV,IAAoBA,KAAK,KAAK,WAA9B,IAA6CA,KAAK,KAAK,MAA3D,EAAmE;EACjE,WAAOgkB,MAAM,CAAC,IAAD,CAAb;EACD;;EACD,MAAIM,QAAQ,CAACtyB,cAAT,CAAwBgO,KAAxB,CAAJ,EAAoC;EAClC,WAAOkkB,cAAc,CAAC,IAAD,CAArB;EACD;;EAEDlkB,EAAAA,KAAK,GAAG5H,SAAO,CAAC4H,KAAD,CAAP,IAAkBA,KAA1B,CAV6B;;EAY7B,MAAI,OAAOA,KAAP,KAAiB,UAArB,EAAiC;EAC/B,SAAKxF,IAAL,GAAY,KAAKA,IAAL,CAAUlF,IAAV,CAAe0K,KAAf,CAAZ;EACA,WAAO,IAAP;EACD;;EACD,SAAO,IAAP;EACD,CAjBD;EAmBA;;;EACA,WAAe,GAAG,gBAAA,GAAW;EAC3B,MAAIxF,IAAI,GAAG,GAAGO,MAAH,CAAU,KAAKP,IAAf,CAAX;EACAA,EAAAA,IAAI,GAAGA,IAAI,CAACokB,OAAL,EAAP;EACA,SAAO,KAAK/lB,SAAL,CAAe2B,IAAf,CAAP;EACD,CAJD;EAMA;;;EACA,YAAc,GAAG,eAAA,GAAW;EAC1B,MAAIA,IAAI,GAAG,GAAGO,MAAH,CAAU,KAAKP,IAAf,CAAX;EACA,MAAIxC,GAAG,GAAG,EAAV;EACAwC,EAAAA,IAAI,GAAGA,IAAI,CAACtB,MAAL,CAAY,UAAAvL,CAAC,EAAI;EACtB,QAAIvB,GAAG,GAAGuB,CAAC,CAACtB,IAAF,CAAO,SAAP,EAAkBgD,IAAlB,EAAV;;EACA,QAAI2I,GAAG,CAAChG,cAAJ,CAAmB5F,GAAnB,MAA4B,IAAhC,EAAsC;EACpC,aAAO,KAAP;EACD;;EACD4L,IAAAA,GAAG,CAAC5L,GAAD,CAAH,GAAW,IAAX;EACA,WAAO,IAAP;EACD,GAPM,CAAP;EAQA,SAAO,KAAKyM,SAAL,CAAe2B,IAAf,CAAP;GAXF;;;;;;;;EChIA,IAAMmqB,OAAO,GAAG,mEAAhB;EACA,IAAMC,MAAM,GAAG,eAAf;EAEA,IAAMxsB,SAAO,GAAG;;EAEd1D,EAAAA,UAAU,EAAE,oBAASiG,GAAT,EAAc;EACxB,QAAIkqB,OAAO,GAAGlqB,GAAG,CAACH,IAAJ,CAASzB,GAAT,CAAa,UAAAwH,EAAE;EAAA,aAAIA,EAAE,CAAChI,KAAH,EAAJ;EAAA,KAAf,CAAd;EACAssB,IAAAA,OAAO,CAACp2B,OAAR,CAAgB,UAAC8J,KAAD,EAAQ7K,CAAR,EAAc;EAC5B6K,MAAAA,KAAK,CAAC9J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;;EAEtB,YAAIyB,CAAC,CAAC+2B,OAAF,OAAgB,IAApB,EAA0B;EACxB/2B,UAAAA,CAAC,CAACiC,IAAF,GAAS,KAAT;EACA;EACD,SALqB;;;EAOtBjC,QAAAA,CAAC,CAACgC,GAAF,GAAQhC,CAAC,CAACgC,GAAF,CAAMR,OAAN,CAAc,KAAd,EAAqB,EAArB,CAAR;EACAxB,QAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAT,CARsB;;EAUtB,YAAIgJ,KAAK,CAAC7L,MAAN,GAAe,CAAf,KAAqBJ,CAArB,IAA0B,CAACu4B,OAAO,CAACn3B,CAAC,GAAG,CAAL,CAAtC,EAA+C;EAC7C;EACD,SAZqB;;;EActB,YAAIK,CAAC,CAACuD,QAAF,IAAcD,OAAO,CAACtD,CAAC,CAAC1B,IAAH,CAAP,KAAoB,IAAtC,EAA4C;EAC1C;EACD,SAhBqB;;;EAkBtB,YAAI0B,CAAC,CAAC2U,SAAF,OAAkB,IAAtB,EAA4B;EAC1B;EACD;;EAED3U,QAAAA,CAAC,CAACiC,IAAF,IAAU,GAAV;EACD,OAvBD;EAwBD,KAzBD;EA0BD,GA9Ba;EAgCd4E,EAAAA,WAAW,EAAE,qBAASgsB,QAAT,EAAmB;EAC9BA,IAAAA,QAAQ,CAACnyB,OAAT,CAAiB,UAAAV,CAAC,EAAI;;EAEpB,UAAIA,CAAC,CAAC2U,SAAF,OAAkB,IAAtB,EAA4B;EAC1B3U,QAAAA,CAAC,CAACiC,IAAF,GAAS,GAAT;EACD;;EACDjC,MAAAA,CAAC,CAACgC,GAAF,GAAQhC,CAAC,CAACgC,GAAF,CAAMR,OAAN,CAAco1B,OAAd,EAAuB,EAAvB,CAAR;EACA52B,MAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAeo1B,OAAf,EAAwB,EAAxB,CAAT,CANoB;;EAQpB52B,MAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,QAAf,EAAyB,EAAzB,CAAT,CARoB;;EAUpB,UAAI,IAAIN,IAAJ,CAASlB,CAAC,CAACiC,IAAX,MAAqB,IAAzB,EAA+B;EAC7BjC,QAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,IAAf,EAAqB,EAArB,CAAT;EACAxB,QAAAA,CAAC,CAACiC,IAAF,GAAS,MAAMjC,CAAC,CAACiC,IAAjB;EACD,OAbmB;;;EAepB,UAAI,KAAKf,IAAL,CAAUlB,CAAC,CAACiC,IAAZ,MAAsB,IAA1B,EAAgC;EAC9BjC,QAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,QAAf,EAAyB,EAAzB,CAAT;EACAxB,QAAAA,CAAC,CAACiC,IAAF,GAAS,MAAMjC,CAAC,CAACiC,IAAjB;EACD;EACF,KAnBD;EAoBD,GArDa;EAuDd1B,EAAAA,OAAO,EAAE,iBAASsyB,QAAT,EAAmB;EAC1BA,IAAAA,QAAQ,CAACnyB,OAAT,CAAiB,UAAAV,CAAC,EAAI;EACpB,UAAIA,CAAC,CAACiQ,UAAF,OAAmB,IAAvB,EAA6B;EAC3B;EACD;;EACDjQ,MAAAA,CAAC,CAAC1B,IAAF,GAASqC,SAAW,CAACX,CAAC,CAAC1B,IAAH,CAApB;EACD,KALD;EAMD,GA9Da;EAgEd04B,EAAAA,UAAU,EAAE,oBAASnE,QAAT,EAAmB;EAC7BA,IAAAA,QAAQ,CAACnyB,OAAT,CAAiB,UAAAV,CAAC,EAAI;EACpBA,MAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAeq1B,MAAf,EAAuB,EAAvB,CAAT;EACA72B,MAAAA,CAAC,CAACgC,GAAF,GAAQhC,CAAC,CAACgC,GAAF,CAAMR,OAAN,CAAcq1B,MAAd,EAAsB,EAAtB,CAAR;EACD,KAHD;EAID,GArEa;EAuEdI,EAAAA,OAAO,EAAE,iBAASrqB,GAAT,EAAc;EACrBA,IAAAA,GAAG,CACAd,KADH,CACS,SADT,EAEGimB,GAFH,CAEO,oDAFP,EAGGmF,MAHH;EAID,GA5Ea;;EA+EdnwB,EAAAA,aAAa,EAAE,uBAAS6F,GAAT,EAAc;EAC3BA,IAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAA8R,EAAE,EAAI;EACrB,UAAIhI,KAAK,GAAGgI,EAAE,CAAChI,KAAH,EAAZ;EACAA,MAAAA,KAAK,CAAC9J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;EACtB,YAAIyB,CAAC,CAACqE,IAAF,CAAO2C,YAAP,KAAwB,IAAxB,IAAgCwD,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAzC,EAAkD;EAChDyB,UAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAT;EACD;EACF,OAJD;EAKD,KAPD;EAQD;EAxFa,CAAhB;EA0FA,YAAc,GAAG6I,SAAjB;;EC5FA,IAAM8sB,QAAQ,GAAG;;EAEfxwB,EAAAA,UAAU,EAAE,IAFG;EAGfpG,EAAAA,OAAO,EAAE,IAHM;EAIfsG,EAAAA,WAAW,EAAE,IAJE;EAKfuwB,EAAAA,KAAK,EAAE,IALQ;EAMf1wB,EAAAA,QAAQ,EAAE,IANK;EAOfK,EAAAA,aAAa,EAAE,IAPA;;EAUf,UAAM,KAVS;EAWfswB,EAAAA,YAAY,EAAE,KAXC;EAYfC,EAAAA,WAAW,EAAE,KAZE;EAafN,EAAAA,UAAU,EAAE,KAbG;EAcfC,EAAAA,OAAO,EAAE,KAdM;;EAiBfM,EAAAA,WAAW,EAAE,KAjBE;EAkBfrd,EAAAA,KAAK,EAAE,KAlBQ;EAmBfD,EAAAA,KAAK,EAAE,KAnBQ;EAoBfud,EAAAA,UAAU,EAAE,KApBG;;EAAA,CAAjB;EAwBA,IAAMtW,SAAO,GAAG;EACdyF,EAAAA,KAAK,EAAE,EADO;EAEd8Q,EAAAA,MAAM,EAAE;EAAE,YAAM,IAAR;EAAcJ,IAAAA,YAAY,EAAE,IAA5B;EAAkCC,IAAAA,WAAW,EAAE,IAA/C;EAAqDN,IAAAA,UAAU,EAAE,IAAjE;EAAuEC,IAAAA,OAAO,EAAE;EAAhF;EAFM,CAAhB;AAIA/V,WAAO,CAACwW,KAAR,GAAgBl3B,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBqZ,SAAO,CAACuW,MAA1B,EAAkC;EAAEF,EAAAA,WAAW,EAAE,IAAf;EAAqBrd,EAAAA,KAAK,EAAE,IAA5B;EAAkCD,EAAAA,KAAK,EAAE,IAAzC;EAA+Cud,EAAAA,UAAU,EAAE;EAA3D,CAAlC,CAAhB;EAEA;;EACA,aAAiB,GAAG,kBAAA,CAASvxB,OAAT,EAAkB;EACpCA,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB,CADoC;;EAGpC,MAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/BA,IAAAA,OAAO,GAAGib,SAAO,CAACjb,OAAD,CAAP,IAAoB,EAA9B;EACD,GALmC;;;EAOpCA,EAAAA,OAAO,GAAGzF,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBsvB,QAAlB,EAA4BlxB,OAA5B,CAAV,CAPoC;;EASpC,OAAKwtB,OAAL;EAEA,MAAIZ,QAAQ,GAAG,KAAKA,QAAL,EAAf,CAXoC;;EAcpC,MAAI5sB,OAAO,QAAX,EAAkB;EAChB,SAAK5E,WAAL;EACD,GAhBmC;;;EAmBpC,MAAI4E,OAAO,CAACU,UAAZ,EAAwB;EACtB0D,IAAAA,QAAO,CAAC1D,UAAR,CAAmB,IAAnB;EACD,GArBmC;;;EAwBpC,MAAIV,OAAO,CAAC1F,OAAZ,EAAqB;EACnB8J,IAAAA,QAAO,CAAC9J,OAAR,CAAgBsyB,QAAhB;EACD,GA1BmC;;;EA6BpC,MAAI5sB,OAAO,CAACY,WAAZ,EAAyB;EACvBwD,IAAAA,QAAO,CAACxD,WAAR,CAAoBgsB,QAApB;EACD,GA/BmC;;;EAkCpC,MAAI5sB,OAAO,CAACmxB,KAAZ,EAAmB;EACjB,SAAKF,MAAL,CAAY,oBAAZ;EACD,GApCmC;;;EAuCpC,MAAIjxB,OAAO,CAACS,QAAZ,EAAsB;EACpB,SAAKA,QAAL,GAAgBixB,KAAhB,GADoB;EAGrB,GA1CmC;;;EA4CpC,MAAI1xB,OAAO,CAACc,aAAZ,EAA2B;EACzBsD,IAAAA,QAAO,CAACtD,aAAR,CAAsB,IAAtB;EACD,GA9CmC;;;;EAmDpC,MAAId,OAAO,CAAC2xB,WAAR,IAAuB3xB,OAAO,CAACoxB,YAAnC,EAAiD;EAC/C,SAAKA,YAAL,GAAoBQ,MAApB;EACD,GArDmC;;;EAwDpC,MAAI5xB,OAAO,CAACqxB,WAAZ,EAAyB;EACvB,SAAKA,WAAL,GAAmBQ,MAAnB;EACD,GA1DmC;;;EA4DpC,MAAI7xB,OAAO,CAAC+wB,UAAR,IAAsB/wB,OAAO,CAAC4wB,MAAlC,EAA0C;EACxCxsB,IAAAA,QAAO,CAAC2sB,UAAR,CAAmBnE,QAAnB;EACD,GA9DmC;;;EAiEpC,MAAI5sB,OAAO,CAACgxB,OAAZ,EAAqB;EACnB5sB,IAAAA,QAAO,CAAC4sB,OAAR,CAAgB,IAAhB;EACD,GAnEmC;;;;EAwEpC,MAAIhxB,OAAO,CAAC8xB,UAAR,IAAsB9xB,OAAO,CAACsxB,WAAlC,EAA+C;EAC7C,SAAKA,WAAL,GAAmBI,KAAnB;EACD,GA1EmC;;;EA4EpC,MAAI1xB,OAAO,CAACiU,KAAZ,EAAmB;EACjB,SAAKA,KAAL,GAAapU,YAAb;EACD,GA9EmC;;;EAgFpC,MAAIG,OAAO,CAACgU,KAAR,IAAiBhU,OAAO,CAACmqB,OAA7B,EAAsC;EACpC,SAAKnW,KAAL,GAAa7U,UAAb;EACD,GAlFmC;;;EAoFpC,MAAIa,OAAO,CAACuxB,UAAZ,EAAwB;EACtB,SAAKN,MAAL,CAAY,YAAZ;EACD;;EAED,SAAO,IAAP;GAxFF;;;;;;;EC/BA;;;EAGAv0B,EAAAA,eAAA,GAAkB,UAASe,GAAT,EAAc;;EAE9B,QAAI,CAACA,GAAL,EAAU;EACR,UAAIwJ,MAAM,GAAG,KAAKA,MAAL,EAAb;EACA,aAAOA,MAAM,CAAC8qB,OAAP,CAAe,IAAf,CAAP;EACD,KAL6B;;;EAO9B,QAAI3pB,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;EACA,QAAIyM,OAAO,GAAG,EAAd;EACA,SAAK1D,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAIq4B,OAAO,GAAGr4B,CAAC,CAACkM,KAAF,CAAQuC,IAAR,CAAd,CADqB;;EAGrB,UAAI4pB,OAAO,CAACt5B,MAAR,KAAmB,CAAvB,EAA0B;EACxBwR,QAAAA,OAAO,CAACvF,IAAR,CAAahL,CAAb;EACA;EACD,OANoB;;;EAQrB,UAAIqV,KAAK,GAAGrV,CAAZ;EACAq4B,MAAAA,OAAO,CAACv3B,OAAR,CAAgB,UAAAwB,KAAK,EAAI;EACvB,YAAIg2B,KAAK,GAAGjjB,KAAK,CAAC+iB,OAAN,CAAc91B,KAAd,CAAZ,CADuB;;EAGvB,YAAIg2B,KAAK,CAAC9xB,MAAV,EAAkB;EAChB+J,UAAAA,OAAO,CAACvF,IAAR,CAAastB,KAAK,CAAC9xB,MAAnB;EACD;;EACD,YAAI8xB,KAAK,CAACpsB,KAAV,EAAiB;EACfqE,UAAAA,OAAO,CAACvF,IAAR,CAAastB,KAAK,CAACpsB,KAAnB;EACD,SARsB;;;EAUvBmJ,QAAAA,KAAK,GAAGijB,KAAK,CAAC/1B,KAAd;EACD,OAXD,EATqB;;EAsBrB,UAAI8S,KAAJ,EAAW;EACT9E,QAAAA,OAAO,CAACvF,IAAR,CAAaqK,KAAb;EACD;EACF,KAzBD;EA0BA,WAAO,KAAKnK,SAAL,CAAeqF,OAAf,CAAP;EACD,GApCD;EAsCA;;;;;EAGAxN,EAAAA,kBAAA,GAAqB,UAASe,GAAT,EAAc;;EAEjC,QAAI,CAACA,GAAL,EAAU;EACR,UAAIwJ,MAAM,GAAG,KAAKA,MAAL,EAAb;EACA,aAAOA,MAAM,CAACirB,UAAP,CAAkB,IAAlB,CAAP;EACD,KALgC;;;EAOjC,QAAI9pB,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;EACA,QAAIyM,OAAO,GAAG,EAAd;EACA,SAAK1D,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAIq4B,OAAO,GAAGr4B,CAAC,CAACkM,KAAF,CAAQuC,IAAR,CAAd,CADqB;;EAGrB,UAAI4pB,OAAO,CAACt5B,MAAR,KAAmB,CAAvB,EAA0B;EACxBwR,QAAAA,OAAO,CAACvF,IAAR,CAAahL,CAAb;EACA;EACD,OANoB;;;EAQrB,UAAIqV,KAAK,GAAGrV,CAAZ;EACAq4B,MAAAA,OAAO,CAACv3B,OAAR,CAAgB,UAAAwB,KAAK,EAAI;EACvB,YAAIg2B,KAAK,GAAGjjB,KAAK,CAAC+iB,OAAN,CAAc91B,KAAd,CAAZ,CADuB;;EAGvB,YAAIg2B,KAAK,CAAC9xB,MAAN,IAAgB8xB,KAAK,CAACpsB,KAA1B,EAAiC;;EAE/BosB,UAAAA,KAAK,CAAC9xB,MAAN,CAAazH,MAAb,IAAuBu5B,KAAK,CAACpsB,KAAN,CAAYnN,MAAnC;EACAwR,UAAAA,OAAO,CAACvF,IAAR,CAAastB,KAAK,CAAC9xB,MAAnB;EACD,SAJD,MAIO,IAAI8xB,KAAK,CAACpsB,KAAV,EAAiB;EACtBqE,UAAAA,OAAO,CAACvF,IAAR,CAAastB,KAAK,CAACpsB,KAAnB;EACD,SATsB;;;EAWvBmJ,QAAAA,KAAK,GAAGijB,KAAK,CAAC/1B,KAAd;EACD,OAZD,EATqB;;EAuBrB,UAAI8S,KAAJ,EAAW;EACT9E,QAAAA,OAAO,CAACvF,IAAR,CAAaqK,KAAb;EACD;EACF,KA1BD;EA2BA,WAAO,KAAKnK,SAAL,CAAeqF,OAAf,CAAP;EACD,GArCD;;EAsCAxN,EAAAA,aAAA,GAAgBA,OAAO,CAACw1B,UAAxB;;EAEA;;EACAx1B,EAAAA,mBAAA,GAAsB,UAASe,GAAT,EAAc;;EAElC,QAAI,CAACA,GAAL,EAAU;EACR,UAAIwJ,MAAM,GAAG,KAAKA,MAAL,EAAb;EACA,aAAOA,MAAM,CAACkrB,WAAP,CAAmB,IAAnB,CAAP;EACD,KALiC;;;EAOlC,QAAI/pB,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;EACA,QAAIyM,OAAO,GAAG,EAAd;EACA,SAAK1D,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAIq4B,OAAO,GAAGr4B,CAAC,CAACkM,KAAF,CAAQuC,IAAR,CAAd,CADqB;;EAGrB,UAAI4pB,OAAO,CAACt5B,MAAR,KAAmB,CAAvB,EAA0B;EACxBwR,QAAAA,OAAO,CAACvF,IAAR,CAAahL,CAAb;EACA;EACD,OANoB;;;EAQrB,UAAIqV,KAAK,GAAGrV,CAAZ;EACAq4B,MAAAA,OAAO,CAACv3B,OAAR,CAAgB,UAAAwB,KAAK,EAAI;EACvB,YAAIg2B,KAAK,GAAGjjB,KAAK,CAAC+iB,OAAN,CAAc91B,KAAd,CAAZ,CADuB;;EAGvB,YAAIg2B,KAAK,CAAC9xB,MAAV,EAAkB;EAChB+J,UAAAA,OAAO,CAACvF,IAAR,CAAastB,KAAK,CAAC9xB,MAAnB;EACD,SALsB;;;EAOvB,YAAI8xB,KAAK,CAACpsB,KAAN,IAAeosB,KAAK,CAAC/1B,KAAzB,EAAgC;EAC9B+1B,UAAAA,KAAK,CAACpsB,KAAN,CAAYnN,MAAZ,IAAsBu5B,KAAK,CAAC/1B,KAAN,CAAYxD,MAAlC;EACD,SATsB;;;EAWvBsW,QAAAA,KAAK,GAAGijB,KAAK,CAACpsB,KAAd;EACD,OAZD,EATqB;;EAuBrB,UAAImJ,KAAJ,EAAW;EACT9E,QAAAA,OAAO,CAACvF,IAAR,CAAaqK,KAAb;EACD;EACF,KA1BD;EA2BA,WAAO,KAAKnK,SAAL,CAAeqF,OAAf,CAAP;EACD,GArCD;EAuCA;;;EACAxN,EAAAA,eAAA,GAAkB,UAAS0L,IAAT,EAAepI,OAAf,EAAwB;EACxCoI,IAAAA,IAAI,GAAGA,IAAI,IAAI,EAAf;EACApI,IAAAA,OAAO,GAAGA,OAAO,IAAI;EAAE3H,MAAAA,IAAI,EAAE;EAAR,KAArB;EACA,QAAIsO,GAAG,GAAG,IAAV;EACA,QAAInM,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY4N,IAAZ,CAAX,CAJwC;;EAMxC5N,IAAAA,IAAI,CAACC,OAAL,CAAa,UAAAnB,CAAC,EAAI;EAChBqN,MAAAA,GAAG,GAAGA,GAAG,CAACorB,OAAJ,CAAYz4B,CAAZ,CAAN;EACD,KAFD,EANwC;;EAUxCqN,IAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,WAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,IAAI,CAAtC,EAAyC;EACvC,YAAIqB,CAAC,CAACoyB,GAAF,CAAMvxB,IAAI,CAAClC,CAAD,CAAV,CAAJ,EAAoB;EAClBqB,UAAAA,CAAC,CAACy4B,OAAF,GAAYhqB,IAAI,CAAC5N,IAAI,CAAClC,CAAD,CAAL,CAAhB;EACA;EACD;EACF;EACF,KAPD;EAQA,WAAOqO,GAAG,CAACH,IAAJ,CAASzB,GAAT,CAAa,UAAApL,CAAC,EAAI;EACvB,UAAIuO,GAAG,GAAGvO,CAAC,CAACwO,IAAF,CAAOnI,OAAP,CAAV;EACAkI,MAAAA,GAAG,CAACkqB,OAAJ,GAAcz4B,CAAC,CAACy4B,OAAF,IAAa,IAA3B;EACA,aAAOlqB,GAAP;EACD,KAJM,CAAP;KAlBF;;;;;;;;EC/HA,IAAMmqB,QAAQ,GAAG,SAAXA,QAAW,CAAS1rB,GAAT,EAAcsjB,EAAd,EAAkB;EACjC,MAAIlrB,KAAK,GAAG4H,GAAG,CAAC5H,KAAhB;EACA4H,EAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpBA,IAAAA,CAAC,CAAC4K,KAAF,GAAU9J,OAAV,CAAkB,UAAAV,CAAC;EAAA,aAAIA,CAAC,CAACkwB,EAAD,CAAD,CAAMlrB,KAAN,CAAJ;EAAA,KAAnB;EACD,GAFD;EAGA,SAAO4H,GAAP;EACD,CAND;EAQA;;;EACA,eAAmB,GAAG,oBAAA,GAAW;EAC/B,SAAO0rB,QAAQ,CAAC,IAAD,EAAO,aAAP,CAAf;EACD,CAFD;EAIA;;;EACA,eAAmB,GAAG,oBAAA,GAAW;EAC/B,SAAOA,QAAQ,CAAC,IAAD,EAAO,aAAP,CAAf;EACD,CAFD;EAIA;;;EACA,eAAmB,GAAG,oBAAA,GAAW;EAC/B,SAAOA,QAAQ,CAAC,IAAD,EAAO,aAAP,CAAf;EACD,CAFD;EAGA;;;EACA,eAAmB,GAAG,oBAAA,GAAW;EAC/B,OAAK7rB,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;;EAErB,QAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACAA,IAAAA,KAAK,CAAC9J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;EACtB,UAAIA,CAAC,KAAK,CAAV,EAAa;EACXyB,QAAAA,CAAC,CAACu4B,WAAF;EACD;;EACD,UAAIh6B,CAAC,KAAKiM,KAAK,CAAC7L,MAAN,GAAe,CAAzB,EAA4B;EAC1BqB,QAAAA,CAAC,CAACiC,IAAF,GAAS,EAAT;EACD;EACF,KAPD;EAQD,GAXD,EAD+B;;EAc/B,SAAO,IAAP;GAdF;;;;;;;;;;ECvBA;EACAU,EAAAA,WAAA,GAAc,UAAStE,GAAT,EAAc2O,MAAd,EAAsB;EAClC,QAAI3O,GAAG,KAAK2F,SAAZ,EAAuB;EACrB,aAAO,KAAKyI,IAAL,CAAU,CAAV,EAAajC,KAAb,CAAmB,CAAnB,EAAsBxI,GAA7B;EACD;;EACD,SAAKyK,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAIyH,IAAI,GAAGzH,CAAC,CAAC4K,KAAF,CAAQ,CAAR,CAAX;;EACA,UAAIwC,MAAM,KAAK,IAAf,EAAqB;EACnB3F,QAAAA,IAAI,CAACrF,GAAL,IAAY3D,GAAZ;EACD,OAFD,MAEO;EACLgJ,QAAAA,IAAI,CAACrF,GAAL,GAAW3D,GAAX;EACD;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GAbD;EAeA;;;EACAsE,EAAAA,YAAA,GAAe,UAAStE,GAAT,EAAc2O,MAAd,EAAsB;;EAEnC,QAAI3O,GAAG,KAAK2F,SAAZ,EAAuB;EACrB,aAAO,KAAKyI,IAAL,CAAUzB,GAAV,CAAc,UAAApL,CAAC,EAAI;EACxB,YAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACA,YAAInD,IAAI,GAAGmD,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAhB;EACA,eAAO0I,IAAI,CAACpF,IAAZ;EACD,OAJM,CAAP;EAKD,KARkC;;;EAUnC,SAAKwK,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACA,UAAInD,IAAI,GAAGmD,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAhB;;EACA,UAAIqO,MAAM,KAAK,IAAf,EAAqB;EACnB3F,QAAAA,IAAI,CAACpF,IAAL,IAAa5D,GAAb;EACD,OAFD,MAEO;EACLgJ,QAAAA,IAAI,CAACpF,IAAL,GAAY5D,GAAZ;EACD;EACF,KARD;EASA,WAAO,IAAP;EACD,GApBD;EAsBA;;;EACAsE,EAAAA,YAAA,GAAe,YAAW;EACxB,SAAK8J,IAAL,GAAY,KAAKA,IAAL,CAAUzB,GAAV,CAAc,UAAApL,CAAC;EAAA,aAAIA,CAAC,CAAC0B,IAAF,EAAJ;EAAA,KAAf,CAAZ;EACA,WAAO,IAAP;EACD,GAHD;EAKA;;;EACAqB,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,SAAK8J,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CADqB;;EAGrBA,MAAAA,KAAK,CAAC9J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;EACtB,YAAIA,CAAC,KAAK,CAAV,EAAa;EACXyB,UAAAA,CAAC,CAACgC,GAAF,GAAQ,EAAR;EACD;;EACD,YAAIwI,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAT,EAAkB;EAChByB,UAAAA,CAAC,CAACiC,IAAF,GAAS,GAAT;EACD;EACF,OAPD;EAQD,KAXD;EAYA,WAAO,IAAP;EACD,GAdD;EAgBA;;;EACAU,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,QAAMgS,SAAS,GAAG,SAAlB;EACA,SAAKlI,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CADqB;;EAGrBA,MAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,YAAI2U,SAAS,CAACzT,IAAV,CAAelB,CAAC,CAACiC,IAAjB,CAAJ,EAA4B;EAC1BjC,UAAAA,CAAC,CAACiC,IAAF,GAAS,GAAT;EACD;EACF,OAJD;EAKD,KARD;EASA,WAAO,IAAP;EACD,GAZD;;EAaAU,EAAAA,mBAAA,GAAsBA,OAAO,CAAC61B,WAA9B;EAEA;;EACA71B,EAAAA,oBAAA,GAAuB,UAASmB,KAAT,EAAgBC,GAAhB,EAAqB;EAC1CD,IAAAA,KAAK,GAAGA,KAAK,QAAb;EACAC,IAAAA,GAAG,GAAGA,GAAG,QAAT;EACA,SAAK0I,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACAA,MAAAA,KAAK,CAAC,CAAD,CAAL,CAASxI,GAAT,GAAe8B,KAAK,GAAG0G,KAAK,CAAC,CAAD,CAAL,CAASxI,GAAhC;EACA,UAAI4E,IAAI,GAAG4D,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAhB;EACAiI,MAAAA,IAAI,CAAC3E,IAAL,GAAY8B,GAAG,GAAG6C,IAAI,CAAC3E,IAAvB;EACD,KALD;EAMA,WAAO,IAAP;EACD,GAVD;;EAWAU,EAAAA,mBAAA,GAAsBA,OAAO,CAAC81B,YAA9B;EAEA;;EACA91B,EAAAA,qBAAA,GAAwB,UAASmB,KAAT,EAAgBC,GAAhB,EAAqB;EAC3CD,IAAAA,KAAK,GAAGA,KAAK,OAAb;EACAC,IAAAA,GAAG,GAAGA,GAAG,OAAT;EACA,SAAK0I,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACAA,MAAAA,KAAK,CAAC,CAAD,CAAL,CAASxI,GAAT,GAAe8B,KAAK,GAAG0G,KAAK,CAAC,CAAD,CAAL,CAASxI,GAAhC;EACA,UAAI4E,IAAI,GAAG4D,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAhB;EACAiI,MAAAA,IAAI,CAAC3E,IAAL,GAAY8B,GAAG,GAAG6C,IAAI,CAAC3E,IAAvB;EACD,KALD;EAMA,WAAO,IAAP;KATF;;;;;;;;;;;;EC7FA;EACA,QAAY,GAAG,aAAA,CAAS5D,GAAT,EAAc;;EAE3B,OAAKo1B,OAAL,GAF2B;;EAI3B,MAAIrmB,IAAI,GAAG,KAAKX,IAAL,CAAU,CAAV,CAAX;EACA,MAAIrG,MAAM,GAAGgH,IAAI,CAACzO,MAAlB;EACA,MAAI+5B,OAAO,GAAG,EAAd;;EACA,OAAK,IAAIn6B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkO,IAAL,CAAU9N,MAA9B,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,QAAMqB,CAAC,GAAG,KAAK6M,IAAL,CAAUlO,CAAV,CAAV;EACAm6B,IAAAA,OAAO,CAAC94B,CAAC,CAACkE,KAAH,CAAP,GAAmB,IAAnB;EACA,QAAIuD,IAAI,GAAG+F,IAAI,CAACzB,QAAL,EAAX,CAHyC;;EAKzC,QAAItN,GAAJ,EAAS;EACPgJ,MAAAA,IAAI,CAACpF,IAAL,IAAa5D,GAAb;EACD,KAPwC;;;EASzCgJ,IAAAA,IAAI,CAAC8C,IAAL,GAAYvK,CAAC,CAACkE,KAAd,CATyC;;EAWzClE,IAAAA,CAAC,CAAC4K,KAAF,CAAQ,CAAR,EAAWN,IAAX,GAAkB7C,IAAI,CAACzD,EAAvB;EACAwJ,IAAAA,IAAI,CAACzO,MAAL,IAAeiB,CAAC,CAACjB,MAAjB;EACAyO,IAAAA,IAAI,CAAC7C,KAAL,GAAa,EAAb;EACD,GArB0B;;;;EAyB3B,MAAIouB,QAAQ,GAAGvrB,IAAI,CAACzO,MAAL,GAAcyH,MAA7B;EACA,OAAK6G,OAAL,GAAevM,OAAf,CAAuB,UAAAkM,GAAG,EAAI;;EAE5BA,IAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;;EACA,WAAK,IAAIjM,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,EAAC,EAAnC,EAAuC;EACrC,YAAIiM,KAAK,CAACjM,EAAD,CAAL,CAASqF,EAAT,KAAgBwJ,IAAI,CAACtJ,KAAzB,EAAgC;EAC9BlE,UAAAA,CAAC,CAACjB,MAAF,IAAYg6B,QAAZ;EACA;EACD;EACF;;EACD/4B,MAAAA,CAAC,CAAC2K,KAAF,GAAU,EAAV;EACD,KATD,EAF4B;;EAa5BqC,IAAAA,GAAG,CAACH,IAAJ,GAAWG,GAAG,CAACH,IAAJ,CAAStB,MAAT,CAAgB,UAAAvL,CAAC;EAAA,aAAI84B,OAAO,CAAC94B,CAAC,CAACkE,KAAH,CAAP,KAAqB,IAAzB;EAAA,KAAjB,CAAX;EACD,GAdD,EA1B2B;;EA0C3B,SAAO,KAAKgH,SAAL,CAAe,CAACsC,IAAD,CAAf,CAAP;GA1CF;;;;;;ECDA,IAAMwrB,SAAS,GAAG,kBAAlB;EAEA;EACA;EACA;;EAEA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAASp5B,CAAT,EAAYq5B,MAAZ,EAAoB;EACzC,MAAI,CAACr5B,CAAC,CAACyC,KAAP,EAAc;EACZ;EACD;;EACD,MAAIsI,KAAK,GAAG/K,CAAC,CAACozB,QAAF,EAAZ,CAJyC;;EAMzC,OAAK,IAAIt0B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAAN,GAAe,CAAnC,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,QAAMyB,CAAC,GAAGwK,KAAK,CAACjM,CAAD,CAAf;;EACA,QAAIq6B,SAAS,CAAC13B,IAAV,CAAelB,CAAC,CAACiC,IAAjB,CAAJ,EAA4B;EAC1B;EACD;EACF,GAXwC;;;EAczCuI,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjBA,IAAAA,CAAC,CAACuD,QAAF,GAAavD,CAAC,CAACoB,KAAf;EACD,GAFD,EAdyC;;EAkBzCoJ,EAAAA,KAAK,CAAC,CAAD,CAAL,CAASlM,IAAT,IAAiBw6B,MAAjB,CAlByC;;EAoBzCtuB,EAAAA,KAAK,CAAC0D,KAAN,CAAY,CAAZ,EAAexN,OAAf,CAAuB,UAAAV,CAAC,EAAI;EAC1BA,IAAAA,CAAC,CAAC1B,IAAF,GAAS,EAAT;EACD,GAFD;;EAGA,OAAK,IAAIC,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGiM,KAAK,CAAC7L,MAAN,GAAe,CAAnC,EAAsCJ,EAAC,EAAvC,EAA2C;EACzC,QAAMyB,EAAC,GAAGwK,KAAK,CAACjM,EAAD,CAAf;EACAyB,IAAAA,EAAC,CAACiC,IAAF,GAASjC,EAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,GAAf,EAAoB,EAApB,CAAT;EACD;EACF,CA3BD;EA6BA;;;EACA,YAAgB,GAAG,iBAAA,GAAW;EAC5B,MAAIoL,GAAG,GAAG,KAAKmlB,GAAL,CAAS,iBAAT,CAAV,CAD4B;;EAG5B,MAAItyB,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,mBAAV,CAAR;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,QAAd,CAJ4B;;EAM5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,8BAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,QAAd,CAP4B;;EAS5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,wBAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,OAAd,CAV4B;;EAY5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,YAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,OAAd,CAb4B;;EAe5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,eAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,OAAd,CAhB4B;;EAkB5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,0DAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,QAAd,CAnB4B;;EAqB5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,kBAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,QAAd,CAtB4B;;EAwB5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,2BAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,QAAd,CAzB4B;;EA2B5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,MAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,OAAd,CA5B4B;;EA8B5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,UAAV,CAAJ;EACA,SAAO,IAAP;GA/BF;;;;;;ECpCA,aAAc,GAAGtL,MAAM,CAACqH,MAAP,CACf,EADe,EAEfC,UAFe,EAGfC,YAHe,EAIfC,QAJe,EAKfC,MALe,EAMfC,QANe,EAOfuG,SAPe,EAQfghB,QARe,EAUfsJ,UAVe,EAWfC,SAXe,EAafC,OAbe,EAcfC,OAde,EAefC,MAfe,EAiBfC,OAjBe,EAkBfC,YAlBe,EAmBfC,QAnBe,EAoBfC,OApBe,EAqBfC,aArBe,EAsBfC,OAtBe,EAuBfC,WAvBe,CAAjB;;ECAA,IAAIrvB,SAAO,GAAG,EAAd;;EAGA,IAAMzB,GAAG,GAAG,CACV,CAAC,OAAD,EAAU,GAAV,CADU,EAEV,CAAC,YAAD,EAAe,cAAf,CAFU,EAGV,CAAC,YAAD,EAAe,YAAf,CAHU,EAIV,CAAC,UAAD,EAAa,UAAb,CAJU,EAKV,CAAC,QAAD,EAAW,QAAX,CALU,EAMV,CAAC,OAAD,EAAU,QAAV,CANU,EAOV,CAAC,WAAD,EAAc,WAAd,CAPU,EAQV,CAAC,YAAD,EAAe,YAAf,CARU,EASV,CAAC,MAAD,EAAS,MAAT,CATU,EAUV,CAAC,SAAD,EAAY,SAAZ,CAVU,EAWV,CAAC,UAAD,EAAa,UAAb,CAXU,EAYV,CAAC,cAAD,EAAiB,cAAjB,CAZU,EAaV,CAAC,cAAD,EAAiB,cAAjB,CAbU,CAAZ;EAeAA,GAAG,CAAClI,OAAJ,CAAY,UAAA7B,CAAC,EAAI;EACfwL,EAAAA,SAAO,CAACxL,CAAC,CAAC,CAAD,CAAF,CAAP,GAAgB,UAASa,CAAT,EAAY;EAC1B,QAAID,CAAC,GAAG,KAAKqM,KAAL,CAAWjN,CAAC,CAAC,CAAD,CAAZ,CAAR;;EACA,QAAI,OAAOa,CAAP,KAAa,QAAjB,EAA2B;EACzBD,MAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,WAAOD,CAAP;EACD,GAND;EAOD,CARD;;AAUA4K,WAAO,CAACsvB,MAAR,GAAiBtvB,SAAO,CAAC+sB,KAAzB;AACA/sB,WAAO,CAACuvB,UAAR,GAAqBvvB,SAAO,CAACwvB,UAA7B;AACAxvB,WAAO,CAACuH,KAAR,GAAgBvH,SAAO,CAACG,KAAxB;EAEA;;AACAH,WAAO,CAACyvB,YAAR,GAAuB,UAASp6B,CAAT,EAAY;EACjC,MAAID,CAAC,GAAG,KAAK04B,UAAL,CAAgB,WAAhB,CAAR;EACA14B,EAAAA,CAAC,GAAGA,CAAC,CAACqM,KAAF,CAAQ,eAAR,CAAJ;;EACA,MAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBD,IAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,SAAOD,CAAP;EACD,CAPD;EASA;;;AACA4K,WAAO,CAAC0vB,KAAR,GAAgB,UAASr6B,CAAT,EAAY;EAC1B,MAAID,CAAC,GAAG,KAAKqM,KAAL,CAAW,mBAAX,CAAR;;EACA,MAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBD,IAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,SAAOD,CAAP;EACD,CAND;EAQA;;;AACA4K,WAAO,CAAC2vB,MAAR,GAAiB,UAASt6B,CAAT,EAAY;;EAE3B,MAAIwmB,IAAI,GAAG,KAAKpa,KAAL,CAAW,yCAAX,CAAX,CAF2B;;EAI3B,MAAIrM,CAAC,GAAG,KAAKsyB,GAAL,CAAS7L,IAAT,EAAeiS,UAAf,CAA0B,WAA1B,CAAR,CAJ2B;;EAM3B14B,EAAAA,CAAC,GAAGA,CAAC,CAACuN,MAAF,CAASkZ,IAAT,CAAJ;EACAzmB,EAAAA,CAAC,CAAC8H,IAAF,CAAO,OAAP;EACA9H,EAAAA,CAAC,GAAGA,CAAC,CAACqM,KAAF,CAAQ,SAAR,CAAJ;;EACA,MAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBD,IAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,SAAOD,CAAP;EACD,CAbD;EAeA;;;AACA4K,WAAO,CAAC4vB,aAAR,GAAwB,UAASv6B,CAAT,EAAY;EAClC,MAAID,CAAC,GAAG,KAAKy6B,OAAL,EAAR;EACAz6B,EAAAA,CAAC,GAAGA,CAAC,CAACqM,KAAF,CAAQ,gBAAR,CAAJ;;EACA,MAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBD,IAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,SAAOD,CAAP;EACD,CAPD;;;AAUA4K,WAAO,CAAC8vB,QAAR,GAAmB,UAASz6B,CAAT,EAAY;EAC7B,MAAII,CAAC,GAAG,KAAKo6B,OAAL,EAAR,CAD6B;;EAG7B,MAAIE,GAAG,GAAGt6B,CAAC,CAACu6B,MAAF,EAAV;EACAD,EAAAA,GAAG,GAAGA,GAAG,CAACptB,MAAJ,CAAWlN,CAAC,CAACk6B,MAAF,EAAX,CAAN;EACAI,EAAAA,GAAG,GAAGA,GAAG,CAACptB,MAAJ,CAAWlN,CAAC,CAACm6B,aAAF,EAAX,CAAN;EACA,MAAIK,MAAM,GAAG,CAAC,SAAD,EAAY,KAAZ,EAAmB,OAAnB,EAA4B,QAA5B,EAAsC,SAAtC,EAAiD,QAAjD,EAA2D,QAA3D,CAAb;EACAF,EAAAA,GAAG,GAAGA,GAAG,CAACrI,GAAJ,CAAQuI,MAAR,CAAN,CAP6B;;EAS7BF,EAAAA,GAAG,CAAC7yB,IAAJ,CAAS,UAAT,EAT6B;;EAW7B,MAAI,OAAO7H,CAAP,KAAa,QAAjB,EAA2B;EACzB06B,IAAAA,GAAG,GAAGA,GAAG,CAAC1vB,GAAJ,CAAQhL,CAAR,CAAN;EACD;;EACD,SAAO06B,GAAP;EACD,CAfD;;;AAiBA/vB,WAAO,CAACkwB,MAAR,GAAiBlwB,SAAO,CAAC8vB,QAAzB;AACA9vB,WAAO,CAACmwB,MAAR,GAAiBnwB,SAAO,CAAC8vB,QAAzB;EAEA,WAAc,GAAG9vB,SAAjB;;EClGA,IAAMowB,SAAS,GAAG,iBAAlB;EAEA;;EACA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAASlwB,KAAT,EAAgBxK,CAAhB,EAAmBgF,KAAnB,EAA0B;EAC5C,MAAIsW,GAAG,GAAGtW,KAAK,CAAC4M,KAAhB,CAD4C;;EAG5C,MAAInG,GAAG,GAAGjB,KAAK,CAACxK,CAAD,CAAL,CAASyB,OAAT,GAAmB,GAAnB,GAAyB+I,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAayB,OAAhD;;EACA,MAAI6Z,GAAG,CAAC7P,GAAD,CAAH,KAAazH,SAAb,IAA0BsX,GAAG,CAACrX,cAAJ,CAAmBwH,GAAnB,MAA4B,IAA1D,EAAgE;EAC9DjB,IAAAA,KAAK,CAACxK,CAAD,CAAL,CAASoE,GAAT,CAAakX,GAAG,CAAC7P,GAAD,CAAhB,EAAuB,aAAvB,EAAsCzG,KAAtC;EACAwF,IAAAA,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiBkX,GAAG,CAAC7P,GAAD,CAApB,EAA2B,aAA3B,EAA0CzG,KAA1C;EACA,WAAO,CAAP;EACD,GAR2C;;;EAU5C,MAAIhF,CAAC,GAAG,CAAJ,GAAQwK,KAAK,CAAC7L,MAAlB,EAA0B;EACxB8M,IAAAA,GAAG,IAAI,MAAMjB,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAayB,OAA1B;;EACA,QAAI6Z,GAAG,CAAC7P,GAAD,CAAH,KAAazH,SAAb,IAA0BsX,GAAG,CAACrX,cAAJ,CAAmBwH,GAAnB,MAA4B,IAA1D,EAAgE;EAC9DjB,MAAAA,KAAK,CAACxK,CAAD,CAAL,CAASoE,GAAT,CAAakX,GAAG,CAAC7P,GAAD,CAAhB,EAAuB,eAAvB,EAAwCzG,KAAxC;EACAwF,MAAAA,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiBkX,GAAG,CAAC7P,GAAD,CAApB,EAA2B,eAA3B,EAA4CzG,KAA5C;EACAwF,MAAAA,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiBkX,GAAG,CAAC7P,GAAD,CAApB,EAA2B,eAA3B,EAA4CzG,KAA5C;EACA,aAAO,CAAP;EACD;EACF,GAlB2C;;;EAoB5C,MAAIhF,CAAC,GAAG,CAAJ,GAAQwK,KAAK,CAAC7L,MAAlB,EAA0B;EACxB8M,IAAAA,GAAG,IAAI,MAAMjB,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAayB,OAA1B;;EACA,QAAI6Z,GAAG,CAAC7P,GAAD,CAAH,KAAazH,SAAb,IAA0BsX,GAAG,CAACrX,cAAJ,CAAmBwH,GAAnB,MAA4B,IAA1D,EAAgE;EAC9DjB,MAAAA,KAAK,CAACxK,CAAD,CAAL,CAASoE,GAAT,CAAakX,GAAG,CAAC7P,GAAD,CAAhB,EAAuB,cAAvB,EAAuCzG,KAAvC;EACAwF,MAAAA,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiBkX,GAAG,CAAC7P,GAAD,CAApB,EAA2B,cAA3B,EAA2CzG,KAA3C;EACAwF,MAAAA,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiBkX,GAAG,CAAC7P,GAAD,CAApB,EAA2B,cAA3B,EAA2CzG,KAA3C;EACAwF,MAAAA,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiBkX,GAAG,CAAC7P,GAAD,CAApB,EAA2B,cAA3B,EAA2CzG,KAA3C;EACA,aAAO,CAAP;EACD;EACF;;EACD,SAAO,CAAP;EACD,CA/BD;EAiCA;;;EACA,IAAM21B,YAAY,GAAG,SAAfA,YAAe,CAASnwB,KAAT,EAAgBxF,KAAhB,EAAuB;EAC1C,MAAIsW,GAAG,GAAGtW,KAAK,CAAC4M,KAAhB;EACA,MAAI6J,WAAW,GAAGzW,KAAK,CAACyW,WAAxB,CAF0C;;;EAI1C,OAAK,IAAIzb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwK,KAAK,CAAC7L,MAA1B,EAAkCqB,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAI3B,GAAG,GAAGmM,KAAK,CAACxK,CAAD,CAAL,CAASoB,KAAnB,CADwC;;EAGxC,QAAIqa,WAAW,CAACpd,GAAD,CAAX,KAAqB,IAArB,IAA6B2B,CAAC,GAAG,CAAJ,GAAQwK,KAAK,CAAC7L,MAA/C,EAAuD;EACrD,UAAIi8B,UAAU,GAAGF,WAAW,CAAClwB,KAAD,EAAQxK,CAAR,EAAWgF,KAAX,CAA5B;;EACA,UAAI41B,UAAU,GAAG,CAAjB,EAAoB;EAClB56B,QAAAA,CAAC,IAAI46B,UAAL,CADkB;;EAElB;EACD;EACF,KATuC;;;EAWxC,QAAItf,GAAG,CAACjd,GAAD,CAAH,KAAa2F,SAAb,IAA0BsX,GAAG,CAACrX,cAAJ,CAAmB5F,GAAnB,MAA4B,IAA1D,EAAgE;EAC9DmM,MAAAA,KAAK,CAACxK,CAAD,CAAL,CAASoE,GAAT,CAAakX,GAAG,CAACjd,GAAD,CAAhB,EAAuB,SAAvB,EAAkC2G,KAAlC;EACA;EACD,KAduC;;;EAgBxC,QAAI3G,GAAG,KAAKmM,KAAK,CAACxK,CAAD,CAAL,CAASyB,OAAjB,IAA4B6Z,GAAG,CAACrX,cAAJ,CAAmBuG,KAAK,CAACxK,CAAD,CAAL,CAASyB,OAA5B,MAAyC,IAAzE,EAA+E;EAC7E+I,MAAAA,KAAK,CAACxK,CAAD,CAAL,CAASoE,GAAT,CAAakX,GAAG,CAAC9Q,KAAK,CAACxK,CAAD,CAAL,CAASyB,OAAV,CAAhB,EAAoC,SAApC,EAA+CuD,KAA/C;EACA;EACD,KAnBuC;;;EAqBxC,QAAIy1B,SAAS,CAACv5B,IAAV,CAAe7C,GAAf,MAAwB,IAA5B,EAAkC;EAChC,UAAIw8B,QAAQ,GAAGx8B,GAAG,CAACmD,OAAJ,CAAYi5B,SAAZ,EAAuB,EAAvB,CAAf;;EACA,UAAInf,GAAG,CAACrX,cAAJ,CAAmB42B,QAAnB,MAAiC,IAArC,EAA2C;EACzCrwB,QAAAA,KAAK,CAACxK,CAAD,CAAL,CAASoE,GAAT,CAAakX,GAAG,CAACuf,QAAD,CAAhB,EAA4B,kBAA5B,EAAgD71B,KAAhD;EACD;EACF;EACF;;EACD,SAAOwF,KAAP;EACD,CAjCD;;EAkCA,cAAc,GAAGmwB,YAAjB;;ECvEA,IAAMG,WAAW,GAAG,cAApB;;EAGA,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAASvwB,KAAT,EAAgBjM,CAAhB,EAAmByG,KAAnB,EAA0B;EACjD,MAAIqC,IAAI,GAAGmD,KAAK,CAACjM,CAAD,CAAhB,CADiD;;;;;;;;;;;EAcjD,MAAIu8B,WAAW,CAAC55B,IAAZ,CAAiBmG,IAAI,CAAC/I,IAAtB,CAAJ,EAAiC;EAC/B,QAAI,CAACw8B,WAAW,CAAC55B,IAAZ,CAAiBmG,IAAI,CAACrF,GAAtB,CAAD,IAA+B,CAAC84B,WAAW,CAAC55B,IAAZ,CAAiBmG,IAAI,CAACpF,IAAtB,CAAhC,IAA+DoF,IAAI,CAACjG,KAAL,CAAWzC,MAAX,GAAoB,CAAvF,EAA0F;EACxF,UAAIq8B,OAAO,GAAG3zB,IAAI,CAACjG,KAAL,CAAWiG,IAAI,CAACjG,KAAL,CAAWzC,MAAX,GAAoB,CAA/B,CAAd,CADwF;;EAGxF,UAAIq8B,OAAO,KAAK,GAAhB,EAAqB;EACnB3zB,QAAAA,IAAI,CAACjD,GAAL,CAAS,CAAC,YAAD,EAAe,MAAf,CAAT,EAAiC,UAAjC,EAA6CY,KAA7C;EACA;EACD,OANuF;;;EAQxF,UAAIg2B,OAAO,KAAK,GAAhB,EAAqB;EACnB3zB,QAAAA,IAAI,CAACjD,GAAL,CAAS,CAAC,QAAD,CAAT,EAAqB,SAArB,EAAgCY,KAAhC;EACD;EACF;EACF,GA3BgD;;;;;;;;;EAoClD,CApCD;;EAqCA,oBAAc,GAAG+1B,gBAAjB;;ECxCA;EACA;EACA,cAAc,GAAG;EAEf,CAAC,uBAAD,EAA0B,OAA1B,CAFe;EAGf,CAAC,+BAAD,EAAkC,SAAlC,CAHe,EAIf,CAAC,WAAD,EAAc,WAAd,CAJe,EAKf,CAAC,qCAAD,EAAwC,KAAxC,CALe;EAMf,CAAC,+DAAD,EAAkE,KAAlE,CANe;;EASf,CAAC,yCAAD,EAA4C,MAA5C,CATe;EAUf,CAAC,oDAAD,EAAuD,MAAvD,CAVe;EAWf,CAAC,oDAAD,EAAuD,MAAvD,CAXe;EAYf,CAAC,YAAD,EAAe,MAAf,CAZe;EAaf,CAAC,qBAAD,EAAwB,MAAxB,CAbe;EAcf,CAAC,wBAAD,EAA2B,MAA3B,CAde;EAef,CAAC,oCAAD,EAAuC,MAAvC,CAfe;EAgBf,CAAC,sCAAD,EAAyC,MAAzC,CAhBe;;EAmBf,CAAC,WAAD,EAAc,UAAd,CAnBe;EAoBf,CAAC,eAAD,EAAkB,UAAlB,CApBe;EAqBf,CAAC,eAAD,EAAkB,UAAlB,CArBe;;EAwBf,CAAC,cAAD,EAAiB,YAAjB,CAxBe;EAyBf,CAAC,aAAD,EAAgB,YAAhB,CAzBe;EA0Bf,CAAC,qCAAD,EAAwC,MAAxC,CA1Be;EA4Bf,CAAC,sCAAD,EAAyC,MAAzC,CA5Be;;EA+Bf,CAAC,qBAAD,EAAwB,aAAxB,CA/Be;EAgCf,CAAC,kCAAD,EAAqC,aAArC,CAhCe;;;;;EAuCf,CACE,yLADF,EAEE,CAAC,OAAD,EAAU,OAAV,CAFF,CAvCe;EA4Cf,CACE,yKADF,EAEE,CAAC,OAAD,EAAU,OAAV,CAFF,CA5Ce;EAiDf,CAAC,0EAAD,EAA6E,CAAC,OAAD,EAAU,OAAV,CAA7E,CAjDe;;EAqDf,CAAC,yCAAD,EAA4C,CAAC,UAAD,EAAa,cAAb,CAA5C,CArDe,EAsDf,CAAC,mDAAD,EAAsD,CAAC,SAAD,EAAY,cAAZ,CAAtD,CAtDe;EAwDf,CAAC,eAAD,EAAkB,CAAC,UAAD,EAAa,cAAb,CAAlB,CAxDe;EA2Df,CAAC,0CAAD,EAA6C,CAAC,SAAD,EAAY,UAAZ,EAAwB,cAAxB,CAA7C,CA3De;EA4Df,CAAC,aAAD,EAAgB,CAAC,SAAD,EAAY,UAAZ,EAAwB,cAAxB,CAAhB,CA5De;;EA8Df,CAAC,0BAAD,EAA6B,UAA7B,CA9De;;EAgEf,CAAC,6BAAD,EAAgC,CAAC,OAAD,EAAU,aAAV,CAAhC,CAhEe;EAiEf,CAAC,2DAAD,EAA8D,aAA9D,CAjEe;;EAmEf,CAAC,uBAAD,EAA0B,OAA1B,CAnEe;;;;EAAA,CAAjB;;ECAA,IAAME,YAAY,GAAG,iBAArB;EACA,IAAMC,aAAa,GAAG,0DAAtB;EAEA;;EACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAS9zB,IAAT,EAAerC,KAAf,EAAsB;EACvC,MAAI3G,GAAG,GAAGgJ,IAAI,CAAC/I,IAAf,CADuC;;EAGvC,OAAK,IAAIwB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyE,UAAK,CAAC5F,MAA1B,EAAkCmB,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAIyE,UAAK,CAACzE,CAAD,CAAL,CAAS,CAAT,EAAYoB,IAAZ,CAAiB7C,GAAjB,MAA0B,IAA9B,EAAoC;EAClCgJ,MAAAA,IAAI,CAAC2sB,OAAL,CAAazvB,UAAK,CAACzE,CAAD,CAAL,CAAS,CAAT,CAAb,EAA0B,aAAaA,CAAvC,EAA0CkF,KAA1C;EACA;EACD;EACF,GARsC;;;;EAWvC,MAAIqC,IAAI,CAAC/I,IAAL,CAAUK,MAAV,IAAoB,CAApB,IAAyBs8B,YAAY,CAAC/5B,IAAb,CAAkB7C,GAAlB,CAAzB,IAAmD68B,aAAa,CAACh6B,IAAd,CAAmB7C,GAAnB,CAAvD,EAAgF;EAC9EgJ,IAAAA,IAAI,CAACjD,GAAL,CAAS,cAAT,EAAyB,MAAzB,EAAiCY,KAAjC;EACD;EACF,CAdD;;EAeA,eAAc,GAAGm2B,UAAjB;;ECrBA;EACA;EACA;EACA,IAAMC,GAAG,GAAG,WAAZ;EACA,IAAMC,GAAG,GAAG,YAAZ;EACA,IAAMC,IAAI,GAAG,cAAb;EACA,IAAMC,IAAI,GAAG,UAAb;EACA,IAAMC,IAAI,GAAG,WAAb;EACA,IAAMtjB,MAAM,GAAG,QAAf;EACA,IAAMujB,GAAG,GAAG,YAAZ;EACA,IAAM51B,KAAK,GAAG,OAAd;EACA,IAAMR,IAAI,GAAG,MAAb;EACA,IAAMkQ,IAAI,GAAG,MAAb;EACA,IAAMmmB,IAAI,GAAG,UAAb;EAGA;;EACA,cAAc,GAAG;EACf78B,EAAAA,CAAC,EAAE,CACD,CAAC,aAAD,EAAgB0W,IAAhB,CADC,EAED,CAAC,iBAAD,EAAoBmmB,IAApB,CAFC;EAGD,GAAC,eAAD,EAAkBH,IAAlB,CAHC,EAID,CAAC,aAAD,EAAgBE,GAAhB,CAJC;EAAA,GADY;EAOf18B,EAAAA,CAAC,EAAE,CAAC,CAAC,cAAD,EAAiBq8B,GAAjB,CAAD,CAPY;EAQfp8B,EAAAA,CAAC,EAAE;;EAGD,GAAC,2CAAD,EAA8Cw8B,IAA9C,CAHC;;EAKD,GAAC,yBAAD,EAA4BA,IAA5B,CALC;;EAOD,GAAC,kBAAD,EAAqBA,IAArB,CAPC;;EASD,GAAC,cAAD,EAAiBA,IAAjB,CATC;EAUD,GAAC,iBAAD,EAAoBA,IAApB,CAVC;;EAYD,GAAC,eAAD,EAAkBA,IAAlB,CAZC;EAaD,GAAC,eAAD,EAAkBA,IAAlB,CAbC;;EAeD,GAAC,YAAD,EAAeA,IAAf,CAfC;EAgBD,GAAC,kBAAD,EAAqBA,IAArB,CAhBC;;EAkBD,GAAC,sBAAD,EAAyBA,IAAzB,CAlBC;;EAoBD,GAAC,oBAAD,EAAuBA,IAAvB,CApBC;;EAsBD,GAAC,kBAAD,EAAqBA,IAArB,CAtBC;;EAwBD,GAAC,cAAD,EAAiBA,IAAjB,CAxBC;EAyBD,GAAC,yBAAD,EAA4BA,IAA5B,CAzBC;;EA2BD,GAAC,mBAAD,EAAsBA,IAAtB,CA3BC;EA6BD,GAAC,cAAD,EAAiBD,IAAjB,CA7BC;EA8BD,GAAC,oBAAD,EAAuBH,GAAvB,CA9BC,EA+BD,CAAC,WAAD,EAAcA,GAAd,CA/BC,CARY;EAyCfn8B,EAAAA,CAAC,EAAE,CACD,CAAC,YAAD,EAAeo8B,GAAf,CADC,EAED,CAAC,eAAD,EAAkBA,GAAlB,CAFC,EAGD,CAAC,aAAD,EAAgBA,GAAhB,CAHC,EAID,CAAC,mBAAD,EAAsBD,GAAtB,CAJC,EAKD,CAAC,iBAAD,EAAoBA,GAApB,CALC,EAMD,CAAC,WAAD,EAAcA,GAAd,CANC,CAzCY;EAiDfh8B,EAAAA,CAAC,EAAE,CACD,CAAC,gBAAD,EAAmBg8B,GAAnB,CADC,EAED,CAAC,WAAD,EAAcM,IAAd,CAFC;EAGD,GAAC,SAAD,EAAYD,GAAZ,CAHC;EAID,GAAC,aAAD,EAAgBA,GAAhB,CAJC;EAAA,GAjDY;EAuDfl9B,EAAAA,CAAC,EAAE,CACD,CAAC,iBAAD,EAAoBm9B,IAApB,CADC;EAAA,GAvDY;EA0Dfn8B,EAAAA,CAAC,EAAE,CACD,CAAC,QAAD,EAAWk8B,GAAX,CADC;EAAA,GA1DY;EA6Dfj8B,EAAAA,CAAC,EAAE,CACD,CAAC,WAAD,EAAc47B,GAAd,CADC,EAED,CAAC,eAAD,EAAkBA,GAAlB,CAFC,EAGD,CAAC,eAAD,EAAkBA,GAAlB,CAHC,EAID,CAAC,kBAAD,EAAqBA,GAArB,CAJC,CA7DY;EAmEf37B,EAAAA,CAAC,EAAE,CACD,CAAC,eAAD,EAAkB87B,IAAlB,CADC,EAED,CAAC,cAAD,EAAiBA,IAAjB,CAFC,EAGD,CAAC,UAAD,EAAaE,GAAb,CAHC;EAID,GAAC,cAAD,EAAiB,MAAjB,CAJC,CAnEY;EAyEf/7B,EAAAA,CAAC,EAAE,CACD,CAAC,eAAD,EAAkB07B,GAAlB,CADC,EAED,CAAC,gBAAD,EAAmBv1B,KAAnB,CAFC,EAGD,CAAC,kBAAD,EAAqB,QAArB,CAHC;EAAA,GAzEY;EA8EflG,EAAAA,CAAC,EAAE,CACD,CAAC,OAAD,EAAU87B,GAAV,CADC;EAED,GAAC,SAAD,EAAYA,GAAZ,CAFC;EAGD,GAAC,aAAD,EAAgBA,GAAhB,CAHC;EAAA,GA9EY;EAmFf37B,EAAAA,CAAC,EAAE,CACD,CAAC,iBAAD,EAAoB,MAApB,CADC,EAED,CAAC,WAAD,EAAc,aAAd,CAFC,EAGD,CAAC,iBAAD,EAAoBy7B,IAApB,CAHC,EAID,CAAC,UAAD,EAAaF,GAAb,CAJC,EAKD,CAAC,oBAAD,EAAuBx1B,KAAvB,CALC,CAnFY;EA0Ff7F,EAAAA,CAAC,EAAE,CACD,CAAC,WAAD,EAAc,aAAd,CADC,EAED,CAAC,iBAAD,EAAoBo7B,GAApB,CAFC,EAGD,CAAC,eAAD,EAAkBA,GAAlB,CAHC,EAID,CAAC,WAAD,EAAc/1B,IAAd,CAJC,CA1FY;EAgGftF,EAAAA,CAAC,EAAE,CACD,CAAC,aAAD,EAAgBu7B,IAAhB,CADC,EAED,CAAC,WAAD,EAAcj2B,IAAd,CAFC,EAGD,CAAC,aAAD,EAAgBk2B,IAAhB,CAHC,EAID,CAAC,cAAD,EAAiBD,IAAjB,CAJC;EAKD,GAAC,cAAD,EAAiBA,IAAjB,CALC;EAMD,GAAC,oBAAD,EAAuBC,IAAvB,CANC,EAOD,CAAC,WAAD,EAAchmB,IAAd,CAPC,EAQD,CAAC,QAAD,EAAWkmB,GAAX,CARC;EAAA,GAhGY;EA0Gfv7B,EAAAA,CAAC,EAAE,CACD,CAAC,uBAAD,EAA0Bw7B,IAA1B,CADC;EAAA,GA1GY;EA6Gfr7B,EAAAA,CAAC,EAAE,CACD,CAAC,WAAD,EAAc+6B,GAAd,CADC,EAED,CAAC,UAAD,EAAaA,GAAb,CAFC,EAGD,CAAC,SAAD,EAAYA,GAAZ,CAHC,EAID,CAAC,YAAD,EAAeA,GAAf,CAJC,EAKD,CAAC,UAAD,EAAaG,IAAb,CALC,EAMD,CAAC,eAAD,EAAkBrjB,MAAlB,CANC,EAOD,CAAC,SAAD,EAAYA,MAAZ,CAPC,EAQD,CAAC,cAAD,EAAiBkjB,GAAjB,CARC,EASD,CAAC,gBAAD,EAAmBA,GAAnB,CATC,EAUD,CAAC,aAAD,EAAgBA,GAAhB,CAVC,EAWD,CAAC,YAAD,EAAeA,GAAf,CAXC,EAYD,CAAC,eAAD,EAAkBG,IAAlB,CAZC;EA7GY,CAAjB;;ECjBA;EACA,IAAMH,KAAG,GAAG,WAAZ;EACA,IAAMC,KAAG,GAAG,YAAZ;EACA,IAAMC,MAAI,GAAG,cAAb;EACA,IAAMC,MAAI,GAAG,UAAb;EACA,IAAMC,MAAI,GAAG,WAAb;EACA,IAAMG,GAAG,GAAG,QAAZ;EACA,IAAMC,IAAI,GAAG,QAAb;EACA,IAAM/1B,OAAK,GAAG,OAAd;EACA,IAAMg2B,EAAE,GAAG,MAAX;EACA,IAAMtmB,MAAI,GAAG,MAAb;EACA,IAAMmmB,MAAI,GAAG,UAAb;EACA,IAAM1kB,KAAK,GAAG,OAAd;;EAGA,aAAc,GAAG,CACf,IADe;EAEf,IAFe;EAGf;;EAEE8kB,EAAAA,EAAE,EAAEP,MAFN;EAGEQ,EAAAA,EAAE,EAAExmB,MAHN;EAIEymB,EAAAA,EAAE,EAAEZ,KAJN;EAKEa,EAAAA,EAAE,EAAEN,GALN;EAME,QAAME,EANR;EAOE,QAAMA;EAPR,CAHe,EAYf;;EAEEK,EAAAA,GAAG,EAAEV,MAFP;EAGEW,EAAAA,GAAG,EAAEX,MAHP;EAIEY,EAAAA,GAAG,EAAEZ,MAJP;EAME,SAAOG,GANT;EAOE,SAAO3kB,KAPT;EAQE,SAAO,QART;EASEqlB,EAAAA,GAAG,EAAEjB,KATP;EAUEr3B,EAAAA,GAAG,EAAE83B,EAVP;EAWES,EAAAA,GAAG,EAAEd,MAXP;EAYEe,EAAAA,GAAG,EAAEnB,KAZP;EAaEoB,EAAAA,GAAG,EAAEnB,KAbP;EAcEoB,EAAAA,GAAG,EAAE,QAdP;;EAeEC,EAAAA,GAAG,EAAErB,KAfP;EAgBEsB,EAAAA,GAAG,EAAEvB,KAhBP;EAiBEwB,EAAAA,GAAG,EAAExB,KAjBP;EAkBEyB,EAAAA,GAAG,EAAEvB,MAlBP;EAmBEwB,EAAAA,GAAG,EAAE1B,KAnBP;EAoBE2B,EAAAA,GAAG,EAAE3B,KApBP;EAqBE4B,EAAAA,GAAG,EAAE5B,KArBP;EAsBE6B,EAAAA,GAAG,EAAE7B,KAtBP;EAuBE8B,EAAAA,GAAG,EAAE9B,KAvBP;EAwBE+B,EAAAA,GAAG,EAAE5B,MAxBP;EAyBE6B,EAAAA,GAAG,EAAE7B,MAzBP;EA0BE8B,EAAAA,GAAG,EAAE/B;EA1BP,CAZe,EAwCf;;EAEEgC,EAAAA,IAAI,EAAE9B,MAFR;EAGE+B,EAAAA,IAAI,EAAE/B,MAHR;EAIEgC,EAAAA,IAAI,EAAEhC,MAJR;EAKEiC,EAAAA,IAAI,EAAEjC,MALR;EAMEkC,EAAAA,IAAI,EAAElC,MANR;EAOEmC,EAAAA,IAAI,EAAEnC,MAPR;EAQEoC,EAAAA,IAAI,EAAEpC,MARR;EAUEqC,EAAAA,IAAI,EAAEnC,MAVR;;EAWEoC,EAAAA,IAAI,EAAEzC,KAXR;EAYE0C,EAAAA,IAAI,EAAErC,MAZR;;EAaEsC,EAAAA,IAAI,EAAEtC,MAbR;;EAcEuC,EAAAA,IAAI,EAAE3C,MAdR;EAeE4C,EAAAA,IAAI,EAAErC,EAfR;EAgBEsC,EAAAA,IAAI,EAAEzC,MAhBR;;EAiBE0C,EAAAA,IAAI,EAAE7C,MAjBR;EAkBE8C,EAAAA,IAAI,EAAE/C,MAlBR;EAmBEgD,EAAAA,IAAI,EAAE3C,GAnBR;EAoBE4C,EAAAA,IAAI,EAAElD,KApBR;EAqBEmD,EAAAA,IAAI,EAAEpD,KArBR;EAsBEqD,EAAAA,IAAI,EAAE7C,IAtBR;EAuBE8C,EAAAA,IAAI,EAAE9C,IAvBR;EAwBE+C,EAAAA,IAAI,EAAE/C,IAxBR;EAyBEgD,EAAAA,IAAI,EAAEjD,GAzBR;EA0BEkD,EAAAA,IAAI,EAAEzD,KA1BR;EA2BE0D,EAAAA,IAAI,EAAE1D,KA3BR;EA4BE2D,EAAAA,IAAI,EAAErD,MA5BR;;EA6BEsD,EAAAA,IAAI,EAAE1D,MA7BR;EA8BE2D,EAAAA,IAAI,EAAEjoB,KA9BR;EA+BEpS,EAAAA,IAAI,EAAEw2B,KA/BR;EAgCE8D,EAAAA,IAAI,EAAExD,MAhCR;;EAiCEyD,EAAAA,IAAI,EAAE9D,KAjCR;EAkCE+D,EAAAA,IAAI,EAAE,OAlCR;EAmCEC,EAAAA,IAAI,EAAE9D,MAnCR;EAoCE+D,EAAAA,IAAI,EAAElE,KApCR;EAqCEmE,EAAAA,IAAI,EAAEhqB,MArCR;EAsCEiqB,EAAAA,IAAI,EAAEjE;EAtCR,CAxCe,EAgFf;;EAEEkE,EAAAA,KAAK,EAAEjE,MAFT;EAGEkE,EAAAA,KAAK,EAAElE,MAHT;EAIEmE,EAAAA,KAAK,EAAEnE,MAJT;EAMEoE,EAAAA,KAAK,EAAEhE,IANT;EAOEiE,EAAAA,KAAK,EAAEzE,KAPT;EAQE0E,EAAAA,KAAK,EAAElE,IART;EASEmE,EAAAA,KAAK,EAAEpE,GATT;EAUEqE,EAAAA,KAAK,EAAE1E,MAVT;EAWE2E,EAAAA,KAAK,EAAErE,IAXT;EAYEsE,EAAAA,KAAK,EAAExE,MAZT;;EAaEyE,EAAAA,KAAK,EAAEzE,MAbT;;EAcE0E,EAAAA,KAAK,EAAE7qB,MAdT;EAeE8qB,EAAAA,KAAK,EAAEzE,IAfT;EAgBE0E,EAAAA,KAAK,EAAElF,KAhBT;EAiBEmF,EAAAA,KAAK,EAAEjF,MAjBT;EAkBEkF,EAAAA,KAAK,EAAE,SAlBT;EAmBEC,EAAAA,KAAK,EAAE7E,IAnBT;EAoBE8E,EAAAA,KAAK,EAAE/E,GApBT;EAqBEgF,EAAAA,KAAK,EAAEhF;EArBT,CAhFe,EAuGf;;EAEEiF,EAAAA,MAAM,EAAElF,MAFV;;EAGEmF,EAAAA,MAAM,EAAEh7B,OAHV;EAIEi7B,EAAAA,MAAM,EAAEj7B,OAJV;EAKEk7B,EAAAA,MAAM,EAAE;EALV,CAvGe,EA8Gf;;EAEEC,EAAAA,OAAO,EAAEtF,MAFX;;EAGEuF,EAAAA,OAAO,EAAEvF,MAHX;;EAAA,CA9Ge,CAAjB;;ECZA,IAAMwF,SAAS,GAAG,SAAZA,SAAY,CAAS75B,IAAT,EAAerC,KAAf,EAAsB;EACtC,MAAI3G,GAAG,GAAGgJ,IAAI,CAACjG,KAAf;EACA,MAAI+/B,KAAI,GAAG9iC,GAAG,CAACA,GAAG,CAACM,MAAJ,GAAa,CAAd,CAAd;;EACA,MAAIutB,UAAQ,CAACjoB,cAAT,CAAwBk9B,KAAxB,MAAkC,IAAtC,EAA4C;EAC1C,QAAI9yB,IAAI,GAAG6d,UAAQ,CAACiV,KAAD,CAAnB;;EACA,SAAK,IAAIrhC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuO,IAAI,CAAC1P,MAAzB,EAAiCmB,CAAC,IAAI,CAAtC,EAAyC;EACvC,UAAIuO,IAAI,CAACvO,CAAD,CAAJ,CAAQ,CAAR,EAAWoB,IAAX,CAAgB7C,GAAhB,MAAyB,IAA7B,EAAmC;EACjCgJ,QAAAA,IAAI,CAAC2sB,OAAL,CAAa3lB,IAAI,CAACvO,CAAD,CAAJ,CAAQ,CAAR,CAAb,mBAAmCqhC,KAAnC,eAA4CrhC,CAA5C,GAAiDkF,KAAjD;EACA;EACD;EACF;EACF;EACF,CAZD;;;EAeA,IAAMo8B,aAAa,GAAG,SAAhBA,aAAgB,CAAS/5B,IAAT,EAAerC,KAAf,EAAsB;EAC1C,MAAMoG,GAAG,GAAG/D,IAAI,CAACjG,KAAL,CAAWzC,MAAvB;EACA,MAAIoQ,GAAG,GAAG,CAAV;;EACA,MAAI3D,GAAG,IAAI2D,GAAX,EAAgB;EACdA,IAAAA,GAAG,GAAG3D,GAAG,GAAG,CAAZ;EACD;;EACD,OAAK,IAAI7M,CAAC,GAAGwQ,GAAb,EAAkBxQ,CAAC,GAAG,CAAtB,EAAyBA,CAAC,IAAI,CAA9B,EAAiC;EAC/B,QAAIF,GAAG,GAAGgJ,IAAI,CAACjG,KAAL,CAAW4H,MAAX,CAAkBoC,GAAG,GAAG7M,CAAxB,EAA2B6M,GAA3B,CAAV;;EACA,QAAIi2B,SAAS,CAAChjC,GAAG,CAACM,MAAL,CAAT,CAAsBsF,cAAtB,CAAqC5F,GAArC,MAA8C,IAAlD,EAAwD;EACtD,UAAI+F,GAAG,GAAGi9B,SAAS,CAAChjC,GAAG,CAACM,MAAL,CAAT,CAAsBN,GAAtB,CAAV;EACAgJ,MAAAA,IAAI,CAAC2sB,OAAL,CAAa5vB,GAAb,EAAkB,aAAa/F,GAA/B,EAAoC2G,KAApC;EACA;EACD;EACF;EACF,CAdD;;;EAiBA,IAAMm2B,YAAU,GAAG,SAAbA,UAAa,CAAS9zB,IAAT,EAAerC,KAAf,EAAsB;EACvCo8B,EAAAA,aAAa,CAAC/5B,IAAD,EAAOrC,KAAP,CAAb;EACAk8B,EAAAA,SAAS,CAAC75B,IAAD,EAAOrC,KAAP,CAAT;EACD,CAHD;;EAIA,eAAc,GAAGm2B,YAAjB;;ECvCA;EACA;EACA;EACA,aAAc,GAAG;EACf,QAAM,IADS;EAEf,QAAM,IAFS;EAGf,QAAM,IAHS;EAIf,QAAM,IAJS;EAKf,QAAM,IALS;EAMf,QAAM,IANS;EAOf,QAAM,IAPS;EAQf,QAAM,IARS;EASf,SAAO,IATQ;EAUf,QAAM,IAVS;EAWf,QAAM,IAXS;EAYf,QAAM,IAZS;EAaf,SAAO,IAbQ;EAcf,SAAO,IAdQ;EAef,SAAO,IAfQ;EAgBf,SAAO,IAhBQ;EAiBf,SAAO,IAjBQ;EAkBf,SAAO,IAlBQ;EAmBf,SAAO,IAnBQ;EAoBf,SAAO,IApBQ;EAqBf,UAAQ,IArBO;EAsBf,SAAO,IAtBQ;EAuBf,SAAO,IAvBQ;EAwBf,SAAO,IAxBQ;EAyBf,SAAO,IAzBQ;EA0Bf,SAAO,IA1BQ;EA2Bf,SAAO,IA3BQ;EA4Bf,SAAO,IA5BQ;EA6Bf,SAAO,IA7BQ;EA8Bf,SAAO,IA9BQ;EA+Bf,SAAO,IA/BQ;EAgCf,SAAO,IAhCQ;EAiCf,UAAQ,IAjCO;EAkCf,SAAO,IAlCQ;EAmCf,SAAO,IAnCQ;EAoCf,SAAO,IApCQ;EAqCf,QAAM,IArCS;EAsCf,QAAM,IAtCS;EAuCf,QAAM,IAvCS;EAwCf,QAAM,IAxCS;EAyCf,SAAO,IAzCQ;EA0Cf,SAAO,IA1CQ;EA2Cf,SAAO,IA3CQ;EA4Cf,SAAO,IA5CQ;EA6Cf,SAAO,IA7CQ;EA8Cf,SAAO,IA9CQ;EA+Cf,SAAO,IA/CQ;EAgDf,SAAO,IAhDQ;EAiDf,QAAM,IAjDS;EAkDf,SAAO,IAlDQ;EAmDf,UAAQ;EAnDO,CAAjB;;ECFA,IAAMmG,QAAQ,GAAG,oGAAjB;EAGA;EACA;EACA;EAEA;EACA;;EACA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAAAC,GAAG,EAAI;EAC1B,MAAIA,GAAG,CAACz4B,MAAJ,CAAW,CAAX,MAAkB,GAAtB,EAA2B;;EAEzB,QAAIy4B,GAAG,CAAC11B,KAAJ,CAAU,MAAV,MAAsB,IAA1B,EAAgC;EAC9B,aAAO,KAAP;EACD,KAJwB;;;EAMzB,QAAI01B,GAAG,CAAC11B,KAAJ,CAAU,GAAV,CAAJ,EAAoB;EAClB,aAAO,KAAP;EACD,KARwB;;;EAUzB,QAAI01B,GAAG,CAAC7iC,MAAJ,GAAa,EAAjB,EAAqB;EACnB,aAAO,KAAP;EACD;;EACD,WAAO,IAAP;EACD;;EACD,SAAO,KAAP;EACD,CAjBD;;;EAoBA,IAAM8iC,UAAU,GAAG,SAAbA,UAAa,CAAApjC,GAAG,EAAI;EACxBA,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,OAAZ,EAAqB,GAArB,CAAN,CADwB;;EAExB,SAAOkgC,SAAQ,CAACz9B,cAAT,CAAwB5F,GAAxB,CAAP;EACD,CAHD;;EAKA,IAAMsjC,QAAQ,GAAG,SAAXA,QAAW,CAACt6B,IAAD,EAAOrC,KAAP,EAAiB;EAChC,MAAIw8B,GAAG,GAAGn6B,IAAI,CAACrF,GAAL,GAAWqF,IAAI,CAAC/I,IAAhB,GAAuB+I,IAAI,CAACpF,IAAtC;EACAu/B,EAAAA,GAAG,GAAGA,GAAG,CAAClgC,IAAJ,EAAN,CAFgC;;EAIhCkgC,EAAAA,GAAG,GAAGA,GAAG,CAAChgC,OAAJ,CAAY,SAAZ,EAAuB,EAAvB,CAAN,CAJgC;;EAMhC,MAAI+/B,YAAY,CAACC,GAAD,CAAZ,KAAsB,IAA1B,EAAgC;EAC9Bn6B,IAAAA,IAAI,CAACjD,GAAL,CAAS,OAAT,EAAkB,aAAlB,EAAiCY,KAAjC;EACAqC,IAAAA,IAAI,CAAC/I,IAAL,GAAYkjC,GAAZ;EACAn6B,IAAAA,IAAI,CAACrF,GAAL,GAAWqF,IAAI,CAACrF,GAAL,CAASR,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAX;EACA6F,IAAAA,IAAI,CAACpF,IAAL,GAAYoF,IAAI,CAACpF,IAAL,CAAUT,OAAV,CAAkB,GAAlB,EAAuB,EAAvB,CAAZ;EACD,GAX+B;;;EAahC,MAAI6F,IAAI,CAAC/I,IAAL,CAAUwN,KAAV,CAAgBw1B,QAAhB,CAAJ,EAA+B;EAC7Bj6B,IAAAA,IAAI,CAACjD,GAAL,CAAS,OAAT,EAAkB,eAAlB,EAAmCY,KAAnC;EACAqC,IAAAA,IAAI,CAAC/I,IAAL,GAAYkjC,GAAZ;EACD,GAhB+B;;;EAkBhC,MAAIC,UAAU,CAACD,GAAD,CAAV,KAAoB,IAAxB,EAA8B;EAC5Bn6B,IAAAA,IAAI,CAACjD,GAAL,CAAS,UAAT,EAAqB,gBAArB,EAAuCY,KAAvC;EACAqC,IAAAA,IAAI,CAAC/I,IAAL,GAAYkjC,GAAZ;EACD;EACF,CAtBD;;EAwBA,YAAc,GAAGG,QAAjB;;EC3DA,IAAMC,KAAK,GAAG;EACZpmB,EAAAA,OAAO,EAAE1T,UADG;EAEZjB,EAAAA,WAAW,EAAEkB,gBAFD;EAGZxD,EAAAA,KAAK,EAAEyD,WAHK;EAIZ8wB,EAAAA,MAAM,EAAE7wB,WAJI;EAKZmvB,EAAAA,KAAK,EAAElvB;EALK,CAAd;;EASA,IAAM25B,OAAO,GAAG,SAAVA,OAAU,CAASj1B,GAAT,EAAcpC,KAAd,EAAqB;EACnC,MAAIxF,KAAK,GAAG4H,GAAG,CAAC5H,KAAhB,CADmC;;EAGnC48B,EAAAA,KAAK,CAACpmB,OAAN,CAAchR,KAAd,EAAqBxF,KAArB,EAHmC;;EAMnC,OAAK,IAAIzG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAI8I,IAAI,GAAGmD,KAAK,CAACjM,CAAD,CAAhB,CADwC;;EAGxCqjC,IAAAA,KAAK,CAAC/6B,WAAN,CAAkB2D,KAAlB,EAAyBjM,CAAzB,EAA4ByG,KAA5B,EAHwC;;EAKxC48B,IAAAA,KAAK,CAACr9B,KAAN,CAAY8C,IAAZ,EAAkBrC,KAAlB,EALwC;;EAOxC48B,IAAAA,KAAK,CAAC9I,MAAN,CAAazxB,IAAb,EAAmBrC,KAAnB,EAPwC;;EASxC48B,IAAAA,KAAK,CAACxK,KAAN,CAAY/vB,IAAZ,EAAkBrC,KAAlB;EACD;;EACD,SAAO4H,GAAP;EACD,CAlBD;;EAmBA,WAAc,GAAGi1B,OAAjB;;EC5BA;EACA;EACA;EAEA;EACA,IAAIC,aAAa,GAAG;EAClBvjC,EAAAA,CAAC,EAAE,MADe;;EAElBwjC,EAAAA,KAAK,EAAE,MAFW;;EAGlBC,EAAAA,EAAE,EAAE,MAHc;;EAIlBC,EAAAA,KAAK,EAAE,MAJW;;EAKlBlQ,EAAAA,GAAG,EAAE,MALa;;EAMlBmQ,EAAAA,OAAO,EAAE,MANS;;EAOlB,QAAI,MAPc;;EAQlBC,EAAAA,GAAG,EAAE,MARa;;EASlBC,EAAAA,GAAG,EAAE,MATa;;EAUlB,UAAM,MAVY;;EAWlBC,EAAAA,GAAG,EAAE,MAXa;;EAYlBC,EAAAA,IAAI,EAAE,MAZY;;EAalBC,EAAAA,GAAG,EAAE,MAba;;EAclBC,EAAAA,IAAI,EAAE,WAdY;;EAelBC,EAAAA,GAAG,EAAE,MAfa;;EAgBlBC,EAAAA,KAAK,EAAE,MAhBW;;EAiBlBt8B,EAAAA,MAAM,EAAE,MAjBU;;EAAA,CAApB;;EAqBA,IAAIu8B,cAAc,GAAG;EACnBV,EAAAA,KAAK,EAAE,MADY;;EAEnBW,EAAAA,EAAE,EAAE,MAFe;;EAGnB7jB,EAAAA,GAAG,EAAE,WAHc;;EAInB8jB,EAAAA,IAAI,EAAE,MAJa;;EAKnBC,EAAAA,GAAG,EAAE,MALc;;EAMnBC,EAAAA,IAAI,EAAE,MANa;;EAOnBC,EAAAA,IAAI,EAAE,MAPa;;EAQnBC,EAAAA,OAAO,EAAE,MARU;;EASnBC,EAAAA,IAAI,EAAE,MATa;;EAUnBd,EAAAA,GAAG,EAAE,MAVc;;EAWnBe,EAAAA,EAAE,EAAE;EAXe,CAArB;;EAeA,IAAIC,YAAY,GAAG;EACjBvrB,EAAAA,SAAS,EAAE,MADM;;EAEjB1Q,EAAAA,UAAU,EAAE,MAFK;;EAGjBoR,EAAAA,UAAU,EAAE,MAHK;;EAIjBL,EAAAA,MAAM,EAAE,MAJS;;EAKjBxB,EAAAA,OAAO,EAAE,MALQ;;EAMjBW,EAAAA,KAAK,EAAE,MANU;;EAOjBC,EAAAA,OAAO,EAAE,MAPQ;;EAQjBN,EAAAA,KAAK,EAAE,MARU;;EASjBgB,EAAAA,WAAW,EAAE,MATI;;EAUjBnB,EAAAA,OAAO,EAAE,MAVQ;;EAWjBd,EAAAA,SAAS,EAAE,QAXM;;EAAA,CAAnB;;EAeA,IAAIstB,aAAa,GAAG;EAClBtsB,EAAAA,MAAM,EAAE,MADU;;EAElBtR,EAAAA,SAAS,EAAE,MAFO;;EAGlB+S,EAAAA,WAAW,EAAE,MAHK;;EAIlBxB,EAAAA,KAAK,EAAE,MAJW;;EAKlBE,EAAAA,UAAU,EAAE,MALM;;EAMlBD,EAAAA,YAAY,EAAE,MANI;;EAAA,CAApB;EAQA,UAAc,GAAG;EACf0rB,EAAAA,cAAc,EAAEA,cADD;EAEfb,EAAAA,aAAa,EAAEA,aAFA;EAIfwB,EAAAA,aAAa,EAAED,aAJA;EAKfE,EAAAA,YAAY,EAAEH;EALC,CAAjB;;EC/DA,IAAMI,SAAS,GAAGhjC,MAAM,CAACC,IAAP,CAAYgjC,MAAM,CAACF,YAAnB,CAAlB;EACA,IAAMG,UAAU,GAAGljC,MAAM,CAACC,IAAP,CAAYgjC,MAAM,CAACH,aAAnB,CAAnB;;EAEA,IAAMK,eAAe,GAAG,SAAlBA,eAAkB,CAASn5B,KAAT,EAAgBxF,KAAhB,EAAuB;EAAA,6BACpCzG,CADoC;EAE3C,QAAI8I,IAAI,GAAGmD,KAAK,CAACjM,CAAD,CAAhB,CAF2C;;EAI3C,QAAI8I,IAAI,CAACu8B,OAAL,OAAmB,IAAvB,EAA6B;EAC3B;EACD,KAN0C;;;;EAS3C,QAAIj4B,QAAQ,GAAGnB,KAAK,CAACjM,CAAC,GAAG,CAAL,CAApB;;EACA,QAAIoN,QAAJ,EAAc;;EAEZ,UAAI83B,MAAM,CAAC3B,aAAP,CAAqB79B,cAArB,CAAoC0H,QAAQ,CAACvK,KAA7C,MAAwD,IAA5D,EAAkE;EAChE,YAAIgD,GAAG,GAAGq/B,MAAM,CAAC3B,aAAP,CAAqBn2B,QAAQ,CAACvK,KAA9B,CAAV;EACAiG,QAAAA,IAAI,CAACjD,GAAL,CAASA,GAAT,EAAc,WAAWuH,QAAQ,CAACvK,KAAlC,EAAyC4D,KAAzC;EACA;EACD,OANW;;;;EASZ,UAAI6+B,QAAQ,GAAGL,SAAS,CAAC91B,IAAV,CAAe,UAAAtJ,GAAG;EAAA,eAAIuH,QAAQ,CAACtH,IAAT,CAAcD,GAAd,CAAJ;EAAA,OAAlB,CAAf;;EACA,UAAIy/B,QAAQ,KAAK7/B,SAAjB,EAA4B;EAC1B,YAAII,IAAG,GAAGq/B,MAAM,CAACF,YAAP,CAAoBM,QAApB,CAAV;EACAx8B,QAAAA,IAAI,CAACjD,GAAL,CAASA,IAAT,EAAc,WAAWy/B,QAAzB,EAAmC7+B,KAAnC;EACA;EACD;EACF,KAzB0C;;;EA4B3C,QAAI8+B,QAAQ,GAAGt5B,KAAK,CAACjM,CAAC,GAAG,CAAL,CAApB;;EACA,QAAIulC,QAAJ,EAAc;;EAEZ,UAAIL,MAAM,CAACd,cAAP,CAAsB1+B,cAAtB,CAAqC6/B,QAAQ,CAAC1iC,KAA9C,MAAyD,IAA7D,EAAmE;EACjE,YAAIgD,KAAG,GAAGq/B,MAAM,CAACd,cAAP,CAAsBmB,QAAQ,CAAC1iC,KAA/B,CAAV;EACAiG,QAAAA,IAAI,CAACjD,GAAL,CAASA,KAAT,EAAc,YAAY0/B,QAAQ,CAAC1iC,KAAnC,EAA0C4D,KAA1C;EACA;EACD,OANW;;;;EASZ,UAAI6+B,SAAQ,GAAGH,UAAU,CAACh2B,IAAX,CAAgB,UAAAtJ,GAAG;EAAA,eAAI0/B,QAAQ,CAACz/B,IAAT,CAAcD,GAAd,CAAJ;EAAA,OAAnB,CAAf;;EACA,UAAIy/B,SAAQ,KAAK7/B,SAAjB,EAA4B;EAC1B,YAAII,KAAG,GAAGq/B,MAAM,CAACH,aAAP,CAAqBO,SAArB,CAAV;EACAx8B,QAAAA,IAAI,CAACjD,GAAL,CAASA,KAAT,EAAc,YAAYy/B,SAA1B,EAAoC7+B,KAApC;EACA;EACD;EACF;EA5C0C;;EAC7C,OAAK,IAAIzG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EAAA,qBAAjCA,CAAiC;;EAAA,6BAyCpC;EAGL;EACF,CA9CD;;EA+CA,iBAAc,GAAGolC,eAAjB;;ECnDA,IAAMlhC,WAAS,GAAG,2BAAlB;EACA,IAAMshC,SAAS,GAAG,OAAlB;EAEA;;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASp3B,GAAT,EAAc;EAC9B,MAAI5H,KAAK,GAAG4H,GAAG,CAAC5H,KAAhB;EACA4H,EAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,QAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;;EACA,SAAK,IAAIjM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,UAAM8I,IAAI,GAAGmD,KAAK,CAACjM,CAAD,CAAlB;;EACA,UAAIkE,WAAS,CAACvB,IAAV,CAAemG,IAAI,CAAC/I,IAApB,MAA8B,IAA9B,IAAsCylC,SAAS,CAAC7iC,IAAV,CAAemG,IAAI,CAAC/I,IAApB,MAA8B,KAAxE,EAA+E;EAC7E+I,QAAAA,IAAI,CAACjD,GAAL,CAAS,YAAT,EAAuB,gBAAvB,EAAyCY,KAAzC;EACD;EACF;EACF,GARD;EASD,CAXD;;EAYA,WAAc,GAAGg/B,SAAjB;;EChBA,IAAMC,SAAS,GAAG,8BAAlB;EACA,IAAMC,MAAM,GAAG,YAAf;EAEA;;EACA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAS35B,KAAT,EAAgBxF,KAAhB,EAAuB;EACzC,MAAIsW,GAAG,GAAGtW,KAAK,CAAC4M,KAAhB;EACApH,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAA2G,IAAI,EAAI;;EAEpB,QAAIA,IAAI,CAACu8B,OAAL,OAAmB,IAAvB,EAA6B;EAC3B;EACD,KAJmB;;;EAMpB,QAAIK,SAAS,CAAC/iC,IAAV,CAAemG,IAAI,CAACjG,KAApB,MAA+B,IAAnC,EAAyC;;EAEvC,UAAIgjC,IAAI,GAAG/8B,IAAI,CAACjG,KAAL,CAAWI,OAAX,CAAmB0iC,MAAnB,EAA2B,EAA3B,CAAX;;EACA,UAAIE,IAAI,IAAIA,IAAI,CAACzlC,MAAL,GAAc,CAAtB,IAA2B2c,GAAG,CAAC8oB,IAAD,CAAH,KAAcpgC,SAAzC,IAAsDsX,GAAG,CAACrX,cAAJ,CAAmBmgC,IAAnB,MAA6B,IAAvF,EAA6F;EAC3F/8B,QAAAA,IAAI,CAACjD,GAAL,CAASkX,GAAG,CAAC8oB,IAAD,CAAZ,EAAoB,UAAUA,IAA9B,EAAoCp/B,KAApC;EACD;EACF;EACF,GAbD;EAcD,CAhBD;;EAiBA,WAAc,GAAGm/B,WAAjB;;ECrBA;EACA,IAAME,QAAQ,GAAG,CACf,WADe,EAEf,QAFe,EAGf,QAHe,EAIf,uCAJe,EAKf,4CALe,EAMf,4BANe,EAOf,kDAPe,EAQf,uBARe,EASf,qBATe,EAUf,wBAVe,EAWf,MAXe,EAYf,OAZe,EAaf,QAbe,EAcf,QAde,EAef,WAfe,EAgBf,WAhBe,EAiBf,mBAjBe,EAkBf,YAlBe,EAmBf,oBAnBe,EAoBf,oBApBe,EAqBf,OArBe,CAAjB;;EAyBA,IAAMC,UAAU,GAAG,CACjB,eADiB,EAEjB,6CAFiB,EAGjB,gBAHiB,EAIjB,SAJiB,EAKjB,kBALiB,EAMjB,SANiB,EAOjB,2BAPiB,EAQjB,UARiB,EASjB,SATiB,EAUjB,OAViB,EAWjB,oBAXiB,EAYjB,QAZiB,EAajB,eAbiB;EAcjB,iBAdiB,EAejB,kBAfiB,EAgBjB,+BAhBiB,EAiBjB,aAjBiB,EAkBjB,YAlBiB,EAmBjB,sCAnBiB,EAoBjB,QApBiB,EAqBjB,0BArBiB,CAAnB;EAuBA,cAAc,GAAG;EACfA,EAAAA,UAAU,EAAEA,UADG;EAEfD,EAAAA,QAAQ,EAAEA;EAFK,CAAjB;;EChDA,IAAME,SAAS,GAAG,CAAC,aAAD,EAAgB,SAAhB,EAA2B,OAA3B,EAAoC,OAApC,EAA6C,QAA7C,EAAuD,OAAvD,EAAgE,SAAhE,EAA2E,SAA3E,CAAlB;EAEA,IAAMC,SAAS,GAAG,CAAC,KAAD,EAAQ,MAAR,EAAgB,gBAAhB,EAAkC,KAAlC,CAAlB;EACA,IAAMC,WAAW,GAAG,CAAC,IAAD,EAAO,KAAP,CAApB;EAEA;;EACA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAS1kC,CAAT,EAAYgF,KAAZ,EAAmB;EACrC,MAAIhF,CAAC,CAACqE,IAAF,CAAOkR,IAAP,IAAe,CAACvV,CAAC,CAACqE,IAAF,CAAOmC,OAA3B,EAAoC;EAClC,QAAInI,GAAG,GAAG2B,CAAC,CAACoB,KAAZ,CADkC;;EAGlC,QAAIpB,CAAC,CAACqE,IAAF,CAAOmR,QAAP,IAAmBxV,CAAC,CAACqE,IAAF,CAAOc,MAA9B,EAAsC;EACpC;EACD,KALiC;;;EAOlC,QAAI9G,GAAG,CAACM,MAAJ,IAAc,CAAlB,EAAqB;EACnBqB,MAAAA,CAAC,CAACoE,GAAF,CAAM,UAAN,EAAkB,gBAAlB,EAAoCY,KAApC;EACA;EACD,KAViC;;;EAYlC,QAAIu/B,SAAS,CAAC72B,IAAV,CAAe,UAAAtJ,GAAG;EAAA,aAAIpE,CAAC,CAACqE,IAAF,CAAOD,GAAP,CAAJ;EAAA,KAAlB,CAAJ,EAAwC;EACtC;EACD,KAdiC;;;EAgBlC,QAAIwqB,UAAK,CAACyV,QAAN,CAAe32B,IAAf,CAAoB,UAAAhK,GAAG;EAAA,aAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,KAAvB,CAAJ,EAA+C;EAC7C2B,MAAAA,CAAC,CAACoE,GAAF,CAAM,QAAN,EAAgB,cAAhB,EAAgCY,KAAhC;EACA;EACD,KAnBiC;;;EAqBlC,QAAI4pB,UAAK,CAAC0V,UAAN,CAAiB52B,IAAjB,CAAsB,UAAAhK,GAAG;EAAA,aAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,KAAzB,CAAJ,EAAiD;EAC/C2B,MAAAA,CAAC,CAACoE,GAAF,CAAM,UAAN,EAAkB,gBAAlB,EAAoCY,KAApC;EACA;EACD,KAxBiC;;;EA2BlC,QAAI,KAAK9D,IAAL,CAAU7C,GAAV,MAAmB,IAAvB,EAA6B;;EAE3B,UAAImmC,SAAS,CAAC92B,IAAV,CAAe,UAAAhK,GAAG;EAAA,eAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,OAAlB,CAAJ,EAA0C;EACxC;EACD;;EACD2B,MAAAA,CAAC,CAACoE,GAAF,CAAM,QAAN,EAAgB,iBAAhB,EAAmCY,KAAnC;EACA;EACD,KAlCiC;;;EAoClC,QAAIy/B,WAAW,CAAC/2B,IAAZ,CAAiB,UAAAhK,GAAG;EAAA,aAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,KAApB,CAAJ,EAA4C;EAC1C;EACD;;EACD2B,IAAAA,CAAC,CAACoE,GAAF,CAAM,UAAN,EAAkB,mBAAlB,EAAuCY,KAAvC;EACD;EACF,CA1CD;;EA2CA,cAAc,GAAG0/B,WAAjB;;EClDA;EACA;EACA,IAAMC,QAAQ,GAAG,CACf,SADe,EAEf,gBAFe,EAGf,QAHe,EAIf,SAJe,EAKf,UALe,EAMf,QANe,EAOf,UAPe,EAQf,SARe,EASf,MATe,EAUf,OAVe,EAWf,YAXe,EAYf,aAZe,EAaf,WAbe,EAcf,WAde,EAef,UAfe,EAgBf,UAhBe,EAiBf,MAjBe,EAkBf,QAlBe,EAmBf,OAnBe,EAoBf,MApBe,EAqBf,QArBe,EAsBf,SAtBe,EAuBf,aAvBe,EAwBf,UAxBe,EAyBf,kBAzBe,EA0Bf,QA1Be,EA2Bf,MA3Be,EA4Bf,QA5Be,EA6Bf,SA7Be,EA8Bf,MA9Be,EA+Bf,WA/Be,EAgCf,QAhCe,EAiCf,cAjCe,EAkCf,QAlCe,EAmCf,WAnCe,EAoCf,OApCe,EAqCf,WArCe,EAsCf,QAtCe,EAuCf,QAvCe,EAwCf,QAxCe,EAyCf,UAzCe,EA0Cf,MA1Ce,EA2Cf,IA3Ce,EA4Cf,WA5Ce,EA6Cf,QA7Ce,EA8Cf,YA9Ce,EA+Cf,SA/Ce,EAgDf,YAhDe,EAiDf,WAjDe,EAkDf,gBAlDe,EAmDf,WAnDe,EAoDf,SApDe,EAqDf,eArDe,EAsDf,WAtDe,EAuDf,eAvDe,EAwDf,YAxDe,EAyDf,SAzDe,EA0Df,YA1De,EA2Df,YA3De,EA4Df,aA5De,EA6Df,OA7De,EA8Df,MA9De,EA+Df,SA/De,EAgEf,MAhEe,EAiEf,YAjEe,EAkEf,MAlEe,EAmEf,aAnEe,EAoEf,YApEe,EAqEf,kBArEe,EAsEf,aAtEe,EAuEf,QAvEe,EAwEf,aAxEe,EAyEf,aAzEe,EA0Ef,UA1Ee,EA2Ef,UA3Ee,EA4Ef,WA5Ee,EA6Ef,QA7Ee,EA8Ef,UA9Ee,EA+Ef,aA/Ee,EAgFf,QAhFe,EAiFf,UAjFe,EAkFf,YAlFe,EAmFf,aAnFe,EAoFf,eApFe,EAqFf,QArFe,EAsFf,MAtFe,EAuFf,cAvFe,EAwFf,SAxFe,EAyFf,YAzFe,EA0Ff,WA1Fe,EA2Ff,IA3Fe,EA4Ff,YA5Fe,EA6Ff,MA7Fe,EA8Ff,KA9Fe,EA+Ff,SA/Fe,EAgGf,OAhGe,EAiGf,YAjGe,EAkGf,OAlGe,EAmGf,OAnGe,EAoGf,kBApGe,EAqGf,QArGe,EAsGf,UAtGe,EAuGf,UAvGe,EAwGf,OAxGe,EAyGf,QAzGe,EA0Gf,KA1Ge,EA2Gf,YA3Ge,EA4Gf,UA5Ge,EA6Gf,WA7Ge,EA8Gf,yBA9Ge,EA+Gf,YA/Ge,EAgHf,WAhHe,EAiHf,eAjHe,EAkHf,YAlHe,EAmHf,YAnHe,EAoHf,aApHe,EAqHf,WArHe,EAsHf,SAtHe,EAuHf,YAvHe,EAwHf,MAxHe;EA0Hf,iBA1He,EA2Hf,SA3He,EA4Hf,iBA5He,EA6Hf,wBA7He,EA8Hf,UA9He,EA+Hf,UA/He,EAgIf,YAhIe,EAiIf,QAjIe,EAkIf,WAlIe,EAmIf,SAnIe,EAoIf,OApIe,EAqIf,UArIe,EAsIf,qBAtIe,EAuIf,WAvIe,EAwIf,UAxIe,EAyIf,UAzIe,EA0If,QA1Ie,EA2If,OA3Ie,EA4If,QA5Ie,EA6If,OA7Ie,EA8If,QA9Ie;EAgJf,MAhJe,EAiJf,cAjJe,EAkJf,aAlJe,EAmJf,QAnJe,EAoJf,KApJe,EAqJf,SArJe,EAsJf,WAtJe,EAuJf,cAvJe,EAwJf,UAxJe,EAyJf,aAzJe;EA2Jf,gBA3Je,EA4Jf,QA5Je,EA6Jf,WA7Je,EA8Jf,YA9Je,EA+Jf,gBA/Je,EAgKf,iBAhKe,EAiKf,OAjKe,EAkKf,KAlKe,EAmKf,QAnKe,EAoKf,aApKe,EAqKf,MArKe,EAsKf,OAtKe,EAuKf,OAvKe,EAwKf,aAxKe,EAyKf,SAzKe,EA0Kf,OA1Ke,EA2Kf,oBA3Ke,EA4Kf,2BA5Ke,EA6Kf,SA7Ke,EA8Kf,WA9Ke,EA+Kf,YA/Ke,EAgLf,aAhLe,EAiLf,SAjLe,EAkLf,QAlLe,EAmLf,YAnLe,EAoLf,SApLe,EAqLf,UArLe,EAsLf,aAtLe,EAuLf,SAvLe,EAwLf,SAxLe,EAyLf,MAzLe,EA0Lf,UA1Le,EA2Lf,cA3Le,EA4Lf,kBA5Le,EA6Lf,gBA7Le,EA8Lf,cA9Le,EA+Lf,UA/Le,EAgMf,SAhMe,EAiMf,oBAjMe,EAkMf,WAlMe,EAmMf,YAnMe,EAoMf,OApMe,EAqMf,UArMe,EAsMf,IAtMe,EAuMf,OAvMe,EAwMf,YAxMe,EAyMf,WAzMe,EA0Mf,SA1Me,CAAjB;EA6MA,iBAAc,GAAGA,QAAQ,CAACriC,MAAT,CAAgB,UAASlD,CAAT,EAAYf,GAAZ,EAAiB;EAChDe,EAAAA,CAAC,CAACf,GAAD,CAAD,GAAS,MAAT;EACA,SAAOe,CAAP;EACD,CAHgB,EAGd,EAHc,CAAjB;;EC5MA,IAAMwlC,QAAQ,GAAG,SAAXA,QAAW,CAAS5kC,CAAT,EAAY;;EAE3B,MAAI,CAACA,CAAC,CAACqE,IAAF,CAAOkR,IAAZ,EAAkB;EAChB,WAAO,KAAP;EACD,GAJ0B;;;EAM3B,MAAIvV,CAAC,CAACqE,IAAF,CAAOqS,OAAP,IAAkB1W,CAAC,CAACqE,IAAF,CAAOwgC,KAAzB,IAAkC7kC,CAAC,CAACqE,IAAF,CAAO8C,UAA7C,EAAyD;EACvD,WAAO,KAAP;EACD,GAR0B;;;EAU3B,MAAInH,CAAC,CAACqE,IAAF,CAAOgS,YAAP,IAAuBrW,CAAC,CAACqE,IAAF,CAAOmC,OAA9B,IAAyCxG,CAAC,CAACqE,IAAF,CAAO2R,KAAhD,IAAyDhW,CAAC,CAACyC,SAAF,EAA7D,EAA4E;EAC1E,WAAO,IAAP;EACD;;EACD,SAAO,KAAP;EACD,CAdD;;EAgBA,IAAMqiC,OAAO,GAAG,SAAVA,OAAU,CAASt6B,KAAT,EAAgBxF,KAAhB,EAAuB;EACrC,OAAK,IAAIzG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAIyB,CAAC,GAAGwK,KAAK,CAACjM,CAAD,CAAb;;EACA,QAAIomC,aAAQ,CAAC3kC,CAAC,CAACoB,KAAH,CAAR,KAAsB4C,SAAtB,IAAmC2gC,aAAQ,CAAC1gC,cAAT,CAAwBjE,CAAC,CAACoB,KAA1B,MAAqC,IAA5E,EAAkF;;EAEhF,UAAIuK,QAAQ,GAAGnB,KAAK,CAACjM,CAAC,GAAG,CAAL,CAApB;;EACA,UAAIoN,QAAQ,KAAK3H,SAAb,IAA0B4gC,QAAQ,CAACj5B,QAAD,CAAR,KAAuB,IAArD,EAA2D;EACzDA,QAAAA,QAAQ,CAACqoB,OAAT,CAAiB,cAAjB,EAAiC,YAAjC,EAA+ChvB,KAA/C;EACAhF,QAAAA,CAAC,CAACg0B,OAAF,CAAU,cAAV,EAA0B,YAA1B,EAAwChvB,KAAxC;EACA;EACD,OAP+E;;;EAShF,UAAI8+B,QAAQ,GAAGt5B,KAAK,CAACjM,CAAC,GAAG,CAAL,CAApB;;EACA,UAAIulC,QAAQ,KAAK9/B,SAAb,IAA0B8/B,QAAQ,CAAC1iC,KAAT,KAAmB,IAAjD,EAAuD;EACrD,YAAIoJ,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAL,IAAgBqmC,QAAQ,CAACp6B,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAN,CAA5B,EAA4C;EAC1CyB,UAAAA,CAAC,CAACg0B,OAAF,CAAU,cAAV,EAA0B,eAA1B,EAA2ChvB,KAA3C;EACA8+B,UAAAA,QAAQ,CAAC9P,OAAT,CAAiB,cAAjB,EAAiC,eAAjC,EAAkDhvB,KAAlD;EACAwF,UAAAA,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAL,CAAay1B,OAAb,CAAqB,cAArB,EAAqC,eAArC,EAAsDhvB,KAAtD;EACA;EACD;EACF;EACF;EACF;EACF,CAvBD;;EAwBA,oBAAc,GAAG8/B,OAAjB;;EC3CA,IAAMhkC,kBAAgB,GAAG,gBAAzB;EACA,IAAMikC,eAAe,GAAG,qBAAxB;EAEA,IAAMC,aAAa,GAAG;EACpB3lC,EAAAA,CAAC,EAAE,IADiB;EAEpB4lC,EAAAA,CAAC,EAAE;EAFiB,CAAtB;;EAKA,IAAMhkC,WAAS,GAAG,SAAZA,SAAY,CAASoG,IAAT,EAAerC,KAAf,EAAsB;EACtC,MAAI3G,GAAG,GAAGgJ,IAAI,CAAC5F,OAAf,CADsC;;EAGtC,MAAI4F,IAAI,CAAChD,IAAL,CAAUmC,OAAd,EAAuB;EACrB,WAAO,IAAP;EACD,GALqC;;;;;;EAUtC,MAAIxB,KAAK,CAAC4M,KAAN,CAAYvT,GAAZ,CAAJ,EAAsB;EACpB,WAAO,KAAP;EACD;;EACD,SAAOgJ,IAAI,CAACpG,SAAL,EAAP;EACD,CAdD;;;EAiBA,IAAMikC,YAAY,GAAG,SAAfA,YAAe,CAAS16B,KAAT,EAAgBxF,KAAhB,EAAuB;EAC1CwF,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAA2G,IAAI,EAAI;;EAEpB,QAAIA,IAAI,CAAChD,IAAL,CAAUmT,YAAV,KAA2B,IAA/B,EAAqC;EACnC;EACD,KAJmB;;;EAMpB,QAAIutB,eAAe,CAAC7jC,IAAhB,CAAqBmG,IAAI,CAAC/I,IAA1B,MAAoC,IAAxC,EAA8C;EAC5C+I,MAAAA,IAAI,CAACjD,GAAL,CAAS,SAAT,EAAoB,gBAApB,EAAsCY,KAAtC;EACD,KARmB;;;EAUpB,QAAIqC,IAAI,CAACrB,WAAL,MAAsB/E,WAAS,CAACoG,IAAD,EAAOrC,KAAP,CAAnC,EAAkD;EAChDqC,MAAAA,IAAI,CAACjD,GAAL,CAAS,SAAT,EAAoB,cAApB,EAAoCY,KAApC;EACAqC,MAAAA,IAAI,CAACjD,GAAL,CAAS,MAAT,EAAiB,eAAjB,EAAkCY,KAAlC;EACD,KAHD,MAGO,IAAI,CAACggC,aAAa,CAAC/gC,cAAd,CAA6BoD,IAAI,CAAC/I,IAAlC,CAAD,IAA4CwC,kBAAgB,CAACI,IAAjB,CAAsBmG,IAAI,CAAC/I,IAA3B,CAAhD,EAAkF;EACvF+I,MAAAA,IAAI,CAACjD,GAAL,CAAS,SAAT,EAAoB,oBAApB,EAA0CY,KAA1C;EACAqC,MAAAA,IAAI,CAACjD,GAAL,CAAS,MAAT,EAAiB,kBAAjB,EAAqCY,KAArC;EACD,KAhBmB;;;EAkBpB,QAAIqC,IAAI,CAAChD,IAAL,CAAUgS,YAAV,IAA0BhP,IAAI,CAAC/I,IAAL,CAAUK,MAAV,IAAoB,CAAlD,EAAqD;EACnD0I,MAAAA,IAAI,CAACjD,GAAL,CAAS,SAAT,EAAoB,aAApB,EAAmCY,KAAnC;EACD;;EACD,QAAIqC,IAAI,CAAChD,IAAL,CAAUgS,YAAV,IAA0BhP,IAAI,CAACrB,WAAL,EAA1B,IAAgDqB,IAAI,CAAC/I,IAAL,CAAUK,MAAV,IAAoB,CAAxE,EAA2E;EACzE0I,MAAAA,IAAI,CAACjD,GAAL,CAAS,SAAT,EAAoB,kBAApB,EAAwCY,KAAxC;EACD;EACF,GAxBD;EAyBD,CA1BD;;EA2BA,eAAc,GAAGkgC,YAAjB;;ECpDA,IAAMC,IAAI,GAAG;EACXC,EAAAA,UAAU,EAAEt9B,aADD;EAEX,UAAMC,OAFK;EAGXq8B,EAAAA,IAAI,EAAEp8B,OAHK;EAIX0T,EAAAA,MAAM,EAAEzT,UAJG;EAKXgyB,EAAAA,aAAa,EAAE/xB,gBALJ;EAMXxB,EAAAA,QAAQ,EAAE+H;EANC,CAAb;;EASA,IAAM42B,SAAS,GAAG,SAAZA,SAAY,CAASz4B,GAAT,EAAcpC,KAAd,EAAqB;EACrC,MAAIxF,KAAK,GAAG4H,GAAG,CAAC5H,KAAhB,CADqC;;EAIrCmgC,EAAAA,IAAI,CAACC,UAAL,CAAgB56B,KAAhB,EAAuBxF,KAAvB,EAJqC;;EAOrCmgC,EAAAA,IAAI,QAAJ,CAAUv4B,GAAV,EAPqC;;EAUrCu4B,EAAAA,IAAI,CAACf,IAAL,CAAU55B,KAAV,EAAiBxF,KAAjB,EAVqC;;EAarCwF,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,QAAIA,CAAC,CAAC4jC,OAAF,OAAgB,KAApB,EAA2B;EACzB5jC,MAAAA,CAAC,CAACoE,GAAF,CAAM,MAAN,EAAc,eAAd,EAA+BwI,GAAG,CAAC5H,KAAnC;EACD;EACF,GAJD,EAbqC;;EAoBrCmgC,EAAAA,IAAI,CAAClL,aAAL,CAAmBzvB,KAAnB,EAA0BxF,KAA1B,EApBqC;;EAuBrCmgC,EAAAA,IAAI,CAACz+B,QAAL,CAAc8D,KAAd,EAAqBxF,KAArB,EAvBqC;;EA0BrCwF,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjBmlC,IAAAA,IAAI,CAACzpB,MAAL,CAAY1b,CAAZ,EAAe4M,GAAG,CAAC5H,KAAnB;EACD,GAFD;EAIA,SAAO4H,GAAP;EACD,CA/BD;;EAgCA,gBAAc,GAAGy4B,SAAjB;;ECzCA,IAAMC,WAAW,GAAG,MAApB;EAEA,IAAMtpB,YAAU,GAAG;EACjB,WAAS,CAAC,MAAD,EAAS,KAAT,CADQ;EAEjBupB,EAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,KAAT,CAFW;EAGjB,WAAS,CAAC,KAAD,EAAQ,KAAR,CAHQ;EAIjBC,EAAAA,IAAI,EAAE,CAAC,KAAD,EAAQ,KAAR,CAJW;EAKjBC,EAAAA,MAAM,EAAE,CAAC,KAAD,EAAQ,KAAR,CALS;EAMjB,YAAU,CAAC,QAAD,EAAW,KAAX,CANO;EAOjBC,EAAAA,IAAI,EAAE,CAAC,IAAD,EAAO,KAAP,CAPW;EAQjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,KAAP,CARY;;EAAA,CAAnB;;EAaA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAASv+B,IAAT,EAAeoG,MAAf,EAAuB;EACpC,MAAIjD,KAAK,GAAGiD,MAAM,CAACjD,KAAP,EAAZ;EACA,MAAI7G,KAAK,GAAG6G,KAAK,CAACvH,OAAN,CAAcoE,IAAd,CAAZ;EACA,MAAIjB,MAAM,GAAGoE,KAAK,CAAC0D,KAAN,CAAY,CAAZ,EAAevK,KAAf,CAAb,CAHoC;;EAKpC,MAAIkiC,IAAI,GAAGz/B,MAAM,CAACsH,IAAP,CAAY,UAAA1N,CAAC,EAAI;EAC1B,WAAOA,CAAC,CAACqE,IAAF,CAAOkR,IAAd;EACD,GAFU,CAAX;;EAGA,MAAIswB,IAAI,IAAIA,IAAI,CAACxhC,IAAL,CAAUc,MAAtB,EAA8B;EAC5B,WAAO,CAAC,KAAD,EAAQ,KAAR,CAAP;EACD;;EACD,SAAO,CAAC,IAAD,EAAO,KAAP,CAAP;EACD,CAZD;;EAcA,IAAM2gC,aAAa,GAAG,SAAhBA,aAAgB,CAASz+B,IAAT,EAAeoG,MAAf,EAAuB;;EAE3C,MAAIuO,YAAU,CAAC/X,cAAX,CAA0BoD,IAAI,CAACjG,KAA/B,MAA0C,IAA9C,EAAoD;EAClD,WAAO4a,YAAU,CAAC3U,IAAI,CAACjG,KAAN,CAAjB;EACD,GAJ0C;;;EAM3C,MAAIiG,IAAI,CAACjG,KAAL,gBAA0BiG,IAAI,CAACjG,KAAL,KAAe,MAA7C,EAAqD;EACnD,WAAOwkC,MAAM,CAACv+B,IAAD,EAAOoG,MAAP,CAAb;EACD,GAR0C;;;EAU3C,MAAI63B,WAAW,CAACpkC,IAAZ,CAAiBmG,IAAI,CAACjG,KAAtB,MAAiC,IAArC,EAA2C;EACzC,QAAIgM,IAAI,GAAG/F,IAAI,CAACjG,KAAL,CAAWI,OAAX,CAAmB8jC,WAAnB,EAAgC,EAAhC,CAAX;EACA,WAAO,CAACl4B,IAAD,EAAO,KAAP,CAAP;EACD;;EACD,SAAO,IAAP;EACD,CAfD;;EAgBA,eAAc,GAAG04B,aAAjB;;EC7CA,IAAMlO,WAAW,GAAG,yGAApB;;EAGA,IAAMmO,IAAI,GAAG;EACXC,EAAAA,EAAE,EAAE,MADO;EAEXC,EAAAA,EAAE,EAAE,MAFO;EAGXC,EAAAA,EAAE,EAAE,KAHO;EAIXzmC,EAAAA,CAAC,EAAE,IAJQ;EAKX,SAAO;EALI,CAAb;;EAQA,IAAM0mC,eAAe,GAAG,SAAlBA,eAAkB,CAAS9+B,IAAT,EAAe;EACrC,MAAI6wB,KAAK,GAAG7wB,IAAI,CAAC/I,IAAL,CAAUwN,KAAV,CAAgB8rB,WAAhB,CAAZ;;EACA,MAAIM,KAAK,KAAK,IAAd,EAAoB;EAClB,WAAO,IAAP;EACD;;EACD,MAAI6N,IAAI,CAAC9hC,cAAL,CAAoBi0B,KAAK,CAAC,CAAD,CAAzB,CAAJ,EAAmC;EACjC,WAAO,CAACA,KAAK,CAAC,CAAD,CAAN,EAAW6N,IAAI,CAAC7N,KAAK,CAAC,CAAD,CAAN,CAAf,CAAP;EACD;;EACD,SAAO,IAAP;EACD,CATD;;EAUA,aAAc,GAAGiO,eAAjB;;ECrBA,IAAMnqB,YAAU,GAAG;EACjBoqB,EAAAA,KAAK,EAAE,CAAC,MAAD,EAAS,IAAT,CADU;EAEjBC,EAAAA,KAAK,EAAE,CAAC,OAAD,EAAU,IAAV,CAFU;EAGjBC,EAAAA,EAAE,EAAE,CAAC,GAAD,EAAM,IAAN,CAHa;EAIjBC,EAAAA,IAAI,EAAE,CAAC,GAAD,EAAM,KAAN,CAJW;EAKjBC,EAAAA,GAAG,EAAE,CAAC,GAAD,EAAM,MAAN,CALY;EAMjBC,EAAAA,IAAI,EAAE,CAAC,GAAD,EAAM,MAAN,CANW;EAQjB,aAAW,CAAC,OAAD,EAAU,KAAV,CARM;EASjBC,EAAAA,MAAM,EAAE,CAAC,OAAD,EAAU,KAAV,CATS;EAUjB,YAAU,CAAC,MAAD,EAAS,KAAT,CAVO;EAWjBC,EAAAA,KAAK,EAAE,CAAC,MAAD,EAAS,KAAT,CAXU;;;EAcjBC,EAAAA,IAAI,EAAE,CAAC,KAAD,EAAQ,KAAR,CAdW;EAejBC,EAAAA,KAAK,EAAE,CAAC,MAAD,EAAS,KAAT,CAfU;;;EAmBjBC,EAAAA,KAAK,EAAE,CAAC,IAAD,EAAO,KAAP,EAAc,MAAd,CAnBU;EAoBjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,OAAP,EAAgB,MAAhB,CApBY;EAqBjBC,EAAAA,GAAG,EAAE,CAAC,KAAD,EAAQ,IAAR,EAAc,IAAd,CArBY;EAsBjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,CAtBY;EAuBjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,QAAb,CAvBY;EAwBjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,SAAb,CAxBY;EAyBjBC,EAAAA,GAAG,EAAE,CAAC,OAAD,EAAU,GAAV,EAAe,SAAf,CAzBY;EA0BjBC,EAAAA,EAAE,EAAE,CAAC,OAAD,EAAU,KAAV,CA1Ba;EA2BjBC,EAAAA,IAAI,EAAE,CAAC,IAAD,EAAO,KAAP,CA3BW;EA4BjB,OAAK,CAAC,IAAD;EA5BY,CAAnB;;EAgCA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAASlgC,IAAT,EAAe;;EAErC,MAAI2U,YAAU,CAAC/X,cAAX,CAA0BoD,IAAI,CAACjG,KAA/B,CAAJ,EAA2C;EACzC,WAAO4a,YAAU,CAAC3U,IAAI,CAACjG,KAAN,CAAjB;EACD;;EACD,SAAO,IAAP;EACD,CAND;;EAOA,iBAAc,GAAGmmC,eAAjB;;ECvCA,IAAMC,cAAc,GAAG,8FAAvB;EAEA,IAAMC,SAAS,GAAG;EAChBC,EAAAA,IAAI,EAAE,IADU;EAEhBzF,EAAAA,KAAK,EAAE;EAFS,CAAlB;;EAIA,IAAM0F,YAAY,GAAG,SAAfA,YAAe,CAACtgC,IAAD,EAAOoD,IAAP,EAAgB;;EAEnC,MAAIpD,IAAI,CAAChD,IAAL,CAAU8C,UAAd,EAA0B;EACxB,WAAO,IAAP;EACD,GAJkC;;;EAMnC,MAAIE,IAAI,CAAChD,IAAL,CAAUqS,OAAV,IAAqBrP,IAAI,CAAChD,IAAL,CAAUqU,YAAnC,EAAiD;EAC/C,WAAO,KAAP;EACD;;EACD,MAAI+uB,SAAS,CAACxjC,cAAV,CAAyBoD,IAAI,CAACjG,KAA9B,CAAJ,EAA0C;EACxC,WAAO,KAAP;EACD,GAXkC;;;EAanC,MAAI0iC,QAAQ,GAAGr5B,IAAI,CAACC,GAAL,CAASrD,IAAI,CAAC8C,IAAd,CAAf;;EACA,MAAI,CAAC25B,QAAL,EAAe;EACb,WAAO,IAAP;EACD,GAhBkC;;;EAkBnC,MAAIA,QAAQ,CAACz/B,IAAT,CAAcgB,IAAlB,EAAwB;;EAEtB,QAAIy+B,QAAQ,CAACz/B,IAAT,CAAckB,UAAlB,EAA8B;EAC5B,aAAO,IAAP;EACD,KAJqB;;;EAMtB,QAAIu+B,QAAQ,CAACz/B,IAAT,CAAcsB,YAAlB,EAAgC;EAC9B,aAAO,IAAP;EACD;;EACD,WAAO,KAAP;EACD,GA5BkC;;;EA+BnC,MAAIm+B,QAAQ,CAACz/B,IAAT,CAAckR,IAAlB,EAAwB;EACtB,WAAO,IAAP;EACD,GAjCkC;;;EAmCnC,MAAIqyB,OAAO,GAAGn9B,IAAI,CAACC,GAAL,CAASo5B,QAAQ,CAAC35B,IAAlB,CAAd;;EACA,MAAIy9B,OAAO,IAAIA,OAAO,CAACvjC,IAAR,CAAakR,IAAxB,IAAgC,CAACqyB,OAAO,CAACvjC,IAAR,CAAaqS,OAAlD,EAA2D;EACzD,WAAO,IAAP;EACD,GAtCkC;;;EAwCnC,MAAIotB,QAAQ,CAACz/B,IAAT,CAAcwT,SAAd,IAA2BisB,QAAQ,CAACz/B,IAAT,CAAc6T,MAAzC,IAAmD4rB,QAAQ,CAACz/B,IAAT,CAAcgB,IAArE,EAA2E;EACzE,WAAO,KAAP;EACD;;EACD,SAAO,KAAP;EACD,CA5CD;;EA8CA,IAAMwiC,KAAK,GAAG,SAARA,KAAQ,CAACxgC,IAAD,EAAOoG,MAAP,EAAkB;EAC9B,MAAIjD,KAAK,GAAGiD,MAAM,CAACjD,KAAP,EAAZ;EACA,MAAI7G,KAAK,GAAG6G,KAAK,CAACvH,OAAN,CAAcoE,IAAd,CAAZ;EACA,MAAIlF,KAAK,GAAGqI,KAAK,CAAC0D,KAAN,CAAYvK,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAAZ,CAH8B;;EAK9B,SAAOxB,KAAK,CAACuL,IAAN,CAAW,UAAA1N,CAAC,EAAI;EACrB,WAAOA,CAAC,CAACqE,IAAF,CAAOoB,SAAd;EACD,GAFM,CAAP;EAGD,CARD;;EAUA,IAAMqiC,eAAe,GAAG,SAAlBA,eAAkB,CAASzgC,IAAT,EAAeoG,MAAf,EAAuBzI,KAAvB,EAA8B;;EAEpD,MAAI9C,KAAK,GAAGmF,IAAI,CAAC/I,IAAL,CAAUwN,KAAV,CAAgB07B,cAAhB,CAAZ;;EACA,MAAItlC,KAAK,KAAK,IAAd,EAAoB;;EAElB,QAAIylC,YAAY,CAACtgC,IAAD,EAAOoG,MAAM,CAAChD,IAAd,CAAZ,KAAoC,IAAxC,EAA8C;EAC5CpD,MAAAA,IAAI,CAACjD,GAAL,CAAS,aAAT,EAAwB,cAAxB,EAAwCY,KAAxC;EACA,aAAO,IAAP;EACD,KALiB;;;EAOlB,QAAI9C,KAAK,KAAK,IAAd,EAAoB;EAClB,UAAI2lC,KAAK,CAACxgC,IAAD,EAAOoG,MAAP,CAAT,EAAyB;EACvB,eAAO,CAACvL,KAAK,CAAC,CAAD,CAAN,EAAW,KAAX,CAAP;EACD;;EACD,aAAO,CAACA,KAAK,CAAC,CAAD,CAAN,EAAW,IAAX,CAAP;EACD;EACF;;EACD,SAAO,IAAP;EACD,CAlBD;;EAmBA,iBAAc,GAAG4lC,eAAjB;;ECjFA,IAAMC,UAAU,GAAG,uBAAnB;EAEA,IAAMC,MAAM,GAAG;EACbC,EAAAA,GAAG,EAAE,IADQ;EAEbC,EAAAA,IAAI,EAAE;EAFO,CAAf;EAKA;;EACA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAAS9gC,IAAT,EAAeoG,MAAf,EAAuB;EAC1C,MAAIs6B,UAAU,CAAC7mC,IAAX,CAAgBmG,IAAI,CAACjG,KAArB,CAAJ,EAAiC;EAC/B,QAAI+C,IAAI,GAAGkD,IAAI,CAACjG,KAAL,CAAWI,OAAX,CAAmB,KAAnB,EAA0B,EAA1B,CAAX,CAD+B;;EAG/B,QAAIgJ,KAAK,GAAGiD,MAAM,CAACjD,KAAP,EAAZ;EACA,QAAI7G,KAAK,GAAG6G,KAAK,CAACvH,OAAN,CAAcoE,IAAd,CAAZ;EACA,QAAIlF,KAAK,GAAGqI,KAAK,CAAC0D,KAAN,CAAYvK,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAAZ,CAL+B;;EAO/B,SAAK,IAAIpF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4D,KAAK,CAACxD,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,UAAIyB,CAAC,GAAGmC,KAAK,CAAC5D,CAAD,CAAb;;EACA,UAAIyB,CAAC,CAACqE,IAAF,CAAOgB,IAAX,EAAiB;EACf,YAAIrF,CAAC,CAACqE,IAAF,CAAOoB,SAAX,EAAsB;EACpB,iBAAO,CAACtB,IAAD,EAAO,KAAP,CAAP;EACD,SAHc;;;EAKf,YAAI6jC,MAAM,CAAC7jC,IAAD,CAAN,KAAiB,IAArB,EAA2B;EACzB,iBAAO,CAACA,IAAD,EAAO,KAAP,CAAP;EACD;;EACD,eAAO,CAACA,IAAD,EAAO,OAAP,CAAP;EACD;EACF,KAnB8B;;;EAqB/B,WAAO,CAACA,IAAD,EAAO,OAAP,CAAP;EACD;;EACD,SAAO,IAAP;EACD,CAzBD;;EA0BA,mBAAc,GAAGgkC,YAAjB;;EClCA,IAAMC,OAAO,GAAG,0BAAhB;;EAGA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAShhC,IAAT,EAAe;EAChC,MAAIA,IAAI,CAAChD,IAAL,CAAUyU,WAAV,KAA0B,IAA9B,EAAoC;EAClC,WAAO,IAAP;EACD;;EACD,MAAIof,KAAK,GAAG7wB,IAAI,CAAC/I,IAAL,CAAUwN,KAAV,CAAgBs8B,OAAhB,CAAZ;;EACA,MAAIlQ,KAAK,KAAK,IAAd,EAAoB;EAClB,WAAO,CAACA,KAAK,CAAC,CAAD,CAAN,EAAW,IAAX,EAAiBA,KAAK,CAAC,CAAD,CAAtB,CAAP;EACD;;EACD,SAAO,IAAP;EACD,CATD;;EAUA,aAAc,GAAGmQ,UAAjB;;ECbA,IAAMzQ,aAAW,GAAG,kHAApB;EAEA;;EAEA,IAAM0Q,MAAM,GAAG;EACb9oC,EAAAA,CAAC,EAAE,IADU;;EAEbT,EAAAA,CAAC,EAAE,IAFU;;EAGbC,EAAAA,CAAC,EAAE,IAHU;;EAIbM,EAAAA,CAAC,EAAE,IAJU;;EAKbG,EAAAA,CAAC,EAAE,IALU;;EAMbC,EAAAA,CAAC,EAAE,IANU;;EAOb6oC,EAAAA,EAAE,EAAE,KAPS;;EAQbxoC,EAAAA,CAAC,EAAE,IARU;;EASbC,EAAAA,CAAC,EAAE,IATU;;EAAA,CAAf;;EAYA,IAAMwoC,WAAW,GAAG,SAAdA,WAAc,CAASnhC,IAAT,EAAe;EACjC,MAAI6wB,KAAK,GAAG7wB,IAAI,CAAC/I,IAAL,CAAUwN,KAAV,CAAgB8rB,aAAhB,CAAZ;;EACA,MAAIM,KAAK,KAAK,IAAV,IAAkBoQ,MAAM,CAACrkC,cAAP,CAAsBi0B,KAAK,CAAC,CAAD,CAA3B,MAAoC,KAA1D,EAAiE;EAC/D,WAAO,IAAP;EACD;;EACD,MAAItvB,GAAG,GAAG,CAAC0/B,MAAM,CAACpQ,KAAK,CAAC,CAAD,CAAN,CAAP,EAAmBA,KAAK,CAAC,CAAD,CAAxB,CAAV;;EACA,MAAItvB,GAAG,CAAC,CAAD,CAAH,IAAUA,GAAG,CAAC,CAAD,CAAjB,EAAsB;EACpB,WAAOA,GAAP;EACD;;EACD,SAAO,IAAP;EACD,CAVD;;EAWA,aAAc,GAAG4/B,WAAjB;;EClBA,IAAMC,QAAQ,GAAG,UAAjB;;EAEA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAASxmC,KAAT,EAAgB0K,GAAhB,EAAqB;;EAExC,MAAIa,MAAM,GAAGklB,YAAQ,CAACzwB,KAAK,CAACtB,IAAN,CAAW,GAAX,CAAD,EAAkBgM,GAAG,CAAC5H,KAAtB,EAA6B4H,GAAG,CAACnC,IAAJ,EAA7B,CAAR,CAAiD,CAAjD,CAAb,CAFwC;;EAIxC,MAAID,KAAK,GAAGiD,MAAM,CAACjD,KAAP,EAAZ;EACAmwB,EAAAA,UAAY,CAACnwB,KAAD,EAAQoC,GAAG,CAAC5H,KAAZ,CAAZ,CALwC;;EAOxCwF,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjBA,IAAAA,CAAC,CAACuD,QAAF,GAAavD,CAAC,CAAC1B,IAAf;EACA0B,IAAAA,CAAC,CAAC1B,IAAF,GAAS,EAAT;EACA0B,IAAAA,CAAC,CAACoB,KAAF,GAAU,EAAV,CAHiB;;EAKjBpB,IAAAA,CAAC,CAACgC,GAAF,GAAQ,EAAR;EACAhC,IAAAA,CAAC,CAACiC,IAAF,GAAS,EAAT,CANiB;;EAQjB,QAAIwmC,QAAQ,CAACvnC,IAAT,CAAclB,CAAC,CAACuD,QAAhB,CAAJ,EAA+B;EAC7BvD,MAAAA,CAAC,CAACqE,IAAF,CAAO0M,MAAP,GAAgB,IAAhB;EACA/Q,MAAAA,CAAC,CAACqE,IAAF,CAAOkT,QAAP,GAAkB,IAAlB;EACD;EACF,GAZD;EAaA,SAAO9J,MAAP;EACD,CArBD;;EAuBA,IAAM4pB,YAAY,GAAG,SAAfA,YAAe,CAASzqB,GAAT,EAAc;EACjC,MAAI5H,KAAK,GAAG4H,GAAG,CAAC5H,KAAhB;EACA4H,EAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,QAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;;EACA,SAAK,IAAIjM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,UAAI8I,IAAI,GAAGmD,KAAK,CAACjM,CAAD,CAAhB;EACA,UAAI2D,KAAK,GAAG4jC,WAAa,CAACz+B,IAAD,EAAOzH,CAAP,CAAzB;EACAsC,MAAAA,KAAK,GAAGA,KAAK,IAAIikC,SAAe,CAAC9+B,IAAD,CAAhC;EACAnF,MAAAA,KAAK,GAAGA,KAAK,IAAIqlC,aAAe,CAAClgC,IAAD,AAAA,CAAhC;EACAnF,MAAAA,KAAK,GAAGA,KAAK,IAAI4lC,aAAe,CAACzgC,IAAD,EAAOzH,CAAP,EAAUoF,KAAV,CAAhC;EACA9C,MAAAA,KAAK,GAAGA,KAAK,IAAIimC,eAAY,CAAC9gC,IAAD,EAAOzH,CAAP,CAA7B;EACAsC,MAAAA,KAAK,GAAGA,KAAK,IAAImmC,SAAU,CAAChhC,IAAD,AAAA,CAA3B;EACAnF,MAAAA,KAAK,GAAGA,KAAK,IAAIsmC,SAAW,CAACnhC,IAAD,AAAA,CAA5B,CARwC;;EAUxC,UAAInF,KAAK,KAAK,IAAd,EAAoB;EAClB,YAAIyK,SAAS,GAAG+7B,YAAY,CAACxmC,KAAD,EAAQ0K,GAAR,CAA5B,CADkB;;EAGlB,YAAIhN,CAAC,CAACoyB,GAAF,CAAM,cAAN,MAA0B,IAA9B,EAAoC;EAClCplB,UAAAA,GAAG,CAAC9B,SAAJ,CAAc,CAAC6B,SAAD,CAAd,EAA2BvI,GAA3B,CAA+B,aAA/B;EACD,SALiB;;;EAOlB,YAAIukC,SAAS,GAAGh8B,SAAS,CAACnC,KAAV,CAAgB,CAAhB,CAAhB;EACAm+B,QAAAA,SAAS,CAACrqC,IAAV,GAAiB+I,IAAI,CAAC/I,IAAtB,CARkB;;EAUlB,YAAIwN,KAAK,GAAGlM,CAAC,CAACkL,SAAF,CAAYzD,IAAI,CAACzD,EAAjB,EAAqB,CAArB,EAAwBgJ,GAAG,CAACnC,IAAJ,EAAxB,CAAZ;EACAqB,QAAAA,KAAK,CAACtK,OAAN,CAAcmL,SAAd,EAAyBC,GAAzB,EAA8B,IAA9B;EACD;EACF;EACF,GA1BD;EA2BA,SAAOA,GAAP;EACD,CA9BD;;EA+BA,mBAAc,GAAGyqB,YAAjB;;ECjEA,IAAMuR,OAAO,GAAG,SAAVA,OAAU,CAASh8B,GAAT,EAAcrK,IAAd,EAAoB;EAClC,MAAIqG,GAAG,GAAGgE,GAAG,CAACglB,MAAJ,CAAWhgB,KAAX,CAAiBrP,IAAjB,KAA0B,EAApC;EACAqG,EAAAA,GAAG,GAAGA,GAAG,CAACoC,GAAJ,CAAQ,UAAAzM,CAAC;EAAA,WAAIqO,GAAG,CAACH,IAAJ,CAASlO,CAAT,CAAJ;EAAA,GAAT,CAAN;EACA,SAAOqO,GAAG,CAAC9B,SAAJ,CAAclC,GAAd,CAAP;EACD,CAJD;;EAKA,IAAMigC,MAAM,GAAG,SAATA,MAAS,CAASj8B,GAAT,EAAcxI,GAAd,EAAmB;EAChC,MAAIwE,GAAG,GAAGgE,GAAG,CAACglB,MAAJ,CAAWvtB,IAAX,CAAgBD,GAAhB,KAAwB,EAAlC;EACAwE,EAAAA,GAAG,GAAGA,GAAG,CAACoC,GAAJ,CAAQ,UAAAzM,CAAC;EAAA,WAAIqO,GAAG,CAACH,IAAJ,CAASlO,CAAT,CAAJ;EAAA,GAAT,CAAN;EACA,SAAOqO,GAAG,CAAC9B,SAAJ,CAAclC,GAAd,CAAP;EACD,CAJD;;;EAOA,IAAMkgC,cAAc,GAAG,SAAjBA,cAAiB,CAASl8B,GAAT,EAAc;;EAEnC,MAAInN,CAAC,GAAGmpC,OAAO,CAACh8B,GAAD,EAAM,MAAN,CAAf;EACAnN,EAAAA,CAAC,CAACqM,KAAF,CAAQ,cAAR,EACGi9B,KADH,CACS,6DADT,EAEG3kC,GAFH,CAEO,QAFP,EAEiB,aAFjB,EAHmC;;EAQnC3E,EAAAA,CAAC,GAAGopC,MAAM,CAACj8B,GAAD,EAAM,WAAN,CAAV;EACAnN,EAAAA,CAAC,CAACqM,KAAF,CAAQ,yBAAR,EACGi9B,KADH,CACS,6BADT,EAEGv+B,KAFH,CAES,CAFT,EAGGpG,GAHH,CAGO,MAHP,EAGe,WAHf,EATmC;;EAenC3E,EAAAA,CAAC,GAAGopC,MAAM,CAACj8B,GAAD,EAAM,WAAN,CAAV;EACAnN,EAAAA,CAAC,CAACqM,KAAF,CAAQ,+BAAR,EACGk9B,IADH,CACQ,cADR,EAEGA,IAFH,CAEQ,UAFR,EAGGr9B,QAHH,GAIGvH,GAJH,CAIO,WAJP,EAIoB,gBAJpB,EAhBmC;;EAuBnC3E,EAAAA,CAAC,GAAGopC,MAAM,CAACj8B,GAAD,EAAM,OAAN,CAAV;EACAnN,EAAAA,CAAC,GAAGA,CAAC,CAACqM,KAAF,CAAQ,sBAAR,CAAJ;;EACA,MAAIrM,CAAC,CAACyC,KAAN,EAAa;EACX,QAAIzC,CAAC,CAACuyB,GAAF,CAAM,SAAN,MAAqB,IAAzB,EAA+B;EAC7BvyB,MAAAA,CAAC,CAAC+K,KAAF,CAAQ,CAAR,EAAWpG,GAAX,CAAe,UAAf,EAA2B,kBAA3B;EACD,KAFD,MAEO;EACL3E,MAAAA,CAAC,CAAC+K,KAAF,CAAQ,CAAR,EAAWpG,GAAX,CAAe,QAAf,EAAyB,oBAAzB;EACD;EACF,GA/BkC;;;EAkCnCwI,EAAAA,GAAG,CAACd,KAAJ,CAAU,iBAAV,EAA6B1H,GAA7B,CAAiC,YAAjC,EAA+C,OAA/C,EAlCmC;;EAqCnC3E,EAAAA,CAAC,GAAGopC,MAAM,CAACj8B,GAAD,EAAM,QAAN,CAAV;EACAnN,EAAAA,CAAC,CAACqM,KAAF,sCACGimB,GADH,CACO,QADP,EAEG3tB,GAFH,CAEO,WAFP,EAEoB,YAFpB,EAtCmC;;EA2CnCwI,EAAAA,GAAG,CACAd,KADH,CACS,oCADT,EAEGk9B,IAFH,CAEQ,uCAFR,EAGGr9B,QAHH,GAIGvH,GAJH,CAIO,OAJP,EAIgB,SAJhB,EA3CmC;;;EAmDnC3E,EAAAA,CAAC,GAAGopC,MAAM,CAACj8B,GAAD,EAAM,YAAN,CAAV;EACAnN,EAAAA,CAAC,GAAGA,CAAC,CAACqM,KAAF,CAAQ,2BAAR,EAAqC,CAArC,CAAJ;;EACA,MAAI,CAACrM,CAAC,CAACyyB,UAAF,CAAa,2BAAb,EAA0ChwB,KAA/C,EAAsD;EACpDzC,IAAAA,CAAC,CAAC2E,GAAF,CAAM,MAAN,EAAc,WAAd;EACD;;EAED,SAAOwI,GAAP;EACD,CA1DD;;EA4DA,WAAc,GAAGk8B,cAAjB;;ECxEA,IAAMt8B,QAAM,GAAG,SAATA,MAAS,CAAS5D,GAAT,EAAc;EAC3B,MAAIqB,GAAG,GAAG,EAAV;;EACA,OAAK,IAAI1L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqK,GAAG,CAACjK,MAAxB,EAAgCJ,CAAC,EAAjC,EAAqC;EACnC0L,IAAAA,GAAG,CAACrB,GAAG,CAACrK,CAAD,CAAJ,CAAH,GAAc,IAAd;EACD;;EACD,SAAOiC,MAAM,CAACC,IAAP,CAAYwJ,GAAZ,CAAP;EACD,CAND;;EAOA,WAAc,GAAGuC,QAAjB;;ECPA;EACA,IAAMC,IAAI,GAAG;EAEX;EAAEX,EAAAA,KAAK,EAAE,UAAT;EAAqB1H,EAAAA,GAAG,EAAE,kBAA1B;EAA8CqE,EAAAA,MAAM,EAAE;EAAtD,CAFW;EAIX;EAAEqD,EAAAA,KAAK,EAAE,KAAT;EAAgB1H,EAAAA,GAAG,EAAE,gBAArB;EAAuCqE,EAAAA,MAAM,EAAE;EAA/C,CAJW;EAMX;EACEqD,EAAAA,KAAK,EAAE,oDADT;EAEE1H,EAAAA,GAAG,EAAE,4BAFP;EAGEqE,EAAAA,MAAM,EAAE;EAHV,CANW;EAaX;EAAEqD,EAAAA,KAAK,EAAE,iCAAT;EAA4CyD,EAAAA,KAAK,EAAE,CAAnD;EAAsDnL,EAAAA,GAAG,EAAE,UAA3D;EAAuEqE,EAAAA,MAAM,EAAE;EAA/E,CAbW;EAeX;EAAEqD,EAAAA,KAAK,EAAE,kBAAT;EAA6ByD,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,UAA5C;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CAfW;EAkBX;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkC1H,EAAAA,GAAG,EAAE,YAAvC;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAlBW;EAoBX;EAAEqD,EAAAA,KAAK,EAAE,cAAT;EAAyB1H,EAAAA,GAAG,EAAE,OAA9B;EAAuCqE,EAAAA,MAAM,EAAE;EAA/C,CApBW,EAqBX;EAAEqD,EAAAA,KAAK,EAAE,kBAAT;EAA6ByD,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,SAA5C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CArBW;EAuBX;EAAEqD,EAAAA,KAAK,EAAE,WAAT;EAAsByD,EAAAA,KAAK,EAAE,CAA7B;EAAgCnL,EAAAA,GAAG,EAAE,SAArC;EAAgDqE,EAAAA,MAAM,EAAE;EAAxD,CAvBW;EA0BX;EAAEqD,EAAAA,KAAK,EAAE,oBAAT;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,YAA9C;EAA4DqE,EAAAA,MAAM,EAAE;EAApE,CA1BW;EA4BX;EAAEqD,EAAAA,KAAK,EAAE,oBAAT;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,YAA9C;EAA4DqE,EAAAA,MAAM,EAAE;EAApE,CA5BW,EA6BX;EAAEqD,EAAAA,KAAK,EAAE,YAAT;EAAuB1H,EAAAA,GAAG,EAAE,6BAA5B;EAA2DqE,EAAAA,MAAM,EAAE;EAAnE,CA7BW;;EAiCX;EAAEqD,EAAAA,KAAK,EAAE,qCAAT;EAAgDyD,EAAAA,KAAK,EAAE,CAAvD;EAA0DnL,EAAAA,GAAG,EAAE,aAA/D;EAA8EqE,EAAAA,MAAM,EAAE;EAAtF,CAjCW;EAmCX;EAAEqD,EAAAA,KAAK,EAAE,oCAAT;EAA+CyD,EAAAA,KAAK,EAAE,CAAtD;EAAyDnL,EAAAA,GAAG,EAAE,aAA9D;EAA6EqE,EAAAA,MAAM,EAAE;EAArF,CAnCW,EAoCX;EAAEqD,EAAAA,KAAK,EAAE,aAAT;EAAwByD,EAAAA,KAAK,EAAE,CAA/B;EAAkCnL,EAAAA,GAAG,EAAE,aAAvC;EAAsDqE,EAAAA,MAAM,EAAE;EAA9D,CApCW;EAsCX;EAAEqD,EAAAA,KAAK,EAAE,oBAAT;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,aAA9C;EAA6DqE,EAAAA,MAAM,EAAE;EAArE,CAtCW;EAwCX;EAAEqD,EAAAA,KAAK,EAAE,mBAAT;EAA8ByD,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,aAA7C;EAA4DqE,EAAAA,MAAM,EAAE;EAApE,CAxCW;;EA4CX;EAAEqD,EAAAA,KAAK,EAAE,yBAAT;EAAoCyD,EAAAA,KAAK,EAAE,CAA3C;EAA8CnL,EAAAA,GAAG,EAAE,WAAnD;EAAgEqE,EAAAA,MAAM,EAAE;EAAxE,CA5CW;EA8CX;EAAEqD,EAAAA,KAAK,EAAE,8BAAT;EAAyCyD,EAAAA,KAAK,EAAE,CAAhD;EAAmDnL,EAAAA,GAAG,EAAE,WAAxD;EAAqEqE,EAAAA,MAAM,EAAE;EAA7E,CA9CW;;EAkDX;EAAEqD,EAAAA,KAAK,EAAE,MAAT;EAAiB1H,EAAAA,GAAG,EAAE,cAAtB;EAAsCqE,EAAAA,MAAM,EAAE;EAA9C,CAlDW,EAmDX;EAAEqD,EAAAA,KAAK,EAAE,+CAAT;EAA0DyD,EAAAA,KAAK,EAAE,CAAjE;EAAoEnL,EAAAA,GAAG,EAAE,cAAzE;EAAyFqE,EAAAA,MAAM,EAAE;EAAjG,CAnDW;EAqDX;EAAEqD,EAAAA,KAAK,EAAE,QAAT;EAAmB1H,EAAAA,GAAG,EAAE,cAAxB;EAAwCqE,EAAAA,MAAM,EAAE;EAAhD,CArDW,EAsDX;EAAEqD,EAAAA,KAAK,EAAE,6BAAT;EAAwCyD,EAAAA,KAAK,EAAE,CAA/C;EAAkDnL,EAAAA,GAAG,EAAE,cAAvD;EAAuEqE,EAAAA,MAAM,EAAE;EAA/E,CAtDW,EAuDX;EAAEqD,EAAAA,KAAK,EAAE,OAAT;EAAkB1H,EAAAA,GAAG,EAAE,cAAvB;EAAuCqE,EAAAA,MAAM,EAAE;EAA/C,CAvDW;EA0DX;EAAEqD,EAAAA,KAAK,EAAE,YAAT;EAAuByD,EAAAA,KAAK,EAAE,CAA9B;EAAiCnL,EAAAA,GAAG,EAAE,aAAtC;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CA1DW;EA4DX;EACEqD,EAAAA,KAAK,EAAE,2EADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,aAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CA5DW,EAkEX;EACEqD,EAAAA,KAAK,EAAE,yEADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,aAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAlEW,CAAb;EA0EA,WAAc,GAAGgE,IAAjB;;EC3EA;EACA,IAAMw8B,KAAK,GAAG,iCAAd;EAEA,IAAIx8B,MAAI,GAAG;EAET;EAAEX,EAAAA,KAAK,EAAE,oBAAT;EAA+B1H,EAAAA,GAAG,EAAE,SAApC;EAA+CqE,EAAAA,MAAM,EAAE;EAAvD,CAFS;;;EAMT;EAAEqD,EAAAA,KAAK,EAAE,oBAAT;EAA+B1H,EAAAA,GAAG,EAAE,SAApC;EAA+CqE,EAAAA,MAAM,EAAE;EAAvD,CANS;EAQT;EAAEqD,EAAAA,KAAK,EAAE,aAAT;EAAwByD,EAAAA,KAAK,EAAE,CAA/B;EAAkCnL,EAAAA,GAAG,EAAE,SAAvC;EAAkDqE,EAAAA,MAAM,EAAE;EAA1D,CARS;EAUT;EAAEqD,EAAAA,KAAK,EAAE,yCAAT;EAAoDyD,EAAAA,KAAK,EAAE,CAA3D;EAA8DnL,EAAAA,GAAG,EAAE,SAAnE;EAA8EqE,EAAAA,MAAM,EAAE;EAAtF,CAVS;EAYT;EAAEqD,EAAAA,KAAK,4DAAP;EAAqEyD,EAAAA,KAAK,EAAE,CAA5E;EAA+EnL,EAAAA,GAAG,EAAE,SAApF;EAA+FqE,EAAAA,MAAM,EAAE;EAAvG,CAZS;EAcT;EAAEqD,EAAAA,KAAK,EAAE,aAAT;EAAwByD,EAAAA,KAAK,EAAE,CAA/B;EAAkCnL,EAAAA,GAAG,EAAE,SAAvC;EAAkDqE,EAAAA,MAAM,EAAE;EAA1D,CAdS;;EAkBT;EAAEqD,EAAAA,KAAK,8BAAP;EAAuCyD,EAAAA,KAAK,EAAE,CAA9C;EAAiDnL,EAAAA,GAAG,EAAE,OAAtD;EAA+DqE,EAAAA,MAAM,EAAE;EAAvE,CAlBS;EAoBT;EAAEqD,EAAAA,KAAK,sBAAP;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,OAA9C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CApBS,EAqBT;EAAEqD,EAAAA,KAAK,sBAAP;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,OAA9C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CArBS,EAsBT;EAAEqD,EAAAA,KAAK,sBAAP;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,OAA9C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CAtBS;EAwBT;EAAEqD,EAAAA,KAAK,6BAAP;EAAsCyD,EAAAA,KAAK,EAAE,CAA7C;EAAgDnL,EAAAA,GAAG,EAAE,OAArD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CAxBS;EA0BT;EAAEqD,EAAAA,KAAK,4BAAP;EAAqCyD,EAAAA,KAAK,EAAE,CAA5C;EAA+CnL,EAAAA,GAAG,EAAE,OAApD;EAA6DqE,EAAAA,MAAM,EAAE;EAArE,CA1BS;EA4BT;EAAEqD,EAAAA,KAAK,0BAAP;EAAmCyD,EAAAA,KAAK,EAAE,CAA1C;EAA6CnL,EAAAA,GAAG,EAAE,OAAlD;EAA2DqE,EAAAA,MAAM,EAAE;EAAnE,CA5BS;EA8BT;EAAEqD,EAAAA,KAAK,0BAAP;EAAmCyD,EAAAA,KAAK,EAAE,CAA1C;EAA6CnL,EAAAA,GAAG,EAAE,OAAlD;EAA2DqE,EAAAA,MAAM,EAAE;EAAnE,CA9BS;EAgCT;EAAEqD,EAAAA,KAAK,yBAAP;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,YAAjD;EAA+DqE,EAAAA,MAAM,EAAE;EAAvE,CAhCS;EAkCT;EAAEqD,EAAAA,KAAK,yBAAP;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,YAAjD;EAA+DqE,EAAAA,MAAM,EAAE;EAAvE,CAlCS;EAqCT;EAAEqD,EAAAA,KAAK,EAAE,kBAAT;EAA6B1H,EAAAA,GAAG,EAAE,MAAlC;EAA0CqE,EAAAA,MAAM,EAAE;EAAlD,CArCS;EAuCT;EAAEqD,EAAAA,KAAK,EAAE,kBAAT;EAA6B1H,EAAAA,GAAG,EAAE,MAAlC;EAA0CqE,EAAAA,MAAM,EAAE;EAAlD,CAvCS;EAyCT;EAAEqD,EAAAA,KAAK,EAAE,yBAAT;EAAoC1H,EAAAA,GAAG,EAAE,MAAzC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CAzCS;EA2CT;EAAEqD,EAAAA,KAAK,EAAE,mBAAT;EAA8B1H,EAAAA,GAAG,EAAE,MAAnC;EAA2CqE,EAAAA,MAAM,EAAE;EAAnD,CA3CS;EA6CT;EAAEqD,EAAAA,KAAK,EAAE,0BAAT;EAAqC1H,EAAAA,GAAG,EAAE,MAA1C;EAAkDqE,EAAAA,MAAM,EAAE;EAA1D,CA7CS;EA+CT;EAAEqD,EAAAA,KAAK,EAAE,0BAAT;EAAqC1H,EAAAA,GAAG,EAAE,MAA1C;EAAkDqE,EAAAA,MAAM,EAAE;EAA1D,CA/CS;EAiDT;EAAEqD,EAAAA,KAAK,EAAE,kCAAT;EAA6C1H,EAAAA,GAAG,EAAE,MAAlD;EAA0DqE,EAAAA,MAAM,EAAE;EAAlE,CAjDS;EAoDT;EAAEqD,EAAAA,KAAK,gBAASm9B,KAAT,MAAP;EAA0B15B,EAAAA,KAAK,EAAE,CAAjC;EAAoCnL,EAAAA,GAAG,EAAE,MAAzC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CApDS,EAqDT;EAAEqD,EAAAA,KAAK,oBAAam9B,KAAb,MAAP;EAA8B15B,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,MAA7C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CArDS,EAsDT;EAAEqD,EAAAA,KAAK,gBAASm9B,KAAT,MAAP;EAA0B15B,EAAAA,KAAK,EAAE,CAAjC;EAAoCnL,EAAAA,GAAG,EAAE,MAAzC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CAtDS,EAuDT;EAAEqD,EAAAA,KAAK,gBAASm9B,KAAT,MAAP;EAA0B15B,EAAAA,KAAK,EAAE,CAAjC;EAAoCnL,EAAAA,GAAG,EAAE,MAAzC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CAvDS,EAwDT;EAAEqD,EAAAA,KAAK,oBAAam9B,KAAb,MAAP;EAA8B15B,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,MAA7C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAxDS,EAyDT;EAAEqD,EAAAA,KAAK,mBAAYm9B,KAAZ,MAAP;EAA6B15B,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,MAA5C;EAAoDqE,EAAAA,MAAM,EAAE;EAA5D,CAzDS;EA2DT;EAAEqD,EAAAA,KAAK,YAAKm9B,KAAL,YAAP;EAA4B7kC,EAAAA,GAAG,EAAE,MAAjC;EAAyCqE,EAAAA,MAAM,EAAE;EAAjD,CA3DS,EA4DT;EAAEqD,EAAAA,KAAK,YAAKm9B,KAAL,WAAP;EAA2B7kC,EAAAA,GAAG,EAAE,MAAhC;EAAwCqE,EAAAA,MAAM,EAAE;EAAhD,CA5DS;EA8DT;EAAEqD,EAAAA,KAAK,YAAKm9B,KAAL,iBAAP;EAAiC7kC,EAAAA,GAAG,EAAE,QAAtC;EAAgDqE,EAAAA,MAAM,EAAE,YAAxD;EAAsE4pB,EAAAA,IAAI,EAAE;EAA5E,CA9DS;EAgET;EAAEvmB,EAAAA,KAAK,YAAKm9B,KAAL,wCAAP;EAAwD7kC,EAAAA,GAAG,EAAE,QAA7D;EAAuEqE,EAAAA,MAAM,EAAE;EAA/E,CAhES,CAAX;EAmEA,YAAc,GAAGgE,MAAjB;;ECtEA,WAAc,GAAG;;EAGf;EAAEX,EAAAA,KAAK,EAAE,8CAAT;EAAyDyD,EAAAA,KAAK,EAAE,CAAhE;EAAmEnL,EAAAA,GAAG,EAAE,QAAxE;EAAkFqE,EAAAA,MAAM,EAAE;EAA1F,CAHe;;EAOf;EAAEqD,EAAAA,KAAK,EAAE,mBAAT;EAA8ByD,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,UAA7C;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CAPe;EASf;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,UAAjD;EAA6DqE,EAAAA,MAAM,EAAE;EAArE,CATe;EAWf;EAAEqD,EAAAA,KAAK,EAAE,8BAAT;EAAyCyD,EAAAA,KAAK,EAAE,CAAhD;EAAmDnL,EAAAA,GAAG,EAAE,UAAxD;EAAoEqE,EAAAA,MAAM,EAAE;EAA5E,CAXe;;EAcf;EAAEqD,EAAAA,KAAK,EAAE,iDAAT;EAA4D1H,EAAAA,GAAG,EAAE,YAAjE;EAA+EqE,EAAAA,MAAM,EAAE;EAAvF,CAde;EAgBf;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuC1H,EAAAA,GAAG,EAAE,YAA5C;EAA0DqE,EAAAA,MAAM,EAAE;EAAlE,CAhBe;EAkBf;EAAEqD,EAAAA,KAAK,EAAE,qBAAT;EAAgC1H,EAAAA,GAAG,EAAE,YAArC;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CAlBe;EAqBf;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuCyD,EAAAA,KAAK,EAAE,CAA9C;EAAiDnL,EAAAA,GAAG,EAAE,MAAtD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CArBe;EAuBf;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuCyD,EAAAA,KAAK,EAAE,CAA9C;EAAiDnL,EAAAA,GAAG,EAAE,MAAtD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CAvBe;EAyBf;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiCyD,EAAAA,KAAK,EAAE,CAAxC;EAA2CnL,EAAAA,GAAG,EAAE,MAAhD;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CAzBe;EA2Bf;EAAEqD,EAAAA,KAAK,EAAE,YAAT;EAAuB1H,EAAAA,GAAG,EAAE,MAA5B;EAAoCqE,EAAAA,MAAM,EAAE;EAA5C,CA3Be,EA4Bf;EAAEqD,EAAAA,KAAK,EAAE,qDAAT;EAAgEyD,EAAAA,KAAK,EAAE,CAAvE;EAA0EnL,EAAAA,GAAG,EAAE,MAA/E;EAAuFqE,EAAAA,MAAM,EAAE;EAA/F,CA5Be;EA6Bf;EAAEqD,EAAAA,KAAK,EAAE,qBAAT;EAAgC1H,EAAAA,GAAG,EAAE,MAArC;EAA6CqE,EAAAA,MAAM,EAAE;EAArD,CA7Be;EA8Bf;EAAEqD,EAAAA,KAAK,EAAE,SAAT;EAAoByD,EAAAA,KAAK,EAAE,CAA3B;EAA8BnL,EAAAA,GAAG,EAAE,MAAnC;EAA2CqE,EAAAA,MAAM,EAAE;EAAnD,CA9Be;EAiCf;EAAEqD,EAAAA,KAAK,EAAE,mCAAT;EAA8CyD,EAAAA,KAAK,EAAE,CAArD;EAAwDnL,EAAAA,GAAG,EAAE,MAA7D;EAAqEqE,EAAAA,MAAM,EAAE;EAA7E,CAjCe;EAmCf;EAAEqD,EAAAA,KAAK,EAAE,2CAAT;EAAsDyD,EAAAA,KAAK,EAAE,CAA7D;EAAgEnL,EAAAA,GAAG,EAAE,MAArE;EAA6EqE,EAAAA,MAAM,EAAE;EAArF,CAnCe;EAqCf;EAAEqD,EAAAA,KAAK,EAAE,mDAAT;EAA8DyD,EAAAA,KAAK,EAAE,CAArE;EAAwEnL,EAAAA,GAAG,EAAE,MAA7E;EAAqFqE,EAAAA,MAAM,EAAE;EAA7F,CArCe;EAuCf;EAAEqD,EAAAA,KAAK,EAAE,0DAAT;EAAqEyD,EAAAA,KAAK,EAAE,CAA5E;EAA+EnL,EAAAA,GAAG,EAAE,MAApF;EAA4FqE,EAAAA,MAAM,EAAE;EAApG,CAvCe;EAyCf;EAAEqD,EAAAA,KAAK,EAAE,8CAAT;EAAyDyD,EAAAA,KAAK,EAAE,CAAhE;EAAmEnL,EAAAA,GAAG,EAAE,MAAxE;EAAgFqE,EAAAA,MAAM,EAAE;EAAxF,CAzCe;EA2Cf;EAAEqD,EAAAA,KAAK,EAAE,iCAAT;EAA4CyD,EAAAA,KAAK,EAAE,CAAnD;EAAsDnL,EAAAA,GAAG,EAAE,MAA3D;EAAmEqE,EAAAA,MAAM,EAAE;EAA3E,CA3Ce;EA6Cf;EAAEqD,EAAAA,KAAK,EAAE,uCAAT;EAAkDyD,EAAAA,KAAK,EAAE,CAAzD;EAA4DnL,EAAAA,GAAG,EAAE,MAAjE;EAAyEqE,EAAAA,MAAM,EAAE;EAAjF,CA7Ce;EA+Cf;EAAEqD,EAAAA,KAAK,EAAE,mCAAT;EAA8CyD,EAAAA,KAAK,EAAE,CAArD;EAAwDnL,EAAAA,GAAG,EAAE,MAA7D;EAAqEqE,EAAAA,MAAM,EAAE;EAA7E,CA/Ce;EAiDf;EAAEqD,EAAAA,KAAK,EAAE,wBAAT;EAAmCyD,EAAAA,KAAK,EAAE,CAA1C;EAA6CnL,EAAAA,GAAG,EAAE,MAAlD;EAA0DqE,EAAAA,MAAM,EAAE;EAAlE,CAjDe;EAmDf;EAAEqD,EAAAA,KAAK,EAAE,8BAAT;EAAyCyD,EAAAA,KAAK,EAAE,CAAhD;EAAmDnL,EAAAA,GAAG,EAAE,MAAxD;EAAgEqE,EAAAA,MAAM,EAAE;EAAxE,CAnDe;EAqDf;EACEqD,EAAAA,KAAK,EAAE,iEADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,MAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CArDe;EA6Df;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,MAAjD;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CA7De;EA+Df;EAAEqD,EAAAA,KAAK,EAAE,+BAAT;EAA0CyD,EAAAA,KAAK,EAAE,CAAjD;EAAoDnL,EAAAA,GAAG,EAAE,MAAzD;EAAiEqE,EAAAA,MAAM,EAAE;EAAzE,CA/De;EAkEf;EACEqD,EAAAA,KAAK,EAAE,kGADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,MAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAlEe;EAyEf;EAAEqD,EAAAA,KAAK,EAAE,6CAAT;EAAwDyD,EAAAA,KAAK,EAAE,CAA/D;EAAkEnL,EAAAA,GAAG,EAAE,MAAvE;EAA+EqE,EAAAA,MAAM,EAAE;EAAvF,CAzEe,EA0Ef;EAAEqD,EAAAA,KAAK,EAAE,+CAAT;EAA0DyD,EAAAA,KAAK,EAAE,CAAjE;EAAoEnL,EAAAA,GAAG,EAAE,MAAzE;EAAiFqE,EAAAA,MAAM,EAAE;EAAzF,CA1Ee,EA2Ef;EAAEqD,EAAAA,KAAK,EAAE,4CAAT;EAAuDyD,EAAAA,KAAK,EAAE,CAA9D;EAAiEnL,EAAAA,GAAG,EAAE,MAAtE;EAA8EqE,EAAAA,MAAM,EAAE;EAAtF,CA3Ee;EA8Ef;EAAEqD,EAAAA,KAAK,EAAE,6BAAT;EAAwC1H,EAAAA,GAAG,EAAE,MAA7C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CA9Ee;EAgFf;EAAEqD,EAAAA,KAAK,EAAE,eAAT;EAA0ByD,EAAAA,KAAK,EAAE,CAAjC;EAAoCnL,EAAAA,GAAG,EAAE,MAAzC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CAhFe;EAkFf;EAAEqD,EAAAA,KAAK,EAAE,cAAT;EAAyByD,EAAAA,KAAK,EAAE,CAAhC;EAAmCnL,EAAAA,GAAG,EAAE,MAAxC;EAAgDqE,EAAAA,MAAM,EAAE;EAAxD,CAlFe;EAoFf;EAAEqD,EAAAA,KAAK,EAAE,iCAAT;EAA4CyD,EAAAA,KAAK,EAAE,CAAnD;EAAsDnL,EAAAA,GAAG,EAAE,MAA3D;EAAmEqE,EAAAA,MAAM,EAAE;EAA3E,CApFe;EAsFf;EAAEqD,EAAAA,KAAK,EAAE,iDAAT;EAA4D1H,EAAAA,GAAG,EAAE,MAAjE;EAAyEqE,EAAAA,MAAM,EAAE;EAAjF,CAtFe;EAwFf;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuCyD,EAAAA,KAAK,EAAE,CAA9C;EAAiDnL,EAAAA,GAAG,EAAE,MAAtD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CAxFe;EA0Ff;EAAEqD,EAAAA,KAAK,EAAE,SAAT;EAAoByD,EAAAA,KAAK,EAAE,CAA3B;EAA8BnL,EAAAA,GAAG,EAAE,MAAnC;EAA2CqE,EAAAA,MAAM,EAAE;EAAnD,CA1Fe;EA4Ff;EAAEqD,EAAAA,KAAK,EAAE,6BAAT;EAAwCyD,EAAAA,KAAK,EAAE,CAA/C;EAAkDnL,EAAAA,GAAG,EAAE,MAAvD;EAA+DqE,EAAAA,MAAM,EAAE;EAAvE,CA5Fe;EA8Ff;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,MAAjD;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CA9Fe;EAgGf;EAAEqD,EAAAA,KAAK,EAAE,8BAAT;EAAyCyD,EAAAA,KAAK,EAAE,CAAhD;EAAmDnL,EAAAA,GAAG,EAAE,WAAxD;EAAqEqE,EAAAA,MAAM,EAAE;EAA7E,CAhGe;EAkGf;EAAEqD,EAAAA,KAAK,EAAE,gCAAT;EAA2CyD,EAAAA,KAAK,EAAE,CAAlD;EAAqDnL,EAAAA,GAAG,EAAE,MAA1D;EAAkEqE,EAAAA,MAAM,EAAE;EAA1E,CAlGe,CAAjB;;ECAA,IAAMqT,YAAU,GAAG,gCAAnB;EACA,IAAIrP,MAAI,GAAG;EAET;EAAEX,EAAAA,KAAK,EAAE,0BAAT;EAAqCyD,EAAAA,KAAK,EAAE,CAA5C;EAA+CnL,EAAAA,GAAG,EAAE,WAApD;EAAiEqE,EAAAA,MAAM,EAAE;EAAzE,CAFS;EAIT;EAAEqD,EAAAA,KAAK,qBAAcgQ,YAAd,MAAP;EAAoCvM,EAAAA,KAAK,EAAE,CAA3C;EAA8CnL,EAAAA,GAAG,EAAE,WAAnD;EAAgEqE,EAAAA,MAAM,EAAE;EAAxE,CAJS;EAMT;EAAEqD,EAAAA,KAAK,YAAKgQ,YAAL,aAAP;EAAkC1X,EAAAA,GAAG,EAAE,QAAvC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CANS;EAQT;EAAEqD,EAAAA,KAAK,YAAKgQ,YAAL,2BAAP;EAAgD1X,EAAAA,GAAG,EAAE,QAArD;EAA+DqE,EAAAA,MAAM,EAAE;EAAvE,CARS;EAUT;EAAEqD,EAAAA,KAAK,EAAE,yBAAT;EAAoCyD,EAAAA,KAAK,EAAE,CAA3C;EAA8CnL,EAAAA,GAAG,EAAE,WAAnD;EAAgEqE,EAAAA,MAAM,EAAE;EAAxE,CAVS;EAYT;EAAEqD,EAAAA,KAAK,EAAE,qCAAT;EAAgDyD,EAAAA,KAAK,EAAE,CAAvD;EAA0DnL,EAAAA,GAAG,EAAE,WAA/D;EAA4EqE,EAAAA,MAAM,EAAE;EAApF,CAZS;EAcT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsCyD,EAAAA,KAAK,EAAE,CAA7C;EAAgDnL,EAAAA,GAAG,EAAE,WAArD;EAAkEqE,EAAAA,MAAM,EAAE;EAA1E,CAdS;EAgBT;EAAEqD,EAAAA,KAAK,EAAE,0BAAT;EAAqCyD,EAAAA,KAAK,EAAE,CAA5C;EAA+CnL,EAAAA,GAAG,EAAE,WAApD;EAAiEqE,EAAAA,MAAM,EAAE;EAAzE,CAhBS;EAkBT;EAAEqD,EAAAA,KAAK,EAAE,kBAAT;EAA6ByD,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,WAA5C;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CAlBS;EAoBT;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiC1H,EAAAA,GAAG,EAAE,WAAtC;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CApBS;EAsBT;EAAEqD,EAAAA,KAAK,EAAE,kDAAT;EAA6DyD,EAAAA,KAAK,EAAE,CAApE;EAAuEnL,EAAAA,GAAG,EAAE,WAA5E;EAAyFqE,EAAAA,MAAM,EAAE;EAAjG,CAtBS,CAAX;EAyBA,gBAAc,GAAGgE,MAAjB;;EC1BA,aAAc,GAAG;EAEf;EAAEX,EAAAA,KAAK,EAAE,oBAAT;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,QAA9C;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CAFe;EAIf;EAAEqD,EAAAA,KAAK,EAAE,eAAT;EAA0ByD,EAAAA,KAAK,EAAE,CAAjC;EAAoCnL,EAAAA,GAAG,EAAE,QAAzC;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CAJe;EAMf;EAAEqD,EAAAA,KAAK,EAAE,iBAAT;EAA4ByD,EAAAA,KAAK,EAAE,CAAnC;EAAsCnL,EAAAA,GAAG,EAAE,QAA3C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CANe;EAQf;EAAEqD,EAAAA,KAAK,EAAE,aAAT;EAAwByD,EAAAA,KAAK,EAAE,CAA/B;EAAkCnL,EAAAA,GAAG,EAAE,QAAvC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CARe;EAUf;EAAEqD,EAAAA,KAAK,EAAE,cAAT;EAAyByD,EAAAA,KAAK,EAAE,CAAhC;EAAmCnL,EAAAA,GAAG,EAAE,QAAxC;EAAkDqE,EAAAA,MAAM,EAAE;EAA1D,CAVe;EAYf;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiC1H,EAAAA,GAAG,EAAE,QAAtC;EAAgDqE,EAAAA,MAAM,EAAE;EAAxD,CAZe;EAcf;EAAEqD,EAAAA,KAAK,EAAE,+CAAT;EAA0DyD,EAAAA,KAAK,EAAE,CAAjE;EAAoEnL,EAAAA,GAAG,EAAE,QAAzE;EAAmFqE,EAAAA,MAAM,EAAE;EAA3F,CAde;EAgBf;EAAEqD,EAAAA,KAAK,EAAE,mBAAT;EAA8ByD,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,QAA7C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CAhBe,CAAjB;;ECAA,YAAc,GAAG;;EAGf;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkC1H,EAAAA,GAAG,EAAE,aAAvC;EAAsDqE,EAAAA,MAAM,EAAE;EAA9D,CAHe;EAKf;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuC1H,EAAAA,GAAG,EAAE,aAA5C;EAA2DqE,EAAAA,MAAM,EAAE;EAAnE,CALe;EAQf;EAAEqD,EAAAA,KAAK,EAAE,oBAAT;EAA+B1H,EAAAA,GAAG,EAAE,UAApC;EAAgDqE,EAAAA,MAAM,EAAE;EAAxD,CARe;EAUf;EAAEqD,EAAAA,KAAK,EAAE,gBAAT;EAA2ByD,EAAAA,KAAK,EAAE,CAAlC;EAAqCnL,EAAAA,GAAG,EAAE,SAA1C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAVe;EAYf;EAAEqD,EAAAA,KAAK,EAAE,mBAAT;EAA8B1H,EAAAA,GAAG,EAAE,OAAnC;EAA4CqE,EAAAA,MAAM,EAAE;EAApD,CAZe;;EAef;EAAEqD,EAAAA,KAAK,EAAE,qBAAT;EAAgCyD,EAAAA,KAAK,EAAE,CAAvC;EAA0CnL,EAAAA,GAAG,EAAE,MAA/C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CAfe,EAgBf;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiCyD,EAAAA,KAAK,EAAE,CAAxC;EAA2CnL,EAAAA,GAAG,EAAE,MAAhD;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CAhBe;EAmBf;EAAEqD,EAAAA,KAAK,EAAE,yBAAT;EAAoC1H,EAAAA,GAAG,EAAE,OAAzC;EAAkDqE,EAAAA,MAAM,EAAE;EAA1D,CAnBe;EAqBf;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiC1H,EAAAA,GAAG,EAAE,OAAtC;EAA+CqE,EAAAA,MAAM,EAAE;EAAvD,CArBe;EAuBf;EAAEqD,EAAAA,KAAK,EAAE,+BAAT;EAA0C1H,EAAAA,GAAG,EAAE,OAA/C;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CAvBe;EAyBf;EAAEqD,EAAAA,KAAK,EAAE,cAAT;EAAyB1H,EAAAA,GAAG,EAAE,OAA9B;EAAuCqE,EAAAA,MAAM,EAAE;EAA/C,CAzBe;EA2Bf;EAAEqD,EAAAA,KAAK,EAAE,uCAAT;EAAkDyD,EAAAA,KAAK,EAAE,CAAzD;EAA4DnL,EAAAA,GAAG,EAAE,OAAjE;EAA0EqE,EAAAA,MAAM,EAAE;EAAlF,CA3Be,EA4Bf;EAAEqD,EAAAA,KAAK,EAAE,UAAT;EAAqB1H,EAAAA,GAAG,EAAE,OAA1B;EAAmCqE,EAAAA,MAAM,EAAE;EAA3C,CA5Be;EA+Bf;EACEqD,EAAAA,KAAK,uEADP;EAEE1H,EAAAA,GAAG,EAAE,OAFP;EAGEqE,EAAAA,MAAM,EAAE;EAHV,CA/Be;EAqCf;EACEqD,EAAAA,KAAK,EAAE,gEADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,OAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CArCe,CAAjB;;ECAA,IAAMyR,OAAK,GAAG,8CAAd;EAEA,IAAIzN,MAAI,GAAG;;EAGT;EAAEX,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,WAAjD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CAHS;EAKT;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,cAAjD;EAAiEqE,EAAAA,MAAM,EAAE;EAAzE,CALS;;EAST;EAAEqD,EAAAA,KAAK,kDAAP;EAA2DyD,EAAAA,KAAK,EAAE,CAAlE;EAAqEnL,EAAAA,GAAG,EAAE,WAA1E;EAAuFqE,EAAAA,MAAM,EAAE;EAA/F,CATS;EAWT;EAAEqD,EAAAA,KAAK,0CAAP;EAAmDyD,EAAAA,KAAK,EAAE,CAA1D;EAA6DnL,EAAAA,GAAG,EAAE,WAAlE;EAA+EqE,EAAAA,MAAM,EAAE;EAAvF,CAXS;EAaT;EAAEqD,EAAAA,KAAK,wCAAP;EAAiDyD,EAAAA,KAAK,EAAE,CAAxD;EAA2DnL,EAAAA,GAAG,EAAE,WAAhE;EAA6EqE,EAAAA,MAAM,EAAE;EAArF,CAbS;EAeT;EACEqD,EAAAA,KAAK,2EADP;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,WAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAfS;EAsBT;EAAEqD,EAAAA,KAAK,mDAAP;EAA4DyD,EAAAA,KAAK,EAAE,CAAnE;EAAsEnL,EAAAA,GAAG,EAAE,WAA3E;EAAwFqE,EAAAA,MAAM,EAAE;EAAhG,CAtBS;EAwBT;EACEqD,EAAAA,KAAK,+DADP;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,WAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAxBS;EA+BT;EAAEqD,EAAAA,KAAK,kDAAP;EAA2DyD,EAAAA,KAAK,EAAE,CAAlE;EAAqEnL,EAAAA,GAAG,EAAE,WAA1E;EAAuFqE,EAAAA,MAAM,EAAE;EAA/F,CA/BS;EAiCT;EAAEqD,EAAAA,KAAK,0CAAP;EAAmDyD,EAAAA,KAAK,EAAE,CAA1D;EAA6DnL,EAAAA,GAAG,EAAE,WAAlE;EAA+EqE,EAAAA,MAAM,EAAE;EAAvF,CAjCS;EAmCT;EAAEqD,EAAAA,KAAK,wCAAP;EAAiDyD,EAAAA,KAAK,EAAE,CAAxD;EAA2DnL,EAAAA,GAAG,EAAE,WAAhE;EAA6EqE,EAAAA,MAAM,EAAE;EAArF,CAnCS;EAqCT;EAAEqD,EAAAA,KAAK,EAAE,gDAAT;EAA2DyD,EAAAA,KAAK,EAAE,CAAlE;EAAqEnL,EAAAA,GAAG,EAAE,WAA1E;EAAuFqE,EAAAA,MAAM,EAAE;EAA/F,CArCS;EAuCT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsCyD,EAAAA,KAAK,EAAE,CAA7C;EAAgDnL,EAAAA,GAAG,EAAE,CAAC,WAAD,EAAc,MAAd,CAArD;EAA4EqE,EAAAA,MAAM,EAAE;EAApF,CAvCS;EAyCT;EAAEqD,EAAAA,KAAK,mDAAP;EAA4DyD,EAAAA,KAAK,EAAE,CAAnE;EAAsEnL,EAAAA,GAAG,EAAE,WAA3E;EAAwFqE,EAAAA,MAAM,EAAE;EAAhG,CAzCS;EA2CT;EACEqD,EAAAA,KAAK,2EADP;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,WAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CA3CS;EAkDT;EACEqD,EAAAA,KAAK,+DADP;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,WAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAlDS;;EA2DT;EAAEqD,EAAAA,KAAK,EAAE,0BAAT;EAAqCyD,EAAAA,KAAK,EAAE,CAA5C;EAA+CnL,EAAAA,GAAG,EAAE,aAApD;EAAmEqE,EAAAA,MAAM,EAAE;EAA3E,CA3DS,EA4DT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsCyD,EAAAA,KAAK,EAAE,CAA7C;EAAgDnL,EAAAA,GAAG,EAAE,aAArD;EAAoEqE,EAAAA,MAAM,EAAE;EAA5E,CA5DS,EA6DT;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuCyD,EAAAA,KAAK,EAAE,CAA9C;EAAiDnL,EAAAA,GAAG,EAAE,aAAtD;EAAqEqE,EAAAA,MAAM,EAAE;EAA7E,CA7DS,EA8DT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsCyD,EAAAA,KAAK,EAAE,CAA7C;EAAgDnL,EAAAA,GAAG,EAAE,aAArD;EAAoEqE,EAAAA,MAAM,EAAE;EAA5E,CA9DS;EAgET;EAAEqD,EAAAA,KAAK,EAAE,6BAAT;EAAwCyD,EAAAA,KAAK,EAAE,CAA/C;EAAkDnL,EAAAA,GAAG,EAAE,UAAvD;EAAmEqE,EAAAA,MAAM,EAAE;EAA3E,CAhES;;EAoET;EAAEqD,EAAAA,KAAK,EAAE,0CAAT;EAAqDyD,EAAAA,KAAK,EAAE,CAA5D;EAA+DnL,EAAAA,GAAG,EAAE,QAApE;EAA8EqE,EAAAA,MAAM,EAAE;EAAtF,CApES;EAsET;EAAEqD,EAAAA,KAAK,EAAE,6CAAT;EAAwDyD,EAAAA,KAAK,EAAE,CAA/D;EAAkEnL,EAAAA,GAAG,EAAE,QAAvE;EAAiFqE,EAAAA,MAAM,EAAE;EAAzF,CAtES;;EA0ET;EAAEqD,EAAAA,KAAK,EAAE,kCAAT;EAA6CyD,EAAAA,KAAK,EAAE,CAApD;EAAuDnL,EAAAA,GAAG,EAAE,YAA5D;EAA0EqE,EAAAA,MAAM,EAAE;EAAlF,CA1ES;EA4ET;EAAEqD,EAAAA,KAAK,EAAE,gBAAT;EAA2ByD,EAAAA,KAAK,EAAE,CAAlC;EAAqCnL,EAAAA,GAAG,EAAE,YAA1C;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CA5ES;EA8ET;EACEqD,EAAAA,KAAK,EAAE,sFADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,YAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CA9ES;EAsFT;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,MAAjD;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CAtFS;EAwFT;EAAEqD,EAAAA,KAAK,EAAE,mBAAT;EAA8ByD,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,MAA7C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAxFS;EA0FT;EAAEqD,EAAAA,KAAK,EAAE,qDAAT;EAAgEyD,EAAAA,KAAK,EAAE,CAAvE;EAA0EnL,EAAAA,GAAG,EAAE,MAA/E;EAAuFqE,EAAAA,MAAM,EAAE;EAA/F,CA1FS;EA6FT;EAAEqD,EAAAA,KAAK,EAAE,+BAAT;EAA0CyD,EAAAA,KAAK,EAAE,CAAjD;EAAoDnL,EAAAA,GAAG,EAAE,MAAzD;EAAiEqE,EAAAA,MAAM,EAAE;EAAzE,CA7FS;EAgGT;EAAEqD,EAAAA,KAAK,oBAAaoO,OAAb,MAAP;EAA8B3K,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,MAA7C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAhGS,EAiGT;EAAEqD,EAAAA,KAAK,qBAAcoO,OAAd,MAAP;EAA+B3K,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,MAA9C;EAAsDqE,EAAAA,MAAM,EAAE;EAA9D,CAjGS;EAmGT;EAAEqD,EAAAA,KAAK,YAAKoO,OAAL,aAAP;EAA6B9V,EAAAA,GAAG,EAAE,QAAlC;EAA4CqE,EAAAA,MAAM,EAAE;EAApD,CAnGS;EAqGT;EAAEqD,EAAAA,KAAK,YAAKoO,OAAL,2BAAP;EAA2C9V,EAAAA,GAAG,EAAE,QAAhD;EAA0DqE,EAAAA,MAAM,EAAE;EAAlE,CArGS;EAwGT;EAAEqD,EAAAA,KAAK,EAAE,uCAAT;EAAkDyD,EAAAA,KAAK,EAAE,CAAzD;EAA4DnL,EAAAA,GAAG,EAAE,MAAjE;EAAyEqE,EAAAA,MAAM,EAAE;EAAjF,CAxGS,EAyGT;EAAEqD,EAAAA,KAAK,EAAE,uCAAT;EAAkDyD,EAAAA,KAAK,EAAE,CAAzD;EAA4DnL,EAAAA,GAAG,EAAE,MAAjE;EAAyEqE,EAAAA,MAAM,EAAE;EAAjF,CAzGS,EA0GT;EAAEqD,EAAAA,KAAK,EAAE,uCAAT;EAAkDyD,EAAAA,KAAK,EAAE,CAAzD;EAA4DnL,EAAAA,GAAG,EAAE,MAAjE;EAAyEqE,EAAAA,MAAM,EAAE;EAAjF,CA1GS,CAAX;EA6GA,YAAc,GAAGgE,MAAjB;;EC/GA,IAAMutB,MAAM,GAAG,iDAAf;EACA,IAAIvtB,MAAI,GAAG;;EAGT;EACEX,EAAAA,KAAK,EAAE,mEADT;EAGE1H,EAAAA,GAAG,EAAE,QAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAHS;EAUT;EACEqD,EAAAA,KAAK,EAAE,mFADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,QAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAVS;EAiBT;EACEqD,EAAAA,KAAK,EAAE,sGADT;EAEE1H,EAAAA,GAAG,EAAE,QAFP;EAGEqE,EAAAA,MAAM,EAAE;EAHV,CAjBS;EAuBT;EACEqD,EAAAA,KAAK,EAAE,gFADT;EAEE1H,EAAAA,GAAG,EAAE,QAFP;EAGEqE,EAAAA,MAAM,EAAE;EAHV,CAvBS;EA8BT;EACEqD,EAAAA,KAAK,EAAE,wEADT;EAEE1H,EAAAA,GAAG,EAAE,SAFP;EAGEqE,EAAAA,MAAM,EAAE;EAHV,CA9BS;EAqCT;EAAEqD,EAAAA,KAAK,gBAASkuB,MAAT,MAAP;EAA2BzqB,EAAAA,KAAK,EAAE,CAAlC;EAAqCnL,EAAAA,GAAG,EAAE,OAA1C;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CArCS,EAsCT;EAAEqD,EAAAA,KAAK,kBAAWkuB,MAAX,MAAP;EAA6BzqB,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,OAA5C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAtCS,EAuCT;EAAEqD,EAAAA,KAAK,gBAASkuB,MAAT,MAAP;EAA2BzqB,EAAAA,KAAK,EAAE,CAAlC;EAAqCnL,EAAAA,GAAG,EAAE,OAA1C;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CAvCS,EAwCT;EAAEqD,EAAAA,KAAK,kBAAWkuB,MAAX,MAAP;EAA6BzqB,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,OAA5C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAxCS,EAyCT;EAAEqD,EAAAA,KAAK,gBAASkuB,MAAT,MAAP;EAA2BzqB,EAAAA,KAAK,EAAE,CAAlC;EAAqCnL,EAAAA,GAAG,EAAE,OAA1C;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CAzCS,EA0CT;EAAEqD,EAAAA,KAAK,oBAAakuB,MAAb,MAAP;EAA+BzqB,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,OAA9C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CA1CS;EA4CT;EAAEqD,EAAAA,KAAK,aAAMkuB,MAAN,aAAP;EAA+BzqB,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,OAA9C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CA5CS,CAAX;EA8CA,YAAc,GAAGgE,MAAjB;;EC/CA,UAAc,GAAG;EAEf;EAAEX,EAAAA,KAAK,EAAE,mBAAT;EAA8B1H,EAAAA,GAAG,EAAE,cAAnC;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CAFe;EAIf;EAAEqD,EAAAA,KAAK,EAAE,mCAAT;EAA8C1H,EAAAA,GAAG,EAAE,cAAnD;EAAmEqE,EAAAA,MAAM,EAAE,cAA3E;EAA2F4pB,EAAAA,IAAI,EAAE;EAAjG,CAJe;EAMf;EAAEvmB,EAAAA,KAAK,EAAE,wBAAT;EAAmC1H,EAAAA,GAAG,EAAE,cAAxC;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CANe;EAQf;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsC1H,EAAAA,GAAG,EAAE,cAA3C;EAA2DqE,EAAAA,MAAM,EAAE;EAAnE,CARe;EAUf;EAAEqD,EAAAA,KAAK,EAAE,yCAAT;EAAoD1H,EAAAA,GAAG,EAAE,cAAzD;EAAyEqE,EAAAA,MAAM,EAAE;EAAjF,CAVe;EAYf;EAAEqD,EAAAA,KAAK,EAAE,gBAAT;EAA2ByD,EAAAA,KAAK,EAAE,CAAlC;EAAqCnL,EAAAA,GAAG,EAAE,cAA1C;EAA0DqE,EAAAA,MAAM,EAAE,aAAlE;EAAiF4pB,EAAAA,IAAI,EAAE;EAAvF,CAZe;EAcf;EACEvmB,EAAAA,KAAK,EAAE,8DADT;EAGE1H,EAAAA,GAAG,EAAE,cAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAde;EAqBf;EAAEqD,EAAAA,KAAK,EAAE,gCAAT;EAA2C1H,EAAAA,GAAG,EAAE,QAAhD;EAA0DqE,EAAAA,MAAM,EAAE;EAAlE,CArBe,CAAjB;;ECAA,IAAMwR,OAAK,GACT,qMADF;EAGA,IAAMivB,MAAM,GAAG,kCAAf;;EAEA,IAAIz8B,MAAI,GAAG;EAET;EAAEX,EAAAA,KAAK,EAAE,qCAAT;EAAgDyD,EAAAA,KAAK,EAAE,CAAvD;EAA0DnL,EAAAA,GAAG,EAAE,WAA/D;EAA4EqE,EAAAA,MAAM,EAAE;EAApF,CAFS,EAGT;EACEqD,EAAAA,KAAK,EAAE,oFADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,WAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAHS;;EAYT;EAAEqD,EAAAA,KAAK,EAAE,2CAAT;EAAsDyD,EAAAA,KAAK,EAAE,CAA7D;EAAgEnL,EAAAA,GAAG,EAAE,WAArE;EAAkFqE,EAAAA,MAAM,EAAE;EAA1F,CAZS;EAcT;EAAEqD,EAAAA,KAAK,EAAE,iCAAT;EAA4C1H,EAAAA,GAAG,EAAE,YAAjD;EAA+DqE,EAAAA,MAAM,EAAE,gBAAvE;EAAyF4pB,EAAAA,IAAI,EAAE;EAA/F,CAdS,EAeT;EAAEvmB,EAAAA,KAAK,EAAE,gCAAT;EAA2C1H,EAAAA,GAAG,EAAE,UAAhD;EAA4DqE,EAAAA,MAAM,EAAE,gBAApE;EAAsF4pB,EAAAA,IAAI,EAAE;EAA5F,CAfS;EAiBT;EACEvmB,EAAAA,KAAK,EAAE,0GADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,WAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAjBS;;EA0BT;EAAEqD,EAAAA,KAAK,EAAE,0CAAT;EAAqDyD,EAAAA,KAAK,EAAE,CAA5D;EAA+DnL,EAAAA,GAAG,EAAE,UAApE;EAAgFqE,EAAAA,MAAM,EAAE;EAAxF,CA1BS;EA6BT;EAAEqD,EAAAA,KAAK,EAAE,0BAAT;EAAqCyD,EAAAA,KAAK,EAAE,CAA5C;EAA+CnL,EAAAA,GAAG,EAAE,QAApD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CA7BS,EA8BT;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiC1H,EAAAA,GAAG,EAAE,QAAtC;EAAgDqE,EAAAA,MAAM,EAAE,mBAAxD;EAA6E4pB,EAAAA,IAAI,EAAE;EAAnF,CA9BS;EA+BT;EAAEvmB,EAAAA,KAAK,EAAE,oBAAT;EAA+B1H,EAAAA,GAAG,EAAE,QAApC;EAA8CqE,EAAAA,MAAM,EAAE;EAAtD,CA/BS;EAgCT;EAAEqD,EAAAA,KAAK,EAAE,oCAAT;EAA+C1H,EAAAA,GAAG,EAAE,QAApD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CAhCS;EAiCT;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuCyD,EAAAA,KAAK,EAAE,CAA9C;EAAiDnL,EAAAA,GAAG,EAAE,CAAC,SAAD,EAAY,QAAZ,CAAtD;EAA6EqE,EAAAA,MAAM,EAAE;EAArF,CAjCS;;EAmCT;EAAEqD,EAAAA,KAAK,EAAE,oBAAT;EAA+B1H,EAAAA,GAAG,EAAE,QAApC;EAA8CqE,EAAAA,MAAM,EAAE;EAAtD,CAnCS;EAqCT;EAAEqD,EAAAA,KAAK,EAAE,qBAAT;EAAgC1H,EAAAA,GAAG,EAAE,QAArC;EAA+CqE,EAAAA,MAAM,EAAE;EAAvD,CArCS;EAuCT;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiC1H,EAAAA,GAAG,EAAE,QAAtC;EAAgDqE,EAAAA,MAAM,EAAE,cAAxD;EAAwE4pB,EAAAA,IAAI,EAAE;EAA9E,CAvCS;EAyCT;EAAEvmB,EAAAA,KAAK,EAAE,0CAAT;EAAqD1H,EAAAA,GAAG,EAAE,QAA1D;EAAoEqE,EAAAA,MAAM,EAAE,cAA5E;EAA4F4pB,EAAAA,IAAI,EAAE;EAAlG,CAzCS;EA2CT;EAAEvmB,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,QAAjD;EAA2DqE,EAAAA,MAAM,EAAE,eAAnE;EAAoF4pB,EAAAA,IAAI,EAAE;EAA1F,CA3CS;EA6CT;EAAEvmB,EAAAA,KAAK,EAAE,0BAAT;EAAqC1H,EAAAA,GAAG,EAAE,QAA1C;EAAoDqE,EAAAA,MAAM,EAAE,WAA5D;EAAyE4pB,EAAAA,IAAI,EAAE;EAA/E,CA7CS;EA+CT;EAAEvmB,EAAAA,KAAK,EAAE,qBAAT;EAAgC1H,EAAAA,GAAG,EAAE,QAArC;EAA+CqE,EAAAA,MAAM,EAAE;EAAvD,CA/CS;EAiDT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsC1H,EAAAA,GAAG,EAAE,QAA3C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAjDS;EAmDT;EAAEqD,EAAAA,KAAK,EAAE,iCAAT;EAA4C1H,EAAAA,GAAG,EAAE,QAAjD;EAA2DqE,EAAAA,MAAM,EAAE;EAAnE,CAnDS;EAqDT;EAAEqD,EAAAA,KAAK,EAAE,mCAAT;EAA8C1H,EAAAA,GAAG,EAAE,QAAnD;EAA6DqE,EAAAA,MAAM,EAAE;EAArE,CArDS;EAuDT;EAAEqD,EAAAA,KAAK,EAAE,oCAAT;EAA+C1H,EAAAA,GAAG,EAAE,QAApD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CAvDS;EAyDT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsC1H,EAAAA,GAAG,EAAE,QAA3C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAzDS;EA2DT;EACEqD,EAAAA,KAAK,EAAE,qEADT;EAGE1H,EAAAA,GAAG,EAAE,QAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CA3DS;EAkET;EAAEqD,EAAAA,KAAK,YAAKmO,OAAL,aAAP;EAA6B7V,EAAAA,GAAG,EAAE,QAAlC;EAA4CqE,EAAAA,MAAM,EAAE,WAApD;EAAiE4pB,EAAAA,IAAI,EAAE;EAAvE,CAlES;EAoET;EAAEvmB,EAAAA,KAAK,YAAKmO,OAAL,2BAAP;EAA2C7V,EAAAA,GAAG,EAAE,QAAhD;EAA0DqE,EAAAA,MAAM,EAAE,aAAlE;EAAiF4pB,EAAAA,IAAI,EAAE;EAAvF,CApES;EAsET;EACEvmB,EAAAA,KAAK,kEAA2Do9B,MAA3D,MADP;EAEE35B,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,QAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAtES;EA6ET;EAAEqD,EAAAA,KAAK,yBAAkBo9B,MAAlB,MAAP;EAAoC35B,EAAAA,KAAK,EAAE,CAA3C;EAA8CnL,EAAAA,GAAG,EAAE,QAAnD;EAA6DqE,EAAAA,MAAM,EAAE;EAArE,CA7ES;EA+ET;EAAEqD,EAAAA,KAAK,aAAMo9B,MAAN,wBAAP;EAA0C35B,EAAAA,KAAK,EAAE,CAAjD;EAAoDnL,EAAAA,GAAG,EAAE,QAAzD;EAAmEqE,EAAAA,MAAM,EAAE;EAA3E,CA/ES;EAiFT;EAAEqD,EAAAA,KAAK,aAAMo9B,MAAN,uBAAP;EAAyC35B,EAAAA,KAAK,EAAE,CAAhD;EAAmDnL,EAAAA,GAAG,EAAE,QAAxD;EAAkEqE,EAAAA,MAAM,EAAE;EAA1E,CAjFS;EAmFT;EAAEqD,EAAAA,KAAK,aAAMo9B,MAAN,aAAP;EAA+B35B,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,QAA9C;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CAnFS;EAqFT;EAAEqD,EAAAA,KAAK,oBAAao9B,MAAb,MAAP;EAA+B35B,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,QAA9C;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CArFS;EAuFT;EAAEqD,EAAAA,KAAK,qBAAco9B,MAAd,MAAP;EAAgC35B,EAAAA,KAAK,EAAE,CAAvC;EAA0CnL,EAAAA,GAAG,EAAE,QAA/C;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CAvFS;EAyFT;EAAEqD,EAAAA,KAAK,aAAMo9B,MAAN,cAAP;EAAgC35B,EAAAA,KAAK,EAAE,CAAvC;EAA0CnL,EAAAA,GAAG,EAAE,QAA/C;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CAzFS;EA2FT;EAAEqD,EAAAA,KAAK,kBAAWo9B,MAAX,MAAP;EAA6B35B,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,QAA5C;EAAsDqE,EAAAA,MAAM,EAAE;EAA9D,CA3FS;EA6FT;EAAEqD,EAAAA,KAAK,kBAAWo9B,MAAX,MAAP;EAA6B35B,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,QAA5C;EAAsDqE,EAAAA,MAAM,EAAE;EAA9D,CA7FS;EA+FT;EAAEqD,EAAAA,KAAK,iBAAUo9B,MAAV,MAAP;EAA4B35B,EAAAA,KAAK,EAAE,CAAnC;EAAsCnL,EAAAA,GAAG,EAAE,QAA3C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CA/FS;EAiGT;EAAEqD,EAAAA,KAAK,kBAAWo9B,MAAX,MAAP;EAA6B35B,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,OAA5C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAjGS;;EAmGT;EAAEqD,EAAAA,KAAK,kBAAWo9B,MAAX,MAAP;EAA6B35B,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,OAA5C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAnGS;EAqGT;EAAEqD,EAAAA,KAAK,kBAAWo9B,MAAX,MAAP;EAA6B35B,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,OAA5C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CArGS;EAuGT;EAAEqD,EAAAA,KAAK,mBAAYo9B,MAAZ,MAAP;EAA8B35B,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,OAA7C;EAAsDqE,EAAAA,MAAM,EAAE;EAA9D,CAvGS;EAyGT;EAAEqD,EAAAA,KAAK,aAAMo9B,MAAN,kBAAP;EAAoC35B,EAAAA,KAAK,EAAE,CAA3C;EAA8CnL,EAAAA,GAAG,EAAE,OAAnD;EAA4DqE,EAAAA,MAAM,EAAE;EAApE,CAzGS;EA2GT;EAAEqD,EAAAA,KAAK,uBAAgBo9B,MAAhB,MAAP;EAAkC35B,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,OAAjD;EAA0DqE,EAAAA,MAAM,EAAE;EAAlE,CA3GS;EA6GT;EAAEqD,EAAAA,KAAK,EAAE,sCAAT;EAAiD1H,EAAAA,GAAG,EAAE,QAAtD;EAAgEqE,EAAAA,MAAM,EAAE,iBAAxE;EAA2F4pB,EAAAA,IAAI,EAAE;EAAjG,CA7GS;EA+GT;EAAEvmB,EAAAA,KAAK,EAAE,qCAAT;EAAgD1H,EAAAA,GAAG,EAAE,QAArD;EAA+DqE,EAAAA,MAAM,EAAE,gBAAvE;EAAyF4pB,EAAAA,IAAI,EAAE;EAA/F,CA/GS;EAiHT;EAAEvmB,EAAAA,KAAK,EAAE,8BAAT;EAAyC1H,EAAAA,GAAG,EAAE,SAA9C;EAAyDqE,EAAAA,MAAM,EAAE,iBAAjE;EAAoF4pB,EAAAA,IAAI,EAAE;EAA1F,CAjHS;EAmHT;EAAEvmB,EAAAA,KAAK,EAAE,gDAAT;EAA2D1H,EAAAA,GAAG,EAAE,QAAhE;EAA0EqE,EAAAA,MAAM,EAAE;EAAlF,CAnHS;EAqHT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsC1H,EAAAA,GAAG,EAAE,QAA3C;EAAqDqE,EAAAA,MAAM,EAAE,aAA7D;EAA4E4pB,EAAAA,IAAI,EAAE;EAAlF,CArHS,CAAX;EAuHA,aAAc,GAAG5lB,MAAjB;;EC1HA,IAAI0D,OAAO,GAAG,EAAd;EACAA,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAelF,OAAf,CAAV;EACAqI,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAejF,QAAf,CAAV;EACAoI,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAehF,OAAf,CAAV;EACAmI,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAe/E,YAAf,CAAV;EACAkI,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAe9E,SAAf,CAAV;EACAiI,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAeyB,QAAf,CAAV;EACA0B,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAeyiB,QAAf,CAAV;EACAtf,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAe+rB,QAAf,CAAV;EACA5oB,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAegsB,MAAf,CAAV;EACA7oB,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAeisB,SAAf,CAAV;;EAGA,IAAMxH,eAAa,GAAG,SAAhBA,aAAgB,CAAS/tB,GAAT,EAAc;EAClC,MAAIguB,QAAQ,GAAG,EAAf;EACA,MAAIC,SAAS,GAAG,EAAhB;EACAjuB,EAAAA,GAAG,CAAChD,OAAJ,CAAY,UAAAuJ,GAAG,EAAI;EACjB,QAAIA,GAAG,CAAC0E,QAAJ,KAAiB,IAAjB,IAAyB1E,GAAG,CAACnF,QAAJ,KAAiB,IAA9C,EAAoD;EAClD;EACD;;EACD,QAAImF,GAAG,CAAC7F,GAAJ,KAAYJ,SAAhB,EAA2B;EACzB0tB,MAAAA,QAAQ,CAAC9mB,IAAT,CAAcX,GAAG,CAAC7F,GAAlB;EACD;;EACD,QAAI6F,GAAG,CAAC1H,IAAJ,KAAayB,SAAjB,EAA4B;EAC1B2tB,MAAAA,SAAS,CAAC/mB,IAAV,CAAeX,GAAG,CAAC1H,IAAnB;EACD;EACF,GAVD;EAWA,SAAO;EAAE8B,IAAAA,IAAI,EAAEmI,OAAM,CAACklB,QAAD,CAAd;EAA0B9f,IAAAA,KAAK,EAAEpF,OAAM,CAACmlB,SAAD;EAAvC,GAAP;EACD,CAfD;;EAiBA,IAAMwX,QAAQ,GAAG,SAAXA,QAAW,CAAS1pC,CAAT,EAAY;EAC3B,MAAIszB,IAAI,GAAG,EAAX;EACA,MAAIqW,KAAK,GAAG3pC,CAAC,CAACiE,GAAF,CAAMyH,MAAN,CAAa,UAAArL,CAAC;EAAA,WAAIA,CAAC,CAAC0E,KAAF,KAAYR,SAAhB;EAAA,GAAd,CAAZ;;EACA,MAAIolC,KAAK,CAACzqC,MAAN,KAAiB,CAArB,EAAwB;EACtB,QAAIJ,CAAC,GAAGkB,CAAC,CAACiE,GAAF,CAAMuK,SAAN,CAAgB,UAAAnO,CAAC;EAAA,aAAIA,CAAC,CAAC0E,KAAF,KAAYR,SAAhB;EAAA,KAAjB,CAAR;EACAxD,IAAAA,MAAM,CAACC,IAAP,CAAYhB,CAAC,CAACiE,GAAF,CAAMnF,CAAN,EAASiG,KAArB,EAA4B9D,OAA5B,CAAoC,UAAAP,CAAC,EAAI;EACvC,UAAIkpC,IAAI,GAAG7oC,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBpI,CAAlB,CAAX;EACA4pC,MAAAA,IAAI,CAAC3lC,GAAL,GAAW2lC,IAAI,CAAC3lC,GAAL,CAASwK,KAAT,CAAe,CAAf,CAAX;EACAm7B,MAAAA,IAAI,CAAC3lC,GAAL,CAASnF,CAAT,IAAciC,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBwhC,IAAI,CAAC3lC,GAAL,CAASnF,CAAT,CAAlB,CAAd;EACA8qC,MAAAA,IAAI,CAAC3lC,GAAL,CAASnF,CAAT,EAAYgE,IAAZ,GAAmBpC,CAAnB;EACA,aAAOkpC,IAAI,CAAC3lC,GAAL,CAASnF,CAAT,EAAYmG,QAAnB;EACA,aAAO2kC,IAAI,CAAC3lC,GAAL,CAASnF,CAAT,EAAYiG,KAAnB;EACA6kC,MAAAA,IAAI,CAAC5gC,MAAL,IAAe,MAAMtI,CAArB;EACA4yB,MAAAA,IAAI,CAACnoB,IAAL,CAAUy+B,IAAV;EACD,KATD;EAUD;;EACD,SAAOtW,IAAP;EACD,CAjBD;;;EAoBA,IAAIxkB,GAAG,GAAG,EAAV;EACA4B,OAAO,CAACzP,OAAR,CAAgB,UAAAjB,CAAC,EAAI;EACnBA,EAAAA,CAAC,CAACiE,GAAF,GAAQmuB,QAAW,CAACpyB,CAAC,CAACqM,KAAH,CAAnB;EACA,MAAIw9B,UAAU,GAAGH,QAAQ,CAAC1pC,CAAD,CAAzB;;EACA,MAAI6pC,UAAU,CAAC3qC,MAAX,GAAoB,CAAxB,EAA2B;EACzB4P,IAAAA,GAAG,GAAGA,GAAG,CAACvB,MAAJ,CAAWs8B,UAAX,CAAN;EACD,GAFD,MAEO;EACL/6B,IAAAA,GAAG,CAAC3D,IAAJ,CAASnL,CAAT;EACD;EACF,CARD;EAUA8O,GAAG,CAAC7N,OAAJ,CAAY,UAAAjB,CAAC,EAAI;EACfA,EAAAA,CAAC,CAAC8pC,QAAF,GAAa9X,eAAa,CAAChyB,CAAC,CAACiE,GAAH,CAA1B;EACA,SAAOjE,CAAP;EACD,CAHD;EAKA,aAAc,GAAG8O,GAAjB;;EChEA,IAAMi7B,QAAQ,GAAG,SAAXA,QAAW,CAASC,OAAT,EAAkB;EACjC,MAAIA,OAAO,CAAC9qC,MAAR,KAAmB,CAAvB,EAA0B;EACxB,WAAO,EAAP;EACD;;EACD,MAAIsL,GAAG,GAAG,EAAV;EACAw/B,EAAAA,OAAO,CAAC/oC,OAAR,CAAgB,UAAAkI,GAAG,EAAI;EACrBA,IAAAA,GAAG,GAAG4D,OAAM,CAAC5D,GAAD,CAAZ;;EACA,SAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqK,GAAG,CAACjK,MAAxB,EAAgCJ,CAAC,EAAjC,EAAqC;EACnC0L,MAAAA,GAAG,CAACrB,GAAG,CAACrK,CAAD,CAAJ,CAAH,GAAc0L,GAAG,CAACrB,GAAG,CAACrK,CAAD,CAAJ,CAAH,IAAe,CAA7B;EACA0L,MAAAA,GAAG,CAACrB,GAAG,CAACrK,CAAD,CAAJ,CAAH,IAAe,CAAf;EACD;EACF,GAND;EAOA,MAAI4P,GAAG,GAAG3N,MAAM,CAACC,IAAP,CAAYwJ,GAAZ,CAAV;EACAkE,EAAAA,GAAG,GAAGA,GAAG,CAAChD,MAAJ,CAAW,UAAA5L,CAAC;EAAA,WAAI0K,GAAG,CAAC1K,CAAD,CAAH,KAAWkqC,OAAO,CAAC9qC,MAAvB;EAAA,GAAZ,CAAN;EACAwP,EAAAA,GAAG,GAAGA,GAAG,CAACnD,GAAJ,CAAQ,UAAAmmB,GAAG;EAAA,WAAIpgB,MAAM,CAACogB,GAAD,CAAV;EAAA,GAAX,CAAN;EACA,SAAOhjB,GAAP;EACD,CAhBD;;EAkBA,IAAMu7B,MAAM,GAAG,SAATA,MAAS,CAAS98B,GAAT,EAAc;;EAE3BuD,EAAAA,SAAO,CAACzP,OAAR,CAAgB,UAAAjB,CAAC,EAAI;EACnB,QAAIkqC,UAAU,GAAG,EAAjB;EACAlqC,IAAAA,CAAC,CAAC8pC,QAAF,CAAW33B,KAAX,CAAiBlR,OAAjB,CAAyB,UAAAP,CAAC,EAAI;EAC5BwpC,MAAAA,UAAU,CAAC/+B,IAAX,CAAgBgC,GAAG,CAACglB,MAAJ,CAAWhgB,KAAX,CAAiBzR,CAAjB,KAAuB,EAAvC;EACD,KAFD;EAGAV,IAAAA,CAAC,CAAC8pC,QAAF,CAAWllC,IAAX,CAAgB3D,OAAhB,CAAwB,UAAA0D,GAAG,EAAI;EAC7BulC,MAAAA,UAAU,CAAC/+B,IAAX,CAAgBgC,GAAG,CAACglB,MAAJ,CAAWvtB,IAAX,CAAgBD,GAAhB,KAAwB,EAAxC;EACD,KAFD;EAIA,QAAIwlC,OAAO,GAAGJ,QAAQ,CAACG,UAAD,CAAtB;;EACA,QAAIC,OAAO,CAACjrC,MAAR,KAAmB,CAAvB,EAA0B;EACxB;EACD;;EAED,QAAIyW,OAAO,GAAGw0B,OAAO,CAAC5+B,GAAR,CAAY,UAAArH,KAAK;EAAA,aAAIiJ,GAAG,CAACH,IAAJ,CAAS9I,KAAT,CAAJ;EAAA,KAAjB,CAAd;EACA,QAAIkmC,MAAM,GAAGj9B,GAAG,CAAC9B,SAAJ,CAAcsK,OAAd,CAAb,CAfmB;;EAiBnB,QAAItJ,KAAK,GAAG+9B,MAAM,CAAC/9B,KAAP,CAAarM,CAAC,CAACiE,GAAf,EAAoBjE,CAAC,CAAC8P,KAAtB,CAAZ;;EACA,QAAIzD,KAAK,CAAC5J,KAAV,EAAiB;EACf,UAAIzC,CAAC,CAAC4yB,IAAF,KAAW,IAAf,EAAqB;EACnBvmB,QAAAA,KAAK,CAACkoB,OAAN,CAAcv0B,CAAC,CAAC2E,GAAhB,EAAqB3E,CAAC,CAACgJ,MAAvB;EACD,OAFD,MAEO;EACLqD,QAAAA,KAAK,CAAC1H,GAAN,CAAU3E,CAAC,CAAC2E,GAAZ,EAAiB3E,CAAC,CAACgJ,MAAnB;EACD;EACF;EACF,GAzBD;EA0BD,CA5BD;;EA6BA,YAAc,GAAGihC,MAAjB;;EC/CA;EAEA;;EACA,IAAMI,WAAW,GAAG,SAAdA,WAAc,CAASl9B,GAAT,EAAc;EAChC88B,EAAAA,QAAM,CAAC98B,GAAD,CAAN;EACAm9B,EAAAA,OAAO,CAACn9B,GAAD,CAAP;EACA,SAAOA,GAAP;EACD,CAJD;;EAKA,iBAAc,GAAGk9B,WAAjB;;ECPA;;EACA,IAAMhW,MAAM,GAAG,SAATA,MAAS,CAASlnB,GAAT,EAAc;EAC3B,MAAIpC,KAAK,GAAGoC,GAAG,CAACimB,QAAJ,EAAZ,CAD2B;;EAG3BjmB,EAAAA,GAAG,GAAGo9B,OAAI,CAACp9B,GAAD,EAAMpC,KAAN,CAAV,CAH2B;;EAK3BoC,EAAAA,GAAG,GAAGy4B,YAAS,CAACz4B,GAAD,EAAMpC,KAAN,CAAf,CAL2B;;EAO3BoC,EAAAA,GAAG,GAAGyqB,eAAY,CAACzqB,GAAD,CAAlB,CAP2B;;EAS3BA,EAAAA,GAAG,CAACrC,KAAJ,GAT2B;;EAW3BqC,EAAAA,GAAG,GAAGk9B,aAAW,CAACl9B,GAAD,CAAjB,CAX2B;;EAa3BA,EAAAA,GAAG,CAAC6mB,OAAJ,GAb2B;;EAe3B7mB,EAAAA,GAAG,CAAC5H,KAAJ,CAAUmrB,OAAV,CAAkBzvB,OAAlB,CAA0B,UAAAwvB,EAAE,EAAI;EAC9BA,IAAAA,EAAE,CAACtjB,GAAD,CAAF;EACD,GAFD;EAGA,SAAOA,GAAP;EACD,CAnBD;;EAoBA,aAAc,GAAGknB,MAAjB;;EC1BA,IAAMmW,SAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBC,aAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;EAAA,qCAGb;EACb,aAAKtX,QAAL,GAAgBnyB,OAAhB,CAAwB,UAAAV,CAAC,EAAI;EAC3B,cAAIA,CAAC,CAACqE,IAAF,CAAO2C,YAAP,KAAwB,IAAxB,IAAgChH,CAAC,CAACmK,IAAtC,EAA4C;EAC1CnK,YAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAT;EACD;;EACD,cAAInD,GAAG,GAAG2B,CAAC,CAAC1B,IAAF,CAAOkD,OAAP,CAAe,IAAf,EAAqB,EAArB,CAAV;EACAxB,UAAAA,CAAC,CAAC4N,GAAF,CAAMvP,GAAN;EACD,SAND;EAOA,eAAO,IAAP;EACD;EAZ2B;EAAA;EAAA,mCAaf;EACX,aAAKw0B,QAAL,GAAgBnyB,OAAhB,CAAwB,UAAAV,CAAC,EAAI;EAC3BA,UAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAT;EACAxB,UAAAA,CAAC,CAACiC,IAAF,GAAS,MAAMjC,CAAC,CAACiC,IAAjB;EACD,SAHD;EAIA,eAAO,IAAP;EACD;EAnB2B;;EAAA;EAAA,IAEFioC,GAFE;;EAqB9BC,EAAAA,aAAa,CAACthC,SAAd,CAAwBivB,MAAxB,GAAiCqS,aAAa,CAACthC,SAAd,CAAwBuhC,YAAzD;;EAEAF,EAAAA,GAAG,CAACrhC,SAAJ,CAAc9B,aAAd,GAA8B,UAASrH,CAAT,EAAY;EACxC,QAAIoM,KAAK,GAAG,KAAKA,KAAL,CAAW,eAAX,CAAZ;;EACA,QAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBoM,MAAAA,KAAK,GAAGA,KAAK,CAACpB,GAAN,CAAUhL,CAAV,CAAR;EACD;;EACD,WAAO,IAAIyqC,aAAJ,CAAkBr+B,KAAK,CAACW,IAAxB,EAA8B,IAA9B,EAAoC,KAAKzH,KAAzC,CAAP;EACD,GAND;;EAOA,SAAOklC,GAAP;EACD,CA/BD;;EAgCA,iBAAc,GAAGD,SAAjB;;EChCA,IAAMI,SAAS,GAAG,IAAlB;;EAEA,IAAMJ,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBI,QAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;EAAA,qCAGb;EACb,aAAKzX,QAAL,GAAgBnyB,OAAhB,CAAwB,UAAAV,CAAC,EAAI;EAC3B,cAAI3B,GAAG,GAAG2B,CAAC,CAAC1B,IAAF,CAAOkD,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAV;EACAxB,UAAAA,CAAC,CAAC4N,GAAF,CAAMvP,GAAN;EACD,SAHD;EAIA,eAAO,IAAP;EACD;EAT2B;EAAA;EAAA,mCAUf;EACX,aAAKw0B,QAAL,GAAgBnyB,OAAhB,CAAwB,UAAAV,CAAC,EAAI;EAC3B,cAAI3B,GAAG,GAAG2B,CAAC,CAAC1B,IAAF,CAAOkD,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAV;EACAnD,UAAAA,GAAG,GAAGA,GAAG,CAACF,KAAJ,CAAU,EAAV,EAAcyC,IAAd,CAAmB,GAAnB,CAAN,CAF2B;;EAI3B,cAAIypC,SAAS,CAACnpC,IAAV,CAAelB,CAAC,CAACiC,IAAjB,MAA2B,KAA/B,EAAsC;EACpC5D,YAAAA,GAAG,IAAI,GAAP;EACD;;EACD2B,UAAAA,CAAC,CAAC4N,GAAF,CAAMvP,GAAN;EACD,SARD;EASA,eAAO,IAAP;EACD;EArB2B;;EAAA;EAAA,IAEP6rC,GAFO;;EAuB9BI,EAAAA,QAAQ,CAACzhC,SAAT,CAAmBivB,MAAnB,GAA4BwS,QAAQ,CAACzhC,SAAT,CAAmBuhC,YAA/C;EACAE,EAAAA,QAAQ,CAACzhC,SAAT,CAAmB8uB,KAAnB,GAA2B2S,QAAQ,CAACzhC,SAAT,CAAmBuhC,YAA9C;;EAEAF,EAAAA,GAAG,CAACrhC,SAAJ,CAAcnC,QAAd,GAAyB,UAAShH,CAAT,EAAY;EACnC,QAAIoM,KAAK,GAAG,KAAKA,KAAL,CAAW,UAAX,CAAZ;;EACA,QAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBoM,MAAAA,KAAK,GAAGA,KAAK,CAACpB,GAAN,CAAUhL,CAAV,CAAR;EACD;;EACD,WAAO,IAAI4qC,QAAJ,CAAax+B,KAAK,CAACW,IAAnB,EAAyB,IAAzB,EAA+B,KAAKzH,KAApC,CAAP;EACD,GAND;;EAOA,SAAOklC,GAAP;EACD,CAlCD;;EAmCA,YAAc,GAAGD,WAAjB;;ECrCA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAE9BA,EAAAA,GAAG,CAACrhC,SAAJ,CAAcqxB,OAAd,GAAwB,UAASx6B,CAAT,EAAY;;EAElC,QAAI6qC,MAAM,GAAG,WAAQ,WAAR,EACVxB,KADU,CACJ,qBADI;EAAA,KAEVA,KAFU,CAEJ,2BAFI;EAAA,KAGVA,KAHU,CAGJ,+BAHI;EAAA,KAIVA,KAJU,CAIJ,4BAJI;EAAA,KAKVA,KALU,CAKJ,uBALI;EAAA,KAMVj9B,KANU,CAMJ,WANI,CAAb;EAOA,QAAI5J,KAAK,GAAG,KAAKi2B,UAAL,CAAgBoS,MAAhB,CAAZ;EAEA,QAAI1T,MAAM,GAAG30B,KAAK,CAAC80B,UAAN,EAAb;EACA90B,IAAAA,KAAK,GAAGA,KAAK,CAAC81B,OAAN,CAAcnB,MAAd,CAAR;EAEA,QAAIS,WAAW,GAAGp1B,KAAK,CAACo1B,WAAN,EAAlB;EACAp1B,IAAAA,KAAK,GAAGA,KAAK,CAAC81B,OAAN,CAAcV,WAAd,CAAR,CAfkC;;EAkBlC,QAAIkT,YAAY,GAAGtoC,KAAK,MAAL,CAAS,8DAAT,EAAyE4J,KAAzE,CAA+E,cAA/E,CAAnB;EACA5J,IAAAA,KAAK,GAAGA,KAAK,CAACk2B,WAAN,CAAkBoS,YAAlB,CAAR,CAnBkC;;EAsBlC,QAAIC,SAAS,GAAGvoC,KAAK,MAAL,CAAS,kBAAT,EAA6B4J,KAA7B,CAAmC,MAAnC,CAAhB;EACA5J,IAAAA,KAAK,GAAGA,KAAK,CAACk2B,WAAN,CAAkBqS,SAAlB,CAAR,CAvBkC;;EA0BlCvoC,IAAAA,KAAK,GAAGA,KAAK,CAACk2B,WAAN,CAAkB,cAAlB,CAAR;EACAl2B,IAAAA,KAAK,GAAGA,KAAK,CAACk2B,WAAN,CAAkB,WAAlB,CAAR;EACAl2B,IAAAA,KAAK,GAAGA,KAAK,CAACk2B,WAAN,CAAkB,kBAAlB,CAAR,CA5BkC;;EA+BlCl2B,IAAAA,KAAK,GAAGA,KAAK,CAACi2B,UAAN,CAAiB,eAAjB,CAAR;EACAj2B,IAAAA,KAAK,GAAGA,KAAK,CAACi2B,UAAN,CAAiB,UAAjB,CAAR,CAhCkC;;;;;;;;;;;;EA8ClC,QAAIuS,OAAO,GAAGxoC,KAAK,CAACiJ,MAAN,CAAa,UAAAnM,CAAC;EAAA,aAAIA,CAAC,CAAC+xB,SAAF,KAAgB,CAAhB,IAAqB/xB,CAAC,CAAC8M,KAAF,CAAQ,QAAR,EAAkBnN,MAAlB,IAA4B,CAArD;EAAA,KAAd,CAAd;;EACA,QAAI+rC,OAAO,CAACxoC,KAAZ,EAAmB;EACjB,UAAIzC,CAAC,GAAGirC,OAAO,CAACvS,UAAR,CAAmB,0BAAnB,CAAR;EACAj2B,MAAAA,KAAK,GAAGA,KAAK,CAAC81B,OAAN,CAAcv4B,CAAC,CAACuxB,EAAF,CAAK,CAAL,CAAd,CAAR;EACD;;EAED,QAAI,OAAOtxB,CAAP,KAAa,QAAjB,EAA2B;EACzBwC,MAAAA,KAAK,GAAGA,KAAK,CAACwI,GAAN,CAAUhL,CAAV,CAAR;EACD;;EACD,WAAO,IAAIwqC,GAAJ,CAAQhoC,KAAK,CAACuK,IAAd,EAAoB,IAApB,EAA0B,KAAKzH,KAA/B,CAAP;EACD,GAxDD;;EAyDA,SAAOklC,GAAP;EACD,CA5DD;;EA6DA,WAAc,GAAGD,WAAjB;;EC7DA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBS,YAFwB;EAAA;EAAA;EAAA;;EAG5B,0BAAYl+B,IAAZ,EAAkBkkB,IAAlB,EAAwB3rB,KAAxB,EAA+B;EAAA;;EAAA;;EAC7B,wFAAMyH,IAAN,EAAYkkB,IAAZ,EAAkB3rB,KAAlB;EACA,YAAK4lC,UAAL,GAAkB,IAAlB;EAF6B;EAG9B;;;;EAN2B;EAAA;EAAA,+BAQnB;EACP,aAAKn+B,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,cAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CADqB;;EAGrB,cAAIqgC,WAAW,GAAGrgC,KAAK,CAAC,CAAD,CAAL,CAAS3H,WAAT,EAAlB;EAEA2H,UAAAA,KAAK,CAAC9J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;;EAEtByB,YAAAA,CAAC,CAAC4N,GAAF,CAAM5N,CAAC,CAACuD,QAAF,IAAcvD,CAAC,CAAC1B,IAAtB;EACA0B,YAAAA,CAAC,CAACuD,QAAF,GAAaS,SAAb,CAHsB;;EAMtB,gBAAIzF,CAAC,GAAGiM,KAAK,CAAC7L,MAAN,GAAe,CAAnB,IAAwBqB,CAAC,CAACiC,IAAF,KAAW,EAAvC,EAA2C;EACzCjC,cAAAA,CAAC,CAACiC,IAAF,IAAU,GAAV;EACD;EACF,WATD,EALqB;;EAgBrB,cAAI4oC,WAAJ,EAAiB;EACfrgC,YAAAA,KAAK,CAAC,CAAD,CAAL,CAAS+tB,WAAT;EACD;EACF,SAnBD;EAoBA,eAAO,IAAP;EACD;EA9B2B;;EAAA;EAAA,IAEH2R,GAFG;;;;;;;;;;;EA2C9BA,EAAAA,GAAG,CAACrhC,SAAJ,CAAcwuB,YAAd,GAA6B,UAAS33B,CAAT,EAAY;;EAEvC,QAAIwC,KAAK,GAAG,KAAK4J,KAAL,CAAW,kBAAX,CAAZ,CAFuC;;;EAIvC,QAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBwC,MAAAA,KAAK,GAAGA,KAAK,CAACwI,GAAN,CAAUhL,CAAV,CAAR;EACD;;EACD,WAAO,IAAIirC,YAAJ,CAAiBzoC,KAAK,CAACuK,IAAvB,EAA6B,IAA7B,EAAmC,KAAKzH,KAAxC,CAAP;EACD,GARD,CA3C8B;;;EAsD9BklC,EAAAA,GAAG,CAACrhC,SAAJ,CAAciiC,QAAd,GAAyBZ,GAAG,CAACrhC,SAAJ,CAAckiC,UAAvC;EACAb,EAAAA,GAAG,CAACrhC,SAAJ,CAAc+hC,UAAd,GAA2BV,GAAG,CAACrhC,SAAJ,CAAcmiC,YAAzC;EACA,SAAOd,GAAP;EACD,CAzDD;;EA0DA,gBAAc,GAAGD,WAAjB;;EC1DA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAE9B,MAAM1Z,KAAK,GAAG,SAARA,KAAQ,CAAS5jB,GAAT,EAAc;EAC1B,QAAI2tB,MAAM,GAAG3tB,GAAG,CACburB,UADU,CACC,WADD,EAEVH,OAFU,CAEF,eAFE,EAGVjG,GAHU,CAGN,eAHM,CAAb;EAIA,QAAIkZ,UAAU,GAAGr+B,GAAG,CAACd,KAAJ,CAAU,cAAV,EAA0B,CAA1B,CAAjB;EACA,WAAO;EACLyuB,MAAAA,MAAM,EAAEA,MADH;EAEL2Q,MAAAA,WAAW,EAAEt+B,GAAG,CAACd,KAAJ,CAAU,eAAV,CAFR;EAGLm/B,MAAAA,UAAU,EAAEA,UAHP;EAILE,MAAAA,SAAS,EAAEF,UAAU,CAACjZ,GAAX,CAAe,WAAf;EAJN,KAAP;EAMD,GAZD;;;;EAF8B,MAiBxBoZ,KAjBwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;;EAAA,qCAmBb;EACb,eAAO,KAAKt/B,KAAL,CAAW,UAAX,CAAP;EACD;;;EArB2B;EAAA;EAAA,8BAuBpB;EACN,eAAO,KAAKqsB,UAAL,CAAgB,WAAhB,EAA6BH,OAA7B,CAAqC,eAArC,CAAP;EACD;;;EAzB2B;EAAA;EAAA,8BA2BpB;EACN,eAAOxH,KAAK,CAAC,IAAD,CAAL,CAAY+J,MAAnB;EACD;;;EA7B2B;EAAA;EAAA,0BA+BxBl8B,GA/BwB,EA+BnB;EACP,aAAKqC,OAAL,CAAa,UAAAd,CAAC,EAAI;EAChB,cAAIqrC,UAAU,GAAGza,KAAK,CAAC5wB,CAAD,CAAL,CAASqrC,UAA1B;EACAA,UAAAA,UAAU,CAACp9B,MAAX,CAAkBxP,GAAlB,EAFgB;;EAIhB4sC,UAAAA,UAAU,CAACpY,QAAX,CAAoB,CAApB,EAAuBwY,cAAvB,CAAsC,GAAtC;EACD,SALD;EAMA,eAAO,IAAP;EACD;;;EAvC2B;EAAA;EAAA,6BAyCrBv/B,KAzCqB,EAyCd;EACZ,eAAO,KAAKw/B,KAAL,SACDx/B,KADC,EAEJorB,MAFI,EAAP;EAGD;;;EA7C2B;EAAA;EAAA,uCA+CX;EACf,eAAO,KAAK/rB,MAAL,CAAY,UAAAyB,GAAG;EAAA,iBAAI4jB,KAAK,CAAC5jB,GAAD,CAAL,CAAWu+B,SAAf;EAAA,SAAf,CAAP;EACD;EAjD2B;EAAA;EAAA,uCAkDX;EACf,YAAIG,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,YAAIC,UAAU,GAAGD,KAAK,CAACta,EAAN,CAASsa,KAAK,CAAC3sC,MAAN,GAAe,CAAxB,CAAjB;;EACA,YAAI4sC,UAAU,CAACrpC,KAAX,IAAoBqpC,UAAU,CAACvZ,GAAX,CAAe,WAAf,MAAgC,KAAxD,EAA+D;EAC7DuZ,UAAAA,UAAU,CAACtpC,IAAX,CAAgB,IAAhB;EACD;;EACD,eAAO,IAAP;EACD;EAzD2B;EAAA;EAAA,0CA0DR;EAClB,YAAIqpC,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,YAAIC,UAAU,GAAGD,KAAK,CAACta,EAAN,CAASsa,KAAK,CAAC3sC,MAAN,GAAe,CAAxB,CAAjB;;EACA,YAAI4sC,UAAU,CAACrpC,KAAX,IAAoBqpC,UAAU,CAACvZ,GAAX,CAAe,WAAf,MAAgC,IAAxD,EAA8D;EAC5DuZ,UAAAA,UAAU,CAACtpC,IAAX,CAAgB,GAAhB;EACD;;EACD,eAAO,IAAP;EACD;EAjE2B;;EAAA;EAAA,IAiBVioC,GAjBU;;;EAoE9BkB,EAAAA,KAAK,CAACviC,SAAN,CAAgB0xB,MAAhB,GAAyB6Q,KAAK,CAACviC,SAAN,CAAgByiC,KAAzC;;EAEApB,EAAAA,GAAG,CAACrhC,SAAJ,CAAcugC,KAAd,GAAsB,UAAS1pC,CAAT,EAAY;EAChC,QAAID,CAAC,GAAG,WAAQ,+BAAR,CAAR,CADgC;;EAIhC,QAAI+rC,QAAQ,GAAG/rC,CAAC,CACbqM,KADY,CACN,uGADM,QAET,OAFS,CAAf;EAGA,QAAI2/B,OAAO,GAAGhsC,CAAC,CAACqM,KAAF,CAAQ,8DAAR,CAAd;EACA,QAAI4/B,QAAQ,GAAGjsC,CAAC,CAACqM,KAAF,CAAQ,oDAAR,CAAf;EACA,QAAIjH,MAAM,GAAG2mC,QAAQ,CAACx+B,MAAT,CAAgBy+B,OAAhB,CAAb;EACA5mC,IAAAA,MAAM,GAAGA,MAAM,CAACmI,MAAP,CAAc0+B,QAAd,CAAT;EACA7mC,IAAAA,MAAM,GAAGA,MAAM,MAAN,CAAU,WAAV,CAAT;;EAEA,QAAI,OAAOnF,CAAP,KAAa,QAAjB,EAA2B;EACzBmF,MAAAA,MAAM,GAAGpF,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAT;EACD;;EACD,WAAO,IAAI0rC,KAAJ,CAAUvmC,MAAM,CAAC4H,IAAjB,EAAuB,IAAvB,EAA6B,KAAKzH,KAAlC,CAAP;EACD,GAjBD;;EAkBA,SAAOklC,GAAP;EACD,CAzFD;;EA0FA,SAAc,GAAGD,WAAjB;;EC1FA,IAAM0B,QAAQ,GACZ,oFADF;;EAIA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASh/B,GAAT,EAAc;EAC9B,MAAIA,GAAG,CAAColB,GAAJ,CAAQ,SAAR,MAAuB,IAA3B,EAAiC;EAC/B,WAAO,IAAP;EACD,GAH6B;;;EAK9B,MAAIplB,GAAG,CAAColB,GAAJ,CAAQ2Z,QAAR,MAAsB,IAA1B,EAAgC;EAC9B,WAAO,KAAP;EACD;;EACD,SAAO,IAAP;EACD,CATD;;EAWA,eAAc,GAAGC,SAAjB;;ECZA,IAAM5vB,YAAU,GAAG;EACjB6vB,EAAAA,IAAI,EAAE,IADW;EAEjBC,EAAAA,IAAI,EAAE,IAFW;EAGjBC,EAAAA,QAAQ,EAAE,IAHO;EAIjBC,EAAAA,MAAM,EAAE,IAJS;EAKjBC,EAAAA,MAAM,EAAE,IALS;EAMjBC,EAAAA,KAAK,EAAE,IANU;EAOjBC,EAAAA,IAAI,EAAE,IAPW;;EAAA,CAAnB;;EAUA,IAAMC,WAAW,GAAG;EAClBvtC,EAAAA,CAAC,EAAE,IADe;EAElBI,EAAAA,CAAC,EAAE,IAFe;EAGlBC,EAAAA,CAAC,EAAE,IAHe;EAIlBE,EAAAA,CAAC,EAAE,IAJe;EAKlBb,EAAAA,CAAC,EAAE,IALe;EAMlBiB,EAAAA,CAAC,EAAE,IANe;EAOlBC,EAAAA,CAAC,EAAE,IAPe;EAQlBC,EAAAA,CAAC,EAAE,IARe;EASlBC,EAAAA,CAAC,EAAE,IATe;EAUlBG,EAAAA,CAAC,EAAE,IAVe;EAWlBC,EAAAA,CAAC,EAAE,IAXe;EAYlBK,EAAAA,CAAC,EAAE;EAZe,CAApB;;EAeA,IAAMisC,QAAQ,GAAG,CACf,SADe;EAEf,yBAFe;EAGf,OAHe,CAAjB;;EAMA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAS1/B,GAAT,EAAc;;EAEhC,MAAIA,GAAG,CAAColB,GAAJ,CAAQ,SAAR,KAAsBplB,GAAG,CAAColB,GAAJ,CAAQ,QAAR,CAA1B,EAA6C;EAC3C,WAAO,EAAP;EACD,GAJ+B;;;EAMhC,MAAIplB,GAAG,CAAColB,GAAJ,CAAQ,SAAR,CAAJ,EAAwB;EACtB,WAAO,KAAP;EACD;;EACD,MAAI3zB,GAAG,GAAGuO,GAAG,CAACtO,IAAJ,CAAS,QAAT,EAAmBgD,IAAnB,EAAV,CATgC;;EAWhC,MAAI0a,YAAU,CAAC/X,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClC,WAAO2d,YAAU,CAAC3d,GAAD,CAAjB;EACD,GAb+B;;;EAehC,MAAIkuC,WAAW,GAAGluC,GAAG,CAAC2K,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAlB;;EACA,MAAI4D,GAAG,CAAColB,GAAJ,CAAQ,aAAR,KAA0Boa,WAAW,CAACnoC,cAAZ,CAA2BsoC,WAA3B,CAA9B,EAAuE;EACrE,WAAO,IAAP;EACD,GAlB+B;;;EAoBhC,OAAK,IAAIhuC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8tC,QAAQ,CAAC1tC,MAA7B,EAAqCJ,CAAC,EAAtC,EAA0C;EACxC,QAAI8tC,QAAQ,CAAC9tC,CAAD,CAAR,CAAY2C,IAAZ,CAAiB7C,GAAjB,CAAJ,EAA2B;EACzB,aAAO,GAAP;EACD;EACF,GAxB+B;;;EA0BhC,MAAI,YAAY6C,IAAZ,CAAiB7C,GAAjB,CAAJ,EAA2B;EACzB,WAAO,IAAP;EACD;;EACD,SAAO,GAAP;EACD,CA9BD;;EAgCA,cAAc,GAAGiuC,WAAjB;;EClEA;EACA,IAAMjI,UAAQ,GAAG,CACf,uCADe,EAEf,4CAFe,EAGf,OAHe,EAIf,QAJe,EAKf,YALe,CAAjB;;EASA,IAAMC,YAAU,GAAG,CACjB,eADiB,EAEjB,6CAFiB,EAGjB,gBAHiB,EAIjB,SAJiB,EAKjB,kBALiB,EAMjB,SANiB,EAOjB,2BAPiB,EAQjB,UARiB,EASjB,SATiB,EAUjB,OAViB,EAWjB,oBAXiB,EAYjB,QAZiB,EAajB,iBAbiB,EAcjB,kBAdiB,EAejB,+BAfiB,EAgBjB,aAhBiB,EAiBjB,YAjBiB,EAkBjB,sCAlBiB,EAmBjB,QAnBiB,EAoBjB,0BApBiB,CAAnB;EAsBA,YAAc,GAAG;EACfA,EAAAA,UAAU,EAAEA,YADG;EAEfD,EAAAA,QAAQ,EAAEA;EAFK,CAAjB;;EC/BA,IAAMmI,IAAI,GAAG,IAAb;EAEA;EACA;;EACA,IAAMnI,UAAQ,GAAG,SAAXA,QAAW,CAAShmC,GAAT,EAAc;;EAE7B,MAAIuwB,QAAK,CAAC0V,UAAN,CAAiB52B,IAAjB,CAAsB,UAAAhK,GAAG;EAAA,WAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,GAAzB,CAAJ,EAAiD;EAC/C,WAAO,KAAP;EACD,GAJ4B;;;EAM7B,MAAImuC,IAAI,CAACtrC,IAAL,CAAU7C,GAAV,MAAmB,IAAvB,EAA6B;EAC3B,WAAO,IAAP;EACD,GAR4B;;;EAU7B,MAAIuwB,QAAK,CAACyV,QAAN,CAAe32B,IAAf,CAAoB,UAAAhK,GAAG;EAAA,WAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,GAAvB,CAAJ,EAA+C;EAC7C,WAAO,IAAP;EACD;;EACD,SAAO,IAAP;EACD,CAdD;;EAeA,gBAAc,GAAGgmC,UAAjB;;ECpBA,IAAMoI,UAAU,GAAG;EACjBC,EAAAA,EAAE,EAAE,KADa;EAEjBC,EAAAA,GAAG,EAAE,MAFY;EAGjBC,EAAAA,IAAI,EAAE,QAHW;EAIjBC,EAAAA,EAAE,EAAE,MAJa;EAKjBtuC,EAAAA,CAAC,EAAE,MALc;EAMjBgkC,EAAAA,GAAG,EAAE,OANY;EAQjBuK,EAAAA,GAAG,EAAE,MARY;EASjBC,EAAAA,KAAK,EAAE,QATU;EAUjBC,EAAAA,GAAG,EAAE,MAVY;EAWjBC,EAAAA,EAAE,EAAE,MAXa;EAYjBC,EAAAA,IAAI,EAAE;EAZW,CAAnB;;EAgBA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAASvgC,GAAT,EAAc;EACjC,MAAIvO,GAAG,GAAGuO,GAAG,CAACtO,IAAJ,CAAS,MAAT,EAAiBgD,IAAjB,EAAV,CADiC;;EAGjC,MAAImrC,UAAU,CAACxoC,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClCuO,IAAAA,GAAG,CAACqnB,WAAJ,CAAgBwY,UAAU,CAACpuC,GAAD,CAA1B,EAAiC,IAAjC;EACAuO,IAAAA,GAAG,CAACxI,GAAJ,CAAQ,YAAR,EAAsB,cAAtB;EACA;EACD,GAPgC;;;EASjC,MAAI,KAAKlD,IAAL,CAAU7C,GAAV,CAAJ,EAAoB;EAClBA,IAAAA,GAAG,IAAI,GAAP;EACAuO,IAAAA,GAAG,CAACqnB,WAAJ,CAAgB51B,GAAhB,EAAqB,IAArB;EACAuO,IAAAA,GAAG,CAACxI,GAAJ,CAAQ,YAAR,EAAsB,cAAtB;EACA;EACD,GAdgC;;;EAgBjC/F,EAAAA,GAAG,IAAI,IAAP;EACAuO,EAAAA,GAAG,CAACqnB,WAAJ,CAAgB51B,GAAhB,EAAqB,IAArB;EACAuO,EAAAA,GAAG,CAACxI,GAAJ,CAAQ,YAAR,EAAsB,cAAtB;EACA;EACD,CApBD;;EAqBA,kBAAc,GAAG+oC,YAAjB;;ECrCA;EACA;EACA,IAAM3c,OAAK,GAAG,SAARA,KAAQ,CAAS5jB,GAAT,EAAc;EAC1B,MAAIuB,GAAG,GAAG;EACRf,IAAAA,IAAI,EAAER;EADE,GAAV,CAD0B;;EAK1B,MAAIA,GAAG,CAAColB,GAAJ,CAAQ,qBAAR,CAAJ,EAAoC;EAClC,QAAIvyB,CAAC,GAAGmN,GAAG,CAACurB,UAAJ,CAAe,UAAf,EAA2B,CAA3B,CAAR;EACAhqB,IAAAA,GAAG,CAACf,IAAJ,GAAW3N,CAAC,CAACuxB,EAAF,CAAK,CAAL,CAAX;EACA7iB,IAAAA,GAAG,CAAClM,IAAJ,GAAWxC,CAAC,CAACuxB,EAAF,CAAK,CAAL,CAAX;EACD;;EACD,SAAO7iB,GAAP;EACD,CAXD;;EAYA,WAAc,GAAGqiB,OAAjB;;ECRA,IAAMnmB,SAAO,GAAG;;EAEd+D,EAAAA,IAAI,EAAE,cAASnI,OAAT,EAAkB;EACtB,QAAIvG,CAAC,GAAG,IAAR;;EACA,QAAI,OAAOuG,OAAP,KAAmB,QAAvB,EAAiC;EAC/BvG,MAAAA,CAAC,GAAGuG,OAAJ;EACAA,MAAAA,OAAO,GAAG,IAAV;EACD;;EACDA,IAAAA,OAAO,GAAGA,OAAO,IAAI;EAAE3H,MAAAA,IAAI,EAAE,IAAR;EAAc+H,MAAAA,MAAM,EAAE,IAAtB;EAA4B/E,MAAAA,IAAI,EAAE,IAAlC;EAAwCkJ,MAAAA,KAAK,EAAE;EAA/C,KAArB;EACA,QAAI2D,GAAG,GAAG,EAAV;EACA,SAAKzN,OAAL,CAAa,UAAAkM,GAAG,EAAI;EAClB,UAAIwB,IAAI,GAAGxB,GAAG,CAACwB,IAAJ,CAASnI,OAAT,EAAkB,CAAlB,CAAX;EACAmI,MAAAA,IAAI,CAACg/B,OAAL,GAAeC,UAAU,CAACzgC,GAAD,CAAzB;EACAuB,MAAAA,GAAG,CAACvD,IAAJ,CAASwD,IAAT;EACD,KAJD;;EAKA,QAAI1O,CAAC,KAAK,IAAV,EAAgB;EACd,aAAOyO,GAAG,CAACzO,CAAD,CAAV;EACD;;EACD,WAAOyO,GAAP;EACD,GAnBa;;;EAqBd2N,EAAAA,UAAU,EAAE,sBAAW;EACrB,QAAIrP,IAAI,GAAG,KAAKwlB,SAAL,CAAe,4DAAf,CAAX;EACAxlB,IAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAY,KAAKklB,UAAL,CAAgB,uBAAhB,CAAZ,CAAP;EACAzlB,IAAAA,IAAI,GAAGA,IAAI,CAACX,KAAL,CAAW,YAAX,CAAP;EACA,WAAOW,IAAI,CAAClF,IAAL,CAAU,OAAV,CAAP;EACD,GA1Ba;EA4Bd88B,EAAAA,QAAQ,EAAE,oBAAW;EACnB,WAAO,WAAQ,SAAR,CAAP,CADmB;EAEpB,GA9Ba;EA+BduH,EAAAA,SAAS,EAAE,qBAAW;EACpB,WAAO,KAAKzgC,MAAL,CAAY,UAAAnM,CAAC;EAAA,aAAI4sC,WAAS,CAAC5sC,CAAD,CAAb;EAAA,KAAb,CAAP;EACD,GAjCa;EAkCd2c,EAAAA,QAAQ,EAAE,kBAAS2xB,KAAT,EAAgB;EAAA;;EACxB,QAAI3xB,QAAQ,GAAG,KAAK3W,KAAL,CAAWE,UAAX,CAAsByW,QAArC;EACA,SAAKjb,OAAL,CAAa,UAAAkM,GAAG,EAAI;EAClB,UAAIA,GAAG,CAAColB,GAAJ,CAAQ,SAAR,KAAsB4Z,WAAS,CAACh/B,GAAD,CAAT,KAAmB,KAA7C,EAAoD;EAClD;EACD,OAHiB;;;EAKlB,UAAIQ,IAAI,GAAGojB,OAAK,CAAC5jB,GAAD,CAAL,CAAWQ,IAAtB;EACA,UAAI/O,GAAG,GAAG+O,IAAI,CAAC9O,IAAL,CAAU,SAAV,CAAV;;EACA,UAAI,CAAC8O,IAAI,CAAC4kB,GAAL,CAAS,WAAT,CAAD,IAA0BqS,YAAQ,CAAChmC,GAAD,CAAR,KAAkB,IAAhD,EAAsD;EACpD;EACD;;EACDA,MAAAA,GAAG,GAAGsd,QAAQ,CAACtd,GAAD,EAAM,KAAI,CAAC2G,KAAX,CAAd;EACAoI,MAAAA,IAAI,CAAC5L,OAAL,CAAanD,GAAb,EAAkB+F,GAAlB,CAAsB,SAAtB,EAXkB;;EAalB,UAAIkpC,KAAJ,EAAW;EACT,YAAIC,EAAE,GAAGngC,IAAI,CAACogC,UAAL,CAAgB,qBAAhB,EAAuCzb,GAAvC,CAA2C,YAA3C,CAAT;;EACA,YAAIwb,EAAE,CAACrrC,KAAH,KAAa,IAAjB,EAAuB;EACrBqrC,UAAAA,EAAE,CAACrW,MAAH;EACD;EACF;EACF,KAnBD;EAoBA,WAAO,IAAP;EACD,GAzDa;EA0Dd9xB,EAAAA,UAAU,EAAE,oBAASkoC,KAAT,EAAgB;EAAA;;EAC1B,QAAIloC,UAAU,GAAG,KAAKJ,KAAL,CAAWE,UAAX,CAAsBE,UAAvC;EACA,SAAK1E,OAAL,CAAa,UAAAkM,GAAG,EAAI;EAClB,UAAIA,GAAG,CAAColB,GAAJ,CAAQ,WAAR,KAAwB4Z,WAAS,CAACh/B,GAAD,CAAT,KAAmB,KAA/C,EAAsD;EACpD;EACD,OAHiB;;;EAKlB,UAAIQ,IAAI,GAAGojB,OAAK,CAAC5jB,GAAD,CAAL,CAAWQ,IAAtB;EACA,UAAI/O,GAAG,GAAG+O,IAAI,CAAC9O,IAAL,CAAU,SAAV,CAAV;;EACA,UAAI,CAAC8O,IAAI,CAAC4kB,GAAL,CAAS,SAAT,CAAD,IAAwBqS,YAAQ,CAAChmC,GAAD,CAAR,KAAkB,IAA9C,EAAoD;EAClD;EACD;;EACDA,MAAAA,GAAG,GAAG+G,UAAU,CAAC/G,GAAD,EAAM,MAAI,CAAC2G,KAAX,CAAhB;EACAoI,MAAAA,IAAI,CAAC5L,OAAL,CAAanD,GAAb,EAAkB+F,GAAlB,CAAsB,WAAtB,EAXkB;;EAalB,UAAIkpC,KAAJ,EAAW;;EAET,YAAIxpC,KAAK,GAAG8I,GAAZ;EACA,YAAI6gC,GAAG,GAAG7gC,GAAG,CAAC4gC,UAAJ,CAAe,YAAf,CAAV;;EACA,YAAIC,GAAG,CAACvrC,KAAR,EAAe;EACb4B,UAAAA,KAAK,GAAG2pC,GAAR;EACD;;EACD,YAAIL,OAAO,GAAGC,UAAU,CAACvpC,KAAD,CAAxB;EACAA,QAAAA,KAAK,CAAC4pC,YAAN,CAAmBN,OAAnB;EACD;EACF,KAvBD;EAwBA,WAAO,IAAP;EACD,GArFa;EAsFdD,EAAAA,YAAY,EAAE,wBAAW;EACvB,SAAKzsC,OAAL,CAAa,UAAA1B,CAAC,EAAI;EAChBmuC,MAAAA,cAAY,CAACnuC,CAAD,CAAZ;EACD,KAFD;EAGA,WAAO,IAAP;EACD;EA3Fa,CAAhB;EA6FA,aAAc,GAAGqL,SAAjB;;ECjGA,IAAM4/B,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExByD,KAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA,IAEVzD,GAFU;;;EAI9B1pC,EAAAA,MAAM,CAACqH,MAAP,CAAc8lC,KAAK,CAAC9kC,SAApB,EAA+BwB,SAA/B;;EAEA6/B,EAAAA,GAAG,CAACrhC,SAAJ,CAAcoR,KAAd,GAAsB,UAASva,CAAT,EAAY;;EAEhC,QAAIwmB,IAAI,GAAG,KAAKpa,KAAL,CAAW,yCAAX,CAAX,CAFgC;;EAIhC,QAAIrM,CAAC,GAAG,KAAKsyB,GAAL,CAAS7L,IAAT,EAAeiS,UAAf,CAA0B,WAA1B,CAAR,CAJgC;;EAMhC14B,IAAAA,CAAC,GAAGA,CAAC,CAACuN,MAAF,CAASkZ,IAAT,CAAJ;EAEAzmB,IAAAA,CAAC,GAAGA,CAAC,CAACqM,KAAF,CAAQ,8BAAR,CAAJ,CARgC;;EAUhCrM,IAAAA,CAAC,GAAGA,CAAC,CAACsyB,GAAF,CAAM,UAAN,CAAJ;EACAtyB,IAAAA,CAAC,GAAGA,CAAC,CAACsyB,GAAF,CAAM,eAAN,CAAJ;EACAtyB,IAAAA,CAAC,GAAGA,CAAC,CAACsyB,GAAF,CAAM,mBAAN,CAAJ,CAZgC;;;EAchCtyB,IAAAA,CAAC,GAAGA,CAAC,CAACsyB,GAAF,CAAM,6BAAN,CAAJ;EACAtyB,IAAAA,CAAC,GAAGA,CAAC,CAACsyB,GAAF,CAAM,kBAAN,CAAJ;;EAEA,QAAI,OAAOryB,CAAP,KAAa,QAAjB,EAA2B;EACzBD,MAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,WAAO,IAAIiuC,KAAJ,CAAUluC,CAAC,CAACgN,IAAZ,EAAkB,IAAlB,EAAwB,KAAKzH,KAA7B,CAAP;EACD,GArBD;;EAsBA,SAAOklC,GAAP;EACD,CA7BD;;EA8BA,SAAc,GAAGD,WAAjB;;EChCA,IAAM2D,IAAI,GAAG,IAAb;EACA,IAAMC,KAAK,GAAG,IAAd;;EAEA,IAAM5D,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExB4D,WAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;;EAAA,+BAInB;EACP,aAAKrhC,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,cAAImiC,KAAK,GAAGniC,CAAC,CAAC4K,KAAF,CAAQ,CAAR,CAAZ;EACAu3B,UAAAA,KAAK,CAAC//B,GAAN,GAAY+/B,KAAK,CAAC//B,GAAN,CAAUR,OAAV,CAAkBosC,IAAlB,EAAwB,EAAxB,CAAZ;EACA,cAAIhnC,IAAI,GAAGhH,CAAC,CAAC+L,QAAF,EAAX;EACA/E,UAAAA,IAAI,CAAC3E,IAAL,GAAY2E,IAAI,CAAC3E,IAAL,CAAUT,OAAV,CAAkBqsC,KAAlB,EAAyB,EAAzB,CAAZ;EACD,SALD;EAMA,eAAO,IAAP;EACD;EAZ2B;;EAAA;EAAA,IAEJ3D,GAFI;;EAe9BA,EAAAA,GAAG,CAACrhC,SAAJ,CAAcyuB,WAAd,GAA4B,UAAS53B,CAAT,EAAY;EACtC,QAAI+M,IAAI,GAAG,EAAX;EACA,SAAKA,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CADqB;;EAGrB,WAAK,IAAIjM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,YAAMyB,CAAC,GAAGwK,KAAK,CAACjM,CAAD,CAAf;;EACA,YAAIqvC,IAAI,CAAC1sC,IAAL,CAAUlB,CAAC,CAACgC,GAAZ,CAAJ,EAAsB;;EAEpB,eAAK,IAAIrC,CAAC,GAAGpB,CAAb,EAAgBoB,CAAC,GAAG6K,KAAK,CAAC7L,MAA1B,EAAkCgB,CAAC,IAAI,CAAvC,EAA0C;EACxC,gBAAIkuC,KAAK,CAAC3sC,IAAN,CAAWsJ,KAAK,CAAC7K,CAAD,CAAL,CAASsC,IAApB,CAAJ,EAA+B;EAC7B,kBAAImJ,GAAG,GAAGzL,CAAC,GAAGpB,CAAJ,GAAQ,CAAlB;EACAkO,cAAAA,IAAI,CAAC7B,IAAL,CAAUhL,CAAC,CAACkL,SAAF,CAAY9K,CAAC,CAAC4D,EAAd,EAAkBwH,GAAlB,CAAV;EACA7M,cAAAA,CAAC,GAAGoB,CAAJ;EACA;EACD;EACF;EACF;EACF;EACF,KAjBD,EAFsC;;EAqBtC,QAAI,OAAOD,CAAP,KAAa,QAAjB,EAA2B;EACzB,UAAI+M,IAAI,CAAC/M,CAAD,CAAR,EAAa;EACX+M,QAAAA,IAAI,GAAG,CAACA,IAAI,CAAC/M,CAAD,CAAL,CAAP;EACD,OAFD,MAEO;EACL+M,QAAAA,IAAI,GAAG,EAAP;EACD;;EACD,aAAO,IAAIqhC,WAAJ,CAAgBrhC,IAAhB,EAAsB,IAAtB,EAA4B,KAAKzH,KAAjC,CAAP;EACD;;EACD,WAAO,IAAI8oC,WAAJ,CAAgBrhC,IAAhB,EAAsB,IAAtB,EAA4B,KAAKzH,KAAjC,CAAP;EACD,GA9BD;;EAgCA,SAAOklC,GAAP;EACD,CAhDD;;EAiDA,eAAc,GAAGD,WAAjB;;ECpDA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExB6D,WAFwB;EAAA;EAAA;EAAA;;EAG5B,yBAAYthC,IAAZ,EAAkBkkB,IAAlB,EAAwB3rB,KAAxB,EAA+B;EAAA;;EAAA;;EAC7B,uFAAMyH,IAAN,EAAYkkB,IAAZ,EAAkB3rB,KAAlB;EACA,YAAK4lC,UAAL,GAAkB,IAAlB;EAF6B;EAG9B;;;;EAN2B;EAAA;EAAA,8BAQpB;EACN,aAAKn+B,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,cAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACAA,UAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,gBAAI3B,GAAG,GAAG2B,CAAC,CAAC1B,IAAF,CAAOkD,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAV;EACAxB,YAAAA,CAAC,CAAC4N,GAAF,CAAMvP,GAAG,IAAI2B,CAAC,CAAC1B,IAAf;EACD,WAHD;EAID,SAND;EAOA,eAAO,IAAP;EACD;EAjB2B;;EAAA;EAAA,IAEJ4rC,GAFI;;;;;;;;;;;EA8B9BA,EAAAA,GAAG,CAACrhC,SAAJ,CAAc0uB,WAAd,GAA4B,UAAS73B,CAAT,EAAY;;EAEtC,QAAIwC,KAAK,GAAG,KAAK4J,KAAL,CAAW,qBAAX,CAAZ,CAFsC;;EAItC,QAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBwC,MAAAA,KAAK,GAAGA,KAAK,CAACwI,GAAN,CAAUhL,CAAV,CAAR;EACD;;EACD,WAAO,IAAIquC,WAAJ,CAAgB7rC,KAAK,CAACuK,IAAtB,EAA4B,IAA5B,EAAkC,KAAKzH,KAAvC,CAAP;EACD,GARD;;EASA,SAAOklC,GAAP;EACD,CAxCD;;EAyCA,eAAc,GAAGD,WAAjB;;ECzCA,IAAM+D,KAAK,GAAG;EACZ,QAAU,IADE;;EAEZ,YAAU,QAFE;;EAGZ,OAAU,GAHE;;EAIZ,YAAU,QAJE;;EAKZ,YAAU,QALE;;EAMZ,YAAU,QANE;;EAOZ,YAAU,QAPE;;EAQZ,YAAU,QARE;;EASZ,YAAU,QATE;;EAUZ,YAAU,QAVE;;EAWZ,UAAU,MAXE;;EAYZ,YAAU,QAZE;;;EAcZ,YAAU,QAdE;;EAeZ,YAAU,QAfE;;EAgBZ,YAAU,QAhBE;;;EAkBZ,YAAU,QAlBE;;EAmBZ,OAAU,MAnBE;;EAoBZ,YAAU,QApBE;;EAAA,CAAd;EAuBA,IAAMC,OAAO,GAAGz9B,MAAM,CAAC,MAAMhQ,MAAM,CAACC,IAAP,CAAYutC,KAAZ,EAAmBptC,IAAnB,CAAwB,GAAxB,CAAN,GAAqC,GAAtC,CAAtB;;EAEA,IAAMqpC,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBgE,UAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;;EAAA,+BAInB;EACP,eAAO,IAAP;EACD;EAN2B;;EAAA;EAAA,IAELhE,GAFK;;EAS9BA,EAAAA,GAAG,CAACrhC,SAAJ,CAAcmuB,UAAd,GAA2B,UAASt3B,CAAT,EAAY;EACrC,QAAI+M,IAAI,GAAG,EAAX;EACA,SAAKA,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CADqB;;EAGrB,WAAK,IAAIjM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,YAAMyB,CAAC,GAAGwK,KAAK,CAACjM,CAAD,CAAf;;EACA,YAAI0vC,OAAO,CAAC/sC,IAAR,CAAalB,CAAC,CAACgC,GAAf,CAAJ,EAAyB;EACvB,cAAIm/B,KAAI,GAAG,CAACnhC,CAAC,CAACgC,GAAF,CAAM8J,KAAN,CAAYmiC,OAAZ,KAAwB,EAAzB,EAA6B,CAA7B,CAAX;EACA,cAAIE,IAAI,GAAGH,KAAK,CAAC7M,KAAD,CAAhB,CAFuB;;;;;EAOvB,eAAK,IAAIxhC,CAAC,GAAGpB,CAAb,EAAgBoB,CAAC,GAAG6K,KAAK,CAAC7L,MAA1B,EAAkCgB,CAAC,IAAI,CAAvC,EAA0C;EACxC,gBAAI6K,KAAK,CAAC7K,CAAD,CAAL,CAASsC,IAAT,CAAcgB,OAAd,CAAsBkrC,IAAtB,MAAgC,CAAC,CAArC,EAAwC;EACtC,kBAAI/iC,GAAG,GAAGzL,CAAC,GAAGpB,CAAJ,GAAQ,CAAlB;EACAkO,cAAAA,IAAI,CAAC7B,IAAL,CAAUhL,CAAC,CAACkL,SAAF,CAAY9K,CAAC,CAAC4D,EAAd,EAAkBwH,GAAlB,CAAV;EACA7M,cAAAA,CAAC,GAAGoB,CAAJ;EACA;EACD;EACF;EACF;EACF;EACF,KAtBD,EAFqC;;EA0BrC,QAAI,OAAOD,CAAP,KAAa,QAAjB,EAA2B;EACzB,UAAI+M,IAAI,CAAC/M,CAAD,CAAR,EAAa;EACX+M,QAAAA,IAAI,GAAG,CAACA,IAAI,CAAC/M,CAAD,CAAL,CAAP;EACD,OAFD,MAEO;EACL+M,QAAAA,IAAI,GAAG,EAAP;EACD;;EACD,aAAO,IAAIyhC,UAAJ,CAAezhC,IAAf,EAAqB,IAArB,EAA2B,KAAKzH,KAAhC,CAAP;EACD;;EACD,WAAO,IAAIkpC,UAAJ,CAAezhC,IAAf,EAAqB,IAArB,EAA2B,KAAKzH,KAAhC,CAAP;EACD,GAnCD,CAT8B;;;EA8C9BklC,EAAAA,GAAG,CAACrhC,SAAJ,CAAcguB,MAAd,GAAuBqT,GAAG,CAACrhC,SAAJ,CAAcmuB,UAArC;EAEA,SAAOkT,GAAP;EACD,CAjDD;;EAkDA,cAAc,GAAGD,WAAjB;;EC3EA;EACA,IAAMnkC,cAAY,GAAG,SAAfA,YAAe,CAASzD,MAAT,EAAiB2C,KAAjB,EAAwB;EAC3C,MAAIopC,IAAI,GAAG/rC,MAAM,CAAC+rC,IAAlB,CAD2C;;EAI3C,MAAI/vC,GAAG,GAAG+vC,IAAI,CAAC9vC,IAAL,CAAU,QAAV,CAAV;;EACA,MAAI8vC,IAAI,CAACpc,GAAL,CAAS,aAAT,CAAJ,EAA6B;EAC3B,WAAO3zB,GAAP;EACD,GAP0C;;;EAU3C,MAAImH,KAAK,GAAG,IAAZ;;EACA,MAAI4oC,IAAI,CAACpc,GAAL,CAAS,YAAT,CAAJ,EAA4B;EAC1BxsB,IAAAA,KAAK,GAAG,WAAR;EACD,GAFD,MAEO,IAAI4oC,IAAI,CAACpc,GAAL,CAAS,SAAT,CAAJ,EAAyB;EAC9BxsB,IAAAA,KAAK,GAAG,QAAR;EACD,GAFM,MAEA,IAAI4oC,IAAI,CAACpc,GAAL,CAAS,eAAT,CAAJ,EAA+B;EACpCxsB,IAAAA,KAAK,GAAG,cAAR;EACD,GAFM,MAEA,IAAI4oC,IAAI,CAACpc,GAAL,CAAS,aAAT,CAAJ,EAA6B;EAClCxsB,IAAAA,KAAK,GAAG,YAAR;EACD,GAFM,MAEA,IAAI4oC,IAAI,CAACpc,GAAL,CAAS,QAAT,CAAJ,EAAwB;EAC7BxsB,IAAAA,KAAK,GAAG,OAAR;EACD;;EACD,SAAOR,KAAK,CAACE,UAAN,CAAiBY,YAAjB,CAA8BzH,GAA9B,EAAmC2G,KAAnC,EAA0CQ,KAA1C,CAAP;EACD,CAvBD;;EAwBA,oBAAc,GAAGM,cAAjB;;ECzBA;EACA;EAEA;EACA,IAAMuoC,QAAQ,GAAG,SAAXA,QAAW,CAASC,EAAT,EAAa;EAC5B,MAAIzI,IAAI,GAAGyI,EAAE,CAACpc,UAAH,CAAc,QAAd,EAAwBtrB,IAAxB,EAAX;EACA,SAAOi/B,IAAP;EACD,CAHD;EAMA;EACA;;;EACA,IAAMxB,UAAQ,GAAG,SAAXA,QAAW,CAAShiC,MAAT,EAAiB;EAChC,MAAIisC,EAAE,GAAGjsC,MAAM,CAAC+rC,IAAhB;;EACA,MAAIE,EAAE,CAACtc,GAAH,CAAO,iBAAP,KAA6B3vB,MAAM,CAACksC,SAAP,CAAiBvc,GAAjB,CAAqB,iBAArB,CAAjC,EAA0E;EACxE,WAAO,IAAP;EACD;;EACD,MAAIsc,EAAE,CAACtc,GAAH,CAAO,gBAAP,KAA4B3vB,MAAM,CAACksC,SAAP,CAAiBvc,GAAjB,CAAqB,gBAArB,CAAhC,EAAwE;EACtE,WAAO,KAAP;EACD,GAP+B;;;EAShC,MAAI6T,IAAI,GAAGwI,QAAQ,CAACC,EAAD,CAAnB;;EACA,MAAIzI,IAAI,CAAC7T,GAAL,CAAS,eAAT,CAAJ,EAA+B;EAC7B,WAAO,IAAP;EACD;;EACD,MAAI6T,IAAI,CAAC7T,GAAL,CAAS,SAAT,CAAJ,EAAyB;EACvB,WAAO,IAAP;EACD;;EACD,MAAI6T,IAAI,CAAC7T,GAAL,CAAS,WAAT,CAAJ,EAA2B;EACzB,WAAO,KAAP;EACD;;EACD,SAAO,IAAP;EACD,CApBD;;EAqBA,gBAAc,GAAGqS,UAAjB;;EC9BA;EACA;EACA;EACA;EACA;;EAEA,IAAMmK,UAAU,GAAG,SAAbA,UAAa,CAASnsC,MAAT,EAAiB2C,KAAjB,EAAwB;EACzC,MAAIspC,EAAE,GAAGjsC,MAAM,CAAC+rC,IAAhB,CADyC;;EAGzC,MAAI/rC,MAAM,CAACyC,QAAP,CAAgB5C,KAApB,EAA2B;EACzB;EACD,GALwC;;;EAQzC,MAAIG,MAAM,CAACksC,SAAP,CAAiBrsC,KAArB,EAA4B;EAC1BG,IAAAA,MAAM,CAACksC,SAAP,CAAiBvd,EAAjB,CAAoB,CAApB,EAAuBnjB,MAAvB,CAA8B,KAA9B;EACA;EACD,GAXwC;;;EAazC,MAAIygC,EAAE,CAACtc,GAAH,CAAO,2BAAP,CAAJ,EAAyC;EACvCsc,IAAAA,EAAE,CAACzgC,MAAH,CAAU,KAAV;EACA;EACD,GAhBwC;;;EAkBzC,MAAIygC,EAAE,CAACtc,GAAH,CAAO,YAAP,CAAJ,EAA0B;EACxB,QAAI/V,GAAG,GAAGnW,gBAAY,CAACzD,MAAD,EAAS2C,KAAT,CAAtB;EACAspC,IAAAA,EAAE,CAACra,WAAH,CAAehY,GAAf,EAAoB,IAApB;EACAqyB,IAAAA,EAAE,CAACxgC,OAAH,CAAW,SAAX;EACA;EACD,GAvBwC;;;EAyBzC,MAAIwgC,EAAE,CAACtc,GAAH,CAAO,eAAP,CAAJ,EAA6B;EAC3B,QAAI/V,IAAG,GAAGnW,gBAAY,CAACzD,MAAD,EAAS2C,KAAT,CAAtB;;EACAspC,IAAAA,EAAE,CAACra,WAAH,CAAehY,IAAf,EAAoB,IAApB;;EACA,QAAIooB,YAAQ,CAAChiC,MAAD,AAAA,CAAZ,EAA6B;EAC3BisC,MAAAA,EAAE,CAACxgC,OAAH,CAAW,QAAX;EACD,KAFD,MAEO;EACLwgC,MAAAA,EAAE,CAACxgC,OAAH,CAAW,UAAX;EACD;;EACD;EACD,GAlCwC;;;EAoCzC,MAAIwgC,EAAE,CAACtc,GAAH,CAAO,SAAP,CAAJ,EAAuB;EACrB,QAAI/V,KAAG,GAAGnW,gBAAY,CAACzD,MAAD,EAAS2C,KAAT,CAAtB;;EACAspC,IAAAA,EAAE,CAACra,WAAH,CAAehY,KAAf,EAAoB,IAApB;EACAqyB,IAAAA,EAAE,CAACxgC,OAAH,CAAW,KAAX;EACA;EACD,GAzCwC;;;EA4CzC,MAAIu2B,YAAQ,CAAChiC,MAAD,AAAA,CAAZ,EAA6B;EAC3BisC,IAAAA,EAAE,CAACxgC,OAAH,CAAW,UAAX;EACA;EACD,GA/CwC;;;EAiDzCwgC,EAAAA,EAAE,CAACxgC,OAAH,CAAW,QAAX;EACA;EACD,CAnDD;;EAoDA,gBAAc,GAAG0gC,UAAjB;;EC7DA;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASH,EAAT,EAAa;EAC7B,MAAIjsC,MAAM,GAAG;EACXqsC,IAAAA,MAAM,EAAEJ,EAAE,CAACxiC,KAAH,CAAS,UAAT,CADG;;EAEXhH,IAAAA,QAAQ,EAAEwpC,EAAE,CAACxiC,KAAH,CAAS,WAAT,CAFC;;EAGXyiC,IAAAA,SAAS,EAAED,EAAE,CAACxiC,KAAH,CAAS,YAAT,EAAuBimB,GAAvB,CAA2B,qBAA3B,CAHA;;EAIX4c,IAAAA,QAAQ,EAAEL,EAAE,CAACxiC,KAAH,CAAS,WAAT,CAJC;;EAKXsiC,IAAAA,IAAI,EAAEE,EAAE,CAACxiC,KAAH,CAAS,OAAT,EAAkBimB,GAAlB,CAAsB,0CAAtB;EALK,GAAb,CAD6B;;EAS7B,MAAI,CAAC1vB,MAAM,CAAC+rC,IAAP,CAAYlsC,KAAjB,EAAwB;;EAEtB1B,IAAAA,MAAM,CAACC,IAAP,CAAY4B,MAAZ,EAAoB3B,OAApB,CAA4B,UAAAnB,CAAC,EAAI;EAC/B8C,MAAAA,MAAM,CAAC9C,CAAD,CAAN,GAAY8C,MAAM,CAAC9C,CAAD,CAAN,CAAUwyB,GAAV,CAAc,GAAd,CAAZ;EACD,KAFD,EAFsB;;EAMtB1vB,IAAAA,MAAM,CAAC+rC,IAAP,GAAcE,EAAd;EACA,WAAOjsC,MAAP;EACD,GAjB4B;;;EAmB7B,MAAIA,MAAM,CAACqsC,MAAP,IAAiBrsC,MAAM,CAACqsC,MAAP,CAAcxsC,KAAnC,EAA0C;EACxC,QAAI4J,KAAK,GAAGzJ,MAAM,CAACqsC,MAAP,CAAcpwC,IAAd,CAAmB,SAAnB,IAAgC,GAA5C;;EACA,QAAIgwC,EAAE,CAACtc,GAAH,CAAOlmB,KAAP,CAAJ,EAAmB;EACjBzJ,MAAAA,MAAM,CAACusC,WAAP,GAAqB,IAArB;EACD;EACF;;EACD,SAAOvsC,MAAP;EACD,CA1BD;;EA2BA,WAAc,GAAGosC,SAAjB;;EC1BA;;EACA,IAAMI,IAAI,GAAG,SAAPA,IAAO,CAAAxsC,MAAM,EAAI;EACrB,MAAIysC,GAAG,GAAG,KAAV;EACA,MAAIpzB,MAAM,GAAG2oB,YAAQ,CAAChiC,MAAD,CAArB;EACA,MAAI0sC,UAAU,GAAG1sC,MAAM,CAACyC,QAAP,CAAgB5C,KAAjC,CAHqB;;;;;;EAUrB,MAAIG,MAAM,CAAC+rC,IAAP,CAAYlc,UAAZ,CAAuB,0BAAvB,EAAmDhwB,KAAvD,EAA8D;EAC5D4sC,IAAAA,GAAG,GAAG,IAAN;EACD;;EAED,MAAI7kC,GAAG,GAAG;EACRxE,IAAAA,SAAS,EAAE,KADH;EAERE,IAAAA,YAAY,EAAE,IAFN;EAGRmR,IAAAA,WAAW,EAAE,SAHL;EAIRvR,IAAAA,UAAU,EAAE,IAJJ;EAKRG,IAAAA,MAAM,EAAE,OALA;EAMRG,IAAAA,KAAK,EAAE,EANC;EAORoR,IAAAA,YAAY,EAAE,MAPN;EAQRC,IAAAA,UAAU,EAAE;EARJ,GAAV,CAdqB;;EAyBrB,MAAI43B,GAAG,KAAK,IAAZ,EAAkB;EAChB7kC,IAAAA,GAAG,CAACtE,YAAJ,GAAmB,IAAnB;EACAsE,IAAAA,GAAG,CAAC1E,UAAJ,GAAiB,IAAjB;EACD;;EACD,MAAImW,MAAJ,EAAY;EACVzR,IAAAA,GAAG,CAACxE,SAAJ,GAAgB,MAAhB;EACAwE,IAAAA,GAAG,CAACtE,YAAJ,GAAmB,KAAnB;EACAsE,IAAAA,GAAG,CAAC1E,UAAJ,GAAiB,KAAjB;EACD;;EACD,MAAIwpC,UAAJ,EAAgB;EACd9kC,IAAAA,GAAG,CAACxE,SAAJ,IAAiB,MAAjB;EACAwE,IAAAA,GAAG,CAACtE,YAAJ,IAAoB,MAApB;EACAsE,IAAAA,GAAG,CAAC6M,WAAJ,GAAkB,aAAlB;EACA7M,IAAAA,GAAG,CAAC1E,UAAJ,IAAkB,MAAlB;EACA0E,IAAAA,GAAG,CAACgN,YAAJ,GAAmB,SAAShN,GAAG,CAACgN,YAAhC;EACAhN,IAAAA,GAAG,CAACiN,UAAJ,GAAiB,SAASjN,GAAG,CAACiN,UAA9B;EACAjN,IAAAA,GAAG,CAACvE,MAAJ,GAAa,SAASuE,GAAG,CAACvE,MAA1B;EACD;;EACD,SAAOuE,GAAP;EACD,CA5CD;;EA6CA,UAAc,GAAG4kC,IAAjB;;EC7CA,IAAMhzB,WAAS,GAAG,SAAZA,SAAY,CAASxZ,MAAT,EAAiB2C,KAAjB,EAAwB;EACxC,MAAIopC,IAAI,GAAG/rC,MAAM,CAAC+rC,IAAlB,CADwC;;EAIxC,MAAIA,IAAI,CAACpc,GAAL,CAAS,SAAT,KAAwBoc,IAAI,CAACY,GAAL,CAAS,QAAT,MAAuB,IAAvB,IAA+B3sC,MAAM,CAACksC,SAAP,CAAiBvc,GAAjB,CAAqB,MAArB,CAA3D,EAA0F;EACxF,WAAO6c,MAAI,CAACxsC,MAAD,AAAA,CAAX;EACD;;EAED,MAAIsS,SAAS,GAAGtS,MAAM,CAAC+rC,IAAP,CAAYvb,QAAZ,CAAqB,CAArB,EAAwBle,SAAxB,EAAhB;EAEA,MAAIs6B,UAAU,GAAGnpC,gBAAY,CAACzD,MAAD,EAAS2C,KAAT,CAA7B;;EACA,MAAI,CAACiqC,UAAL,EAAiB;EACf,WAAO,EAAP;EACD;;EACD,MAAI/yB,KAAK,GAAGlX,KAAK,CAACE,UAAN,CAAiB2W,SAAjB,CAA2BozB,UAA3B,EAAuCjqC,KAAvC,CAAZ;EACAkX,EAAAA,KAAK,CAAC3W,UAAN,GAAmB0pC,UAAnB,CAfwC;;EAkBxC,MAAI5sC,MAAM,CAACssC,QAAP,CAAgBzsC,KAApB,EAA2B;EACzB,QAAIysC,QAAQ,GAAGtsC,MAAM,CAACssC,QAAP,CAAgBrwC,IAAhB,EAAf;EACA,QAAI4wC,KAAK,GAAGv6B,SAAS,KAAK,IAAd,GAAqB,GAArB,GAA2B,GAAvC;EACAnU,IAAAA,MAAM,CAACC,IAAP,CAAYyb,KAAZ,EAAmBxb,OAAnB,CAA2B,UAAAnB,CAAC;EAAA,aAAK2c,KAAK,CAAC3c,CAAD,CAAL,IAAY2vC,KAAK,GAAGP,QAAzB;EAAA,KAA5B;EACD,GAtBuC;;;EAwBxC,MAAItsC,MAAM,CAACqsC,MAAP,CAAcxsC,KAAlB,EAAyB;EACvB,QAAIwsC,MAAM,GAAGrsC,MAAM,CAACqsC,MAAP,CAAcpwC,IAAd,EAAb;;EACA,QAAI4wC,MAAK,GAAGv6B,SAAS,KAAK,IAAd,GAAqB,GAArB,GAA2B,GAAvC;;EACA,QAAItS,MAAM,CAACusC,WAAP,KAAuB,IAA3B,EAAiC;EAC/BpuC,MAAAA,MAAM,CAACC,IAAP,CAAYyb,KAAZ,EAAmBxb,OAAnB,CAA2B,UAAAnB,CAAC;EAAA,eAAK2c,KAAK,CAAC3c,CAAD,CAAL,IAAY2vC,MAAK,GAAGR,MAAzB;EAAA,OAA5B;EACD,KAFD,MAEO;EACLluC,MAAAA,MAAM,CAACC,IAAP,CAAYyb,KAAZ,EAAmBxb,OAAnB,CAA2B,UAAAnB,CAAC;EAAA,eAAK2c,KAAK,CAAC3c,CAAD,CAAL,GAAWmvC,MAAM,GAAGQ,MAAT,GAAiBhzB,KAAK,CAAC3c,CAAD,CAAtC;EAAA,OAA5B;EACD;EACF,GAhCuC;;;EAmCxC,MAAMwvC,UAAU,GAAG1sC,MAAM,CAACyC,QAAP,CAAgB5C,KAAnC;;EACA,MAAI6sC,UAAJ,EAAgB;EACd7yB,IAAAA,KAAK,CAACzW,SAAN,GAAkB,aAAayW,KAAK,CAAC3W,UAArC;EACA2W,IAAAA,KAAK,CAACvW,YAAN,GAAqB,cAAcuW,KAAK,CAAC3W,UAAzC;EACA2W,IAAAA,KAAK,CAACxW,MAAN,GAAe,SAASwW,KAAK,CAACxW,MAA9B;EACD,GAxCuC;;;EA0CxC,MAAI,CAACwW,KAAK,CAACpF,WAAX,EAAwB;EACtB,QAAIi4B,UAAJ,EAAgB;EACd7yB,MAAAA,KAAK,CAACpF,WAAN,GAAoB,cAAcoF,KAAK,CAAC3W,UAAxC;EACD,KAFD,MAEO;EACL2W,MAAAA,KAAK,CAACpF,WAAN,GAAoB,UAAUoF,KAAK,CAAC3W,UAApC;EACD;EACF;;EACD,MAAIwpC,UAAJ,EAAgB;EACd7yB,IAAAA,KAAK,CAAC3W,UAAN,GAAmB,SAAS2W,KAAK,CAAC3W,UAAlC;EACD;;EACD,SAAO2W,KAAP;EACD,CArDD;;EAsDA,iBAAc,GAAGL,WAAjB;;ECpDA,aAAc,GAAG;;EAEfzN,EAAAA,IAAI,EAAE,cAASnI,OAAT,EAAkB;EAAA;;EACtB,QAAIvG,CAAC,GAAG,IAAR;;EACA,QAAI,OAAOuG,OAAP,KAAmB,QAAvB,EAAiC;EAC/BvG,MAAAA,CAAC,GAAGuG,OAAJ;EACAA,MAAAA,OAAO,GAAG,IAAV;EACD;;EACDA,IAAAA,OAAO,GAAGA,OAAO,IAAI;EAAE3H,MAAAA,IAAI,EAAE,IAAR;EAAc+H,MAAAA,MAAM,EAAE,IAAtB;EAA4B/E,MAAAA,IAAI,EAAE,IAAlC;EAAwCkJ,MAAAA,KAAK,EAAE;EAA/C,KAArB;EACA,QAAI2D,GAAG,GAAG,EAAV;EACA,SAAKzN,OAAL,CAAa,UAAAd,CAAC,EAAI;EAChB,UAAIwO,IAAI,GAAGxO,CAAC,CAACwO,IAAF,CAAOnI,OAAP,EAAgB,CAAhB,CAAX;EACA,UAAI5D,MAAM,GAAGosC,OAAS,CAAC7uC,CAAD,CAAtB;EACAwO,MAAAA,IAAI,CAAC8pB,KAAL,GAAa,EAAb;EACA13B,MAAAA,MAAM,CAACC,IAAP,CAAY4B,MAAZ,EAAoB3B,OAApB,CAA4B,UAAAnB,CAAC,EAAI;EAC/B,YAAI8C,MAAM,CAAC9C,CAAD,CAAN,IAAa8C,MAAM,CAAC9C,CAAD,CAAN,CAAUkI,GAAV,KAAkB,KAAnC,EAA0C;EACxC2G,UAAAA,IAAI,CAAC8pB,KAAL,CAAW34B,CAAX,IAAgB8C,MAAM,CAAC9C,CAAD,CAAN,CAAUjB,IAAV,CAAe,QAAf,CAAhB;EACD,SAFD,MAEO;EACL8P,UAAAA,IAAI,CAAC8pB,KAAL,CAAW34B,CAAX,IAAgB8C,MAAM,CAAC9C,CAAD,CAAtB;EACD;EACF,OAND;EAOA6O,MAAAA,IAAI,CAAC2gC,UAAL,GAAkBnvC,CAAC,CAACoyB,GAAF,CAAM,WAAN,CAAlB;EACA5jB,MAAAA,IAAI,CAACqT,YAAL,GAAoB5F,aAAS,CAACxZ,MAAD,EAAS,KAAI,CAAC2C,KAAd,CAA7B;EACAmJ,MAAAA,GAAG,CAACvD,IAAJ,CAASwD,IAAT;EACD,KAdD;;EAeA,QAAI1O,CAAC,KAAK,IAAV,EAAgB;EACd,aAAOyO,GAAG,CAACzO,CAAD,CAAV;EACD;;EACD,WAAOyO,GAAP;EACD,GA7Bc;;;EAgCf8oB,EAAAA,OAAO,EAAE,mBAAW;EAClB,QAAIxqB,IAAI,GAAG,EAAX,CADkB;;EAGlB,SAAK/L,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIa,IAAI,GAAGV,OAAS,CAACH,EAAD,CAAT,CAAcI,MAAzB;;EACA,UAAIS,IAAI,CAACjtC,KAAT,EAAgB;EACduK,QAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYmiC,IAAI,CAAC1iC,IAAjB,CAAP;EACD;EACF,KALD,EAHkB;;EAUlB,QAAIhN,CAAC,GAAG,KAAKyyB,UAAL,CAAgB,WAAhB,CAAR;;EACA,QAAIzyB,CAAC,CAACyC,KAAN,EAAa;EACXuK,MAAAA,IAAI,GAAGhN,CAAC,CAACgN,IAAF,CAAOO,MAAP,CAAcP,IAAd,CAAP;EACD,KAbiB;;;EAelBhN,IAAAA,CAAC,GAAG,KAAKwyB,SAAL,CAAe,WAAf,CAAJ;;EACA,QAAIxyB,CAAC,CAACyC,KAAN,EAAa;EACXuK,MAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYvN,CAAC,CAACgN,IAAd,CAAP;EACD;;EACD,WAAO,KAAK3B,SAAL,CAAe2B,IAAf,CAAP;EACD,GApDc;;;EAsDf43B,EAAAA,QAAQ,EAAE,oBAAW;EAAA;;EACnB,QAAI53B,IAAI,GAAG,EAAX;EACA,SAAK/L,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIjK,YAAQ,CAAChiC,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAR,KAAiC,IAArC,EAA2C;EACzCyH,QAAAA,IAAI,CAAC7B,IAAL,CAAU0jC,EAAE,CAAC7hC,IAAH,CAAQ,CAAR,CAAV;EACD;EACF,KALD;EAMA,WAAO,KAAK3B,SAAL,CAAe2B,IAAf,CAAP;EACD,GA/Dc;;;EAiEf63B,EAAAA,UAAU,EAAE,sBAAW;EAAA;;EACrB,QAAI73B,IAAI,GAAG,EAAX;EACA,SAAK/L,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIjK,YAAQ,CAAChiC,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAR,KAAiC,KAArC,EAA4C;EAC1CyH,QAAAA,IAAI,CAAC7B,IAAL,CAAU0jC,EAAE,CAAC7hC,IAAH,CAAQ,CAAR,CAAV;EACD;EACF,KALD;EAMA,WAAO,KAAK3B,SAAL,CAAe2B,IAAf,CAAP;EACD,GA1Ec;;;EA6EfoP,EAAAA,SAAS,EAAE,qBAAW;EAAA;;EACpB,QAAIhX,MAAM,GAAG,EAAb;EACA,SAAKnE,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIpyB,KAAK,GAAGL,aAAS,CAACxZ,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAArB;;EACAH,MAAAA,MAAM,CAAC+F,IAAP,CAAYsR,KAAZ;EACD,KAJD;EAKA,WAAOrX,MAAP;EACD,GArFc;;;EAuFfuqC,EAAAA,WAAW,EAAE,uBAAW;EAAA;;EACtB,SAAK1uC,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIjwC,GAAG,GAAGwd,aAAS,CAACxZ,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAT,CAA8BS,SAAxC;;EACA,UAAIpH,GAAJ,EAAS;EACPiwC,QAAAA,EAAE,CAACra,WAAH,CAAe51B,GAAf,EAAoB,KAApB,EADO;EAGR;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GAjGc;;;EAmGfgxC,EAAAA,cAAc,EAAE,0BAAW;EAAA;;EACzB,SAAK3uC,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIrkC,GAAG,GAAG4R,aAAS,CAACxZ,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAnB;;EACA,UAAI3G,GAAG,GAAG4L,GAAG,CAACtE,YAAd,CAHiB;;EAKjB,UAAI2oC,EAAE,CAACpc,UAAH,CAAc,0BAAd,EAA0ChwB,KAA9C,EAAqD;EACnD7D,QAAAA,GAAG,GAAG4L,GAAG,CAAC1E,UAAV;EACD;;EACD,UAAIlH,GAAJ,EAAS;EACPiwC,QAAAA,EAAE,CAACra,WAAH,CAAe51B,GAAf,EAAoB,KAApB;EACAiwC,QAAAA,EAAE,CAAClqC,GAAH,CAAO,cAAP;EACD;EACF,KAZD;EAaA,WAAO,IAAP;EACD,GAlHc;;;EAoHfkrC,EAAAA,aAAa,EAAE,yBAAW;EAAA;;EACxB,SAAK5uC,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIjwC,GAAG,GAAGwd,aAAS,CAACxZ,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAT,CAA8B8R,WAAxC;;EACA,UAAIzY,GAAJ,EAAS;EACPiwC,QAAAA,EAAE,CAACra,WAAH,CAAe51B,GAAf,EAAoB,KAApB;EACAiwC,QAAAA,EAAE,CAAClqC,GAAH,CAAO,aAAP;EACD;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GA9Hc;;;EAgIf0B,EAAAA,YAAY,EAAE,wBAAW;EAAA;;EACvB,SAAKpF,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIjwC,GAAG,GAAGwd,aAAS,CAACxZ,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAT,CAA8BO,UAAxC;;EACA,UAAIlH,GAAJ,EAAS;EACPiwC,QAAAA,EAAE,CAACra,WAAH,CAAe51B,GAAf,EAAoB,KAApB;EACAiwC,QAAAA,EAAE,CAAClqC,GAAH,CAAO,YAAP;EACD;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GA1Ic;;;EA4IfmrC,EAAAA,QAAQ,EAAE,oBAAW;EAAA;;EACnB,SAAK7uC,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIjwC,GAAG,GAAGwd,aAAS,CAACxZ,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAT,CAA8BU,MAAxC;;EACA,UAAIrH,GAAJ,EAAS;EACPiwC,QAAAA,EAAE,CAACra,WAAH,CAAe51B,GAAf,EAAoB,KAApB;EACAiwC,QAAAA,EAAE,CAAClqC,GAAH,CAAO,QAAP;EACD;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GAtJc;;;EAyJf2qC,EAAAA,UAAU,EAAE,sBAAW;EACrB,WAAO,WAAQ,WAAR,CAAP;EACD,GA3Jc;;;EA6JfS,EAAAA,UAAU,EAAE,sBAAW;EACrB,WAAO,KAAKxG,IAAL,CAAU,WAAV,CAAP;EACD,GA/Jc;;;EAiKfwF,EAAAA,UAAU,EAAE,sBAAW;EAAA;;EACrB,SAAK/hC,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAIgN,GAAG,GAAG,OAAI,CAAC9B,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAV;;EACA,UAAIyC,MAAM,GAAGosC,OAAS,CAAC7hC,GAAD,CAAtB;;EACA4hC,MAAAA,YAAU,CAACnsC,MAAD,EAASuK,GAAG,CAAC5H,KAAb,CAAV;EACD,KAJD;EAKA,WAAO,IAAP;EACD,GAxKc;;;EA0KfyqC,EAAAA,UAAU,EAAE,sBAAW;EACrB,QAAIhwC,CAAC,GAAG,KAAKqM,KAAL,CAAW,cAAX,CAAR;;EACA,QAAIrM,CAAC,CAACyC,KAAN,EAAa;EACXzC,MAAAA,CAAC,CAACy3B,MAAF,CAAS,QAAT;EACD;;EACD,WAAO,KAAKA,MAAL,CAAY,WAAZ,CAAP;EACD;EAhLc,CAAjB;;ECHA,IAAM+S,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBwF,KAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA,IAEVxF,GAFU;;;EAI9B1pC,EAAAA,MAAM,CAACqH,MAAP,CAAc6nC,KAAK,CAAC7mC,SAApB,EAA+BwB,SAA/B,EAJ8B;;EAO9BqlC,EAAAA,KAAK,CAAC7mC,SAAN,CAAgB8mC,MAAhB,GAAyBD,KAAK,CAAC7mC,SAAN,CAAgB2lC,UAAzC;;EAEAtE,EAAAA,GAAG,CAACrhC,SAAJ,CAAcqR,KAAd,GAAsB,UAASxa,CAAT,EAAY;EAChC,QAAIoM,KAAK,GAAG,KAAKA,KAAL,CAAW,iDAAX,CAAZ,CADgC;;EAGhCA,IAAAA,KAAK,GAAGA,KAAK,CAACimB,GAAN,CAAU,WAAV,CAAR;EACAjmB,IAAAA,KAAK,GAAGA,KAAK,CAACimB,GAAN,CAAU,WAAV,CAAR,CAJgC;;;EAOhC,QAAI7L,IAAI,GAAGpa,KAAK,CAACA,KAAN,CAAY,gCAAZ,CAAX,CAPgC;;EAShC,QAAIrM,CAAC,GAAGqM,KAAK,CAACimB,GAAN,CAAU7L,IAAV,EAAgBiS,UAAhB,CAA2B,WAA3B,CAAR,CATgC;;EAWhC14B,IAAAA,CAAC,GAAGA,CAAC,CAACuN,MAAF,CAASkZ,IAAT,CAAJ;EACAzmB,IAAAA,CAAC,CAAC8H,IAAF,CAAO,OAAP,EAZgC;;;EAgBhC9H,IAAAA,CAAC,GAAGA,CAAC,MAAD,CAAK,OAAL,CAAJ,CAhBgC;;EAmBhC,QAAI,OAAOC,CAAP,KAAa,QAAjB,EAA2B;EACzBD,MAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,QAAI4uC,EAAE,GAAG,IAAIoB,KAAJ,CAAUjwC,CAAC,CAACgN,IAAZ,EAAkB,IAAlB,EAAwB,KAAKzH,KAA7B,CAAT;EACA,WAAOspC,EAAP;EACD,GAxBD;;EAyBA,SAAOpE,GAAP;EACD,CAnCD;;EAoCA,SAAc,GAAGD,WAAjB;;ECtCA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExB0F,MAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA,IAET1F,GAFS;;EAW9BA,EAAAA,GAAG,CAACrhC,SAAJ,CAAcwxB,MAAd,GAAuB,UAAS36B,CAAT,EAAY;EACjC,QAAIoM,KAAK,GAAG,KAAKqsB,UAAL,CAAgB,WAAhB,CAAZ;EACArsB,IAAAA,KAAK,GAAGA,KAAK,CAACA,KAAN,CAAY,UAAZ,CAAR,CAFiC;;EAKjC,QAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBoM,MAAAA,KAAK,GAAGA,KAAK,CAACpB,GAAN,CAAUhL,CAAV,CAAR;EACD;;EACD,WAAO,IAAIkwC,MAAJ,CAAW9jC,KAAK,CAACW,IAAjB,EAAuB,IAAvB,EAA6B,KAAKzH,KAAlC,CAAP;EACD,GATD;;EAUA,SAAOklC,GAAP;EACD,CAtBD;;EAuBA,UAAc,GAAGD,WAAjB;;ECtBA,IAAM4F,QAAQ,GAAG,CACf/nC,aADe,EAEfC,QAFe,EAGfC,OAHe,EAIfC,YAJe,EAKfC,KALe,EAMfuG,KANe,EAOfghB,WAPe,EAQfsJ,WARe,EASfC,UATe,EAUfC,KAVe,EAWfC,MAXe,CAAjB;;EAcA,IAAM4W,MAAM,GAAG,SAATA,MAAS,CAAS5F,GAAT,EAAc;;EAE3B1pC,EAAAA,MAAM,CAACC,IAAP,CAAYsvC,OAAZ,EAAqBrvC,OAArB,CAA6B,UAAAnB,CAAC;EAAA,WAAK2qC,GAAG,CAACrhC,SAAJ,CAActJ,CAAd,IAAmBwwC,OAAO,CAACxwC,CAAD,CAA/B;EAAA,GAA9B,EAF2B;;EAI3BswC,EAAAA,QAAQ,CAACnvC,OAAT,CAAiB,UAAAsvC,KAAK;EAAA,WAAIA,KAAK,CAAC9F,GAAD,CAAT;EAAA,GAAtB;EACA,SAAOA,GAAP;EACD,CAND;;EAOA,UAAc,GAAG4F,MAAjB;;ECtBA,IAAMzlC,SAAO,GAAG;EACd+P,EAAAA,IAAI,EAAEtS,SADQ;EAEdmoC,EAAAA,UAAU,EAAEloC;EAFE,CAAhB;EAQA;;MACMmiC;;;EACJ,eAAYz9B,IAAZ,EAAkBkkB,IAAlB,EAAwB3rB,KAAxB,EAA+B;EAAA;;EAAA;;EAC7B,SAAKyH,IAAL,GAAYA,IAAZ,CAD6B;;EAG7BjM,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC;EAClCC,MAAAA,UAAU,EAAE,KADsB;EAElCE,MAAAA,KAAK,EAAE0d,IAF2B;EAGlC3d,MAAAA,QAAQ,EAAE;EAHwB,KAApC,EAH6B;;EAS7B,QAAIhO,KAAK,KAAKhB,SAAV,IAAuB2sB,IAAI,KAAK3sB,SAApC,EAA+C;EAC7CgB,MAAAA,KAAK,GAAG2rB,IAAI,CAAC3rB,KAAb;EACD,KAX4B;;;EAa7BxE,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,MAAAA,UAAU,EAAE,KADuB;EAEnCE,MAAAA,KAAK,EAAEjO,KAF4B;EAGnCgO,MAAAA,QAAQ,EAAE;EAHyB,KAArC,EAb6B;;EAmB7BxS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;EACpCC,MAAAA,UAAU,EAAE,KADwB;EAEpCC,MAAAA,QAAQ,EAAE,IAF0B;EAGpCC,MAAAA,KAAK,EAAE;EAH6B,KAAtC,EAnB6B;;EAyB7BzS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCpI,MAAAA,GAAG,EAAE;EAAA,eAAM,KAAI,CAAC+B,IAAL,CAAU9N,MAAV,GAAmB,CAAzB;EAAA;EAD8B,KAArC,EAzB6B;;EA6B7B6B,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;EACpCpI,MAAAA,GAAG,EAAE;EAAA,eAAM,KAAI,CAAC+B,IAAL,CAAU9N,MAAhB;EAAA;EAD+B,KAAtC,EA7B6B;;EAiC7B6B,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,KAA5B,EAAmC;EACjCpI,MAAAA,GAAG,EAAE;EAAA,eAAM,KAAN;EAAA;EAD4B,KAAnC;EAGD;;;;;;+BAGQ;EACP,aAAOopB,SAAM,CAAC,IAAD,CAAb;EACD;;;;;6BAGM;EACL,UAAI,KAAKrnB,IAAL,CAAU9N,MAAV,GAAmB,CAAvB,EAA0B;EACxB,eAAO,KAAK8N,IAAL,CAAU,CAAV,EAAahC,IAApB;EACD;;EACD,aAAO,KAAK8D,GAAL,GAAW9B,IAAX,CAAgB,CAAhB,EAAmBhC,IAA1B;EACD;;;;;EAGH;;;EACAy/B,GAAG,CAACrhC,SAAJ,CAAciC,SAAd,GAA0B,UAAS2B,IAAT,EAAe;EACvCA,EAAAA,IAAI,GAAGA,IAAI,CAACzB,GAAL,CAAS,UAAApL,CAAC;EAAA,WAAIA,CAAC,CAACwK,KAAF,CAAQ,IAAR,CAAJ;EAAA,GAAV,CAAP,CADuC;;EAGvC,MAAIwC,GAAG,GAAG,IAAIs9B,GAAJ,CAAQz9B,IAAR,EAAc,IAAd,EAAoB,KAAKzH,KAAzB,CAAV;EACA,SAAO4H,GAAP;EACD,CALD;EAOA;;;EACAs9B,GAAG,CAACrhC,SAAJ,CAAcqM,QAAd,GAAyB,UAAS7W,GAAT,EAAc;EACrC,MAAIoO,IAAI,GAAGkmB,YAAQ,CAACt0B,GAAD,EAAM,KAAK2G,KAAX,EAAkB,KAAKyF,IAAL,EAAlB,CAAnB;EACA,SAAO,KAAKK,SAAL,CAAe2B,IAAf,CAAP;EACD,CAHD;;EAKAjM,MAAM,CAACqH,MAAP,CAAcqiC,GAAG,CAACrhC,SAAlB,EAA6BwB,SAAO,CAAC+P,IAArC;EACA5Z,MAAM,CAACqH,MAAP,CAAcqiC,GAAG,CAACrhC,SAAlB,EAA6BwB,SAAO,CAAC4lC,UAArC;;AAGAH,QAAM,CAAC5F,GAAD,CAAN;;EAGA,IAAM/2B,SAAO,GAAG;EACd+8B,EAAAA,KAAK,EAAE,OADO;EAEdC,EAAAA,GAAG,EAAE,OAFS;EAGdpH,EAAAA,KAAK,EAAE,MAHO;EAIdlG,EAAAA,IAAI,EAAE,IAJQ;EAKduN,EAAAA,MAAM,EAAE;EALM,CAAhB;EAOA5vC,MAAM,CAACC,IAAP,CAAY0S,SAAZ,EAAqBzS,OAArB,CAA6B,UAAAnB,CAAC;EAAA,SAAK2qC,GAAG,CAACrhC,SAAJ,CAActJ,CAAd,IAAmB2qC,GAAG,CAACrhC,SAAJ,CAAcsK,SAAO,CAAC5T,CAAD,CAArB,CAAxB;EAAA,CAA9B;EACA,SAAc,GAAG2qC,GAAjB;;ECxFA,IAAMmG,WAAW,GAAG,SAAdA,WAAc,CAASzjC,GAAT,EAAc;EAChC,MAAIpC,KAAK,GAAGoC,GAAG,CAACimB,QAAJ,EAAZ;EACAyd,EAAAA,UAAW,CAAC9lC,KAAD,EAAQoC,GAAG,CAAC5H,KAAZ,CAAX;EACA,SAAO4H,GAAP;EACD,CAJD;;EAKA,QAAc,GAAGyjC,WAAjB;;ECEA,SAASE,QAAT,CAAkBC,aAAlB,EAAiC;;EAE/B,MAAIxrC,KAAK,GAAGwrC,aAAZ;;;EAGA,MAAMC,GAAG,GAAG,SAANA,GAAM,GAA6B;EAAA,QAApBnyC,IAAoB,uEAAb,EAAa;EAAA,QAATkd,OAAS;;EACvC,QAAIA,OAAJ,EAAa;EACXxW,MAAAA,KAAK,CAAC0rC,QAAN,CAAel1B,OAAf;EACD;;EACD,QAAI/O,IAAI,GAAGkmB,YAAQ,CAACr0B,IAAD,EAAO0G,KAAP,CAAnB;EACA,QAAI4H,GAAG,GAAG,IAAIs9B,KAAJ,CAAQz9B,IAAR,EAAc,IAAd,EAAoBzH,KAApB,CAAV;EACA4H,IAAAA,GAAG,CAACknB,MAAJ;EACA,WAAOlnB,GAAP;EACD,GARD;;;;EAWA6jC,EAAAA,GAAG,CAAC9d,QAAJ,GAAe,YAA6B;EAAA,QAApBr0B,IAAoB,uEAAb,EAAa;EAAA,QAATkd,OAAS;EAC1C,QAAIrb,CAAC,GAAG6E,KAAR;;EACA,QAAIwW,OAAJ,EAAa;EACXrb,MAAAA,CAAC,GAAGA,CAAC,CAACiK,KAAF,EAAJ;EACAjK,MAAAA,CAAC,CAACyR,KAAF,GAAU,EAAV;EACAzR,MAAAA,CAAC,CAACuwC,QAAF,CAAWl1B,OAAX;EACD;;EACD,QAAI/O,IAAI,GAAGkmB,YAAQ,CAACr0B,IAAD,EAAO6B,CAAP,CAAnB;EACA,QAAIyM,GAAG,GAAG,IAAIs9B,KAAJ,CAAQz9B,IAAR,EAAc,IAAd,EAAoBtM,CAApB,CAAV;;EACA,QAAIqb,OAAJ,EAAa;EACXm1B,MAAAA,IAAU,CAAC/jC,GAAD,CAAV;EACD;;EACD,WAAOA,GAAP;EACD,GAbD;;;;EAgBA6jC,EAAAA,GAAG,CAACX,MAAJ,GAAa,UAAS5f,EAAT,EAAa;EACxBA,IAAAA,EAAE,CAACga,KAAD,EAAMllC,KAAN,EAAa,IAAb,EAAmB6N,QAAnB,EAA2B9I,MAA3B,EAAiCqJ,MAAjC,CAAF;EACA,WAAO,IAAP;EACD,GAHD;;;;EAMAq9B,EAAAA,GAAG,CAACp7B,QAAJ,GAAe,UAASjH,IAAT,EAAe;EAC5B,QAAI3B,IAAI,GAAG4I,UAAQ,CAACjH,IAAD,EAAOpJ,KAAP,CAAnB;EACA,WAAO,IAAIklC,KAAJ,CAAQz9B,IAAR,EAAc,IAAd,EAAoBzH,KAApB,CAAP;EACD,GAHD;;;;EAMAyrC,EAAAA,GAAG,CAACrmC,KAAJ,GAAY,YAAW;EACrB,WAAOmmC,QAAQ,CAACvrC,KAAK,CAACoF,KAAN,EAAD,CAAf;EACD,GAFD;;;;EAKAqmC,EAAAA,GAAG,CAACG,OAAJ,GAAc,YAAsB;EAAA,QAAb7gB,IAAa,uEAAN,IAAM;EAClC/qB,IAAAA,KAAK,CAAC4rC,OAAN,CAAc7gB,IAAd;EACA,WAAO,IAAP;EACD,GAHD;;;;EAMA0gB,EAAAA,GAAG,CAACI,OAAJ,GAAcA,QAAd,CAvD+B;;EAyD/BJ,EAAAA,GAAG,UAAH,GAAaA,GAAG,CAACK,IAAjB;EAEA,SAAOL,GAAP;EACD;;EAED,OAAc,GAAGF,QAAQ,CAAC,IAAI7gB,OAAJ,EAAD,CAAzB;;;;;;;;"} \ No newline at end of file diff --git a/builds/compromise.min.js b/builds/compromise.min.js index 69425b8a3..b86d706e6 100644 --- a/builds/compromise.min.js +++ b/builds/compromise.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var r=0;rn[t].lineage.length?1:n[e].isA.length>n[t].isA.length?-1:0:0:1}))},L={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},J={json:function(e,t){e=e||{};var r={};return(e=Object.assign({},L,e)).text&&(r.text=this.text),e.normal&&(r.normal=this.normal),e.tags&&(r.tags=Object.keys(this.tags)),e.clean&&(r.clean=this.clean),(e.id||e.offset)&&(r.id=this.id),e.implicit&&null!==this.implicit&&(r.implicit=this.implicit),e.whitespace&&(r.pre=this.pre,r.post=this.post),e.bestTag&&(r.bestTag=S(this,t)[0]),r}},_=Object.assign({},C,D,V,I,J);function q(){return"undefined"!=typeof window&&window.document}var W=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),r=String(r);var n=j(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=c(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(e,[{key:"set",value:function(e){var t=j(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();re.prototype.clone=function(){var e=new re(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(re.prototype,_),Object.assign(re.prototype,te);var ne=re,ae={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),a=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(a=!0);var i=n.reduce((function(i,o,s){e.last=r&&s===n.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===n.length-1&&r&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&r&&(i=ie(i)),!0===e.trim&&(i=i.trim()),i}},se={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},ue=/[.?!]\s*$/,le=function(e,t){t[0].pre=e[0].pre;var r,n,a=e[e.length-1],i=t[t.length-1];i.post=(r=a.post,n=i.post,ue.test(n)?n+r.match(/\s*$/):r),a.post="",""===a.post&&(a.post+=" ")},ce=function(e,t,r){var n=e.terms(),a=t.terms();le(n,a),function(e,t,r){var n=e[e.length-1],a=t[t.length-1],i=n.next;(n.next=t[0].id,a.next=i,i)&&(r.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(n,a,e.pool);var i=[e],o=e.start,s=[r];return(s=s.concat(r.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(o)}));i=i.concat(t)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length})),e.cache={},e},he=/ /,de=function(e,t,r){var n=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===he.test(t.post)&&(t.post+=" ")}(a),function(e,t,r){var n=r[r.length-1];n.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);r[0].prev=e.terms(0).prev,e.terms(0).prev=n.id}(e,t,a);var i=[e],o=[r];return(o=o.concat(r.parents())).forEach((function(e){var r=e.list.filter((function(e){return e.hasId(n)||e.hasId(t.start)}));i=i.concat(r)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length,e.start===n&&(e.start=t.start),e.cache={}})),e},pe=function(e,t){var r=t.pool(),n=e.terms(),a=r.get(n[0].prev)||{},i=r.get(n[n.length-1].next)||{};n[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,r,n){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=r,a.start===t&&(a.start=n.id),a.cache={})})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},ge={append:function(e,t){return ce(this,e,t),this},prepend:function(e,t){return de(this,e,t),this},delete:function(e){return pe(this,e),this},replace:function(e,t){var r=this.length;ce(this,e,t);var n=this.buildFrom(this.start,this.length);n.length=r,pe(n,t)},splitOn:function(e){var t=this.terms(),r={before:null,match:null,after:null},n=t.findIndex((function(t){return t.id===e.start}));if(-1===n)return r;var a=t.slice(0,n);a.length>0&&(r.before=this.buildFrom(a[0].id,a.length));var i=t.slice(n,n+e.length);i.length>0&&(r.match=this.buildFrom(i[0].id,i.length));var o=t.slice(n+e.length,t.length);return o.length>0&&(r.after=this.buildFrom(o[0].id,o.length,this.pool)),r}},fe={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r={};return e.text&&(r.text=this.text()),e.normal&&(r.normal=this.text("normal")),e.clean&&(r.clean=this.text("clean")),e.reduced&&(r.reduced=this.text("reduced")),e.root&&(r.root=this.text("root")),e.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),r.terms=this.terms().map((function(r){return r.json(e.terms,t)}))),r}},me={lookAhead:function(e){e||(e=".*");var t=this.pool,r=[],n=this.terms();return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,r=[];return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(e)}},ve=Object.assign({},ae,oe,se,ge,fe,me),be=function(e,t){if(0===t.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},ye=function(e,t,r,n,a,i){for(var o=t;t1&&u.greedy?g.length+=o-p:g.length++}}else if(!0!==u.optional){if(!(e[o].isImplicit()&&t[s-1]&&e[o+1]&&e[o+1].doesMatch(u,r+o,n)))return[!1,null];o+=2}}else{var f=we(e,o,t[s+1],u,r);if(void 0!==u.min&&f-ou.max){o+=u.max;continue}if(null===f)return[!1,null];l&&(ke(a,h,e,o,u.named).length=f-o),o=f}}return[e.slice(0,o),a]},$e=function(e,t,r){if(!r||0===r.length)return r;if(t.some((function(e){return e.end}))){var n=e[e.length-1];r=r.filter((function(e){return-1!==e.match.indexOf(n)}))}return r},Ge=/\{([0-9]+,?[0-9]*)\}/,Pe=/&&/,Fe=new RegExp(/^<(\S+)>/),Be=function(e){return e[e.length-1]},je=function(e){return e[0]},xe=function(e){return e.substr(1)},Ce=function(e){return e.substr(0,e.length-1)},De=function(e){return e=xe(e),e=Ce(e)},Ee=function e(t){for(var r,n={},a=0;a<2;a+=1){if("$"===Be(t)&&(n.end=!0,t=Ce(t)),"^"===je(t)&&(n.start=!0,t=xe(t)),("["===je(t)||"]"===Be(t))&&(n.named=!0,"["===je(t)?n.groupType="]"===Be(t)?"single":"start":n.groupType="end",t=(t=t.replace(/^\[/,"")).replace(/\]$/,""),"<"===je(t))){var i=Fe.exec(t);i.length>=2&&(n.named=i[1],t=t.replace(i[0],""))}if("+"===Be(t)&&(n.greedy=!0,t=Ce(t)),"*"!==t&&"*"===Be(t)&&"\\*"!==t&&(n.greedy=!0,t=Ce(t)),"?"===Be(t)&&(n.optional=!0,t=Ce(t)),"!"===je(t)&&(n.negative=!0,t=xe(t)),"("===je(t)&&")"===Be(t)){Pe.test(t)?(n.choices=t.split(Pe),n.operator="and"):(n.choices=t.split("|"),n.operator="or"),n.choices[0]=xe(n.choices[0]);var o=n.choices.length-1;n.choices[o]=Ce(n.choices[o]),n.choices=n.choices.map((function(e){return e.trim()})),n.choices=n.choices.filter((function(e){return e})),n.choices=n.choices.map(e),t=""}if("/"===je(t)&&"/"===Be(t))return t=De(t),n.regex=new RegExp(t),n;if("~"===je(t)&&"~"===Be(t))return t=De(t),n.soft=!0,n.word=t,n}return!0===Ge.test(t)&&(t=t.replace(Ge,(function(e,t){var r=t.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===je(t)?(n.tag=xe(t),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===je(t)?(n.method=xe(t),n):"."===t?(n.anything=!0,n):"*"===t?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(t&&(t=(t=t.replace("\\*","*")).replace("\\.","."),n.word=t.toLowerCase()),n)},Ne=function(e){return e.filter((function(e){return e.groupType})).length>0&&(e=function(e){for(var t,r,n=!1,a=-1,i=0;i)?\(.*?\)[?+*]*\]?\$?)/);return t=t.map((function(e){return e.trim()}))}(t);return r=(r=function(e){var t=[];return e.forEach((function(e){if(/^[[^_/]?\(/.test(e[0]))t.push(e);else{var r=e.split(" ");r=r.filter((function(e){return e})),t=t.concat(r)}})),t}(r)).map(Ee),r=Ne(r)},Te=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=Oe(t)),!0===be(e,t))return[];var n=t.filter((function(e){return!0!==e.optional})).length,a=e.terms(),i=[];if(!0===t[0].start){var o=Ae(a,t,0,a.length),s=u(o,2),l=s[0],c=s[1];return!1!==l&&l.length>0&&(l=l.filter((function(e){return e})),i.push({match:l,groups:c})),$e(a,t,i)}for(var h=0;ha.length);h+=1){var d=Ae(a.slice(h),t,h,a.length),p=u(d,2),g=p[0],f=p[1];if(!1!==g&&g.length>0&&(h+=g.length-1,g=g.filter((function(e){return e})),i.push({match:g,groups:f}),!0===r))return $e(a,t,i)}return $e(a,t,i)},Ve=function(e,t){var r={};Te(e,t).forEach((function(e){e.match.forEach((function(e){r[e.id]=!0}))}));var n=e.terms(),a=[],i=[];return n.forEach((function(e){!0!==r[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},ze={match:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Te(this,e,r);return n=n.map((function(e){var r=e.match,n=e.groups,a=t.buildFrom(r[0].id,r.length,n);return a.cache.terms=r,a}))},has:function(e){return Te(this,e,!0).length>0},not:function(e){var t=this,r=Ve(this,e);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var r=this,n=[],a=this.terms(),i=!1,o=0;o0})).map((function(e){return r.buildFrom(e[0].id,e.length)}))}},He=function e(r,n,a){t(this,e),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};He.prototype.buildFrom=function(e,t,r){var n=new He(e,t,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(He.prototype,ze),Object.assign(He.prototype,ve);var Ie={term:"terms"};Object.keys(Ie).forEach((function(e){return He.prototype[e]=He.prototype[Ie[e]]}));var Me=He,Se=function(){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Se.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,r){var n=e.words[r].clone();return t[n.id]=n,t}),{});return new Se(t)};for(var Le=Se,Je=function(e){e.forEach((function(t,r){r>0&&(t.prev=e[r-1].id),e[r+1]&&(t.next=e[r+1].id)}))},_e=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,qe=/\S/,We=/[ .][A-Z]\.? *$/i,Ke=/(?:\u2026|\.{2,}) *$/,Re=/((?:\r?\n|\r)+)/,Qe=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Ue=/^\s+/,Ze=function(e,t){if(!0===We.test(e))return!1;if(!0===Ke.test(e))return!1;if(!1===Qe.test(e))return!1;var r=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!t.hasOwnProperty(n)},Xe=function(e,t){var r=t.cache.abbreviations;e=e||"";var n=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===qe.test(e))return n;for(var i=function(e){for(var t=[],r=e.split(Re),n=0;n0&&(n.push(l),a[u]="")}if(0===n.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var n=Xe(e,t);n=n.map((function(e){return ot(e)})),r=r||new Le;var a=n.map((function(e){e=e.map((function(e){var t=new ne(e);return r.add(t),t})),Je(e);var t=new Me(e[0].id,e.length,r);return t.cache.terms=e,t}));return a},ut=function(e,t){var r=new Le;return e.map((function(e,n){var a=e.terms.map((function(a,i){var o=new ne(a.text);return o.pre=void 0!==a.pre?a.pre:"",void 0===a.post&&(a.post=" ",i>=e.terms.length-1&&(a.post=". ",n>=e.terms.length-1&&(a.post="."))),o.post=void 0!==a.post?a.post:" ",a.tags&&a.tags.forEach((function(e){return o.tag(e,"",t)})),r.add(o),o}));return Je(a),new Me(a[0].id,a.length,r)}))},lt={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",Date:"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ct=["Person","Place","Organization"],ht={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ct},Actor:{isA:"Noun",notA:ct},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ct},Demonym:{isA:["Noun","ProperNoun"],notA:ct},Possessive:{isA:"Noun"}},dt={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},pt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},gt=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ft={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:gt},Conjunction:{notA:gt},Preposition:{notA:gt},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},mt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},vt=function(e){return Object.keys(e).forEach((function(t){mt[t]?e[t].color=mt[t]:e[t].isA.some((function(r){return!!mt[r]&&(e[t].color=mt[r],!0)}))})),e},bt=function(e){return Object.keys(e).forEach((function(t){for(var r=e[t],n=r.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},Bt=function(e,t,r){var n=Ft(t);return n1&&(r.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,r);n[o]=n[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,r),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===St.hasOwnProperty(t))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(r=Object.assign({},t.irregulars.verbs[e])),void 0===(r=Object.assign({},_t(e),r)).Gerund&&(r.Gerund=Wt.Gerund(e)),void 0===r.PastTense&&(r.PastTense=Wt.PastTense(e)),void 0===r.PresentTense&&(r.PresentTense=Wt.PresentTense(e)),r},Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Qt=[/ary$/],Ut={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Zt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Xt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Yt=[/ary$/,/ous$/],er={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},tr=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],rr={toSuperlative:function(e){if(Ut.hasOwnProperty(e))return Ut[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=t.irregulars.nouns;if(r.hasOwnProperty(e))return r[e];var n=or(e);return null!==n?n:ir.test(e)?e+"es":e+"s"},ur=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],lr=function(e,t){var r,n=t.irregulars.nouns,a=(r=n,Object.keys(r).reduce((function(e,t){return e[r[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&r.tag(a[i],n,t.world):r.tag(e,n,t.world)}))}))}),$r={tag:function(e,t){return e?(Ar(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(Ar(e,this,!0,t),this):this},unTag:function(e,t){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(e,t,r.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(e,t))}),[]);return this.buildFrom(r)}},Gr={map:function(t){var r=this;if(!t)return this;var n=this.list.map((function(e,n){var a=r.buildFrom([e]);a.from=null;var i=t(a,n);return i&&i.list&&i.list[0]?i.list[0]:i}));return 0===(n=n.filter((function(e){return e}))).length?this.buildFrom(n):"object"!==e(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(e,t){var r=this;return e?(this.list.forEach((function(n,a){var i=r.buildFrom([n]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var r=this.list.filter((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return this.buildFrom(r)},find:function(e){var t=this;if(!e)return this;var r=this.list.find((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return r?this.buildFrom([r]):void 0},some:function(e){var t=this;return e?this.list.some((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var r=[this.list[t]];return this.buildFrom(r)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},Pr=function(e){return e.split(/[ -]/g)},Fr=function(e,t,r){for(var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return e.forEach((function(e,n){var a=!0;void 0!==t[n]&&(a=t[n]),e=(e=(e||"").toLowerCase()).replace(/[,;.!?]+$/,"");var i=Pr(e).map((function(e){return e.trim()}));r[i[0]]=r[i[0]]||{},1===i.length?r[i[0]].value=a:(r[i[0]].more=r[i[0]].more||[],r[i[0]].more.push({rest:i.slice(1),value:a}))})),r}(e,t),a=[],i=function(e){for(var t=r.list[e],i=t.terms().map((function(e){return e.reduced})),o=function(e){void 0!==n[i[e]]&&(void 0!==n[i[e]].more&&n[i[e]].more.forEach((function(r){void 0!==i[e+r.rest.length]&&(!0===r.rest.every((function(t,r){return t===i[e+r+1]}))&&a.push({id:t.terms()[e].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[i[e]].value&&a.push({id:t.terms()[e].id,value:n[i[e]].value,length:1}))},s=0;s1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,r.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==n.keepCase&&a.terms(0).isTitleCase()&&(o=xr(o)),i=st(o,r.world,r.pool()),r.buildFrom(i).tagger()}if(!0===n.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",r.world)}))}a.replace(i[0],r)})),this):this.delete()},replace:function(e,t,r){return void 0===t?this.replaceWith(e,r):(this.match(e).replaceWith(t,r),this)}},Dr=x((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=st(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.append(n,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=st(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.prepend(n,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof t&&this.list[t])return this.list[t].json(r);!0===(t=n(t)).root&&this.list.forEach((function(t){t.terms().forEach((function(t){null===t.root&&t.setRoot(e.world)}))}));var a=this.list.map((function(r){return r.json(t,e.world)}));if((t.terms.offset||t.offset||t.terms.index||t.index)&&Or(this,a,t),t.frequency||t.freq||t.count){var i={};this.list.forEach((function(e){var t=e.text("reduced");i[t]=i[t]||0,i[t]+=1})),this.list.forEach((function(e,t){a[t].count=i[e.text("reduced")]}))}if(t.unique){var o={};a=a.filter((function(e){return!0!==o[e.reduced]&&(o[e.reduced]=!0,!0)}))}return a},t.data=t.json})),Vr=(Tr.json,Tr.data,x((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countn?1:0},length:function(e,t){var r=e.text().trim().length,n=t.text().trim().length;return rn?-1:0},wordCount:function(e,t){var r=e.wordCount(),n=t.wordCount();return rn?-1:0}};Ir.alphabetical=Ir.alpha,Ir.wordcount=Ir.wordCount;var Mr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Sr={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(n);r[t]=r[t]||0,r[t]+=1})),t.list.sort((function(e,t){var a=r[e.text(n)],i=r[t.text(n)];return ai?-1:0})),t):Mr.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,r){return t[e.start]>t[r.start]?1:t[e.start]0){a+=o;continue}}if(void 0===r[i]||!0!==r.hasOwnProperty(i))if(i===e[a].reduced||!0!==r.hasOwnProperty(e[a].reduced)){if(!0===on.test(i)){var s=i.replace(on,"");!0===r.hasOwnProperty(s)&&e[a].tag(r[s],"noprefix-lexicon",t)}}else e[a].tag(r[e[a].reduced],"lexicon",t);else e[a].tag(r[i],"lexicon",t)}return e},ln=/[\'‘’‛‵′`´]$/,cn=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^woo+a*?h?$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],hn=/^[IVXLCDM]{2,}$/,dn=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,pn="Adjective",gn="Infinitive",fn="PresentTense",mn="Singular",vn="PastTense",bn="Expression",yn="LastName",wn={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,yn],[/.[^aeiou]ica$/,mn],[/^([hyj]a)+$/,bn]],c:[[/.[^aeiou]ic$/,pn]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,vn],[/.[aeo]{2}[bdgmnprvz]ed$/,vn],[/.[aeiou][sg]hed$/,vn],[/.[aeiou]red$/,vn],[/.[aeiou]r?ried$/,vn],[/.[bcdgtr]led$/,vn],[/.[aoui]f?led$/,vn],[/.[iao]sed$/,vn],[/[aeiou]n?[cs]ed$/,vn],[/[aeiou][rl]?[mnf]ed$/,vn],[/[aeiou][ns]?c?ked$/,vn],[/[aeiou][nl]?ged$/,vn],[/.[tdbwxz]ed$/,vn],[/[^aeiou][aeiou][tvx]ed$/,vn],[/.[cdlmnprstv]ied$/,vn],[/[^aeiou]ard$/,mn],[/[aeiou][^aeiou]id$/,pn],[/.[vrl]id$/,pn]],e:[[/.[lnr]ize$/,gn],[/.[^aeiou]ise$/,gn],[/.[aeiou]te$/,gn],[/.[^aeiou][ai]ble$/,pn],[/.[^aeiou]eable$/,pn],[/.[ts]ive$/,pn]],h:[[/.[^aeiouf]ish$/,pn],[/.v[iy]ch$/,yn],[/^ug?h+$/,bn],[/^uh[ -]?oh$/,bn]],i:[[/.[oau][wvl]ski$/,yn]],k:[[/^(k)+$/,bn]],l:[[/.[gl]ial$/,pn],[/.[^aeiou]ful$/,pn],[/.[nrtumcd]al$/,pn],[/.[^aeiou][ei]al$/,pn]],m:[[/.[^aeiou]ium$/,mn],[/[^aeiou]ism$/,mn],[/^h*u*m+$/,bn],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,pn],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,bn],[/^(yo)+$/,bn],[/^woo+[pt]?$/,bn]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,mn],[/[^i]fer$/,gn],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,pn],[/[aeiou].*ist$/,pn],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,fn],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,mn],[/.[aeiou]sks$/,fn],[/.[aeiou]kes$/,fn],[/[aeiou][^aeiou]is$/,mn],[/[a-z]\'s$/,"Noun"],[/^yes+$/,bn]],v:[[/.[^aeiou][ai][kln]ov$/,yn]],y:[[/.[cts]hy$/,pn],[/.[st]ty$/,pn],[/.[gk]y$/,pn],[/.[tnl]ary$/,pn],[/.[oe]ry$/,mn],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,pn],[/.(gg|bb|zz)ly$/,pn],[/.[aeiou]my$/,pn],[/[ea]{2}zy$/,pn],[/.[^aeiou]ity$/,mn]]},kn="Adjective",An="Infinitive",$n="PresentTense",Gn="Singular",Pn="PastTense",Fn="Adverb",Bn="Plural",jn="Verb",xn="LastName",Cn=[null,null,{ea:Gn,ia:"Noun",ic:kn,ly:Fn,"'n":jn,"'t":jn},{oed:Pn,ued:Pn,xed:Pn," so":Fn,"'ll":"Modal","'re":"Copula",azy:kn,end:jn,ped:Pn,ffy:kn,ify:An,ing:"Gerund",ize:An,lar:kn,mum:kn,nes:$n,nny:kn,oid:kn,ous:kn,que:kn,rmy:kn,rol:Gn,sis:Gn,zes:$n},{amed:Pn,aped:Pn,ched:Pn,lked:Pn,nded:Pn,cted:Pn,dged:Pn,akis:xn,cede:An,chuk:xn,czyk:xn,ects:$n,ends:jn,enko:xn,ette:Gn,fies:$n,fore:Fn,gate:An,gone:kn,ices:Bn,ints:Bn,ions:Bn,less:Fn,llen:kn,made:kn,nsen:xn,oses:$n,ould:"Modal",some:kn,sson:xn,tage:An,teen:"Value",tion:Gn,tive:kn,tors:"Noun",vice:Gn},{tized:Pn,urned:Pn,eased:Pn,ances:Bn,bound:kn,ettes:Bn,fully:Fn,ishes:$n,ities:Bn,marek:xn,nssen:xn,ology:"Noun",ports:Bn,rough:kn,tches:$n,tieth:"Ordinal",tures:Bn,wards:Fn,where:Fn},{auskas:xn,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:xn,sdottir:xn}],Dn={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"2){var a=n.clean[n.clean.length-2];if("s"===a)return void n.tag(["Possessive","Noun"],"end-tick",r);"n"===a&&n.tag(["Gerund"],"chillin",r)}},regex:function(e,t){for(var r=e.text,n=0;n=2&&hn.test(r)&&dn.test(r)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var r=e.clean.length,n=7;r<=n&&(n=r-1);for(var a=n;a>1;a-=1){var i=e.clean.substr(r-a,r);if(!0===Cn[i.length].hasOwnProperty(i)){var o=Cn[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var r=e.clean,n=r[r.length-1];if(!0===wn.hasOwnProperty(n))for(var a=wn[n],i=0;i35)))}(n=(n=n.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=n,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(En)&&(e.tag("Emoji","unicode-emoji",t),e.text=n),!0===(r=(r=n).replace(/^[:;]/,":"),Dn.hasOwnProperty(r))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=n)}},On=function(e,t){var r=e.world;Nn.lexicon(t,r);for(var n=0;n3&&void 0!==r[n]&&!0===r.hasOwnProperty(n)&&e.tag(r[n],"stem-"+n,t)}}))},qn={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Wn=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Kn=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],Rn=[/i$/,/ae$/],Qn=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var r=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(r.length<=3)return void e.tag("Singular","short-singular",t);if(Wn.find((function(t){return e.tags[t]})))return;if(qn.isPlural.find((function(e){return e.test(r)})))return void e.tag("Plural","plural-rules",t);if(qn.isSingular.find((function(e){return e.test(r)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(r)){if(Kn.find((function(e){return e.test(r)})))return;return void e.tag("Plural","plural-fallback",t)}if(Rn.find((function(e){return e.test(r)})))return;e.tag("Singular","singular-fallback",t)}},Un=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),Zn=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},Xn=/^[A-Z]('s|,)?$/,Yn=/([A-Z]\.){2}[A-Z]?/i,ea={I:!0,A:!0},ta={neighbours:Hn,case:Sn,stem:_n,plural:Qn,organizations:function(e,t){for(var r=0;r0?Sa=Sa.concat(t):Sa.push(e)})),Sa.forEach((function(e){var t,r,n;return e.required=(t=e.reg,r=[],n=[],t.forEach((function(e){!0!==e.optional&&!0!==e.negative&&(void 0!==e.tag&&r.push(e.tag),void 0!==e.word&&n.push(e.word))})),{tags:Ba(r),words:Ba(n)}),e}));var La=Sa,Ja=function(e){La.forEach((function(t){var r=[];t.required.words.forEach((function(t){r.push(e._cache.words[t]||[])})),t.required.tags.forEach((function(t){r.push(e._cache.tags[t]||[])}));var n=function(e){if(0===e.length)return[];var t={};e.forEach((function(e){e=Ba(e);for(var r=0;r5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(l.eq(0))}return"number"==typeof t&&(n=n.get(t)),new e(n.list,this,this.world)},e},Ua=function(e){var r=function(e){function r(e,n,a){var o;return t(this,r),(o=s(this,i(r).call(this,e,n,a))).contracted=null,o}return a(r,e),n(r,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),r=t[0].isTitleCase();t.forEach((function(e,r){e.set(e.implicit||e.text),e.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(e,[{key:"tagger",value:function(){return qa(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();Bi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new Bi(e,this,this.world)},Bi.prototype.fromText=function(e){var t=st(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(Bi.prototype,Fi.misc),Object.assign(Bi.prototype,Fi.selections),Pi(Bi);var ji={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(ji).forEach((function(e){return Bi.prototype[e]=Bi.prototype[ji[e]]}));var xi=Bi,Ci=function(e){var t=e.termList();return un(t,e.world),e};return function e(t){var r=t,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&r.addWords(t);var n=st(e,r),a=new xi(n,null,r);return a.tagger(),a};return n.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=r;t&&((n=n.clone()).words={},n.addWords(t));var a=st(e,n),i=new xi(a,null,n);return t&&Ci(i),i},n.extend=function(e){return e(xi,r,this,Me,ne,Le),this},n.fromJSON=function(e){var t=ut(e,r);return new xi(t,null,r)},n.clone=function(){return e(r.clone())},n.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(e),this},n.version="13.1.0",n.import=n.load,n}(new br)})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var r=0;rn[t].lineage.length?1:n[e].isA.length>n[t].isA.length?-1:0:0:1}))},L={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},_={json:function(e,t){e=e||{};var r={};return(e=Object.assign({},L,e)).text&&(r.text=this.text),e.normal&&(r.normal=this.normal),e.tags&&(r.tags=Object.keys(this.tags)),e.clean&&(r.clean=this.clean),(e.id||e.offset)&&(r.id=this.id),e.implicit&&null!==this.implicit&&(r.implicit=this.implicit),e.whitespace&&(r.pre=this.pre,r.post=this.post),e.bestTag&&(r.bestTag=S(this,t)[0]),r}},J=Object.assign({},x,C,V,I,_);function q(){return"undefined"!=typeof window&&window.document}var W=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),r=String(r);var n=D(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=c(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(e,[{key:"set",value:function(e){var t=D(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();re.prototype.clone=function(){var e=new re(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(re.prototype,J),Object.assign(re.prototype,te);var ne=re,ae={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),a=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(a=!0);var i=n.reduce((function(i,o,s){e.last=r&&s===n.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===n.length-1&&r&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&r&&(i=ie(i)),!0===e.trim&&(i=i.trim()),i}},se={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},ue=/[.?!]\s*$/,le=function(e,t){t[0].pre=e[0].pre;var r,n,a=e[e.length-1],i=t[t.length-1];i.post=(r=a.post,n=i.post,ue.test(n)?n+r.match(/\s*$/):r),a.post="",""===a.post&&(a.post+=" ")},ce=function(e,t,r){var n=e.terms(),a=t.terms();le(n,a),function(e,t,r){var n=e[e.length-1],a=t[t.length-1],i=n.next;(n.next=t[0].id,a.next=i,i)&&(r.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(n,a,e.pool);var i=[e],o=e.start,s=[r];return(s=s.concat(r.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(o)}));i=i.concat(t)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length})),e.cache={},e},he=/ /,de=function(e,t,r){var n=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===he.test(t.post)&&(t.post+=" ")}(a),function(e,t,r){var n=r[r.length-1];n.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);r[0].prev=e.terms(0).prev,e.terms(0).prev=n.id}(e,t,a);var i=[e],o=[r];return(o=o.concat(r.parents())).forEach((function(e){var r=e.list.filter((function(e){return e.hasId(n)||e.hasId(t.start)}));i=i.concat(r)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length,e.start===n&&(e.start=t.start),e.cache={}})),e},pe=function(e,t){var r=t.pool(),n=e.terms(),a=r.get(n[0].prev)||{},i=r.get(n[n.length-1].next)||{};n[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,r,n){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=r,a.start===t&&(a.start=n.id),a.cache={})})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},ge={append:function(e,t){return ce(this,e,t),this},prepend:function(e,t){return de(this,e,t),this},delete:function(e){return pe(this,e),this},replace:function(e,t){var r=this.length;ce(this,e,t);var n=this.buildFrom(this.start,this.length);n.length=r,pe(n,t)},splitOn:function(e){var t=this.terms(),r={before:null,match:null,after:null},n=t.findIndex((function(t){return t.id===e.start}));if(-1===n)return r;var a=t.slice(0,n);a.length>0&&(r.before=this.buildFrom(a[0].id,a.length));var i=t.slice(n,n+e.length);i.length>0&&(r.match=this.buildFrom(i[0].id,i.length));var o=t.slice(n+e.length,t.length);return o.length>0&&(r.after=this.buildFrom(o[0].id,o.length,this.pool)),r}},fe={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r={};return e.text&&(r.text=this.text()),e.normal&&(r.normal=this.text("normal")),e.clean&&(r.clean=this.text("clean")),e.reduced&&(r.reduced=this.text("reduced")),e.root&&(r.root=this.text("root")),e.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),r.terms=this.terms().map((function(r){return r.json(e.terms,t)}))),r}},me={lookAhead:function(e){e||(e=".*");var t=this.pool,r=[],n=this.terms();return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,r=[];return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(e)}},ve=Object.assign({},ae,oe,se,ge,fe,me),be=function(e,t){if(0===t.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},ye=function(e,t,r,n,a,i){for(var o=t;t1&&u.greedy?g.length+=o-p:g.length++}}else if(!0!==u.optional){if(!(e[o].isImplicit()&&t[s-1]&&e[o+1]&&e[o+1].doesMatch(u,r+o,n)))return[!1,null];o+=2}}else{var f=we(e,o,t[s+1],u,r);if(void 0!==u.min&&f-ou.max){o+=u.max;continue}if(null===f)return[!1,null];l&&(ke(a,h,e,o,u.named).length=f-o),o=f}}return[e.slice(0,o),a]},$e=function(e,t,r){if(!r||0===r.length)return r;if(t.some((function(e){return e.end}))){var n=e[e.length-1];r=r.filter((function(e){return-1!==e.match.indexOf(n)}))}return r},Ge=/\{([0-9]+,?[0-9]*)\}/,Pe=/&&/,Fe=new RegExp(/^<(\S+)>/),Be=function(e){return e[e.length-1]},De=function(e){return e[0]},je=function(e){return e.substr(1)},xe=function(e){return e.substr(0,e.length-1)},Ce=function(e){return e=je(e),e=xe(e)},Ee=function e(t){for(var r,n={},a=0;a<2;a+=1){if("$"===Be(t)&&(n.end=!0,t=xe(t)),"^"===De(t)&&(n.start=!0,t=je(t)),("["===De(t)||"]"===Be(t))&&(n.named=!0,"["===De(t)?n.groupType="]"===Be(t)?"single":"start":n.groupType="end",t=(t=t.replace(/^\[/,"")).replace(/\]$/,""),"<"===De(t))){var i=Fe.exec(t);i.length>=2&&(n.named=i[1],t=t.replace(i[0],""))}if("+"===Be(t)&&(n.greedy=!0,t=xe(t)),"*"!==t&&"*"===Be(t)&&"\\*"!==t&&(n.greedy=!0,t=xe(t)),"?"===Be(t)&&(n.optional=!0,t=xe(t)),"!"===De(t)&&(n.negative=!0,t=je(t)),"("===De(t)&&")"===Be(t)){Pe.test(t)?(n.choices=t.split(Pe),n.operator="and"):(n.choices=t.split("|"),n.operator="or"),n.choices[0]=je(n.choices[0]);var o=n.choices.length-1;n.choices[o]=xe(n.choices[o]),n.choices=n.choices.map((function(e){return e.trim()})),n.choices=n.choices.filter((function(e){return e})),n.choices=n.choices.map(e),t=""}if("/"===De(t)&&"/"===Be(t))return t=Ce(t),n.regex=new RegExp(t),n;if("~"===De(t)&&"~"===Be(t))return t=Ce(t),n.soft=!0,n.word=t,n}return!0===Ge.test(t)&&(t=t.replace(Ge,(function(e,t){var r=t.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===De(t)?(n.tag=je(t),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===De(t)?(n.method=je(t),n):"."===t?(n.anything=!0,n):"*"===t?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(t&&(t=(t=t.replace("\\*","*")).replace("\\.","."),n.word=t.toLowerCase()),n)},Ne=function(e){return e.filter((function(e){return e.groupType})).length>0&&(e=function(e){for(var t,r,n=!1,a=-1,i=0;i)?\(.*?\)[?+*]*\]?\$?)/);return t=t.map((function(e){return e.trim()}))}(t);return r=(r=function(e){var t=[];return e.forEach((function(e){if(/^[[^_/]?\(/.test(e[0]))t.push(e);else{var r=e.split(" ");r=r.filter((function(e){return e})),t=t.concat(r)}})),t}(r)).map(Ee),r=Ne(r)},Te=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=Oe(t)),!0===be(e,t))return[];var n=t.filter((function(e){return!0!==e.optional})).length,a=e.terms(),i=[];if(!0===t[0].start){var o=Ae(a,t,0,a.length),s=u(o,2),l=s[0],c=s[1];return!1!==l&&l.length>0&&(l=l.filter((function(e){return e})),i.push({match:l,groups:c})),$e(a,t,i)}for(var h=0;ha.length);h+=1){var d=Ae(a.slice(h),t,h,a.length),p=u(d,2),g=p[0],f=p[1];if(!1!==g&&g.length>0&&(h+=g.length-1,g=g.filter((function(e){return e})),i.push({match:g,groups:f}),!0===r))return $e(a,t,i)}return $e(a,t,i)},Ve=function(e,t){var r={};Te(e,t).forEach((function(e){e.match.forEach((function(e){r[e.id]=!0}))}));var n=e.terms(),a=[],i=[];return n.forEach((function(e){!0!==r[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},ze={match:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Te(this,e,r);return n=n.map((function(e){var r=e.match,n=e.groups,a=t.buildFrom(r[0].id,r.length,n);return a.cache.terms=r,a}))},has:function(e){return Te(this,e,!0).length>0},not:function(e){var t=this,r=Ve(this,e);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var r=this,n=[],a=this.terms(),i=!1,o=0;o0})).map((function(e){return r.buildFrom(e[0].id,e.length)}))}},He=function e(r,n,a){t(this,e),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};He.prototype.buildFrom=function(e,t,r){var n=new He(e,t,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(He.prototype,ze),Object.assign(He.prototype,ve);var Ie={term:"terms"};Object.keys(Ie).forEach((function(e){return He.prototype[e]=He.prototype[Ie[e]]}));var Me=He,Se=function(){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Se.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,r){var n=e.words[r].clone();return t[n.id]=n,t}),{});return new Se(t)};for(var Le=Se,_e=function(e){e.forEach((function(t,r){r>0&&(t.prev=e[r-1].id),e[r+1]&&(t.next=e[r+1].id)}))},Je=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,qe=/\S/,We=/[ .][A-Z]\.? *$/i,Ke=/(?:\u2026|\.{2,}) *$/,Re=/((?:\r?\n|\r)+)/,Qe=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Ue=/^\s+/,Ze=function(e,t){if(!0===We.test(e))return!1;if(!0===Ke.test(e))return!1;if(!1===Qe.test(e))return!1;var r=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!t.hasOwnProperty(n)},Xe=function(e,t){var r=t.cache.abbreviations;e=e||"";var n=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===qe.test(e))return n;for(var i=function(e){for(var t=[],r=e.split(Re),n=0;n0&&(n.push(l),a[u]="")}if(0===n.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var n=Xe(e,t);n=n.map((function(e){return ot(e)})),r=r||new Le;var a=n.map((function(e){e=e.map((function(e){var t=new ne(e);return r.add(t),t})),_e(e);var t=new Me(e[0].id,e.length,r);return t.cache.terms=e,t}));return a},ut=function(e,t){var r=new Le;return e.map((function(e,n){var a=e.terms.map((function(a,i){var o=new ne(a.text);return o.pre=void 0!==a.pre?a.pre:"",void 0===a.post&&(a.post=" ",i>=e.terms.length-1&&(a.post=". ",n>=e.terms.length-1&&(a.post="."))),o.post=void 0!==a.post?a.post:" ",a.tags&&a.tags.forEach((function(e){return o.tag(e,"",t)})),r.add(o),o}));return _e(a),new Me(a[0].id,a.length,r)}))},lt={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",Date:"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ct=["Person","Place","Organization"],ht={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ct},Actor:{isA:"Noun",notA:ct},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ct},Demonym:{isA:["Noun","ProperNoun"],notA:ct},Possessive:{isA:"Noun"}},dt={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},pt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},gt=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ft={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:gt},Conjunction:{notA:gt},Preposition:{notA:gt},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},mt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},vt=function(e){return Object.keys(e).forEach((function(t){e[t].color?e[t].color=e[t].color:mt[t]?e[t].color=mt[t]:e[t].isA.some((function(r){return!!mt[r]&&(e[t].color=mt[r],!0)}))})),e},bt=function(e){return Object.keys(e).forEach((function(t){for(var r=e[t],n=r.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},Bt=function(e,t,r){var n=Ft(t);return n1&&(r.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,r);n[o]=n[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,r),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===St.hasOwnProperty(t))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(r=Object.assign({},t.irregulars.verbs[e])),void 0===(r=Object.assign({},Jt(e),r)).Gerund&&(r.Gerund=Wt.Gerund(e)),void 0===r.PastTense&&(r.PastTense=Wt.PastTense(e)),void 0===r.PresentTense&&(r.PresentTense=Wt.PresentTense(e)),r},Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Qt=[/ary$/],Ut={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Zt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Xt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Yt=[/ary$/,/ous$/],er={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},tr=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],rr={toSuperlative:function(e){if(Ut.hasOwnProperty(e))return Ut[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=t.irregulars.nouns;if(r.hasOwnProperty(e))return r[e];var n=or(e);return null!==n?n:ir.test(e)?e+"es":e+"s"},ur=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],lr=function(e,t){var r,n=t.irregulars.nouns,a=(r=n,Object.keys(r).reduce((function(e,t){return e[r[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&r.tag(a[i],n,t.world):r.tag(e,n,t.world)}))}))}),Gr={tag:function(e,t){return e?($r(e,this,!1,t),this):this},tagSafe:function(e,t){return e?($r(e,this,!0,t),this):this},unTag:function(e,t){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(e,t,r.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(e,t))}),[]);return this.buildFrom(r)}},Pr={map:function(t){var r=this;if(!t)return this;var n=this.list.map((function(e,n){var a=r.buildFrom([e]);a.from=null;var i=t(a,n);return i&&i.list&&i.list[0]?i.list[0]:i}));return 0===(n=n.filter((function(e){return e}))).length?this.buildFrom(n):"object"!==e(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(e,t){var r=this;return e?(this.list.forEach((function(n,a){var i=r.buildFrom([n]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var r=this.list.filter((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return this.buildFrom(r)},find:function(e){var t=this;if(!e)return this;var r=this.list.find((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return r?this.buildFrom([r]):void 0},some:function(e){var t=this;return e?this.list.some((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var r=[this.list[t]];return this.buildFrom(r)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},Fr=function(e){return e.split(/[ -]/g)},Br=function(e,t,r){for(var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return e.forEach((function(e,n){var a=!0;void 0!==t[n]&&(a=t[n]),e=(e=(e||"").toLowerCase()).replace(/[,;.!?]+$/,"");var i=Fr(e).map((function(e){return e.trim()}));r[i[0]]=r[i[0]]||{},1===i.length?r[i[0]].value=a:(r[i[0]].more=r[i[0]].more||[],r[i[0]].more.push({rest:i.slice(1),value:a}))})),r}(e,t),a=[],i=function(e){for(var t=r.list[e],i=t.terms().map((function(e){return e.reduced})),o=function(e){void 0!==n[i[e]]&&(void 0!==n[i[e]].more&&n[i[e]].more.forEach((function(r){void 0!==i[e+r.rest.length]&&(!0===r.rest.every((function(t,r){return t===i[e+r+1]}))&&a.push({id:t.terms()[e].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[i[e]].value&&a.push({id:t.terms()[e].id,value:n[i[e]].value,length:1}))},s=0;s1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,r.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==n.keepCase&&a.terms(0).isTitleCase()&&(o=xr(o)),i=st(o,r.world,r.pool()),r.buildFrom(i).tagger()}if(!0===n.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",r.world)}))}a.replace(i[0],r)})),this):this.delete()},replace:function(e,t,r){return void 0===t?this.replaceWith(e,r):(this.match(e).replaceWith(t,r),this)}},Er=j((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=st(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.append(n,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=st(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.prepend(n,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof t&&this.list[t])return this.list[t].json(r);!0===(t=n(t)).root&&this.list.forEach((function(t){t.terms().forEach((function(t){null===t.root&&t.setRoot(e.world)}))}));var a=this.list.map((function(r){return r.json(t,e.world)}));if((t.terms.offset||t.offset||t.terms.index||t.index)&&Tr(this,a,t),t.frequency||t.freq||t.count){var i={};this.list.forEach((function(e){var t=e.text("reduced");i[t]=i[t]||0,i[t]+=1})),this.list.forEach((function(e,t){a[t].count=i[e.text("reduced")]}))}if(t.unique){var o={};a=a.filter((function(e){return!0!==o[e.reduced]&&(o[e.reduced]=!0,!0)}))}return a},t.data=t.json})),zr=(Vr.json,Vr.data,j((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countn?1:0},length:function(e,t){var r=e.text().trim().length,n=t.text().trim().length;return rn?-1:0},wordCount:function(e,t){var r=e.wordCount(),n=t.wordCount();return rn?-1:0}};Mr.alphabetical=Mr.alpha,Mr.wordcount=Mr.wordCount;var Sr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Lr={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(n);r[t]=r[t]||0,r[t]+=1})),t.list.sort((function(e,t){var a=r[e.text(n)],i=r[t.text(n)];return ai?-1:0})),t):Sr.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,r){return t[e.start]>t[r.start]?1:t[e.start]0){a+=o;continue}}if(void 0===r[i]||!0!==r.hasOwnProperty(i))if(i===e[a].reduced||!0!==r.hasOwnProperty(e[a].reduced)){if(!0===sn.test(i)){var s=i.replace(sn,"");!0===r.hasOwnProperty(s)&&e[a].tag(r[s],"noprefix-lexicon",t)}}else e[a].tag(r[e[a].reduced],"lexicon",t);else e[a].tag(r[i],"lexicon",t)}return e},cn=/[\'‘’‛‵′`´]$/,hn=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^woo+a*?h?$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],dn=/^[IVXLCDM]{2,}$/,pn=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,gn="Adjective",fn="Infinitive",mn="PresentTense",vn="Singular",bn="PastTense",yn="Expression",wn="LastName",kn={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,wn],[/.[^aeiou]ica$/,vn],[/^([hyj]a)+$/,yn]],c:[[/.[^aeiou]ic$/,gn]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,bn],[/.[aeo]{2}[bdgmnprvz]ed$/,bn],[/.[aeiou][sg]hed$/,bn],[/.[aeiou]red$/,bn],[/.[aeiou]r?ried$/,bn],[/.[bcdgtr]led$/,bn],[/.[aoui]f?led$/,bn],[/.[iao]sed$/,bn],[/[aeiou]n?[cs]ed$/,bn],[/[aeiou][rl]?[mnf]ed$/,bn],[/[aeiou][ns]?c?ked$/,bn],[/[aeiou][nl]?ged$/,bn],[/.[tdbwxz]ed$/,bn],[/[^aeiou][aeiou][tvx]ed$/,bn],[/.[cdlmnprstv]ied$/,bn],[/[^aeiou]ard$/,vn],[/[aeiou][^aeiou]id$/,gn],[/.[vrl]id$/,gn]],e:[[/.[lnr]ize$/,fn],[/.[^aeiou]ise$/,fn],[/.[aeiou]te$/,fn],[/.[^aeiou][ai]ble$/,gn],[/.[^aeiou]eable$/,gn],[/.[ts]ive$/,gn]],h:[[/.[^aeiouf]ish$/,gn],[/.v[iy]ch$/,wn],[/^ug?h+$/,yn],[/^uh[ -]?oh$/,yn]],i:[[/.[oau][wvl]ski$/,wn]],k:[[/^(k)+$/,yn]],l:[[/.[gl]ial$/,gn],[/.[^aeiou]ful$/,gn],[/.[nrtumcd]al$/,gn],[/.[^aeiou][ei]al$/,gn]],m:[[/.[^aeiou]ium$/,vn],[/[^aeiou]ism$/,vn],[/^h*u*m+$/,yn],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,gn],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,yn],[/^(yo)+$/,yn],[/^woo+[pt]?$/,yn]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,vn],[/[^i]fer$/,fn],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,gn],[/[aeiou].*ist$/,gn],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,mn],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,vn],[/.[aeiou]sks$/,mn],[/.[aeiou]kes$/,mn],[/[aeiou][^aeiou]is$/,vn],[/[a-z]\'s$/,"Noun"],[/^yes+$/,yn]],v:[[/.[^aeiou][ai][kln]ov$/,wn]],y:[[/.[cts]hy$/,gn],[/.[st]ty$/,gn],[/.[gk]y$/,gn],[/.[tnl]ary$/,gn],[/.[oe]ry$/,vn],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,gn],[/.(gg|bb|zz)ly$/,gn],[/.[aeiou]my$/,gn],[/[ea]{2}zy$/,gn],[/.[^aeiou]ity$/,vn]]},An="Adjective",$n="Infinitive",Gn="PresentTense",Pn="Singular",Fn="PastTense",Bn="Adverb",Dn="Plural",jn="Verb",xn="LastName",Cn=[null,null,{ea:Pn,ia:"Noun",ic:An,ly:Bn,"'n":jn,"'t":jn},{oed:Fn,ued:Fn,xed:Fn," so":Bn,"'ll":"Modal","'re":"Copula",azy:An,end:jn,ped:Fn,ffy:An,ify:$n,ing:"Gerund",ize:$n,lar:An,mum:An,nes:Gn,nny:An,oid:An,ous:An,que:An,rmy:An,rol:Pn,sis:Pn,zes:Gn},{amed:Fn,aped:Fn,ched:Fn,lked:Fn,nded:Fn,cted:Fn,dged:Fn,akis:xn,cede:$n,chuk:xn,czyk:xn,ects:Gn,ends:jn,enko:xn,ette:Pn,fies:Gn,fore:Bn,gate:$n,gone:An,ices:Dn,ints:Dn,ions:Dn,less:Bn,llen:An,made:An,nsen:xn,oses:Gn,ould:"Modal",some:An,sson:xn,tage:$n,teen:"Value",tion:Pn,tive:An,tors:"Noun",vice:Pn},{tized:Fn,urned:Fn,eased:Fn,ances:Dn,bound:An,ettes:Dn,fully:Bn,ishes:Gn,ities:Dn,marek:xn,nssen:xn,ology:"Noun",ports:Dn,rough:An,tches:Gn,tieth:"Ordinal",tures:Dn,wards:Bn,where:Bn},{auskas:xn,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:xn,sdottir:xn}],En={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"2){var a=n.clean[n.clean.length-2];if("s"===a)return void n.tag(["Possessive","Noun"],"end-tick",r);"n"===a&&n.tag(["Gerund"],"chillin",r)}},regex:function(e,t){for(var r=e.text,n=0;n=2&&dn.test(r)&&pn.test(r)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var r=e.clean.length,n=7;r<=n&&(n=r-1);for(var a=n;a>1;a-=1){var i=e.clean.substr(r-a,r);if(!0===Cn[i.length].hasOwnProperty(i)){var o=Cn[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var r=e.clean,n=r[r.length-1];if(!0===kn.hasOwnProperty(n))for(var a=kn[n],i=0;i35)))}(n=(n=n.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=n,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Nn)&&(e.tag("Emoji","unicode-emoji",t),e.text=n),!0===(r=(r=n).replace(/^[:;]/,":"),En.hasOwnProperty(r))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=n)}},Tn=function(e,t){var r=e.world;On.lexicon(t,r);for(var n=0;n3&&void 0!==r[n]&&!0===r.hasOwnProperty(n)&&e.tag(r[n],"stem-"+n,t)}}))},Wn={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Kn=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Rn=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],Qn=[/i$/,/ae$/],Un=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var r=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(r.length<=3)return void e.tag("Singular","short-singular",t);if(Kn.find((function(t){return e.tags[t]})))return;if(Wn.isPlural.find((function(e){return e.test(r)})))return void e.tag("Plural","plural-rules",t);if(Wn.isSingular.find((function(e){return e.test(r)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(r)){if(Rn.find((function(e){return e.test(r)})))return;return void e.tag("Plural","plural-fallback",t)}if(Qn.find((function(e){return e.test(r)})))return;e.tag("Singular","singular-fallback",t)}},Zn=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),Xn=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},Yn=/^[A-Z]('s|,)?$/,ea=/([A-Z]\.){2}[A-Z]?/i,ta={I:!0,A:!0},ra={neighbours:In,case:Ln,stem:qn,plural:Un,organizations:function(e,t){for(var r=0;r0?La=La.concat(t):La.push(e)})),La.forEach((function(e){var t,r,n;return e.required=(t=e.reg,r=[],n=[],t.forEach((function(e){!0!==e.optional&&!0!==e.negative&&(void 0!==e.tag&&r.push(e.tag),void 0!==e.word&&n.push(e.word))})),{tags:Da(r),words:Da(n)}),e}));var _a=La,Ja=function(e){_a.forEach((function(t){var r=[];t.required.words.forEach((function(t){r.push(e._cache.words[t]||[])})),t.required.tags.forEach((function(t){r.push(e._cache.tags[t]||[])}));var n=function(e){if(0===e.length)return[];var t={};e.forEach((function(e){e=Da(e);for(var r=0;r5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(l.eq(0))}return"number"==typeof t&&(n=n.get(t)),new e(n.list,this,this.world)},e},Za=function(e){var r=function(e){function r(e,n,a){var o;return t(this,r),(o=s(this,i(r).call(this,e,n,a))).contracted=null,o}return a(r,e),n(r,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),r=t[0].isTitleCase();t.forEach((function(e,r){e.set(e.implicit||e.text),e.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(e,[{key:"tagger",value:function(){return Wa(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();Di.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new Di(e,this,this.world)},Di.prototype.fromText=function(e){var t=st(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(Di.prototype,Bi.misc),Object.assign(Di.prototype,Bi.selections),Fi(Di);var ji={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(ji).forEach((function(e){return Di.prototype[e]=Di.prototype[ji[e]]}));var xi=Di,Ci=function(e){var t=e.termList();return ln(t,e.world),e};return function e(t){var r=t,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&r.addWords(t);var n=st(e,r),a=new xi(n,null,r);return a.tagger(),a};return n.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=r;t&&((n=n.clone()).words={},n.addWords(t));var a=st(e,n),i=new xi(a,null,n);return t&&Ci(i),i},n.extend=function(e){return e(xi,r,this,Me,ne,Le),this},n.fromJSON=function(e){var t=ut(e,r);return new xi(t,null,r)},n.clone=function(){return e(r.clone())},n.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(e),this},n.version="13.1.0",n.import=n.load,n}(new br)})); diff --git a/builds/compromise.mjs b/builds/compromise.mjs index b51b7cdc8..86d84fb56 100644 --- a/builds/compromise.mjs +++ b/builds/compromise.mjs @@ -304,8 +304,8 @@ var reduce = reduced; //all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation //we have slightly different rules for start/end - like #hashtags. -var startings = /^[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·\&*\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201C|\u2018|\u201F|\u201B|\u201E|\u2E42|\u201A|\u00AB|\u2039|\u2035|\u2036|\u2037|\u301D|\u0060|\u301F]+/; -var endings = /[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·\&*@\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201D|\u2019|\u201D|\u2019|\u201D|\u201D|\u2019|\u00BB|\u203A|\u2032|\u2033|\u2034|\u301E|\u00B4|\u301E]+$/; //money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥ +var startings = /^[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·&*•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201C|\u2018|\u201F|\u201B|\u201E|\u2E42|\u201A|\u00AB|\u2039|\u2035|\u2036|\u2037|\u301D|\u0060|\u301F]+/; +var endings = /[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·&*@•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201D|\u2019|\u201D|\u2019|\u201D|\u201D|\u2019|\u00BB|\u203A|\u2032|\u2033|\u2034|\u301E|\u00B4|\u301E]+$/; //money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥ var hasSlash$1 = /\//; var hasApostrophe = /['’]/; @@ -3388,7 +3388,7 @@ var _data = { "Honorific": "true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al", "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", - "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", + "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", @@ -3746,6 +3746,13 @@ var colorMap = { var addColors = function addColors(tags) { Object.keys(tags).forEach(function (k) { + // assigned from plugin, for example + if (tags[k].color) { + tags[k].color = tags[k].color; + return; + } // defined above + + if (colorMap[k]) { tags[k].color = colorMap[k]; return; @@ -6321,6 +6328,55 @@ var _02Accessors_12 = _02Accessors.group; var _02Accessors_13 = _02Accessors.sentences; var _02Accessors_14 = _02Accessors.sentence; +// cache the easier conditions up-front +var cacheRequired = function cacheRequired(reg) { + var needTags = []; + var needWords = []; + reg.forEach(function (obj) { + if (obj.optional === true || obj.negative === true) { + return; + } + + if (obj.tag !== undefined) { + needTags.push(obj.tag); + } + + if (obj.word !== undefined) { + needWords.push(obj.word); + } + }); + return { + tags: needTags, + words: needWords + }; +}; + +var failFast$1 = function failFast(doc, regs) { + if (doc._cache && doc._cache.set === true) { + var _cacheRequired = cacheRequired(regs), + words = _cacheRequired.words, + tags = _cacheRequired.tags; //check required words + + + for (var i = 0; i < words.length; i++) { + if (doc._cache.words[words[i]] === undefined) { + return false; + } + } //check required tags + + + for (var _i = 0; _i < tags.length; _i++) { + if (doc._cache.tags[tags[_i]] === undefined) { + return false; + } + } + } + + return true; +}; + +var checkCache = failFast$1; + var _03Match = createCommonjsModule(function (module, exports) { /** return a new Doc, with this one as a parent */ exports.match = function (reg, name) { @@ -6329,6 +6385,11 @@ var _03Match = createCommonjsModule(function (module, exports) { if (regs.length === 0) { return this.buildFrom([]); + } //check our cache, if it exists + + + if (checkCache(this, regs) === false) { + return this.buildFrom([]); } //try expression on each phrase @@ -6349,7 +6410,7 @@ var _03Match = createCommonjsModule(function (module, exports) { //parse-up the input expression var regs = syntax_1(reg); //if it's empty, return them all! - if (regs.length === 0) { + if (regs.length === 0 || checkCache(this, regs) === false) { return this; } //try expression on each phrase @@ -6363,7 +6424,11 @@ var _03Match = createCommonjsModule(function (module, exports) { exports.matchOne = function (reg) { - var regs = syntax_1(reg); + var regs = syntax_1(reg); //check our cache, if it exists + + if (checkCache(this, regs) === false) { + return this.buildFrom([]); + } for (var i = 0; i < this.list.length; i++) { var match = this.list[i].match(regs, true); @@ -6376,7 +6441,12 @@ var _03Match = createCommonjsModule(function (module, exports) { exports["if"] = function (reg) { - var regs = syntax_1(reg); + var regs = syntax_1(reg); //consult our cache, if it exists + + if (checkCache(this, regs) === false) { + return this.buildFrom([]); + } + var found = this.list.filter(function (p) { return p.has(regs) === true; }); @@ -6396,7 +6466,12 @@ var _03Match = createCommonjsModule(function (module, exports) { exports.has = function (reg) { - var regs = syntax_1(reg); + var regs = syntax_1(reg); //consult our cache, if it exists + + if (checkCache(this, regs) === false) { + return false; + } + return this.list.some(function (p) { return p.has(regs) === true; }); @@ -6942,7 +7017,8 @@ var cache$1 = function cache(options) { this._cache.tags = tags; this._cache.set = true; this.list.forEach(function (p, i) { - p.cache = p.cache || {}; + p.cache = p.cache || {}; //p.terms get cached automatically + var terms = p.terms(); // cache all the terms terms.forEach(function (t) { @@ -6955,26 +7031,12 @@ var cache$1 = function cache(options) { Object.keys(t.tags).forEach(function (tag) { tags[tag] = tags[tag] || []; tags[tag].push(i); - }); // Object.assign(this._cache.tags, t.tags) - // words[t.clean] = true - // words[t.text.toLowerCase()] = true - // if (t.implicit) { - // words[t.implicit] = true - // } - // if (t.root) { - // words[t.root] = true - // } - // if (t.alias !== undefined) { - // words = Object.assign(words, t.alias) - // } + }); // cache root-form on Term, too if (options.root) { t.setRoot(_this.world); words[t.root] = true; - } // }) - // delete words[''] - // p.cache.words = words - + } }); }); return this; @@ -7433,11 +7495,12 @@ var _debug = createCommonjsModule(function (module) { }; var logClientSide = function logClientSide(doc) { + var tagset = doc.world.tags; doc.list.forEach(function (p) { console.log('\n%c"' + p.text() + '"', 'color: #e6d7b3;'); var terms = p.terms(); terms.forEach(function (t) { - var tags$1 = Object.keys(t.tags); + var tags = Object.keys(t.tags); var text = t.text || '-'; if (t.implicit) { @@ -7446,17 +7509,17 @@ var _debug = createCommonjsModule(function (module) { var word = "'" + text + "'"; word = padEnd(word, 8); - var found = tags$1.find(function (tag) { - return tags[tag] && tags[tag].color; + var found = tags.find(function (tag) { + return tagset[tag] && tagset[tag].color; }); var color = 'steelblue'; - if (tags[found]) { - color = tags[found].color; + if (tagset[found]) { + color = tagset[found].color; color = css[color]; } - console.log(" ".concat(word, " - %c").concat(tags$1.join(', ')), "color: ".concat(color || 'steelblue', ";")); + console.log(" ".concat(word, " - %c").concat(tags.join(', ')), "color: ".concat(color || 'steelblue', ";")); }); }); }; //cheaper than requiring chalk @@ -7486,16 +7549,16 @@ var _debug = createCommonjsModule(function (module) { } }; - var tagString = function tagString(tags$1) { - tags$1 = tags$1.map(function (tag) { - if (!tags.hasOwnProperty(tag)) { + var tagString = function tagString(tags, world) { + tags = tags.map(function (tag) { + if (!world.tags.hasOwnProperty(tag)) { return tag; } - var c = tags[tag].color || 'blue'; + var c = world.tags[tag].color || 'blue'; return cli[c](tag); }); - return tags$1.join(', '); + return tags.join(', '); }; //output some helpful stuff to the console @@ -7523,7 +7586,7 @@ var _debug = createCommonjsModule(function (module) { var word = "'" + text + "'"; word = padEnd(word, 18); - var str = cli.blue(' | ') + word + ' - ' + tagString(tags); + var str = cli.blue(' | ') + word + ' - ' + tagString(tags, doc.world); console.log(str); }); }); @@ -11588,7 +11651,7 @@ matches = matches.concat(_08Place); matches = matches.concat(_09Org); matches = matches.concat(_10People); // cache the easier conditions up-front -var cacheRequired = function cacheRequired(reg) { +var cacheRequired$1 = function cacheRequired(reg) { var needTags = []; var needWords = []; reg.forEach(function (obj) { @@ -11648,7 +11711,7 @@ matches.forEach(function (m) { } }); all.forEach(function (m) { - m.required = cacheRequired(m.reg); + m.required = cacheRequired$1(m.reg); return m; }); var matches_1 = all; @@ -11736,7 +11799,9 @@ var tagger = function tagger(doc) { doc.cache(); // wiggle-around the results, so they make more sense - doc = _04Correction(doc); // run any user-given tagger functions + doc = _04Correction(doc); // remove our cache, as it's invalidated now + + doc.uncache(); // run any user-given tagger functions doc.world.taggers.forEach(function (fn) { fn(doc); @@ -12004,7 +12069,7 @@ var Contractions = addMethod$3; var addMethod$4 = function addMethod(Doc) { //pull it apart.. var parse = function parse(doc) { - var things = doc.splitAfter('@hasComma').not('(and|or) not?'); + var things = doc.splitAfter('@hasComma').splitOn('(and|or) not?').not('(and|or) not?'); var beforeLast = doc.match('[.] (and|or)', 0); return { things: things, @@ -12039,14 +12104,14 @@ var addMethod$4 = function addMethod(Doc) { }, { key: "parts", value: function parts() { - return this.splitAfter('(@hasComma|#Conjunction)'); + return this.splitAfter('@hasComma').splitOn('(and|or) not?'); } /** remove the conjunction */ }, { key: "items", value: function items() { - return this.parts().notIf('#Conjunction'); + return parse(this).things; } /** add a new unit to the list */ @@ -12065,8 +12130,8 @@ var addMethod$4 = function addMethod(Doc) { }, { key: "remove", - value: function remove() { - return this; + value: function remove(match) { + return this.items()["if"](match).remove(); } /** return only lists that use a serial comma */ @@ -12080,11 +12145,25 @@ var addMethod$4 = function addMethod(Doc) { }, { key: "addOxfordComma", value: function addOxfordComma() { + var items = this.items(); + var needsComma = items.eq(items.length - 2); + + if (needsComma.found && needsComma.has('@hasComma') === false) { + needsComma.post(', '); + } + return this; } }, { key: "removeOxfordComma", value: function removeOxfordComma() { + var items = this.items(); + var needsComma = items.eq(items.length - 2); + + if (needsComma.found && needsComma.has('@hasComma') === true) { + needsComma.post(' '); + } + return this; } }]); @@ -12098,7 +12177,7 @@ var addMethod$4 = function addMethod(Doc) { Doc.prototype.lists = function (n) { var m = this["if"]('@hasComma+ .? (and|or) not? .'); // person-list - var nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+'); + var nounList = m.match('(#Noun|#Adjective|#Determiner|#Article)+ #Conjunction not? (#Article|#Determiner)? #Adjective? #Noun+')["if"]('#Noun'); var adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+'); var verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+'); var result = nounList.concat(adjList); @@ -13042,7 +13121,11 @@ var methods$7 = { var parsed = parse$2(p); json.parts = {}; Object.keys(parsed).forEach(function (k) { - json.parts[k] = parsed[k].text('normal'); + if (parsed[k] && parsed[k].isA === 'Doc') { + json.parts[k] = parsed[k].text('normal'); + } else { + json.parts[k] = parsed[k]; + } }); json.isNegative = p.has('#Negative'); json.conjugations = conjugate_1$1(parsed, _this.world); diff --git a/changelog.md b/changelog.md index 697ed25ae..271fcac6e 100644 --- a/changelog.md +++ b/changelog.md @@ -8,6 +8,13 @@ compromise uses semver, and pushes to npm frequently While all _Major_ releases should be reviewed, our only two _large_ releases are **v6** in 2016 and and **v12** in 2019. Others have been mostly incremental, or niche. +#### 13.1.1 + +- fix `verbs.json()` runtime-error +- improve empty `.lists()` methods +- allow custom tag colors +- test new github action workflow + #### 13.1.0 - significant (~30%) speed up of parsing diff --git a/plugins/scan/builds/compromise-scan.js b/plugins/scan/builds/compromise-scan.js index e2a9afed7..c1558db59 100644 --- a/plugins/scan/builds/compromise-scan.js +++ b/plugins/scan/builds/compromise-scan.js @@ -1,4 +1,4 @@ -/* compromise-scan 0.0.1 MIT */ +/* compromise-scan 0.1.0 MIT */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : diff --git a/plugins/scan/builds/compromise-scan.mjs b/plugins/scan/builds/compromise-scan.mjs index 7f0ca3cac..9f48f1688 100644 --- a/plugins/scan/builds/compromise-scan.mjs +++ b/plugins/scan/builds/compromise-scan.mjs @@ -1,4 +1,4 @@ -/* compromise-scan 0.0.1 MIT */ +/* compromise-scan 0.1.0 MIT */ // edited by Spencer Kelly // credit to https://github.com/BrunoRB/ahocorasick by Bruno Roberto Búrigo. // object v. array diff --git a/plugins/scan/package.json b/plugins/scan/package.json index 65db2841f..10d4cc2c1 100644 --- a/plugins/scan/package.json +++ b/plugins/scan/package.json @@ -1,7 +1,7 @@ { "name": "compromise-scan", "description": "plugin for nlp-compromise", - "version": "0.0.1", + "version": "0.1.0", "author": "Spencer Kelly (http://spencermounta.in)", "main": "./builds/compromise-scan.js", "unpkg": "./builds/compromise-scan.min.js", diff --git a/scratch.js b/scratch.js index 0de69b6c5..0983e0e8d 100644 --- a/scratch.js +++ b/scratch.js @@ -4,5 +4,14 @@ let txt = require('./scripts/test/speed/_sotu-text.js') // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) -let doc = nlp(txt) -// console.log(doc.dates().json()) +// let doc = nlp('i am a modern major general').replace('modern', 'old') +// let doc = nlp('i am a modern major general') +// doc.match('modern').tag('Person') +// // console.log(doc._cache) +// console.log(doc.has('#Person')) + +let doc = nlp('i saw red, blue, and green.') +// doc.lists().addOxfordComma() +doc.lists().removeOxfordComma() +console.log(doc.text()) +// console.log(arr) diff --git a/src/02-tagger/index.js b/src/02-tagger/index.js index 8c5b30909..e35d8e107 100644 --- a/src/02-tagger/index.js +++ b/src/02-tagger/index.js @@ -16,6 +16,8 @@ const tagger = function(doc) { doc.cache() // wiggle-around the results, so they make more sense doc = corrections(doc) + // remove our cache, as it's invalidated now + doc.uncache() // run any user-given tagger functions doc.world.taggers.forEach(fn => { fn(doc) diff --git a/src/Doc/match/checkCache.js b/src/Doc/match/checkCache.js new file mode 100644 index 000000000..ec5c6b981 --- /dev/null +++ b/src/Doc/match/checkCache.js @@ -0,0 +1,37 @@ +// cache the easier conditions up-front +const cacheRequired = function(reg) { + let needTags = [] + let needWords = [] + reg.forEach(obj => { + if (obj.optional === true || obj.negative === true) { + return + } + if (obj.tag !== undefined) { + needTags.push(obj.tag) + } + if (obj.word !== undefined) { + needWords.push(obj.word) + } + }) + return { tags: needTags, words: needWords } +} + +const failFast = function(doc, regs) { + if (doc._cache && doc._cache.set === true) { + let { words, tags } = cacheRequired(regs) + //check required words + for (let i = 0; i < words.length; i++) { + if (doc._cache.words[words[i]] === undefined) { + return false + } + } + //check required tags + for (let i = 0; i < tags.length; i++) { + if (doc._cache.tags[tags[i]] === undefined) { + return false + } + } + } + return true +} +module.exports = failFast diff --git a/src/Doc/methods/03-match.js b/src/Doc/methods/03-match.js index 49ef2dfbe..91f121178 100644 --- a/src/Doc/methods/03-match.js +++ b/src/Doc/methods/03-match.js @@ -1,4 +1,5 @@ const parseSyntax = require('../match/syntax') +const checkCache = require('../match/checkCache') /** return a new Doc, with this one as a parent */ exports.match = function(reg, name) { @@ -7,6 +8,10 @@ exports.match = function(reg, name) { if (regs.length === 0) { return this.buildFrom([]) } + //check our cache, if it exists + if (checkCache(this, regs) === false) { + return this.buildFrom([]) + } //try expression on each phrase let matches = this.list.reduce((arr, p) => { return arr.concat(p.match(regs)) @@ -23,7 +28,7 @@ exports.not = function(reg) { //parse-up the input expression let regs = parseSyntax(reg) //if it's empty, return them all! - if (regs.length === 0) { + if (regs.length === 0 || checkCache(this, regs) === false) { return this } //try expression on each phrase @@ -36,6 +41,10 @@ exports.not = function(reg) { /** return only the first match */ exports.matchOne = function(reg) { let regs = parseSyntax(reg) + //check our cache, if it exists + if (checkCache(this, regs) === false) { + return this.buildFrom([]) + } for (let i = 0; i < this.list.length; i++) { let match = this.list[i].match(regs, true) return this.buildFrom(match) @@ -46,6 +55,10 @@ exports.matchOne = function(reg) { /** return each current phrase, only if it contains this match */ exports.if = function(reg) { let regs = parseSyntax(reg) + //consult our cache, if it exists + if (checkCache(this, regs) === false) { + return this.buildFrom([]) + } let found = this.list.filter(p => p.has(regs) === true) return this.buildFrom(found) } @@ -60,6 +73,10 @@ exports.ifNo = function(reg) { /**Return a boolean if this match exists */ exports.has = function(reg) { let regs = parseSyntax(reg) + //consult our cache, if it exists + if (checkCache(this, regs) === false) { + return false + } return this.list.some(p => p.has(regs) === true) } diff --git a/src/Doc/methods/07-cache.js b/src/Doc/methods/07-cache.js index 167d965fc..c211e84bf 100644 --- a/src/Doc/methods/07-cache.js +++ b/src/Doc/methods/07-cache.js @@ -8,6 +8,7 @@ exports.cache = function(options) { this._cache.set = true this.list.forEach((p, i) => { p.cache = p.cache || {} + //p.terms get cached automatically let terms = p.terms() // cache all the terms terms.forEach(t => { @@ -21,26 +22,12 @@ exports.cache = function(options) { tags[tag] = tags[tag] || [] tags[tag].push(i) }) - // Object.assign(this._cache.tags, t.tags) - // words[t.clean] = true - // words[t.text.toLowerCase()] = true - // if (t.implicit) { - // words[t.implicit] = true - // } - // if (t.root) { - // words[t.root] = true - // } - // if (t.alias !== undefined) { - // words = Object.assign(words, t.alias) - // } + // cache root-form on Term, too if (options.root) { t.setRoot(this.world) words[t.root] = true } - // }) - // delete words[''] - // p.cache.words = words }) }) return this diff --git a/src/Doc/methods/output/_debug.js b/src/Doc/methods/output/_debug.js index 7c83f345f..781442184 100644 --- a/src/Doc/methods/output/_debug.js +++ b/src/Doc/methods/output/_debug.js @@ -1,5 +1,3 @@ -const tagset = require('../../../World/tags') - // https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color const reset = '\x1b[0m' @@ -27,6 +25,7 @@ const css = { } const logClientSide = function(doc) { + let tagset = doc.world.tags doc.list.forEach(p => { console.log('\n%c"' + p.text() + '"', 'color: #e6d7b3;') let terms = p.terms() @@ -74,12 +73,12 @@ const cli = { }, } -const tagString = function(tags) { +const tagString = function(tags, world) { tags = tags.map(tag => { - if (!tagset.hasOwnProperty(tag)) { + if (!world.tags.hasOwnProperty(tag)) { return tag } - const c = tagset[tag].color || 'blue' + const c = world.tags[tag].color || 'blue' return cli[c](tag) }) return tags.join(', ') @@ -106,7 +105,7 @@ const debug = function(doc) { } let word = "'" + text + "'" word = padEnd(word, 18) - let str = cli.blue(' | ') + word + ' - ' + tagString(tags) + let str = cli.blue(' | ') + word + ' - ' + tagString(tags, doc.world) console.log(str) }) }) diff --git a/src/Subset/Lists.js b/src/Subset/Lists.js index 9726fc8ae..d5153b211 100644 --- a/src/Subset/Lists.js +++ b/src/Subset/Lists.js @@ -1,7 +1,10 @@ const addMethod = function(Doc) { //pull it apart.. const parse = function(doc) { - let things = doc.splitAfter('@hasComma').not('(and|or) not?') + let things = doc + .splitAfter('@hasComma') + .splitOn('(and|or) not?') + .not('(and|or) not?') let beforeLast = doc.match('[.] (and|or)', 0) return { things: things, @@ -19,11 +22,11 @@ const addMethod = function(Doc) { } /** split-up by list object */ parts() { - return this.splitAfter('(@hasComma|#Conjunction)') + return this.splitAfter('@hasComma').splitOn('(and|or) not?') } /** remove the conjunction */ items() { - return this.parts().notIf('#Conjunction') + return parse(this).things } /** add a new unit to the list */ add(str) { @@ -36,18 +39,29 @@ const addMethod = function(Doc) { return this } /** remove any matching unit from the list */ - remove() { - return this + remove(match) { + return this.items() + .if(match) + .remove() } - /** return only lists that use a serial comma */ hasOxfordComma() { return this.filter(doc => parse(doc).hasOxford) } addOxfordComma() { + let items = this.items() + let needsComma = items.eq(items.length - 2) + if (needsComma.found && needsComma.has('@hasComma') === false) { + needsComma.post(', ') + } return this } removeOxfordComma() { + let items = this.items() + let needsComma = items.eq(items.length - 2) + if (needsComma.found && needsComma.has('@hasComma') === true) { + needsComma.post(' ') + } return this } } @@ -58,7 +72,9 @@ const addMethod = function(Doc) { let m = this.if('@hasComma+ .? (and|or) not? .') // person-list - let nounList = m.match('(#Noun|#Adjective)+ #Conjunction not? #Adjective? #Noun+') + let nounList = m + .match('(#Noun|#Adjective|#Determiner|#Article)+ #Conjunction not? (#Article|#Determiner)? #Adjective? #Noun+') + .if('#Noun') let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+') let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+') let result = nounList.concat(adjList) diff --git a/src/Subset/Verbs/methods.js b/src/Subset/Verbs/methods.js index 3859128c0..9707147c9 100644 --- a/src/Subset/Verbs/methods.js +++ b/src/Subset/Verbs/methods.js @@ -18,7 +18,11 @@ module.exports = { let parsed = parseVerb(p) json.parts = {} Object.keys(parsed).forEach(k => { - json.parts[k] = parsed[k].text('normal') + if (parsed[k] && parsed[k].isA === 'Doc') { + json.parts[k] = parsed[k].text('normal') + } else { + json.parts[k] = parsed[k] + } }) json.isNegative = p.has('#Negative') json.conjugations = conjugate(parsed, this.world) diff --git a/src/Term/parse.js b/src/Term/parse.js index 22e4ac438..fbabbc6c0 100644 --- a/src/Term/parse.js +++ b/src/Term/parse.js @@ -4,8 +4,8 @@ const reduce = require('./normalize/reduce') //all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation //we have slightly different rules for start/end - like #hashtags. -const startings = /^[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·\&*\•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201C|\u2018|\u201F|\u201B|\u201E|\u2E42|\u201A|\u00AB|\u2039|\u2035|\u2036|\u2037|\u301D|\u0060|\u301F]+/ -const endings = /[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·\&*@\•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201D|\u2019|\u201D|\u2019|\u201D|\u201D|\u2019|\u00BB|\u203A|\u2032|\u2033|\u2034|\u301E|\u00B4|\u301E]+$/ +const startings = /^[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·&*•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201C|\u2018|\u201F|\u201B|\u201E|\u2E42|\u201A|\u00AB|\u2039|\u2035|\u2036|\u2037|\u301D|\u0060|\u301F]+/ +const endings = /[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·&*@•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201D|\u2019|\u201D|\u2019|\u201D|\u201D|\u2019|\u00BB|\u203A|\u2032|\u2033|\u2034|\u301E|\u00B4|\u301E]+$/ //money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥ const hasSlash = /\// diff --git a/src/World/_data.js b/src/World/_data.js index a5dcaaea3..c6f1e12f0 100644 --- a/src/World/_data.js +++ b/src/World/_data.js @@ -18,7 +18,7 @@ module.exports={ "Honorific": "true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al", "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", - "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6I;8:6Q;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5S;erGo;mi58w1I;aMeLhKoJrHuGwi8;ne,rn;aGe0Mi5Nu8y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge8ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu7fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi8oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e8i2;air,eHlGo3ZreseD;a7y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu7greBhibAmi1te8vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi8;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i7;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu7;a5fe2;i8tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca8m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi8pGte17;a16eHlaEoGreB;rt,se;ct,riG;en7;ci1t;el,han3;abGima9;liF;ab6couXdHfor7ga3han7j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor7;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n7re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin7;rt,y;aEin0SrG;a8ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a8mb,o8rrGth0un7;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun7sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju8mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", + "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", diff --git a/src/World/tags/inference/_color.js b/src/World/tags/inference/_color.js index f63586738..28ac055fa 100644 --- a/src/World/tags/inference/_color.js +++ b/src/World/tags/inference/_color.js @@ -19,6 +19,12 @@ const colorMap = { /** add a debug color to some tags */ const addColors = function(tags) { Object.keys(tags).forEach(k => { + // assigned from plugin, for example + if (tags[k].color) { + tags[k].color = tags[k].color + return + } + // defined above if (colorMap[k]) { tags[k].color = colorMap[k] return diff --git a/tests/cache.test.js b/tests/cache.test.js new file mode 100644 index 000000000..228ab7d6c --- /dev/null +++ b/tests/cache.test.js @@ -0,0 +1,27 @@ +const test = require('tape') +const nlp = require('./_lib') + +test('ensure cache is off', function(t) { + let doc = nlp('i am a modern major general') + t.ok(doc._cache.set !== true, 'cache is off') + doc.match('modern').tag('Person') + t.equal(doc.has('#Person'), true, 'new tag found') + + doc = doc.replace('modern', 'old') + t.equal(doc.has('old'), true, 'new word found') + t.end() +}) + +test('new cache is on', function(t) { + let doc = nlp('i am a modern major general') + doc.cache() + t.ok(doc._cache.set === true, 'cache is on now') + + doc.match('modern').tag('Person') + t.equal(doc.has('#Person'), false, 'new tag is not found') + + doc = doc.replace('modern', 'old') + t.ok(doc._cache.set !== true, 'cache invalidated') + t.equal(doc.has('old'), true, 'cache invalidated on replace') + t.end() +}) diff --git a/tests/fuzz.test.js b/tests/fuzz.test.js new file mode 100644 index 000000000..4fd87ad85 --- /dev/null +++ b/tests/fuzz.test.js @@ -0,0 +1,74 @@ +const test = require('tape') +const nlp = require('./_lib') + +const subsets = [ + 'abbreviations', + 'acronyms', + 'clauses', + 'contractions', + 'lists', + 'nouns', + 'parentheses', + 'possessives', + 'quotations', + 'verbs', + 'people', + 'terms', + 'hyphenated', + 'adjectives', + 'hashTags', + 'emails', + 'emoji', + 'emoticons', + 'atMentions', + 'urls', + 'adverbs', + 'pronouns', + 'conjunctions', + 'prepositions', + 'sentences', +] + +const isArray = function(arr) { + return Object.prototype.toString.call(arr) === '[object Array]' +} + +test('try all json methods', function(t) { + let str = ` + + . + ... + ëii🙏11+ +==\`. + one one one one one one. two. + null constructor class ()*. + ## @ 00~/. + aaaaaaaaaasaaaaaaaaaaaaaaaaaaaaasaaaaaaaaaaaaaaaaaaaaasaaaaaaaaaaaaaaaaaaaaasaaaaaaaaaáaaaaaaaaaaaasaaaaaaaaaaa. .. +buffalo buffalo seem seem seem really. + +URGENT: ➔➔*. +................................................................................................................ +................................................................................................................+ +-0.0# .` + let doc = nlp(str) + subsets.forEach(sub => { + let m = doc[sub]() + let arr = m.json() + m.tag('H*a--ar.d') + m.tag('prototype') + m.tag('null') + m.unTag('null') + m = m.match('*') + m = m.trim() + t.equal(isArray(arr), true, sub + '.json()') + t.equal(typeof m.text(), 'string', sub + '.text()') + t.equal(typeof m.parent().wordCount(), 'number', sub + '.wordcount()') + t.equal(typeof m.replaceWith('!').text(), 'string', 'replaceWith') + m = m.map(d => d.if('.')) + m = m.terms().parent() + m.cache() + t.equal(typeof m.text(), 'string', sub + 'after-map') + t.equal(isArray(arr), true, sub + '.json() again') + }) + + t.end() +}) diff --git a/tests/lists.test.js b/tests/lists.test.js index b37f0a161..f591abc20 100644 --- a/tests/lists.test.js +++ b/tests/lists.test.js @@ -1,6 +1,61 @@ const test = require('tape') const nlp = require('./_lib') +test('comma-remove', function(t) { + let doc = nlp('i saw red, blue, and green.') + doc.lists().removeOxfordComma() + t.equal(doc.text(), 'i saw red, blue and green.', 'remove comma') + + doc = nlp('i saw red, blue, and green.') + doc.lists().addOxfordComma() + t.equal(doc.text(), 'i saw red, blue, and green.', 'add comma') + + doc.lists().addOxfordComma() + doc.lists().addOxfordComma() + doc.lists().addOxfordComma() + t.equal(doc.text(), 'i saw red, blue, and green.', 'just one comma') + doc.lists().removeOxfordComma() + doc.lists().removeOxfordComma() + doc.lists().removeOxfordComma() + t.equal(doc.text(), 'i saw red, blue and green.', 'still no commas') + t.end() +}) + +test('list-remove', function(t) { + let doc = nlp('i saw red, blue and green.') + doc.lists().remove('asdf') + t.equal(doc.text(), 'i saw red, blue and green.', 'missing remove match') + + doc = nlp('i saw red, blue and green.') + doc.lists().remove('blue') + t.equal(doc.text(), 'i saw red, and green.', 'remove list item') + t.end() +}) + +test('list-parse', function(t) { + let arr = nlp('i saw red, blue, and silver') + .lists() + .items() + t.equal(arr.length, 3, 'found three colors, oxfort-comma') + + arr = nlp('i saw red, blue and silver') + .lists() + .items() + t.equal(arr.length, 3, 'found three colors, no-comma') + + arr = nlp('i saw the Eiffel Tower, the pyramids, and the Louvre') + .lists() + .items() + t.equal(arr.length, 3, 'found three places, with article') + + arr = nlp('i saw Eiffel Tower, pyramids, and not Louvre') + .lists() + .items() + t.equal(arr.length, 3, 'found three places, without article') + + t.end() +}) + test('list-types', function(t) { let doc = nlp('he is nice, cool, and really fun.').lists() t.equal(doc.length, 1, 'found adj list') diff --git a/tests/verbs/misc.test.js b/tests/verbs/misc.test.js index 42ea337f8..2938979b2 100644 --- a/tests/verbs/misc.test.js +++ b/tests/verbs/misc.test.js @@ -1,6 +1,17 @@ const test = require('tape') const nlp = require('../_lib') +test('verbs.json', function(t) { + let json = nlp('She has called twice, not the tv') + .verbs() + .json() + t.equal(json.length, 1, 'one verb') + t.equal(json[0].isNegative, false, 'not negative') + t.equal(json[0].parts.verb, 'called', 'got main verb') + t.equal(json[0].parts.auxiliary, 'has', 'got aux verb') + t.end() +}) + test('verbs.adverbs', function(t) { let doc = nlp('spencer is really great! Spencer really really was superb.') doc @@ -14,5 +25,6 @@ test('verbs.adverbs', function(t) { .adverbs() t.equal(doc.length, 3, 'found all three adverbs') t.equal(doc.text('reduced'), 'truly really quickly', 'found adverbs in order') + t.end() })